Skip to content

Commit

Permalink
[revise]: revise feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
IMHOJEONG committed Sep 22, 2023
1 parent 6b3d758 commit 1508c81
Show file tree
Hide file tree
Showing 20 changed files with 267 additions and 157 deletions.
42 changes: 19 additions & 23 deletions files/ko/glossary/safe/http/index.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,47 @@
---
title: 안전함 (HTTP 메서드)
slug: Glossary/Safe/HTTP
l10n:
sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34
---

{{GlossarySidebar}}

HTTP 메서드가 서버의 상태를 바꾸지 않으면 그 메서드가 **안전**하다고 말합니다. 다른 말로 하면, 읽기
작업만 수행하는 메서드는 안전합니다. 흔히 쓰이는 HTTP 메서드 중에서는 {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}},
{{HTTPMethod("OPTIONS")}}가 안전합니다. 모든 안전한 메서드는 [멱등성](/ko/docs/Glossary/Idempotent) 또한
갖지만, 모든 멱등성을 지닌 메서드가 안전한 것은 아닙니다. 예컨대 {{HTTPMethod("PUT")}}과 {{HTTPMethod("DELETE")}}는 둘
다 멱등성을 가졌지만 안전하지는 않은 메서드입니다.
{{HTTPMethod("OPTIONS")}}가 안전합니다. 모든 안전한 메서드는 {{glossary("idempotent", "멱등성")}} 또한
갖지만, 모든 멱등성을 지닌 메서드가 안전한 것은 아닙니다. 예컨대 {{HTTPMethod("PUT")}}과 {{HTTPMethod("DELETE")}}는 둘 다 멱등성을 가졌지만 안전하지는 않은 메서드입니다.

그러나, 안전한 메서드가 읽기 전용의 의미를 내포하긴 하지만, 서버가 요청 정보와 통계 등을 기록함으로써 자신의 상태에
변경을 가하는 것도 가능합니다. 안전함의 중요점은 그 메서드를 호출해도 클라이언트가 서버의 상태 변화를 직접 요청하는
것이 아니므로 서버에 불필요한 부하를 주지 않을 것이란 점입니다. 즉 브라우저 입장에서는, 안전한 메서드라면 서버에 해를
끼치지 않을 것임을 알 수 있기 때문에 자유롭게 호출할 수 있습니다. 이런 점을 활용해서 브라우저가 별다른 위험 없이도
변경을 가하는 것도 가능합니다. 안전한 메서드 호출의 중요한 부분은 그 메서드를 호출해도 클라이언트가 서버의 상태 변화를 직접 요청하는
것이 아니므로 서버에 불필요한 부하를 주지 않을 것이란 점입니다. 브라우저는 안전한 메서드라면 서버에 해를 끼치지 않을 것임을 알 수 있기 때문에 자유롭게 호출할 수 있습니다. 이런 점을 활용해서 브라우저가 별다른 위험 없이도
프리페칭과 같은 동작을 수행할 수 있는 것입니다. 웹 크롤러 역시 안전한 메서드의 호출에 의존합니다.

안전한 메서드가 정적 파일만 제공해야 할 필요는 없으며, 요청에 대해 응답을 필요에 따라 생성하는 것도 가능합니다. 다만
생성 과정은 안전해야 하므로, 다른 이커머스 웹 사이트에 주문을 넣는 것과 같이 외부 이펙트를 유발하는 것은 안됩니다.
안전한 메서드가 정적 파일만 제공해야 할 필요는 없습니다. 생성된 스크립트가 안전함을 보장하는 한, 서버는 안전한 메서드에 대한 응답을 즉시 생성할 수 있습니다. 다른 전자 상거래 웹 사이트에 주문을 넣는 것과 같이 외부 효과를 유발하는 것은 안됩니다.

메서드의 안전함을 준수하는 것은 온전히 서버 어플리케이션의 책임으로, Apache, Nginx, IIS 등 웹 서버 스스로는 안전함을
강제하지 못합니다. 서버 어플리케이션은 특히 {{HTTPMethod("GET")}} 요청을 받았을 때 자신의 상태가 바뀌지 않도록 해야 합니다.
메서드의 안전함을 준수하는 것은 온전히 서버 애플리케이션의 책임으로, Apache, Nginx, IIS 등 웹 서버 스스로는 안전함을
강제하지 못합니다. 서버 애플리케이션은 특히 {{HTTPMethod("GET")}} 요청을 받았을 때 자신의 상태가 바뀌지 않도록 해야 합니다.

