diff --git a/files/ja/web/http/headers/content-location/index.md b/files/ja/web/http/headers/content-location/index.md
index a8b89f688ed907..c7d01bf57cf854 100644
--- a/files/ja/web/http/headers/content-location/index.md
+++ b/files/ja/web/http/headers/content-location/index.md
@@ -2,7 +2,7 @@
title: Content-Location
slug: Web/HTTP/Headers/Content-Location
l10n:
- sourceCommit: 5bd9fe2b25c6eee2a14d0406ce7116998fa48c13
+ sourceCommit: 1176e753733ee9d2e8966cc7cf03df495dce9aba
---
{{HTTPSidebar}}
diff --git a/files/ko/_redirects.txt b/files/ko/_redirects.txt
index 902f641a9b2d36..c8e39d3bc0e524 100644
--- a/files/ko/_redirects.txt
+++ b/files/ko/_redirects.txt
@@ -280,15 +280,11 @@
/ko/docs/Learn/CSS/Introduction_to_CSS/선택자 /en-US/docs/Learn/CSS/Building_blocks/Selectors
/ko/docs/Learn/CSS/Styling_boxes /en-US/docs/Learn/CSS/Building_blocks
/ko/docs/Learn/CSS/Styling_boxes/Backgrounds /en-US/docs/Learn/CSS/Building_blocks/Backgrounds_and_borders
-/ko/docs/Learn/Common_questions/HTML_features_for_accessibility /ko/docs/Learn/Common_questions/Design_and_accessibility/HTML_features_for_accessibility
/ko/docs/Learn/Common_questions/How_does_the_Internet_work /ko/docs/Learn/Common_questions/Web_mechanics/How_does_the_Internet_work
-/ko/docs/Learn/Common_questions/Pages_sites_servers_and_search_engines /ko/docs/Learn/Common_questions/Web_mechanics/Pages_sites_servers_and_search_engines
/ko/docs/Learn/Common_questions/Thinking_before_coding /ko/docs/Learn/Common_questions/Design_and_accessibility/Thinking_before_coding
-/ko/docs/Learn/Common_questions/Upload_files_to_a_web_server /ko/docs/Learn/Common_questions/Tools_and_setup/Upload_files_to_a_web_server
/ko/docs/Learn/Common_questions/What_are_hyperlinks /ko/docs/Learn/Common_questions/Web_mechanics/What_are_hyperlinks
/ko/docs/Learn/Common_questions/What_is_a_URL /ko/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL
/ko/docs/Learn/Common_questions/What_is_a_web_server /ko/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server
-/ko/docs/Learn/Common_questions/What_software_do_I_need /ko/docs/Learn/Common_questions/Tools_and_setup/What_software_do_I_need
/ko/docs/Learn/Common_questions/set_up_a_local_testing_server /ko/docs/Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server
/ko/docs/Learn/Common_questions/코딩하기_전에_생각하기 /ko/docs/Learn/Common_questions/Design_and_accessibility/Thinking_before_coding
/ko/docs/Learn/Front-end_web_developer /ko/docs/orphaned/Learn/Front-end_web_developer
diff --git a/files/ko/learn/common_questions/design_and_accessibility/html_features_for_accessibility/index.md b/files/ko/learn/common_questions/design_and_accessibility/html_features_for_accessibility/index.md
deleted file mode 100644
index 4db91b2b02b023..00000000000000
--- a/files/ko/learn/common_questions/design_and_accessibility/html_features_for_accessibility/index.md
+++ /dev/null
@@ -1,65 +0,0 @@
----
-title: 어떤 HTML 기능이 접근성을 촉진할까?
-slug: Learn/Common_questions/Design_and_accessibility/HTML_features_for_accessibility
----
-
-{{QuicklinksWithSubPages("Learn/Common_questions")}}
-
-이번 내용은 웹 페이지를 좀 더 서로 다른 장애를 가진 사람들에게 좀 더 접근하기 쉽게 만들 수 있는 HTML의 특정한 기능을 서술합니다.
-
-## 탭(Tabbing)
-
-pointing devices를 사용 하지 않거나 사용 할 수 없는 유저들은 Tab 을 links를 통해 할 수 있습니다.(links는 논리적 순서로 이루어져 있어야 합니다.) tabindex 속성은 당신이 이러한 순서를 정의 할 수 있도록 허락합니다. 만약 HTML이 선형이라면, 논리적 탭 순서는 자동적으로 맞춰집니다.
-
-```html
-
-```
-
-이번 예시는(순수히 데모를 위해 사용되었으니 따라하지 마세요), 탭이 여기서부터 여기저기를 점프합니다.
-
-## 링크 제목(Link Titles)
-
-만약 당신이 자신을 설명하지 않는 링크를 가지고 있거나, 링크 목적지가 더 자세하게 설명되지 않으면, 그 링크에 제목 속성을 추가 할 수 있습니다.
-
-```html
-
- I'm really bad at writing link text.
- Click here
- to find out more.
-
-```
-
-## 접근 키(Access Keys)
-
-_접근 키는_ 링크에 사용자가 Alt or Ctrl + 접근 키를 입력하여 얻을 수 있는 키보드 단축키를 할당하여 쉬운 네비게이션을 제공합니다. 정확한 키 조합은 플래폼에 따라 다릅니다.
-
-```html
-Some page
-```
-
-## 링크 넘어가기(Skip Links)
-
-탭을 지원하기 위하여, 당신은 유저가 당신의 웹 페이지 모음으로 넘어갈 수 있는 링크를 제공할 수 있습니다. 당신은 아마도 다른 사람이 네비게이션 링크를 따라 점프하기를 원할 것입니다. 그렇게 함으로써, 페이지의 메인 내용을 읽을 수 있습니다.
-
-```html
-
-
The Heading
- Skip to content
-
-
-
-
-
-
-
-```
diff --git a/files/ko/learn/common_questions/design_and_accessibility/thinking_before_coding/index.md b/files/ko/learn/common_questions/design_and_accessibility/thinking_before_coding/index.md
index d88253892f14fb..552e0f03c33587 100644
--- a/files/ko/learn/common_questions/design_and_accessibility/thinking_before_coding/index.md
+++ b/files/ko/learn/common_questions/design_and_accessibility/thinking_before_coding/index.md
@@ -1,6 +1,8 @@
---
title: 나의 웹사이트를 설계하기 위해서는?
slug: Learn/Common_questions/Design_and_accessibility/Thinking_before_coding
+l10n:
+ sourceCommit: 9de3d03957f1d66f02f45400a6981372aa368c1f
---
{{QuicklinksWithSubPages("Learn/Common_questions")}}
@@ -44,7 +46,7 @@ _아직 가능한 능동 학습이 없다. [기여를 고민해보라](/ko/docs/
친구와 함께하는 한 시간의 토론은 좋은 시작이지만 부족하다. 생각을 현실로 만들 길의 탁 트인 전망을 얻으려면 앉아서 생각을 구조화해야한다. 이것을 하기 위해서, 오직 펜과 종이 그리고 적어도 다음 질문에 대한 답할 시간이 필요하다.
-> **참고:** **메모:** 프로젝트 관념화를 수행하기 위한 셀 수 없는 방법들이 있다. 우리는 여기에 그것들을 모두 제시할 수는 없다. (책 전체로는 충분하지 않을 것이다). 이 곳에 주는 것은 전문가들이 [Project Ideation(관념화)](), [Project Planning(계획)](http://en.wikipedia.org/wiki/Project_planning) 그리고 [Project Management(관리)](http://en.wikipedia.org/wiki/Project_management) 라고 부르는 것을 다루는 단순한 방법이다.
+> **참고:** 프로젝트 관념화를 수행하기 위한 셀 수 없는 방법들이 있다. 우리는 여기에 그것들을 모두 제시할 수는 없다. (책 전체로는 충분하지 않을 것이다). 이 곳에 주는 것은 전문가들이 [Project Ideation(관념화)](), [Project Planning(계획)](http://en.wikipedia.org/wiki/Project_planning) 그리고 [Project Management(관리)](http://en.wikipedia.org/wiki/Project_management) 라고 부르는 것을 다루는 단순한 방법이다.
### 내가 정확히 달성하고 싶은 것은 무엇인가?
@@ -88,9 +90,9 @@ _아직 가능한 능동 학습이 없다. [기여를 고민해보라](/ko/docs/
### 내 목표를 달성하기 위해, 무엇을, 어떤 순서로 해야할까?
-이제 우리가 달성하고 싶은 것을 알고 있으므로, 그 목표들을 실행가능한 단계로 바꿀 시간입니다.
+이제 무엇을 성취하고 싶은지 알았으니, 그 목표를 실행 가능한 단계로 바꿀 시간입니다. 참고로, 목표는 반드시 고정된 것이 아닙니다. 프로젝트가 진행되는 동안 예상치 못한 장애물을 만나거나 마음이 바뀌는 경우에 따라 시간이 지나면서 변화할 수 있습니다.
-긴 설명을 하기 보다는 이 표로 우리의 예제를 돌아봅시다.
+긴 설명을 하기보다는, 이 표와 함께 예제로 돌아가 보겠습니다.
diff --git a/files/ko/learn/common_questions/tools_and_setup/set_up_a_local_testing_server/index.md b/files/ko/learn/common_questions/tools_and_setup/set_up_a_local_testing_server/index.md
index 6f0c46a41b22bd..cc5f18be913599 100644
--- a/files/ko/learn/common_questions/tools_and_setup/set_up_a_local_testing_server/index.md
+++ b/files/ko/learn/common_questions/tools_and_setup/set_up_a_local_testing_server/index.md
@@ -1,6 +1,8 @@
---
title: 로컬 테스트 서버 설치하기
slug: Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server
+l10n:
+ sourceCommit: 33cada2d06f8d0cd009d9d5348de6e3165bba67f
---
{{QuicklinksWithSubPages("Learn/Common_questions")}}
@@ -36,62 +38,101 @@ slug: Learn/Common_questions/Tools_and_setup/set_up_a_local_testing_server
- **비동기 요청인 경우**. 일부 브라우저(크롬을 포함하는)에서는 로컬 파일의 예제를 실행할 경우에 비동기 요청([서버로부터 데이터 가져오기 - Fetching data from the server](/ko/docs/Learn/JavaScript/Client-side_web_APIs/Fetching_data)를 참고)이 작동하지 않을 것입니다. 이는 보안 제한(웹 보안과 관련된 자세한 내용은 [웹사이트 보안- Website security](/ko/docs/Learn/Server-side/First_steps/Website_security)을 참고하세요) 때문입니다.
- **서버측 언어인 경우**. 서버측 언어(PHP나 Python과 같은)는 코드를 해석하고 결과를 내보낼 수 있는 특별한 서버가 필요합니다.
+- **다른 파일을 포함하는 경우**. 브라우저는 일반적으로 `file://` 스키마를 사용하여 리소스를 로드하는 요청을 교차 출처 요청으로 처리합니다.
+ 따라서 다른 로컬 파일을 포함하는 로컬 파일을 불러올 경우, 이는 {{Glossary("CORS")}} 오류를 유발할 수 있습니다.
## 간단한 로컬 HTTP 서버 실행하기
-비동기 요청 문제를 해결하려면 로컬 웹 서버에서 예제를 실행하여 테스트해야 합니다. 이를 위한 가장 쉬운 방법은 파이썬(Python)의 `SimpleHTTPServer` 모듈을 사용하는 것입니다. (설치된 파이썬 버전에 따라 `http.server` 모듈을 사용해야 할 수도 있습니다.)
+비동기 요청 문제를 해결하려면 로컬 웹 서버를 통해 이러한 예제를 테스트해야 합니다.
-이를 위해.
+### 코드 편집기에서 확장 기능 사용하기
-1. 파이썬을 설치합니다. 리눅스나 맥OS 사용자라면 이미 시스템에 설치되어 있을 것입니다. 윈도우 사용자일 경우, 다음과 같이 파이썬 홈페이지로부터 설치 프로그램을 다운 받고 설치합니다.
+HTML, CSS, JavaScript만 필요하고 서버 측 언어가 필요하지 않다면, 코드 편집기에서 확장 기능을 확인하는 것이 가장 쉬운 방법일 수 있습니다. 로컬 HTTP 서버의 설치와 설정을 자동화할 뿐만 아니라, 코드 편집기와 잘 통합되어 로컬 파일을 HTTP 서버에서 한 번의 클릭으로 테스트할 수 있습니다.
- - 파이썬 홈페이지([python.org](https://www.python.org/))로 이동합니다.
- - 다운로드(download) 영역에서 Python "3.xxx" 링크를 클릭합니다.
- - 페이지의 아래쪽에 있는 *Windows x86 executable installer*를 선택하고 다운로드 받습니다.
- - 다운로드가 완료되면 실행합니다.
- - 설치 프로그램의 첫 번째 페이지에서 "Add Python 3.xxx to PATH" 체크박스를 체크해야 합니다.
- - *Install*을 클릭하고 설치가 완료되면 *Close*를 클릭합니다.
+VSCode의 경우 다음 무료 확장을 확인할 수 있습니다.
-2. 명령 실행창(윈도우의 경우는 command prompt, OS/X나 리눅스인 경우에는 터미널창)을 엽니다. 파이썬이 설치되었는지 확인하기 위해 다음 명령을 입력합니다.
+- `vscode-preview-server`. [홈페이지](https://marketplace.visualstudio.com/items?itemName=yuichinukiyama.vscode-preview-server)에서 확인할 수 있습니다.
+
+### Node.js 사용하기
+
+Node.js의 [`http-server`](https://www.npmjs.com/package/http-server) 모듈은 어떤 폴더에서든 HTML 파일을 호스팅할 수 있는 가장 쉬운 방법입니다.
+
+이 모듈을 사용하려면,
+
+1. 다음 명령어를 실행하여 Node.js가 이미 설치되어 있는지 확인합니다.
+
+ ```bash
+ node -v
+ npm -v
+ npx -v
+ ```
+
+2. Node.js가 설치되지 않았다면, [설치 가이드](https://nodejs.org/en/download/package-manager)를 참고하여 설치 후 위 명령어를 다시 실행하여 설치가 성공했는지 확인합니다.
+
+3. 폴더가 `/path/to/project`라고 가정하고, 서버를 시작하려면 다음 명령어를 실행합니다.
+
+ ```bash
+ npx http-server /path/to/project -o -p 9999
+ ```
+
+ 이 명령어는 `/path/to/project` 폴더 내 모든 파일을 `localhost:9999`에서 호스팅합니다. `-o` 옵션은 `index.html` 페이지를 웹 브라우저에서 자동으로 열어줍니다. `index.html` 파일이 없을 경우, 폴더 목록이 표시됩니다.
+
+### Python 사용하기
+
+또 다른 방법으로 Python의 `http.server` 모듈을 사용할 수 있습니다.
+
+> [!NOTE]
+> Python의 오래된 버전(2.7까지)에는 `SimpleHTTPServer`라는 유사한 모듈이 제공되었습니다. Python 2는 이미 지원이 종료되었으므로 Python 3 사용을 권장합니다.
+
+이 방법을 사용하려면,
+
+1. Python이 설치되어 있는지 확인하려면 다음 명령어를 실행합니다.
```bash
python -V
+ # 위 명령어가 실패하면,
+ python3 -V
+ # 또는 "py" 명령어가 사용 가능하면,
+ py -3 -V
```
-3. 이 명령은 버전 번호를 반환합니다. 정상적으로 작동하면, `cd` 명령을 이용해 여러분의 예제가 존재하는 디렉토리로 이동합니다.
+2. Python이 설치되어 있지 않으면, [설치 가이드](https://www.python.org/downloads/)를 참고하여 설치하세요. (더 자세한 설명은 [Django 튜토리얼](/ko/docs/Learn/Server-side/Django/development_environment#installing_python_3)에서도 확인할 수 있습니다). 설치가 완료되면 위 명령어를 다시 실행하여 설치가 성공했는지 확인합니다.
+
+3. Python이 설정되었다면, `cd` 명령어를 사용하여 테스트할 웹사이트 코드가 있는 폴더로 이동합니다.
```bash
- # 들어가고자 하는 디렉토리 명을 입력합니다. 예를 들어,
+ # 폴더 이름을 입력하여 이동합니다, 예를 들어
cd Desktop
- # 한 단계 상위 디렉토리로 이동하려면 점 두 개를 사용합니다.
+ # 상위 폴더로 이동하려면 두 점을 사용합니다
cd ..
```
-4. 그 경로에 있는 서버를 구동하기 위한 명령을 입력합니다.
+4. 해당 폴더에서 서버를 시작하는 명령어를 입력합니다.
```bash
- # 위에서 반환된 파이썬 버전이 3.X인 경우
- python -m http.server
- # 위에서 반환된 파이썬 버전이 2.X인 경우
- python -m SimpleHTTPServer
+ # Windows에서는 "python -m http.server" 또는 "py -3 -m http.server" 사용
+ python3 -m http.server
```
-5. 이 명령은 기본적으로 로컬 웹 서버의 8000번 포트를 이용해 해당 경로의 컨텐츠를 실행시킵니다. 웹 브라우저에서 주소줄에 `localhost:8000`를 입력하면 이 서버로 이동할 수 있습니다. 그러면 그 디렉토리의 컨텐츠 목록을 볼 수 있는데 실행하고자 하는 HTML 파일을 클릭합니다.
+5. 기본적으로, 이 명령어는 해당 폴더의 내용을 로컬 웹 서버의 포트 8000에서 실행합니다. 웹 브라우저에서 `localhost:8000` URL로 이동하여 이 서버에 접속할 수 있습니다. 여기서 폴더의 내용이 나열되며, 실행하려는 HTML 파일을 클릭하면 됩니다.
> [!NOTE]
-> 8000번 포트에 이미 실행 중인 무언가가 있다면 서버 실행 명령에 다음과 같이 대체 포트 번호를 명시함으로써 다른 포트로 서버를 구동할 수 있습니다.
->
-> 예: `python -m http.server 7800` (Python 3.x일 경우) 또는 `python -m SimpleHTTPServer 7800` (Python 2.x일 경우). 이 경우, `localhost:7800`를 통해 서버로 이동할 수 있습니다.
+> 포트 8000에서 이미 실행 중인 항목이 있는 경우, 서버 명령어 뒤에 다른 포트 번호를 지정하여 실행할 수 있습니다. 예: `python3 -m http.server 7800`. 이 경우 `localhost:7800`에서 콘텐츠에 접근할 수 있습니다.
+
+## 서버 측 언어를 로컬에서 실행하기
+
+Python, PHP, JavaScript 같은 서버 측 언어를 사용하는 경우, 서버 측 언어와 웹 프레임워크 또는 "단독" 코드에 따라 다른 접근 방식이 필요합니다.
-## 서버측 언어를 로컬에서 실행하기
+웹 프레임워크를 사용하는 경우, 일반적으로 프레임워크 자체에서 개발 서버를 제공합니다. 예를 들어, 다음 언어/프레임워크는 개발 서버를 함께 제공합니다.
-파이썬의 `SimpleHTTPServer (python 2.0) http.server (python 3.0)` 모듈은 유용하기는 하나 파이썬이나 PHP 또는 JavaScript와 같은 언어로 작성된 코드를 실행하지 못합니다. 이런 코드를 처리하기 위해서는 뭔가가 더 필요합니다 — 정확하게 무엇이 필요한지는 실행하고자 하는 서버측 언어가 무엇인지에 따라 다릅니다. 다음에 몇 가지 사례를 소개합니다.
+- Python 웹 프레임워크, 예: [Django](/ko/docs/Learn/Server-side/Django), [Flask](https://flask.palletsprojects.com/), 그리고 [Pyramid](https://trypyramid.com/)
+- Node/JavaScript 프레임워크, 예: [Express Web Framework (Node.js/JavaScript)](/ko/docs/Learn/Server-side/Express_Nodejs)
+- PHP는 [자체 내장 개발 서버](https://www.php.net/manual/en/features.commandline.webserver.php)를 가지고 있습니다.
-- 파이썬으로된 서버측 코드를 실행하기 위해서는 파이썬 웹 프레임워크(Python web framework)를 사용할 필요가 있습니다. [Django Web Framework (Python)](/ko/docs/Learn/Server-side/Django)를 읽어보면 Django framework를 이용하는 법을 알 수 있습니다. [Flask](http://flask.pocoo.org/)는 Djang를 대신할 좋은(조금 더 가벼운) 대안이될 수 있습니다. Flask를 실행하기 위해서는 Python/PIP([install Python/PIP](/ko/docs/Learn/Server-side/Django/development_environment#Installing_Python_3))를 설치하고, `pip3 install flask` 명령으로 Flask를 설치해야 합니다. 이 때부터 파이썬 Flask 예제를 실행할 수 있는데, 예를 들어, `python3 python-example.py`명령을 실행하고 브라우저에서 `localhost:5000`으로 이동하면 됩니다.
-- Node.js (JavaScript)라는 서버측 코드를 실행하기 위해서는 기본 node(raw node)나 그 위에 설치되는 프레임워크를 이용해야 합니다. Express가 좋은 선택이될 수 있습니다 — [Express Web Framework (Node.js/JavaScript)](/ko/docs/Learn/Server-side/Express_Nodejs)를 살펴보시기 바랍니다.
-- PHP로된 서버측 코드를 실행하려면 PHP에 내장된 개발서버([PHP's built-in development server](http://php.net/manual/en/features.commandline.webserver.php))를 실행시킵니다.
+ ```bash
+ cd path/to/your/php/code
+ php -S localhost:8000
+ ```
-```bash
-cd path/to/your/php/code
-php -S localhost:8000
-```
+서버 측 프레임워크나 개발 서버를 제공하는 프로그래밍 언어를 사용하지 않는 경우, Python의 `http.server` 모듈을 사용하여 CGI(Common Gateway Interface) 스크립트를 호출함으로써 Python, PHP, JavaScript 등으로 작성된 서버 측 코드를 테스트할 수 있습니다.
+이 기능 사용 예시는 [Execute a Script Remotely Through the Common Gateway Interface (CGI)](https://realpython.com/python-http-server/#execute-a-script-remotely-through-the-common-gateway-interface-cgi)의 *How to Launch an HTTP Server in One Line of Python Code*에서 확인할 수 있습니다.
diff --git a/files/ko/learn/common_questions/web_mechanics/how_does_the_internet_work/index.md b/files/ko/learn/common_questions/web_mechanics/how_does_the_internet_work/index.md
index 53c34be0545ed3..25103a6fcd9102 100644
--- a/files/ko/learn/common_questions/web_mechanics/how_does_the_internet_work/index.md
+++ b/files/ko/learn/common_questions/web_mechanics/how_does_the_internet_work/index.md
@@ -1,6 +1,8 @@
---
title: 인터넷은 어떻게 동작하는가?
slug: Learn/Common_questions/Web_mechanics/How_does_the_Internet_work
+l10n:
+ sourceCommit: 9de3d03957f1d66f02f45400a6981372aa368c1f
---
{{QuicklinksWithSubPages("Learn/Common_questions")}}
@@ -10,7 +12,7 @@ slug: Learn/Common_questions/Web_mechanics/How_does_the_Internet_work
웹 서버가 무엇인지를 배우고, 어떻게 동작하는지에 대한 전반적인 이해를
얻을 것입니다.
@@ -43,9 +45,9 @@ slug: Learn/Common_questions/Web_mechanics/What_is_a_web_server
웹 사이트를 공개하기 위해서는, 당신은 정적 혹은 동적 웹 서버가 필요합니다.
-정적 웹 서버 혹은 스택은 HTTP 서버 (소프트웨어)가 있는 컴퓨터(하드웨어)로 구성되어 있습니다. 서버가 그 불려진 파일을 당신의 브라우저에게 전송하기 때문에, 저희는 그것을 "정적"이라고 부릅니다.
+**정적 웹 서버** 혹은 스택은 HTTP 서버 (소프트웨어)가 있는 컴퓨터(하드웨어)로 구성되어 있습니다. 서버가 그 불려진 파일을 당신의 브라우저에게 전송하기 때문에, 저희는 그것을 "정적"이라고 부릅니다.
-동적 웹 서버는 정적 웹 서버와 추가적인 소프트웨어(대부분 일반적인 애플리케이션 서버와 데이터베이스)로 구성되어 있습니다. 애플리케이션 서버가 HTTP 서버를 통해 당신의 브라우저에게 불려진 파일들을 전송하기 전에, 애플리케이션 서버가 업데이트하기 때문에 우리는 이것을 동적이라고 부릅니다.
+**동적 웹 서버**는 정적 웹 서버와 추가적인 소프트웨어(대부분 일반적인 애플리케이션 서버와 데이터베이스)로 구성되어 있습니다. 애플리케이션 서버가 HTTP 서버를 통해 당신의 브라우저에게 불려진 파일들을 전송하기 전에, 애플리케이션 서버가 업데이트하기 때문에 우리는 이것을 동적이라고 부릅니다.
예를 들어, 당신이 브라우저에서 보는 최종 웹페이지들을 생성하기 위해, 애플리케이션 서버는 아마 데이터베이스로 온 컨텐츠들로 이루어진 HTML 템플릿을 채울지 모릅니다. MDN 혹은 Wikipedia와 같은 사이트들은 수 천개의 웹페이지들을 가지고 있지만, 그것들은 실제의 HTML 문서가 아니라 오직 약간의 HTML 템플릿과 엄청 큰 데이터베이스로 되어있습니다. 이 구성은 내용들을 전달하고 관리하기 쉽고 빠르게 만들어 줍니다.
@@ -64,13 +66,13 @@ slug: Learn/Common_questions/Web_mechanics/What_is_a_web_server
- 항상 같은 IP주소를 가지고 있습니다(모든 {{Glossary("ISP", "ISPs")}}가 홈 라인에 대해 고정된 IP주소를 제공하는 것은 아닙니다.)
- 제 3자에 의해 유지보수 됩니다
-이러한 이유들로, 좋은 호스팅 제공자를 찾는 것은 당신의 웹 사이트를 구축하는 것의 핵심 부분입니다. 다양한 서비스 회사들의 조건을 살펴보고 당신의 필요와 예산을 충족하는 하나를 선택하세요 (서비스는 무료부터 매달 수 백만원까지 있습니다.) 더 많은 자세한 사항은 [여기서](/en-US/Learn/How_much_does_it_cost#Hosting) 찾을 수 있습니다.
+이러한 이유들로, 좋은 호스팅 제공자를 찾는 것은 당신의 웹 사이트를 구축하는 것의 핵심 부분입니다. 다양한 서비스 회사들의 조건을 살펴보고 당신의 필요와 예산을 충족하는 하나를 선택하세요 (서비스는 무료부터 매달 수 백만원까지 있습니다.) 더 많은 자세한 사항은 [여기서](/ko/docs/Learn/Common_questions/Tools_and_setup/How_much_does_it_cost#hosting) 찾을 수 있습니다.
-당신이 웹 호스팅 솔루션을 설정했다면, 그저 당신의 [웹 서버에 파일들을 업로드 하시면 됩니다.](/ko/docs/Learn/Upload_files_to_a_web_server)
+당신이 웹 호스팅 솔루션을 설정했다면, 그저 당신의 [웹 서버에 파일들을 업로드 하시면 됩니다.](/ko/docs/Learn/Common_questions/Tools_and_setup/Upload_files_to_a_web_server)
### HTTP를 이용해 통신하기
-두 번째로, 웹 서버는 {{Glossary("HTTP")}} (hypertext transfer protocol)을 위한 지원합니다. 이름이 의미하듯이, HTTP는 어떻게 두 컴퓨터간의 hypertext(예를 들어, 연결된 웹 문서)를 전송하는지를 서술합니다.
+두 번째로, 웹 서버는 {{Glossary("HTTP")}} (Hypertext Transfer Protocol)을 위한 지원합니다. 이름이 의미하듯이, HTTP는 어떻게 두 컴퓨터간의 hypertext(예를 들어, 연결된 웹 문서)를 전송하는지를 서술합니다.
프로토콜은 두 컴퓨터간의 통신를 위한 규칙의 집합입니다. HTTP는 문자로 된, 독립적인 프로토콜입니다.
@@ -89,7 +91,9 @@ HTTP는 어떻게 클라이언트와 서버가 통신을 하는지 명확한 규
1. 요청을 받으면, HTTP 서버는 먼저 요청받은 URL이 존재하는 파일과 매칭이 되는지를 확인합니다.
2. 만약 매칭된다면, 웹 서버는 그 파일 내용을 브라우저에게 되돌려줍니다. 만약 그렇지 않다면, 애플리케이션 서버는 필요한 파일을 구축합니다.
-3. 만약 위 둘의 과정이 불가능하다면, 웹 서버는 브라우저에게 에러 메시지를 반환합니다, 대부분의 에러 메시지는 "404 Not Found" 입니다.(이 에러는 너무 많이 발생하여 많은 웹 디자이너들은404 error pages를 디자인하는데 많은 시간을 할애합니다.
+3. 만약 위 둘의 과정이 불가능하다면, 웹 서버는 브라우저에게 에러 메시지를 반환합니다, 대부분의 에러 메시지는 {{HTTPStatus("404", "404 Not Found")}} 입니다.
+ 404 오류는 매우 흔하기 때문에 일부 웹 디자이너들은 404 오류 페이지를 디자인하는 데 많은 시간과 노력을 들이기도 합니다.
+ ![The MDN 404 page as an example of such error page](mdn-404.jpg)
### 정적 vs. 동적 컨텐츠
diff --git a/files/ko/learn/css/building_blocks/cascade_and_inheritance/index.md b/files/ko/learn/css/building_blocks/cascade_and_inheritance/index.md
index facc3ba673a72e..8c08696ac2d46c 100644
--- a/files/ko/learn/css/building_blocks/cascade_and_inheritance/index.md
+++ b/files/ko/learn/css/building_blocks/cascade_and_inheritance/index.md
@@ -57,7 +57,20 @@ CSS 는 **Cascading Style Sheets** 의 약자이며, CSS 라는 단어를 이해
아래 예에서는, `h1` 에 적용할 수 있는 두 가지 규칙이 있습니다. `h1` 은 파란색으로 표시됩니다 — 이러한 규칙에는 동일한 선택자가 있고 동일한 고유성을 가지므로, 소스 순서의 마지막 규칙이 우선합니다.
-{{EmbedGHLiveSample("css-examples/learn/cascade/cascade-simple.html", '100%', 400)}}
+```html live-sample___cascade-simple
+
This is my heading.
+```
+
+```css live-sample___cascade-simple
+h1 {
+ color: red;
+}
+h1 {
+ color: blue;
+}
+```
+
+{{EmbedLiveSample("cascade-simple")}}
### 우선 순위 (Specificity)
@@ -68,7 +81,21 @@ CSS 는 **Cascading Style Sheets** 의 약자이며, CSS 라는 단어를 이해
시간 예제! 아래에는 `h1` 에 적용할 수 있는 두 가지 규칙이 다시 있습니다. 아래 `h1` 은 빨간색으로 표시 됩니다 — class 선택자는 규칙에 더 높은 우선 순위를 부여하므로 요소 선택자가 있는 규칙은 소스 순서에서 더 아래에 표시 되더라도 적용됩니다.
-{{EmbedGHLiveSample("css-examples/learn/cascade/specificity-simple.html", '100%', 500)}}
+```html live-sample___specificity-simple
+
This is my heading.
+```
+
+```css live-sample___specificity-simple
+.main-heading {
+ color: red;
+}
+
+h1 {
+ color: blue;
+}
+```
+
+{{EmbedLiveSample("specificity-simple")}}
우선 순위 점수 및 기타 사항에 대해서는 나중에 설명하겠습니다.
@@ -78,7 +105,28 @@ CSS 는 **Cascading Style Sheets** 의 약자이며, CSS 라는 단어를 이해
예를 들어, 요소에 `color` 및 `font-family` 를 설정하면, 다른 색상 및 글꼴 값을 직접 적용하지 않는 한, 해당 요소 내부의 모든 요소에도 해당 색상 및 글꼴로 스타일이 지정됩니다.
-{{EmbedGHLiveSample("css-examples/learn/cascade/inheritance-simple.html", '100%', 550)}}
+```html live-sample___inheritance-simple
+
+ As the body has been set to have a color of blue this is inherited through the
+ descendants.
+
+
+ We can change the color by targeting the element with a selector, such as this
+ span.
+
+```
+
+```css live-sample___inheritance-simple
+body {
+ color: blue;
+}
+
+span {
+ color: black;
+}
+```
+
+{{EmbedLiveSample("inheritance-simple")}}
일부 속성은 상속되지 않습니다 — 예를 들어 요소에 {{cssxref("width")}} 를 50% 로 설정하면, 모든 하위 항목의 너비가 부모 너비의 50% 가 되지 않습니다. 이 경우, CSS 는 사용하기가 매우 어려울 것입니다!
@@ -95,7 +143,46 @@ CSS 는 **Cascading Style Sheets** 의 약자이며, CSS 라는 단어를 이해
색상은 직접 자식 항목 뿐만 아니라 간접 자식 항목 (직접 자식 `
`) 및 첫 번째 중첩 목록에 있는 자식 항목에도 적용됩니다. 그런 다음 두 번째 중첩 목록에 `special` class 를 추가하고 다른 색상을 적용했습니다. 그런 다음 자식을 통해 상속됩니다.
-{{EmbedGHLiveSample("css-examples/learn/cascade/inheritance.html", '100%', 700)}}
+```html live-sample___inheritance
+
+```
+
+```css live-sample___keywords
+body {
+ color: green;
+}
+
+.my-class-1 a {
+ color: inherit;
+}
+
+.my-class-2 a {
+ color: initial;
+}
+
+.my-class-3 a {
+ color: unset;
+}
+```
+
+{{EmbedLiveSample("keywords")}}
### 모든 속성 값 재설정
@@ -134,7 +248,28 @@ CSS 속기 속성을 `all` 로 사용하면 이러한 상속 값 중 하나를 (
아래 예제에는 두 개의 인용문이 있습니다. 첫 번째는 인용문 자체에 스타일을 적용하고 두 번째는 `all` 값을 `unset` 하도록 인용문에 적용된 class 를 갖습니다.
-{{EmbedGHLiveSample("css-examples/learn/cascade/all.html", '100%', 700)}}
+```html live-sample___all
+
+
This blockquote is styled
+
+
+
+
This blockquote is not styled
+
+```
+
+```css live-sample___all
+blockquote {
+ background-color: orange;
+ border: 2px solid blue;
+}
+
+.fix-this {
+ all: unset;
+}
+```
+
+{{EmbedLiveSample("all")}}
`all` 의 값을 사용 가능한 다른 값 중 일부로 설정하고 차이가 무엇인지 관찰하십시오.
@@ -164,7 +299,29 @@ CSS 속기 속성을 `all` 로 사용하면 이러한 상속 값 중 하나를 (
이 동작은 CSS 에서 반복을 피하는 데 도움이 됩니다. 일반적인 방법은 기본 요소의 일반 스타일을 정의한 다음, 다른 요소에 대한 class 를 작성하는 것입니다. 예를 들어, 아래 스타일 시트에서 h2 제목에 대한 일반 스타일을 정의한 다음, 일부 속성과 값만 변경하는 class 를 만들었습니다. 처음에 정의된 값은 모든 표제에 적용되며, 보다 구체적인 값은 class 가 있는 표제에 적용됩니다.
-{{EmbedGHLiveSample("css-examples/learn/cascade/mixing-rules.html", '100%', 700)}}
+```html live-sample___mixing-rules
+
Heading with no class
+
Heading with class of small
+
Heading with class of bright
+```
+
+```css live-sample___mixing-rules
+h2 {
+ font-size: 2em;
+ color: #000;
+ font-family: Georgia, "Times New Roman", Times, serif;
+}
+
+.small {
+ font-size: 1em;
+}
+
+.bright {
+ color: rebeccapurple;
+}
+```
+
+{{EmbedLiveSample("mixing-rules", "", "240px")}}
이제 브라우저가 우선 순위 (specificity) 를 계산하는 방법을 살펴보겠습니다. 우리는 이미 요소 선택자가 우선 순위가 낮으며 class 가 덮어 쓸 수 있음을 알고 있습니다. 기본적으로 포인트 단위의 가치가 다른 유형의 선택자에 부여되며, 이를 합산하면 특정 선택자의 가중치가 부여되며, 이는 다른 잠재적 일치 항목에 대해 평가할 수 있습니다.
@@ -190,7 +347,73 @@ CSS 속기 속성을 `all` 로 사용하면 이러한 상속 값 중 하나를 (
계속 진행하기 전에, 실제 사례를 살펴보겠습니다.
-{{EmbedGHLiveSample("css-examples/learn/cascade/specificity-boxes.html", '100%', 700)}}
+```html live-sample___specificity-boxes
+
+```
+
+```css live-sample___specificity-boxes
+/* 1. specificity: 1-0-1 */
+#outer a {
+ background-color: red;
+}
+
+/* 2. specificity: 2-0-1 */
+#outer #inner a {
+ background-color: blue;
+}
+
+/* 3. specificity: 1-0-4 */
+#outer div ul li a {
+ color: yellow;
+}
+
+/* 4. specificity: 1-1-3 */
+#outer div ul .nav a {
+ color: white;
+}
+
+/* 5. specificity: 0-2-4 */
+div div li:nth-child(2) a:hover {
+ border: 10px solid black;
+}
+
+/* 6. specificity: 0-2-3 */
+div li:nth-child(2) a:hover {
+ border: 10px dashed black;
+}
+
+/* 7. specificity: 0-3-3 */
+div div .nav:nth-child(2) a:hover {
+ border: 10px double black;
+}
+
+a {
+ display: inline-block;
+ line-height: 40px;
+ font-size: 20px;
+ text-decoration: none;
+ text-align: center;
+ width: 200px;
+ margin-bottom: 10px;
+}
+
+ul {
+ padding: 0;
+}
+
+li {
+ list-style-type: none;
+}
+```
+
+{{EmbedLiveSample("specificity-boxes")}}
우선, 우리는 이 예제의 처음 7개 규칙에만 관심이 있으며, 앞으로 알 수 있듯이 각 규칙 앞에 주석에 우선 순위 값을 포함 시켰습니다.
@@ -209,7 +432,30 @@ CSS 속기 속성을 `all` 로 사용하면 이러한 상속 값 중 하나를 (
두 개의 단락이 있고, 하나에 ID 가 있는 이 예를 살펴보십시오.
-{{EmbedGHLiveSample("css-examples/learn/cascade/important.html", '100%', 700)}}
+```html live-sample___important
+
This is a paragraph.
+
One selector to rule them all!
+```
+
+```css live-sample___important
+#winning {
+ background-color: red;
+ border: 1px solid black;
+}
+
+.better {
+ background-color: gray;
+ border: none !important;
+}
+
+p {
+ background-color: blue;
+ color: white;
+ padding: 5px;
+}
+```
+
+{{EmbedLiveSample("important")}}
이 과정을 통해 어떤 일이 일어나고 있는지 살펴보겠습니다 — 이해하기 어려운 경우 어떤 일이 발생하는지 확인하려면 일부 속성을 제거해 보십시오.
@@ -247,7 +493,46 @@ CSS 속기 속성을 `all` 로 사용하면 이러한 상속 값 중 하나를 (
실수한 경우 언제든지 _재설정_ 버튼을 사용하여 재설정 할 수 있습니다. 정말로 막힌다면, [여기에서 해결책을 살펴 보십시오](https://github.com/mdn/css-examples/blob/master/learn/solutions.md#the-cascade).
-{{EmbedGHLiveSample("css-examples/learn/cascade/task.html", '100%', 700)}}
+```html live-sample___cascade-layers
+
A paragraph with a border and background
+```
+
+```css live-sample___cascade-layers
+@layer firstLayer, secondLayer;
+
+p {
+ /* 0-0-1 */
+ background-color: red;
+ color: grey !important;
+ border: 5px inset purple;
+}
+p#addSpecificity {
+ /* 1-0-1 */
+ border-style: solid !important;
+}
+
+@layer firstLayer {
+ #addSpecificity {
+ /* 1-0-0 */
+ background-color: blue;
+ color: white !important;
+ border-width: 5px;
+ border-style: dashed !important;
+ }
+}
+
+@layer secondLayer {
+ p#addSpecificity {
+ /* 1-0-1 */
+ background-color: green;
+ color: orange !important;
+ border-width: 10px;
+ border-style: dotted !important;
+ }
+}
+```
+
+{{EmbedLiveSample("cascade-layers")}}
## 다음은 뭐죠
@@ -257,4 +542,4 @@ CSS 속기 속성을 `all` 로 사용하면 이러한 상속 값 중 하나를 (
스타일이 예상대로 적용되지 않는 이상한 문제가 발생하면 여기를 다시 참조 하십시오. 우선 순위 문제일 수 있습니다.
-{{NextMenu("Learn/CSS/Building_blocks/Selectors", "Learn/CSS/Building_blocks")}}
+{{PreviousMenuNext("Learn/CSS/Building_blocks/Selectors/Combinators", "Learn/CSS/Building_blocks/Cascade_layers", "Learn/CSS/Building_blocks")}}
diff --git a/files/ko/web/accessibility/aria/attributes/index.md b/files/ko/web/accessibility/aria/attributes/index.md
index 60e6e8162aaedc..f1fd9574aa4fbd 100644
--- a/files/ko/web/accessibility/aria/attributes/index.md
+++ b/files/ko/web/accessibility/aria/attributes/index.md
@@ -104,7 +104,7 @@ ARIA 상태와 속성에는 4가지 유형이 있습니다:
- [`aria-relevant`](/ko/docs/Web/Accessibility/ARIA/Attributes/aria-relevant)
- [`aria-roledescription`](/ko/docs/Web/Accessibility/ARIA/Attributes/aria-roledescription)
-"특뱔한 상황에서만 금지된다"는 의미에서 위의 모든 속성들은 전역 속성입니다. 단, `aria-label` 및 `aria-labelledby` 속성은 [`presentation`](/ko/docs/Web/Accessibility/ARIA/Roles/presentation_role) 역할 또는 동일한 의미의 [`none`](/ko/docs/Web/Accessibility/ARIA/Roles/none_role) 역할을 갖는 요소들에는 허용되지 않습니다.
+"특별한 상황에서만 금지된다"는 의미에서 위의 모든 속성들은 전역 속성입니다. 단, `aria-label` 및 `aria-labelledby` 속성은 [`presentation`](/ko/docs/Web/Accessibility/ARIA/Roles/presentation_role) 역할 또는 동일한 의미의 [`none`](/ko/docs/Web/Accessibility/ARIA/Roles/none_role) 역할을 갖는 요소들에는 허용되지 않습니다.
## MDN에 정의된 상태와 속성들
diff --git a/files/ko/web/api/file_system_api/index.md b/files/ko/web/api/file_system_api/index.md
new file mode 100644
index 00000000000000..e1351793528ed6
--- /dev/null
+++ b/files/ko/web/api/file_system_api/index.md
@@ -0,0 +1,239 @@
+---
+title: File System API
+slug: Web/API/File_System_API
+l10n:
+ sourceCommit: 0c3f18aca2c8a93d3982183f64bf7762c2c310b0
+---
+
+{{securecontext_header}}{{DefaultAPISidebar("File System API")}}{{AvailableInWorkers}}
+
+**File System API**는 파일을 읽고, 쓰고, 관리하는 기능을 제공합니다. [**File System Access API**](https://wicg.github.io/file-system-access/) 명세에서 추가하는 기능을 통해 기기의 파일 시스템에 직접 접근할 수 있습니다.
+
+## 개념과 사용법
+
+File System API를 사용하여 사용자의 로컬 기기 또는 사용자가 접근 가능한 네트워크 파일 시스템의 파일과 상호작용할 수 있습니다. 이 API의 핵심 기능은 파일 읽기, 쓰기 또는 저장, 디렉터리 구조에 대한 접근입니다.
+
+파일 및 디렉터리와의 상호작용 대부분은 핸들을 통해 진행합니다. 부모 {{domxref('FileSystemHandle')}} 클래스를 기반으로, 각각 파일과 디렉터리 핸들을 정의하는 자식 클래스인 {{domxref('FileSystemFileHandle')}}과 {{domxref('FileSystemDirectoryHandle')}} 클래스가 존재합니다.
+
+핸들은 사용자 시스템의 어느 파일이나 디렉터리를 나타냅니다. 핸들에 접근하려면 우선 {{domxref('window.showOpenFilePicker()')}}나 {{domxref('window.showDirectoryPicker()')}} 등의 메서드를 호출해 사용자에게 파일 또는 디렉터리 선택창을 보여줘야 합니다. 사용자가 선택창을 통해 파일 또는 디렉터리를 성공적으로 선택하면 핸들이 반환됩니다.
+
+다음 방법으로도 핸들을 얻을 수 있습니다.
+
+- [HTML Drag and Drop API](/ko/docs/Web/API/HTML_Drag_and_Drop_API)의 {{domxref('DataTransferItem.getAsFileSystemHandle()')}} 메서드
+- [File Handling API](https://developer.chrome.com/docs/capabilities/web-apis/file-handling)
+
+각각의 핸들 종류는 자신만의 기능을 가지고 있으며, 서로 약간의 차이가 존재합니다([인터페이스](#인터페이스)에서 자세한 내용을 확인하세요). 이렇게 핸들을 얻은 후에는 파일 데이터에 접근하거나, 선택한 디렉터리의 내용물을 포함한 정보에 접근할 수 있습니다. File System API는 웹이 그동안 부족했던 파일 관련 기능을 제공합니다. 그러나 이 API의 설계에서 제일 중요한 부분은 보안이었고, 파일과 디렉터리로 데이터로의 접근은 사용자가 명시적으로 허용하지 않는 한 불가능합니다([출처 전용 파일 시스템](#출처_전용_파일_시스템)은 일반 파일 시스템과 달리 사용자가 볼 수 없으므로 예외).
+
+> [!NOTE] 이 API의 구성 기능을 사용할 때 발생할 수 있는 예외들은 명세에 정의된 것과 동일하게 각 기능의 문서에 나열돼있습니다. 그러나 API와 운영체제 사이의 상호작용 중 발생할 수 있는 예외때문에 실제로는 상황이 좀 더 복잡합니다. [오류 매핑을 명세에 추가하자는 제안](https://github.com/whatwg/fs/issues/57)이 올라온 상태며, 이 제안에서도 오류에 대한 유용한 추가 정보를 볼 수 있습니다.
+
+> [!NOTE] {{domxref("FileSystemHandle")}} 기반 객체는 {{domxref("IndexedDB API", "IndexedDB", "", "nocode")}} 데이터베이스 인스턴스로 직렬화할 수 있고, {{domxref("window.postMessage", "postMessage()")}}로 전송할 수도 있습니다.
+
+### 출처 전용 파일 시스템
+
+출처 전용 파일 시스템(Origin Private File System, OPFS)은 File System API가 제공하는 저장소 엔드포인트로, 일반 파일 시스템과 달리 사용자는 볼 수 없으며 페이지의 출처에서만 접근할 수 있습니다. OPFS는 콘텐츠의 직접 쓰기 접근을 허용하는, 고도로 성능 최적화된 특별한 유형의 파일을 제공합니다.
+
+[출처 전용 파일 시스템](/ko/docs/Web/API/File_System_API/Origin_private_file_system) 문서에서 사용법을 알아보세요.
+
+### 파일 저장하기
+
+- 비동기 핸들에서는 {{domxref('FileSystemWritableFileStream')}} 인터페이스를 사용하세요. 저장할 데이터를 {{domxref('Blob')}}, {{jsxref("String")}} 객체, 문자열 리터럴, 또는 {{jsxref('ArrayBuffer')}}로 만든 후, 스트림을 열어 데이터를 파일에 저장할 수 있습니다. 대상 파일은 새로운 파일일 수도 있고 기존 파일일 수도 있습니다.
+- 동기 핸들인 {{domxref('FileSystemSyncAccessHandle')}}의 경우 {{domxref('FileSystemSyncAccessHandle.write', 'write()')}} 메서드를 사용해 변경점들을 파일에 쓸 수 있습니다. 선택적으로, 특정 시점에 변경점들을 디스크에 작성해야 한다면 {{domxref('FileSystemSyncAccessHandle.flush', 'flush()')}}를 호출할 수 있습니다. (호출하지 않으면 운영체제가 적당한 시점에 처리하며 대부분의 경우 이것으로도 충분합니다)
+
+## 인터페이스
+
+- {{domxref("FileSystemHandle")}}
+ - : 파일 또는 디렉터리 항목을 나타내는 객체입니다. 다수의 핸들이 같은 항목을 가리킬 수 있습니다. 대부분의 경우 `FileSystemHandle`을 직접 다루지 않고 자식 인터페이스인 {{domxref('FileSystemFileHandle')}}과 {{domxref('FileSystemDirectoryHandle')}}을 사용합니다.
+- {{domxref("FileSystemFileHandle")}}
+ - : 파일 시스템 항목에 대한 핸들을 제공합니다.
+- {{domxref("FileSystemDirectoryHandle")}}
+ - : 파일 시스템 디렉터리에 대한 핸들을 제공합니다.
+- {{domxref("FileSystemSyncAccessHandle")}}
+ - : 파일 시스템 항목에 대한 동기적 핸들을 제공합니다. 단일 파일의 데이터를 디스크에 직접 쓸 수 있는 핸들입니다. 파일 읽기와 쓰기의 동기적 작동 방식을 활용하면 비동기적 작업이 높은 오버헤드를 유발하는 [WebAssembly](/ko/docs/WebAssembly) 등의 컨텍스트에서 고성능을 유지할 수 있습니다. 이 클래스는 전용 [웹 워커](/ko/docs/Web/API/Web_Workers_API)에서만, 그리고 [출처 전용 파일 시스템](#출처_전용_파일_시스템) 내의 파일에 대해서만 사용할 수 있습니다.
+- {{domxref("FileSystemWritableFileStream")}}
+ - : {{domxref('WritableStream')}} 객체에 편의 메서드를 추가한 인터페이스로, 디스크의 단일 파일에서 동작합니다.
+
+### 다른 인터페이스 확장
+
+- {{domxref("Window.showDirectoryPicker()")}}
+ - : 사용자가 디렉터리를 선택할 수 있는 디렉터리 선택창을 엽니다.
+- {{domxref("Window.showOpenFilePicker()")}}
+ - : 사용자가 파일 한 개 또는 여러 개를 선택할 수 있는 파일 선택창을 엽니다.
+- {{domxref("Window.showSaveFilePicker()")}}
+ - : 사용자가 파일을 저장할 수 있는 파일 선택창을 엽니다.
+- {{domxref("DataTransferItem.getAsFileSystemHandle()")}}
+ - : 드래그된 아이템이 파일이라면 {{domxref('FileSystemFileHandle')}}을, 디렉터리라면 {{domxref('FileSystemDirectoryHandle')}}을 반환합니다.
+- {{domxref("StorageManager.getDirectory()")}}
+ - : [출처 전용 파일 시스템](/ko/docs/Web/API/File_System_API/Origin_private_file_system)의 디렉터리와 콘텐츠에 접근할 때 사용하는 {{domxref("FileSystemDirectoryHandle")}} 객체의 참조를 가져올 때 사용합니다. {{domxref("FileSystemDirectoryHandle")}} 객체로 이행하는 {{jsxref('Promise')}}를 반환합니다.
+
+## 예제
+
+### 파일 접근하기
+
+다음 코드는 사용자가 파일을 선택할 수 있는 파일 선택창을 엽니다.
+
+```js
+async function getFile() {
+ // 파일 선택창을 열고 구조 분해로 첫 번째 핸들을 가져옴
+ const [fileHandle] = await window.showOpenFilePicker();
+ const file = await fileHandle.getFile();
+ return file;
+}
+```
+
+다음 비동기 함수는 파일 선택창을 열고, 사용자가 파일을 선택하면 `getFile()` 메서드를 사용해 그 파일의 내용을 가져옵니다.
+
+```js
+const pickerOpts = {
+ types: [
+ {
+ description: "Images",
+ accept: {
+ "image/*": [".png", ".gif", ".jpeg", ".jpg"],
+ },
+ },
+ ],
+ excludeAcceptAllOption: true,
+ multiple: false,
+};
+
+async function getTheFile() {
+ // 파일 선택창을 열고 구조 분해로 첫 번째 핸들을 가져옴
+ const [fileHandle] = await window.showOpenFilePicker(pickerOpts);
+
+ // 파일 내용 가져오기
+ const fileData = await fileHandle.getFile();
+}
+```
+
+### 디렉터리 접근하기
+
+다음 예제에서는 주어진 이름을 가진 디렉터리의 핸들을 가져옵니다. 주어진 이름의 디렉터리가 존재하지 않으면 생성됩니다.
+
+```js
+const dirName = "directoryToGetName";
+
+// 'currentDirHandle'이라는 이름의 디렉터리 핸들이 이미 존재한다고 가정
+const subDir = currentDirHandle.getDirectoryHandle(dirName, { create: true });
+```
+
+다음 비동기 함수는 주어진 디렉터리 핸들을 기준으로, `resolve()`를 사용해 사용자가 선택한 파일의 상대 경로를 찾습니다.
+
+```js
+async function returnPathDirectories(directoryHandle) {
+ // 파일 선택창을 열어 파일 핸들 가져오기
+ const [handle] = await self.showOpenFilePicker();
+ if (!handle) {
+ // 사용자가 취소했거나 다른 이유로 파일 열기 실패
+ return;
+ }
+
+ // 위의 파일 핸들이 주어진 디렉터리 핸들 내에 위치하는지 확인
+ const relativePaths = await directoryHandle.resolve(handle);
+
+ if (relativePaths === null) {
+ // 디렉터리 핸들 밖에 있음
+ } else {
+ // relativePaths는 상대 경로를 구성하는 경로 이름의 배열임
+
+ for (const name of relativePaths) {
+ // 각 항목 기록
+ console.log(name);
+ }
+ }
+}
+```
+
+### 파일 쓰기
+
+다음 비동기 함수는 저장 파일 선택창을 엽니다. 저장 파일 선택창은 파일이 선택된 후 {{domxref('FileSystemFileHandle')}}을 반환합니다. 그 후 {{domxref('FileSystemFileHandle.createWritable()')}} 메서드로 쓰기 스트림을 생성할 수 있습니다.
+
+다음으로, 스트림에 사용자의 {{domxref('Blob')}}을 쓰고, 스트림을 닫습니다.
+
+```js
+async function saveFile() {
+ // 새 핸들 생성
+ const newHandle = await window.showSaveFilePicker();
+
+ // Blob을 쓸 FileSystemWritableFileStream 생성
+ const writableStream = await newHandle.createWritable();
+
+ // 파일에 쓰기
+ await writableStream.write(imgBlob);
+
+ // 파일을 닫아서 콘텐츠 쓰기가 디스크에 반영되도록 하기
+ await writableStream.close();
+}
+```
+
+다음 코드는 `write()` 메서드에 전달할 수 있는 다양한 옵션을 보입니다.
+
+```js
+// 옵션 없이 데이터만
+writableStream.write(data);
+
+// 스트림에 쓸 때 사전에 결정한 위치부터 시작
+writableStream.write({ type: "write", position, data });
+
+// 현재 파일 커서를 지정된 위치로 변경
+writableStream.write({ type: "seek", position });
+
+// 파일이 size 바이트 크기가 되도록 변경
+writableStream.write({ type: "truncate", size });
+```
+
+### 동기적으로 OPFS 파일 읽고 쓰기
+
+이 예제는 [출처 전용 파일 시스템](#출처_전용_파일_시스템)에서 파일을 동기적으로 읽고 쓰는 방법을 보입니다.
+
+다음은 웹 워커 내의 비동기 이벤트 처리기 함수입니다. 메인 스레드로부터 메시지를 받으면
+
+- 동기적 파일 접근 핸들을 생성합니다.
+- 파일의 크기를 가져와서, 내용을 담을 {{jsxref("ArrayBuffer")}}를 생성합니다.
+- 파일 내용을 읽어 버퍼에 넣습니다.
+- 메시지를 인코딩 후 파일 끝에 붙입니다.
+- 디스크에 변경점 반영 후 접근 핸들을 닫습니다.
+
+```js
+onmessage = async (e) => {
+ // 메인 스크립트에서 받은 메시지 회수
+ const message = e.data;
+
+ // OPFS 파일 작성을 위한 핸들 가져오기
+ const root = await navigator.storage.getDirectory();
+ const draftHandle = await root.getFileHandle("draft.txt", { create: true });
+ // 동기적 접근 핸들 가져오기
+ const accessHandle = await draftHandle.createSyncAccessHandle();
+
+ // 파일 크기 가져오기
+ const fileSize = accessHandle.getSize();
+ // 파일 내용을 버퍼에 넣기
+ const buffer = new DataView(new ArrayBuffer(fileSize));
+ const readBuffer = accessHandle.read(buffer, { at: 0 });
+
+ // 메시지를 파일 끝에 붙이기
+ const encoder = new TextEncoder();
+ const encodedMessage = encoder.encode(message);
+ const writeBuffer = accessHandle.write(encodedMessage, { at: readBuffer });
+
+ // 디스크에 반영
+ accessHandle.flush();
+
+ // 작업 종료 후엔 항상 FileSystemSyncAccessHandle 닫아주기
+ accessHandle.close();
+};
+```
+
+> [!NOTE] 초기 명세에서는 {{domxref("FileSystemSyncAccessHandle.close()", "close()")}}, {{domxref("FileSystemSyncAccessHandle.flush()", "flush()")}}, {{domxref("FileSystemSyncAccessHandle.getSize()", "getSize()")}}, {{domxref("FileSystemSyncAccessHandle.truncate()", "truncate()")}}가 비동기 메서드로 정의돼 불편했습니다. [지금은 수정됐지만](https://github.com/whatwg/fs/issues/7), 일부 브라우저에서는 아직 비동기 메서드로서 제공됩니다.
+
+## 명세서
+
+{{Specifications}}
+
+## 브라우저 호환성
+
+{{Compat}}
+
+## 같이 보기
+
+- [The File System Access API: simplifying access to local files](https://developer.chrome.com/docs/capabilities/web-apis/file-system-access)
+- [The origin private file system](https://web.dev/articles/origin-private-file-system)
diff --git a/files/ko/web/api/performance/now/index.md b/files/ko/web/api/performance/now/index.md
new file mode 100644
index 00000000000000..3647690f9455e1
--- /dev/null
+++ b/files/ko/web/api/performance/now/index.md
@@ -0,0 +1,105 @@
+---
+title: "Performance: now() method"
+short-title: now()
+slug: Web/API/Performance/now
+l10n:
+ sourceCommit: 8ab0f2fde2a9c1c7e547884abedf3848f8d7dda5
+---
+
+{{APIRef("Performance API")}} {{AvailableInWorkers}}
+
+**`performance.now()`** 메서드는 밀리초 단위의 고해상도 타임스탬프를 반환합니다. 이는 {{domxref("Performance.timeOrigin")}} (윈도우 맥락에서는 탐색이 시작되었을 때의 시간이나 {{domxref("Worker")}} 혹은 {{domxref("ServiceWorker")}} 맥락에서는 워커가 진행된 시간) 으로부터의 시간 경과를 나타냅니다.
+
+## 구문
+
+```js-nolint
+now()
+```
+
+### 매개변수
+
+없습니다.
+
+### 반환 값
+
+밀리초로 측정된 {{domxref("DOMHighResTimeStamp")}} 값을 반환합니다.
+
+## 설명
+
+### `Performance.now` vs. `Date.now`
+
+[`Date.now`](/ko/docs/Web/JavaScript/Reference/Global_Objects/Date/now)와는 다르게, `performance.now()` 에 의하여 반환된 타임스탬프 값은 1 밀리초 해상도에 제한되지 않습니다. 대신에 이는 마이크로초 정밀도까지 표현될 수 있는 부동소수점으로 시간을 나타냅니다.
+
+또한 `Date.now()` 는 유닉스 에포크 (1970-01-01T00:00:00Z) 기준이고, 시스템 시계에 의존하기 때문에 시스템과 시계 왜곡 등과 같은 사용자의 시계 조정에 영향을 받을 수 있습니다.
+반면 `performance.now()` 메서드는 현재 시간이 감소하거나 조정되지 않는 [모노토닉 시계](https://w3c.github.io/hr-time/#dfn-monotonic-clock)인 `timeOrigin` 속성을 기준으로 합니다.
+
+### `performance.now` 명세 변경
+
+`performance.now()` 메서드의 의미는 고해상도 시간 단계 1과 단계 2 사이에서 변화했습니다.
+
+| 변경 사항 | 단계 1 | 단계 2 |
+| --------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
+| 기준 | [`performance.timing.navigationStart`](/ko/docs/Web/API/PerformanceTiming/navigationStart) | {{domxref("Performance.timeOrigin")}} |
+| 발생 조건 | 문서 불러오기 혹은 언로드 프롬프트 (만일 있는 경우). | (이전 문서가 없을 경우) 브라우저 맥락 생성, 언로드 프롬프트 (만일 있는 경우), 혹은 탐색 시작 (HTML에서 정의된 것처럼, 불러오기 몇 단계 전). |
+
+`performance.now()` 메서드는 Navigation Timing 명세의 [`performance.timing.navigationStart`](/ko/docs/Web/API/PerformanceTiming/navigationStart) 속성을 기준으로 합합니다. 이는 `performance.now()` 가 지금은 {{domxref("Performance.timeOrigin")}} 을 기준으로 하도록 변경되었습니다. 이는 웹 페이지 간의 타임스탬프를 비교할 때 시계 변경 위험을 피할 수 있습니다.
+
+```js
+// 단계 1 (시계 변경 위험 있음)
+currentTime = performance.timing.navigationStart + performance.now();
+
+// 단계 2 (시계 변경 위험 없음)
+currentTime = performance.timeOrigin + performance.now();
+```
+
+### 수면 중 틱
+
+단계 2 명세는 `performance.now()` 의 수면 중 틱을 요구합니다. 수면 중 틱은 오직 윈도우에서 파이어폭스와 크로미움에서만 나타나는 것으로 보입니다. 다른 운영 체제에서 관련된 브라우저 버그는 다음과 같습니다:
+
+- 크롬/크로미움 ([버그](https://crbug.com/1206450))
+- 파이어폭스 ([버그](https://bugzil.la/1709767))
+- 사파리/웹킷 ([버그](https://webkit.org/b/225610))
+
+명세서 상 더 많은 정보는 이슈 [hr-time#115](https://github.com/w3c/hr-time/issues/115#issuecomment-1172985601) 에서 확인할 수 있습니다.
+
+## 예제
+
+### `performance.now()` 사용하기
+
+코드에서 특정한 시점으로부터 시간이 얼마나 경과했는지를 파악하기 위해 아래와 같은 코드를 작성할 수 있습니다.
+
+```js
+const t0 = performance.now();
+doSomething();
+const t1 = performance.now();
+console.log(`doSomething 호출에 걸린 시간은 ${t1 - t0} 밀리초.`);
+```
+
+## 보안 요구사항
+
+타이밍 공격과 [핑거프린팅](/ko/docs/Glossary/Fingerprinting) 에 대비하기 위해 `performance.now()` 는 사이트 격리 상태에 따라 정밀도가 조정됩니다.
+
+- 격리된 맥락에서의 해상도: 5 마이크로초
+- 격리되지 않은 맥락에서의 해상도: 100 마이크로초
+
+사이트를 교차 출처로부터 격리하기 위해 {{HTTPHeader("Cross-Origin-Opener-Policy")}} 와
+{{HTTPHeader("Cross-Origin-Embedder-Policy")}} 헤더를 사용합니다.
+
+```http
+Cross-Origin-Opener-Policy: same-origin
+Cross-Origin-Embedder-Policy: require-corp
+```
+
+이 헤더들은 최상위 문서가 교차 출처 문서들과 브라우징 컨텍스트 그룹을 공유하지 않도록 보장합니다. COOP는 문서를 프로세스 단위로 격리하여 잠재적인 공격자가 팝업에서 이를 열더라도 전역 객체에 접근할 수 없게 하여 [XS-Leaks](https://github.com/xsleaks/xsleaks) 같은 교차 출처 공격을 방지합니다.
+
+## 명세서
+
+{{Specifications}}
+
+## 브라우저 호환성
+
+{{Compat}}
+
+## 같이 보기
+
+- {{domxref("Performance.timeOrigin")}}
diff --git a/files/ko/web/api/syncmanager/index.md b/files/ko/web/api/syncmanager/index.md
new file mode 100644
index 00000000000000..c80860db842e69
--- /dev/null
+++ b/files/ko/web/api/syncmanager/index.md
@@ -0,0 +1,29 @@
+---
+title: SyncManager
+slug: Web/API/SyncManager
+l10n:
+ sourceCommit: 56df677713fecf43ec0eb8862cb91c141aaa0005
+---
+
+{{APIRef("Background Sync")}}{{AvailableInWorkers}}
+
+{{domxref("Background Synchronization API", "", "", "nocode")}}의 **`SyncManager`** 인터페이스는 동기화 등록들을 등록하고 나열하기 위한 인터페이스를 제공합니다.
+
+## 인스턴스 속성
+
+없음.
+
+## 인스턴스 메서드
+
+- {{domxref("SyncManager.register()")}}
+ - : 새 동기화 등록을 생성하고 {{jsxref("Promise")}}를 반환합니다.
+- {{domxref("SyncManager.getTags()")}}
+ - : `SyncManager` 등록들에 대한 개발자 정의 식별자 목록을 반환합니다.
+
+## 명세서
+
+{{Specifications}}
+
+## 브라우저 호환성
+
+{{Compat}}
diff --git a/files/ko/web/css/@layer/index.md b/files/ko/web/css/@layer/index.md
new file mode 100644
index 00000000000000..d26d42ea3a13ec
--- /dev/null
+++ b/files/ko/web/css/@layer/index.md
@@ -0,0 +1,210 @@
+---
+title: "@layer"
+slug: Web/CSS/@layer
+l10n:
+ sourceCommit: 4cb569f768ec9529724f8fb06539f2903a583a41
+---
+
+{{CSSRef}}
+
+**`@layer`** [CSS](/ko/docs/Web/CSS) [at-rule](/ko/docs/Web/CSS/At-rule)은 캐스케이드 레이어를 선언하는 데 사용되며, 여러 캐스케이드 레이어가 있을 경우 우선순위를 정의하는 데도 사용할 수 있습니다.
+
+{{EmbedInteractiveExample("pages/tabbed/at-rule-layer.html", "tabbed-standard")}}
+
+## 구문
+
+```css
+/* 문 @규칙 */
+@layer layer-name;
+@layer layer-name, layer-name, layer-name;
+
+/* 블록 @규칙 */
+@layer {rules}
+@layer layer-name {rules}
+```
+
+- _layer-name_ : 캐스케이드 레이어의 이름
+- _rules_ : 캐스케이드 레이어에 있는 CSS 규칙 집합
+
+## 설명
+
+캐스케이드 레이어 내의 규칙들은 함께 캐스케이딩되며, 웹 개발자들에게 캐스케이드에 대한 더 많은 제어권을 제공합니다. 레이어에서 정의되지 않은 스타일은 항상 이름이 있는 레이어와 이름이 없는 레이어에서 선언된 스타일을 무시합니다.
+
+다음 다이어그램은 1, 2, ..., N 순서로 선언된 레이어의 우선순위를 보여줍니다.
+
+![캐스케이드 레이어 우선순위를 보여주는 다이어그램](https://mdn.github.io/shared-assets/images/diagrams/css/at-rules/layer-cascade.svg)
+
+선언 순서가 중요합니다. 먼저 선언된 레이어가 가장 낮은 우선순위를 가지며, 마지막으로 선언된 레이어가 가장 높은 우선순위를 가집니다. 그러나 [`!important`](/ko/docs/Web/CSS/important) 플래그가 사용되면 우선순위가 뒤집힙니다.
+
+`@layer` @규칙은 세 가지 방법 중 하나로 캐스케이드 레이어를 생성하는 데 사용됩니다
+
+첫 번째 방법은 `@layer` 블록 @규칙을 사용하여 특정 이름의 캐스케이드 레이어를 생성하고, 그 레이어 내부에 CSS 규칙을 포함하는 방식입니다. 예를 들면 다음과 같습니다.
+
+```css
+@layer utilities {
+ .padding-sm {
+ padding: 0.5rem;
+ }
+
+ .padding-lg {
+ padding: 0.8rem;
+ }
+}
+```
+
+두 번째 방법은 `@layer` 문 @규칙을 사용하여 스타일을 할당하지 않고 쉼표로 구분된 하나 이상의 이름 있는 캐스케이드 레이어를 생성하는 것입니다. 아래와 같이 단일 레이어를 만들 수 있습니다.
+
+```css
+@layer utilities;
+```
+
+여러 개의 레이어를 한 번에 정의할 수도 있습니다. 아래와 같이 작성할 수 있습니다.
+
+```css
+@layer theme, layout, utilities;
+```
+
+이 방법이 유용한 이유는 레이어가 선언된 순서가 각 레이어의 우선순위를 나타내기 때문입니다. 선언과 마찬가지로, 여러 레이어에 규칙이 있는 경우 마지막에 나열된 레이어가 우선권을 가집니다. 따라서, 앞서 나온 예시에서 `theme`와 `utilities`에 상충하는 규칙이 있다면, `utilities`에 있는 규칙이 우선권을 가지며 적용됩니다.
+
+> [!NOTE]
+> 레이어 이름을 선언하여 순서를 설정한 후, 이름을 다시 선언하여 해당 레이어에 CSS 규칙을 추가할 수 있습니다. 스타일은 해당 레이어에 추가되며, 레이어의 순서는 변경되지 않습니다.
+
+세 번째 방법은 레이어 이름을 포함하지 않고 `@layer` 블록 @규칙을 사용하여 이름 없는 레이어를 생성하는 것입니다. 예시는 아래와 같습니다.
+
+```css
+@layer {
+ p {
+ margin-block: 1rem;
+ }
+}
+```
+
+이것은 *익명 캐스케이드 레이어*를 생성합니다. 이 레이어는 이름 있는 레이어와 동일한 방식으로 작동하지만, 이후에 규칙을 추가할 수는 없습니다. 익명 레이어의 우선순위는 이름이 있든 없든 레이어가 선언된 순서에 따르며, 레이어 외부에서 선언된 스타일보다 우선순위가 낮습니다.
+
+캐스케이드 레이어를 생성하는 또 다른 방법은 {{cssxref("@import")}}를 사용하는 것입니다. 이 경우 규칙은 가져온 스타일 시트에 포함됩니다. `@import` @규칙은 `@charset` 및 `@layer` 규칙을 제외한 모든 유형의 규칙보다 먼저 와야 한다는 점을 기억하세요.
+
+```css
+@import "theme.css" layer(utilities);
+```
+
+### 중첩 레이어
+
+레이어는 중첩될 수 있습니다. 예시는 아래와 같습니다.
+
+```css
+@layer framework {
+ @layer layout {
+ }
+}
+```
+
+`framework` 내부의 `layout` 레이어에 규칙을 추가하려면 두 이름을 `.`로 연결합니다.
+
+```css
+@layer framework.layout {
+ p {
+ margin-block: 1rem;
+ }
+}
+```
+
+## 형식 구문
+
+{{csssyntax}}
+
+## 예제
+
+### 간단한 예제
+
+다음 예제에서는 두 개의 CSS 규칙이 생성됩니다. 하나는 어떤 레이어에도 포함되지 않은 {{htmlelement("p")}} 요소에 대한 규칙이고, 다른 하나는 `type`이라는 레이어 내의 `.box p`에 대한 규칙입니다.
+
+레이어가 없으면 선택자 `.box p`가 가장 높은 구체성을 가지므로, `Hello, world!`는 녹색으로 표시됩니다. 그러나 `type` 레이어가 레이어 없는 콘텐츠를 포함하기 위해 생성된 익명 레이어보다 먼저 오므로, 텍스트는 보라색으로 표시됩니다.
+
+또한 순서에 주목하세요. 레이어 없는 스타일을 먼저 선언했음에도 불구하고 여전히 레이어 스타일 *뒤*에 적용됩니다.
+
+#### HTML
+
+```html
+
+
Hello, world!
+
+```
+
+#### CSS
+
+```css
+p {
+ color: rebeccapurple;
+}
+
+@layer type {
+ .box p {
+ font-weight: bold;
+ font-size: 1.3em;
+ color: green;
+ }
+}
+```
+
+#### 결과
+
+{{EmbedLiveSample("Simple_example")}}
+
+### 기존 레이어에 규칙 할당하기
+
+다음 예제에서는 규칙이 적용되지 않은 두 개의 레이어가 생성된 후, 두 레이어에 CSS 규칙이 적용됩니다. `base` 레이어는 `color`, `border`, `font-size`, 및 `padding`을 정의하고, `special` 레이어는 다른 색상을 정의합니다. `special`이 레이어가 정의될 때 마지막에 오기 때문에 제공하는 색상이 사용되며 텍스트는 `rebeccapurple`로 표시됩니다. `base`에서 정의된 다른 모든 규칙은 여전히 적용됩니다.
+
+#### HTML
+
+```html
+
+ I am displayed in color: rebeccapurple because the
+ special layer comes after the base layer. My green
+ border, font-size, and padding come from the base layer.
+
+```
+
+#### CSS
+
+```css
+@layer base, special;
+
+@layer special {
+ .item {
+ color: rebeccapurple;
+ }
+}
+
+@layer base {
+ .item {
+ color: green;
+ border: 5px solid green;
+ font-size: 1.3em;
+ padding: 0.5em;
+ }
+}
+```
+
+#### 결과
+
+{{EmbedLiveSample("Assigning_rules_to_existing_layers")}}
+
+## 명세서
+
+{{Specifications}}
+
+## 브라우저 호완성
+
+{{Compat}}
+
+## 같이 보기
+
+- [`@import`](/ko/docs/Web/CSS/@import)
+- {{domxref("CSSLayerBlockRule")}}
+- {{domxref("CSSLayerStatementRule")}}
+- [`!important`](/ko/docs/Web/CSS/important)
+- [`revert-layer`](/ko/docs/Web/CSS/revert-layer)
+- [Introducing the CSS cascade](/ko/docs/Web/CSS/Cascade)
+- [계단식 및 상속](/ko/docs/Learn/CSS/Building_blocks/Cascade_and_inheritance)
+- [종속 계층](/ko/docs/Learn/CSS/Building_blocks/Cascade_layers)
+- [The future of CSS: Cascade layers](https://www.bram.us/2021/09/15/the-future-of-css-cascade-layers-css-at-layer/) on bram.us (2021)
diff --git a/files/ko/web/css/abs/index.md b/files/ko/web/css/abs/index.md
new file mode 100644
index 00000000000000..a74924fb9585c8
--- /dev/null
+++ b/files/ko/web/css/abs/index.md
@@ -0,0 +1,82 @@
+---
+title: abs()
+slug: Web/CSS/abs
+l10n:
+ sourceCommit: 8e4584c695829f1c404b03fd3ac90cbebdf745d7
+---
+
+{{CSSRef}}
+
+**`abs()`** [CSS](/ko/docs/Web/CSS) [함수](/ko/docs/Web/CSS/CSS_Functions)는 입력된 값의 절댓값을 반환하며, 이 값의 타입은 입력값과 동일합니다.
+
+## 구문
+
+```css
+/* property: abs(expression) */
+width: abs(20% - 100px);
+```
+
+### 매개변수
+
+`abs(x)` 함수는 매개변수로 오직 하나의 값을 취합니다.
+
+- `x`
+ - : 숫자로 계산되는 식입니다.
+
+### 반환 값
+
+`x` 의 절댓값입니다.
+
+- 만일 `x` 의 값이 양수이거나 `0⁺` 이라면 `x` 를 반환합니다.
+- 그렇지 않으면 `-1 * x` 를 반환합니다.
+
+### 형식 구문
+
+{{CSSSyntax}}
+
+## 예제
+
+### 양수 변수
+
+`abs()` 함수는 값이 항상 양수일 것이라고 보장할 수 있습니다. 아래 예제는 CSS 커스텀 속성인 `--font-size` 가 {{CSSxRef("font-size")}} 의 값으로 사용됩니다. 커스텀 속성을 `abs()` 함수로 감싸면 음수는 양수로 반환됩니다.
+
+```css
+h1 {
+ font-size: abs(var(--font-size));
+}
+```
+
+### 그라디언트 각도의 방향 제어하기
+
+그라디언트의 방향 또한 `abs()` 함수를 이용하여 제어할 수 있습니다. 아래는 -45deg에 해당하는 각을 가진 그라디언트가 빨간색에서 파란색으로 변화하는 예제입니다. `abs()` 를 사용하여 값을 양수로 만들면 그라디언트는 파란색에서 빨간색으로 변화하게 됩니다.
+
+```css
+div {
+ --deg: -45deg;
+ background-image: linear-gradient(abs(var(--deg)), blue, red);
+}
+```
+
+### 이전 버전과 호환하기
+
+CSS `abs()` 함수를 지원하지 않는 구형 브라우저에서는 CSS {{CSSxRef("max")}} 함수를 이용하여 같은 결과를 도출할 수 있습니다. 다음 예제를 참고해 보세요.
+
+```css
+p {
+ line-height: max(var(--lh), -1 * var(--lh));
+}
+```
+
+{{CSSxRef("max")}} 함수를 사용하여 `var(--lh)` 와 `-1 * var(--lh)` 두 값 중 더 큰 양수를 반환합니다. `--lh` 가 양수든 음수이든 상관없이 계산 후 반환된 값은 항상 양수, 즉 절댓값이 됩니다.
+
+## 명세서
+
+{{Specifications}}
+
+## 브라우저 호환성
+
+{{Compat}}
+
+## 같이 보기
+
+- {{CSSxRef("sign")}}
diff --git a/files/ko/web/css/stop-color/index.md b/files/ko/web/css/stop-color/index.md
new file mode 100644
index 00000000000000..218c3f5e65b832
--- /dev/null
+++ b/files/ko/web/css/stop-color/index.md
@@ -0,0 +1,145 @@
+---
+title: stop-color
+slug: Web/CSS/stop-color
+l10n:
+ sourceCommit: 8ad43cb18baadffa72a32ba8b4524f09d611f078
+---
+
+{{CSSRef}}
+
+**`stop-color`** [CSS](/ko/docs/Web/CSS) 속성은 그라디언트 내부에서 SVG {{SVGElement("stop")}} 요소에 어떤 색상이 쓰일지를 정의합니다. 이 속성이 존재한다면 요소의 {{SVGAttr("stop-color")}} 속성을 덮어쓰게 됩니다.
+
+> [!NOTE] > `stop-color` 속성은 {{SVGElement("svg")}} 내 {{SVGElement('stop')}} 요소에만 적용됩니다. 이는 다른 SVG, HTML 혹은 의사 요소에 적용되지 않습니다.
+
+## 구문
+
+```css
+/* 값 */
+stop-color: red;
+stop-color: hsl(120deg 75% 25% / 60%);
+stop-color: currentcolor;
+
+/* 전역 값 */
+stop-color: inherit;
+stop-color: initial;
+stop-color: revert;
+stop-color: revert-layer;
+stop-color: unset;
+```
+
+### 값
+
+- {{cssxref("color_value", "<color>")}}
+
+ - : 채우기 색상입니다. 이는 유효한 모든 CSS {{cssxref("color_value", "<color>")}} 값에 사용될 수 있습니다.
+
+## 형식 정의
+
+{{CSSInfo}}
+
+## 형식 구문
+
+{{csssyntax}}
+
+## 예제
+
+### SVG 그라디언트의 정지 색상 정의하기
+
+이 예제는 `stop-color` 의 기본 사용법과 CSS `stop-color` 속성이 `stop-color` 의 특성보다 우선하는 방식에 대해 설명합니다.
+
+#### HTML
+
+여기 세 {{SVGElement("rect")}} 사각형 SVG와 세 {{SVGElement("linearGradient")}} 요소들이 있습니다. 각 그라디언트는 검은색에서부터 하얀색, 하얀색에서부터 회식으로 이루어진 네 개의 {{SVGElement("stop")}} 요소를 가집니다. 차이점은 `id` 값 뿐입니다.
+
+```html
+
+```
+
+#### CSS
+
+사각형의 외곽선에 {{cssxref("stroke")}}와 {{cssxref("stroke-width")}} 를 포함시킵니다. 각 그라디언트의 처음과 끝 정지 색상을 설정하고, `stop-color` 속성을 이용하여 각각의 `stop-color` 특성을 덮어씁니다. 다양한 CSS {{cssxref("color_value", "<color>")}} 구문을 확인할 수 있습니다.
+
+```css hidden
+svg {
+ border: 1px solid;
+ height: calc(100vh - 20px);
+ margin-bottom: 10px;
+}
+```
+
+```css
+rect {
+ stroke: #333;
+ stroke-width: 1px;
+}
+
+#myGradient1 {
+ stop:first-of-type {
+ stop-color: #66ccff;
+ }
+ stop:last-of-type {
+ stop-color: #f4aab9;
+ }
+}
+#myGradient2 {
+ stop:first-of-type {
+ stop-color: yellow;
+ }
+ stop:last-of-type {
+ stop-color: purple;
+ }
+}
+#myGradient3 {
+ stop:first-of-type {
+ stop-color: hsl(0deg 100% 50%);
+ }
+ stop:last-of-type {
+ stop-color: hsl(20deg 100% 50%);
+ }
+}
+```
+
+#### 결과
+
+{{EmbedLiveSample("Defining the color stops of SVG gradients", "300", "200")}}
+
+## 명세서
+
+{{Specifications}}
+
+## 브라우저 호환성
+
+{{Compat}}
+
+## 같이 보기
+
+- SVG {{SVGAttr("stop-color")}} 속성
+- 프레젠테이션 속성: `stop-color`, {{cssxref("clip-rule")}}, {{cssxref("color-interpolation-filters")}}, {{cssxref("fill-opacity")}}, {{cssxref("fill-rule")}}, {{cssxref("fill")}}, {{cssxref("marker-end")}}, {{cssxref("marker-mid")}}, {{cssxref("marker-start")}}, {{cssxref("shape-rendering")}}, {{cssxref("stop-opacity")}}, {{cssxref("stroke")}}, {{cssxref("stroke-dasharray")}}, {{cssxref("stroke-dashoffset")}}, {{cssxref("stroke-linecap")}}, {{cssxref("stroke-linejoin")}}, {{cssxref("stroke-miterlimit")}}, {{cssxref("stroke-opacity")}}, {{cssxref("stroke-width")}}, {{cssxref("text-anchor")}}, and {{cssxref("vector-effect")}}
+- {{cssxref("opacity")}}
+- {{cssxref("background-color")}}
+- {{cssxref("color_value", "<color>")}}
+- {{cssxref("basic-shape")}} 데이터 타입
diff --git a/files/ko/web/css/transition-duration/index.md b/files/ko/web/css/transition-duration/index.md
new file mode 100644
index 00000000000000..c9f1c3da453d18
--- /dev/null
+++ b/files/ko/web/css/transition-duration/index.md
@@ -0,0 +1,132 @@
+---
+title: transition-duration
+slug: Web/CSS/transition-duration
+l10n:
+ sourceCommit: 1608a85abb1d05dadc63f27c93fc3e4b7e630db0
+---
+
+{{CSSRef}}
+
+**`transition-duration`** [CSS](/ko/docs/Web/CSS) 속성은 트랜지션 애니메이션이 완료되는 데 걸리는 시간을 설정합니다. 기본값은 `0s` 로, 애니메이션이 발생하지 않습니다.
+
+{{EmbedInteractiveExample("pages/css/transition-duration.html")}}
+
+여러 개의 지속 시간을 지정할 수 있으며, 각 지속 시간은 마스터 목록 역할을 하는 {{ cssxref("transition-property") }} 속성에 지정된 대로 해당 프로퍼티에 적용됩니다. 지정된 지속 시간 수가 마스터 목록보다 적으면 사용자 에이전트는 지속 시간 목록을 반복합니다. 지정된 기간의 수가 마스터 목록보다 많으면 목록이 적절한 크기로 잘립니다. 두 경우 모두 CSS 선언은 유효하게 유지됩니다.
+
+## 구문
+
+```css
+/*