다음은 서버 상태를 바꾸지 않는, 안전한 메서드의 호출입니다.

```
GET /pageX.html HTTP/1.1
```http
GET /pageX.html HTTP/1.1
```

다음은 서버 상태를 바꿀 수도 있는, 안전하지 않은 메서드의 호출입니다.

```
POST /pageX.html HTTP/1.1
```http
POST /pageX.html HTTP/1.1
```

마지막으로 멱등성을 가졌지만 안전하지는 않은 메서드의 호출입니다.

```http
DELETE /idX/delete HTTP/1.1
```
DELETE /idX/delete HTTP/1.1
```

## 더 알아보기

### 일반 지식

- HTTP 명세에서 [안전함](https://datatracker.ietf.org/doc/html/rfc7231#section-4.2.1)의 정의.

### 기술 지식
## 같이 보기

- HTTP 명세에서 [안전함](https://httpwg.org/specs/rfc9110.html#safe.methods)의 정의.
- 일반적으로 쓰이는 안전한 메서드: {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("OPTIONS")}}
- 일반적으로 쓰이는 안전하지 않은 메서드: {{HTTPMethod("PUT")}}, {{HTTPMethod("DELETE")}}, {{HTTPMethod("POST")}}
4 changes: 4 additions & 0 deletions files/ko/glossary/safe/index.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
---
title: 안전함
slug: Glossary/Safe
l10n:
sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34
---

{{GlossarySidebar}}

**안전함**은 맥락에 따라 여러가지를 의미할 수 있습니다. 아래의 용어를 가리키는 경우도 있습니다.

{{GlossaryDisambiguation}}
52 changes: 40 additions & 12 deletions files/ko/glossary/scope/index.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,40 @@
---
title: 스코프
slug: Glossary/Scope
l10n:
sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34
---

현재 실행되는 컨텍스트를 말한다. 여기서 컨텍스트는 {{glossary("값","값")}}과 **표현식****"표현"**되거나 참조 될 수 있음을 의미한다. 만약 **{{glossary("변수")}}** 또는 다른 표현식이 "해당 스코프"내에 있지 않다면 사용할 수 없다. 스코프는 또한 계층적인 구조를 가지기 때문에 하위 스코프는 상위 스코프에 접근할 수 있지만 반대는 불가하다.
{{GlossarySidebar}}

**{{glossary("함수")}}****{{glossary("자바스크립트")}}**에서 **클로저** 역할을 하기 때문에 스코프를 생성하므로 함수 내에 정의된 변수는 외부 함수나 다른 함수 내에서는 접근 할 수 없다. 예를 들어 다음과 같은 상황은 유효하지 않다.
**스코프**는 컨텍스트는 {{glossary("value","값")}}과 "표현식"이 "표현"되거나 참조 될 수 있는 현재 실행되는 컨텍스트를 의미합니다. 만약 {{glossary("variable", "변수")}} 또는 표현식이 "해당 스코프"내에 있지 않다면, 사용할 수 없습니다. 스코프는 또한 계층적인 구조를 가지기 때문에, 하위 스코프는 상위 스코프에 접근할 수 있지만 반대는 불가하다.

```js
JavaScript는 다음과 같은 종류의 스코프가 있습니다.

- 전역 범위: 스크립트 모드에서 실행되는 모든 코드의 기본 범위입니다.
- 모듈 범위: 모듈 모드에서 실행되는 코드의 범위입니다.
- 함수 범위: {{glossary("function")}}로 생성된 범위입니다.

또한, [`let`](/ko/docs/Web/JavaScript/Reference/Statements/let) or [`const`](/ko/docs/Web/JavaScript/Reference/Statements/const)로 선언된 변수는 추가 범위에 속할 수 있습니다.

- 블록 범위: 중괄호 쌍([블록](/ko/docs/Web/JavaScript/Reference/Statements/block))으로 생성된 범위입니다.

{{glossary("function", "함수")}}는 범위를 생성합니다. 예를 들면, 함수 내에서만 정의된 변수는 함수 외부나 다른 함수 내에서 접근할 수 없습니다. 다음 예는 유효하지 않습니다.

```js example-bad
function exampleFunction() {
var x = "declared inside function";
// x는 오직 exampleFunction 내부에서만 사용 가능.
const x = "declared inside function"; // 변수 x는 안에서만 사용 가능합니다.
console.log("Inside function");
console.log(x);
}

console.log(x); // 에러 발생
console.log(x); // Causes error
```

그러나 다음과 같은 코드는 변수가 함수 외부의 전역에서 선언되었기 때문에 유효하다.
그러나, 다음 코드는 변수가 함수 외부에서 선언되어 전역 변수가 되기 때문에 유효합니다.

```js
var x = "declared outside function";
```js example-good
const x = "declared outside function";

exampleFunction();

Expand All @@ -34,8 +47,23 @@ console.log("Outside function");
console.log(x);
```

## Learn more
Blocks only scope `let` and `const` declarations, but not `var` declarations.
블록 `let``const` 선언만 차단하고 `var` 선언은 차단하지 않습니다.

```js example-good
{
var x = 1;
}
console.log(x); // 1
```

```js example-bad
{
const x = 1;
}
console.log(x); // ReferenceError: x is not defined
```

### General knowledge
## 같이 보기

- [Scope (computer science)](<https://en.wikipedia.org/wiki/Scope_(computer_science)>) on Wikipedia
- 위키백과의 [스코프 (컴퓨터 과학)](<https://en.wikipedia.org/wiki/Scope_(computer_science)>)
6 changes: 5 additions & 1 deletion files/ko/glossary/self-executing_anonymous_function/index.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
---
title: Self-Executing Anonymous Function
slug: Glossary/Self-Executing_Anonymous_Function
l10n:
sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34
---

정의되자마자 실행되는 {{glossary("JavaScript")}} {{glossary("function")}}입니다. (a.k.a. {{glossary("IIFE")}} (즉시실행함수))
{{GlossarySidebar}}

정의되자마자 실행되는 {{glossary("JavaScript")}} {{glossary("function", " 함수")}}입니다. (a.k.a. {{glossary("IIFE")}} (즉시실행함수))

링크된 즉시실행함수 페이지에서 더 많은 정보를 얻을 수 있습니다.
54 changes: 30 additions & 24 deletions files/ko/glossary/semantics/index.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,63 @@
---
title: Semantics
slug: Glossary/Semantics
l10n:
sourceCommit: 8578969fc0a4321e2bb10c7efeb2db77deec93c3
---

프로그래밍에서,**시맨틱**은 코드 조각의 *의미*를 나타냅니다 — 예를 들어 ("이게 어떻게 시각적으로 보여질까?" 보다)"이 Javascript 라인을 실행하는 것은 어떤 효과가 있는가?", 혹은 "이 HTML 엘리먼트가 가진 목적이나 역할은 무엇인가?"
{{GlossarySidebar}}

프로그래밍에서, **시맨틱**은 코드 조각의 '의미'를 나타냅니다. 예를 들어, ("이게 어떻게 시각적으로 보여질까?" 보다는), 이 Javascript 라인을 실행하는 것은 어떤 효과가 있나요?", 혹은 "이 HTML 엘리먼트가 가진 목적이나 역할은 무엇일까요?"를 들 수 있습니다.

## JavaScript 시맨틱

JavaScript의 경우입니다. `textContent` 문자열을 매개변수로 하고 {{htmlelement("li")}} 요소를 반환하는 함수를 생각해봅시다. 코드 볼 때, 함수를 `build('Peach')` 로 부르거나 `createLiWithContent('Peach')` 부르는 것 중 어느 것이 이 함수의 기능 파악하기에 쉬울까요?
JavaScript의 경우, `textContent` 문자열을 매개변수로 하고 {{htmlelement("li")}} 요소를 반환하는 함수를 생각해 봅시다. 코드 볼 때, 함수를 `build('Peach')` 로 부르거나 `createLiWithContent('Peach')` 부르는 것 중 어느 것이 이 함수의 기능 파악하기에 쉬울까요?

## CSS 시맨틱

CSS의 경우입니다. 다양한 종류의 과일을 나타내기 위해서는 리스트 태그 `li` 가 있다고 가정해봅시다. `div> ul> li``.fruits__item` 둘 중 어떤 것이 어떤 DOM부분이 선택되었는지 잘 알려줄까요?
CSS의 경우, 다양한 종류의 과일을 나타내기 위해서는 리스트 태그 `li` 가 있다고 가정해봅시다. `div > ul > li``.fruits__item` 둘 중 어떤 것이 어떤 DOM부분이 선택되었는지 잘 알려줄까요?

## HTML 시맨틱

예를 들어 HTML에서는 {{htmlelement("h1")}} 은 시맨틱 요소입니다. "이 페이지에서 최상위 제목" 인 텍스트를 감싸는 역할(또는 의미)를 나타냅니다.
예를 들어, HTML에서는 {{htmlelement("Heading_Elements", "h1")}}은 시맨틱 요소입니다. "이 페이지에서 최상위 제목" 인 텍스트를 감싸는 역할(또는 의미)를 나타냅니다.

```html
<h1>This is a top level heading</h1>
<h1>이것은 최상위 제목입니다</h1>
```

기본적으로 대부분의 브라우저의 [사용자 에이전트 스타일시트](/ko/docs/Web/CSS/Cascade#User-agent_stylesheets) {{htmlelement("h1")}} 가 제목(heading) 처럼 _보이도록_ 큰사이즈 폰트로 스타일을 만듭니다(당신이 원하는 대로 스타일을 바꿀 수도 있지만요).
기본적으로, 대부분의 브라우저의 [사용자 에이전트 스타일시트](/ko/docs/Web/CSS/Cascade#User-agent_stylesheets) {{htmlelement("h1")}} 가 제목(heading) 처럼 보이도록 큰사이즈 폰트로 스타일을 만듭니다(당신이 원하는 대로 스타일을 바꿀 수도 있지만요).

반면에 모든 요소를 '최상위 제목'처럼 _보이게_ 할 수 있습니다. 다음을 고려하세요:
반면에, 모든 요소를 '최상위 제목'처럼 보이게 할 수 있습니다. 다음을 고려하세요.

```html
<span style="font-size: 32px; margin: 21px 0;"
>Is this a top level heading?</span
>
<span style="font-size: 32px; margin: 21px 0;">최상위 제목이 아닙니다!</span>
```

이렇게 하면 top level heading 처럼 보이지만 의미적 가치(semantic value)가 없으므로 위에서 설명한 것처럼 추가적인 이점은 얻을 수 없습니다. 따라서 작업에 적합한 HTML 요소를 사용하는 것이 좋습니다.
이렇게 하면 최상위 제목처럼 보이도록 렌더링되지만, 의미적 가치가 없으므로 위에서 설명한 것처럼 추가적인 이점은 얻을 수 없습니다. 따라서 작업에 적합한 HTML 요소를 사용하는 것이 좋습니다.

HTML은 채워질 *데이터*를 나타내도록 코딩해야합니다. 기본 프리젠테이션 스타일기반이 아니라요. 프레젠테이션(어떻게 보여져야만 하는가)은 [CSS](/ko/docs/Web/CSS)만의 단독 역할입니다.
HTML은 채워질 '데이터'를 나타내도록 코딩해야 합니다. 기본 프리젠테이션 스타일기반이 아닙니다. 프레젠테이션(어떻게 보여져야만 하는가)은 [CSS](/ko/docs/Web/CSS)만의 단독 역할입니다.

의미론적인 마크업을 사용하면 아래와 같은 이점이 있습니다:
의미론적인 마크업을 사용하면 아래와 같은 이점이 있습니다.

- 검색 엔진은 의미론적 마크업 을 페이지의 검색 랭킹에 영향을 줄 수 있는 중요한 키워드로 간주합니다 ({{glossary ( "SEO")}} 참조).
- 시각 장애가 있는 사용자가 화면 판독기로 페이지를 탐색할 때 의미론적 마크업을 푯말로 사용할 수 있습니다.
- 검색 엔진은 의미론적 마크업을 페이지의 검색 순위에 영향을 줄 수 있는 중요한 키워드로 간주합니다 ({{glossary("SEO")}} 참조).
- 시각 장애가 있는 사용자가 화면 판독기로 페이지를 탐색할 때 의미론적 마크업을 안내판으로 사용할 수 있습니다.
- 의미없고 클래스 이름이 붙여져있거나 그렇지 않은 끊임없는 `div` 들을 탐색하는 것보다, 의미있는 코드 블록을 찾는 것이 훨씬 쉽습니다.
- 개발자에게 태그 안에 채워질 데이터 유형을 제안합니다
- 의미있는 이름짓기(Semantic naming)는 적절한 사용자 정의 요소 / 구성 요소의 이름짓기(namimg)를 반영합니다.
- 개발자에게 태그 안에 채워질 데이터 유형을 제안합니다.
- 의미있는 이름짓기(Semantic naming)는 적절한 사용자 정의 요소 / 구성 요소의 이름짓기를 반영합니다.

사용할 마크업에 접근할 때 스스로에게 물어보세요. "내가 채울 데이터를 가장 잘 설명하고 나타내는 요소는 무엇일까?" 예를 들어, 그 데이터는 정렬된 목록입니까? 정렬되지 않은 목록입니까?, 관련된 정보가 제외된 섹션이 있는 아티클(article)입니까?, 정의의 나열입니까?, 캡션이 필요한 그림 또는 이미지입니까?, 사이트 전체 머리글(header) 및 바닥글(footer) 외에 또 다른 머리글과 바닥글이 있어야합니까? 등등
사용할 마크업에 접근할 때, "채울 데이터를 가장 잘 설명하고 나타내는 요소는 무엇일까?" 스스로에게 물어보세요. 예를 들어, 그 데이터는 정렬된 목록입니까? 정렬되지 않은 목록입니까?, 관련된 정보가 제외된 섹션이 있는 글입니까?, 정의의 나열입니까?, 캡션이 필요한 그림 또는 이미지입니까?, 사이트 전체 머리글(header) 및 바닥글(footer) 외에 또 다른 머리글과 바닥글이 있어야합니까? 등등을 들 수 있습니다.

## 의미론적 요소(element)들
## 의미론적 요소들

사용가능한 백 여개 정도의 요소([elements](/ko/docs/Web/HTML/Element))들이 있습니다.
사용가능한 100개 정도의 의미론적 [요소](/ko/docs/Web/HTML/Element)들이 있습니다.

- {{htmlelement("article")}}
- {{htmlelement("aside")}}
- {{htmlelement("details")}}
- {{htmlelement("figcaption")}}
- {{htmlelement("figure")}}
- {{htmlelement("footer")}}
- {{htmlelement("form")}}
- {{htmlelement("header")}}
- {{htmlelement("main")}}
- {{htmlelement("mark")}}
Expand All @@ -63,8 +66,11 @@ HTML은 채워질 *데이터*를 나타내도록 코딩해야합니다. 기본
- {{htmlelement("summary")}}
- {{htmlelement("time")}}

## Learn more
## 같이 보기

- MDN의 [HTML 요소 참조](/ko/docs/Web/HTML/Element#Inline_text_semantics)
- MDN의 [HTML 구역과 윤곽선 사용하기](/ko/docs/Web/HTML/Element/Heading_Elements#usage_notes)
- 위키백과의 [컴퓨터 과학에서 시맨틱의 의미](https://en.wikipedia.org/wiki/Semantics#Computer_science) on Wikipedia
- [용어 사전](/ko/docs/Glossary)

- [HTML element reference](/ko/docs/Web/HTML/Element#Inline_text_semantics) on MDN
- [Using HTML sections and outlines](/ko/docs/Web/Guide/HTML/Using_HTML_sections_and_outlines#Problems_solved_by_HTML5) on MDN
- [Semantics](<https://en.wikipedia.org/wiki/Semantics_(computer_science)>) on Wikipedia
- {{Glossary("SEO")}}
Loading

0 comments on commit 1508c81

Please sign in to comment.