recursal/MDN huggingface dataset:
API
===

API(Application Programming Interface)는 소프트웨어 프로그램(애플리케이션) 내부에 존재하는 기능 및 규칙의 집합입니다. API는 Human User Interface와 달리 소프트웨어를 통해 상호작용할 수 있습니다. 즉, API는 API를 제공하는 애플리케이션과 서드파티 소프트웨어 및 하드웨어 등의 것들 사이의 간단한 계약(인터페이스)이라고도 볼 수 있습니다.

웹 개발에서 보통 API는 개발자가 앱을 통해 사용자의 웹 브라우저에서 상호작용할 수 있도록 하는 코드 기능들( e.g. methods, properties, 이벤트, URLs), 사용자의 컴퓨터 상에 있는 다른 소프트웨어 및 하드웨어, 또는 서드파티 웹사이트나 서비스의 집합을 의미합니다.

예를 들면 다음과 같습니다.

* getUserMedia (en-US) API는 사용자의 웹캠으로부터 오디오나 비디오를 감지하고, 이를 개발자가 원하는대로 사용할 수 있게끔 하는 API 입니다. 예를 들면, 비디오 및 오디오 녹음하기, 컨퍼런스 콜에서 다른 유저들에게 방송하기, 비디오에서 스틸 이미지 캡쳐하기 등을 할 수 있습니다.
* Geolocation API는 사용자의 디바이스에서 위치 정보를 제공할 수 있는 모든 종류의 서비스로부터 위치 정보를 반환합니다. 이는 Google Maps API와 결합하여 사용자의 정보를 커스텀 지도에서 나타내거나, 현재 위치 근처에 어떤 관광 명소가 있는지를 보여주는 등에 사용될 수 있습니다.
* Twitter API는 가장 최근 트윗을 웹 페이지에서 보여주는 등, 사용자의 트위터 계정에서 정보를 반환하는 데에 쓸 수 있습니다.
* Web Animations API는 예를 들어 이미지를 프로그래밍을 통해 여기저기 움직이거나 회전시키는 등, 웹 페이지 일부를 움직이도록 하는 데에 쓸 수 있습니다.
같이 보기
-----

* Web API reference
* 위키피디아 API 항목
Block
=====

**블록** 이라는 용어는 문맥에 따라서 여러가지 의미를 가질 수 있습니다. 아래를 참조하세요.

Block (scripting)
JavaScript에서, 블록문은 중괄호("{}")로 묶인 statement문의 집합입니다. 예를 들어, `Statements/if...else` 블록 뒤에 블록으로 감싼 실행 코드들을 배치하여, 인터프리터가 조건이 참이면, 블록 안에서 코드를 실행해야 함을 나타낼 수 있습니다. 조건이 거짓이면 전체 블록을 건너뜁니다.
블록 (CSS)
웹페이지의 **블록**은 HTML element로 새 줄에 표시됩니다. 즉, 가로 쓰기 모드에 속한 선행 요소 아래나 ("블록 수준 요소"로 통용되는) 후속 요소 위에 표시됩니다. 예를 들면, `p`는 기본적으로 블록 수준 요소지만, `a`는 "인라인 요소"이다. 당신의 HTML 소스에서 여러 링크를 상대 요소 옆에 위치시킬 수 있고, 그것들을 렌더링 된 출력 형태로 상대 요소와 동일 선상에 놓는다.
네이티브 (Native)
=============

네이티브(native) 애플리케이션은 대상 아키턱처를 구성하는 하드웨어/소프트웨어 환경에서 실행되도록 컴파일 되었습니다.

기본 Android 애플리케이션의 예제로는 Android 도구 체인을 사용하여 Java로 작성된 모바일 애플리케이션이 있습니다.

반면, 브라우저 내에서 실행되는 웹 애플리케이션은 네이티브가 아닙니다. 네이티브 환경 자체가 아닌, 네이티브 환경 위에 있는 웹 브라우저에서 실행됩니다.

같이 보기
-----

* 위키백과의 네이티브 (컴퓨팅)
Descriptor (CSS)
================

**CSS 설명자**(**descriptor**)는 @규칙의 특성을 정의합니다. `@규칙`에는 하나 이상의 설명자가 있을 수 있습니다. 각각의 설명자는 다음을 갖고 있습니다.

* 이름
* 컴포넌트값을 보유하는 값
* 기본 상태에서 설정되지 않은(unset) "!important" 플래그
인스턴스 (Instance)
===============

생성자에 의해 생성된 객체는 해당 생성자의 인스턴스입니다.

같이 보기
-----

* 위키백과의 인스턴스
XQuery
======

**XQuery** 는 XML 데이터베이스의 데이터를 갱신, 검색 및 계산하기 위한 컴퓨터 언어입니다.

같이 보기
-----

* 공식 웹사이트
* 위키백과의 XQuery
ALPN
====

**애플리케이션 계층 프로토콜 협상** (**ALPN**)은 암호화된 연결을 협상하는 애플리케이션 계층 프로토콜을 식별하기 위한 TLS 확장 입니다(RFC 7301).

| 프로토콜 | 인증 시퀀스 |
| --- | --- |
| HTTP/1.1 | `0x68 0x74 0x74 0x70 0x2F 0x31 0x2E 0x31` ("http/1.1") |
| HTTP/2 | `0x68 0x32` ("h2") |
| 일반 텍스트를 통한 HTTP/2 TCP | `0x68 0x32 0x63` ("h2c") |
| HTTP/3 | `0x68 0x33` ("h3") |

See also
--------

* 성능 리소스 타이밍 `nextHopProtocol` (en-US) property
* PerformanceObserver API (en-US)
* IANA 등록 ALPN 식별자
도메인 이름
======

**도메인 이름**은 인터넷 웹 사이트의 주소로, URL에서 특정 웹 페이지가 속하는 서버를 식별할 때 사용합니다. 도메인 이름은 마침표(점)로 구분한 계층적인 이름(레이블)의 연속으로 구성되며, 확장으로 끝납니다.

같이 보기
-----

* 위키피디아의 도메인 네임
* 도메인 네임 이해하기 (en-US)
VoIP
====

인터넷 프로토콜을 통한 음성(Voice over Internet Protocol, VoIP)은 인터넷 프로토콜(Internet Protocol, IP) 네트워크를 통해 음성 메시지를 전송하는 데 사용되는 기술입니다. 일반적인 VoIP 패키지에는 Skype, MSN Messenger, Yahoo 등이 포함됩니다. VoIP를 통해 전송되는 모든 것은 디지털입니다. IP 전화통신 또는 광대역 전화통신이라고도 합니다. VoIP 기술을 사용하는 가장 큰 이유는 비용 때문입니다.

VoIP를 사용하면 컴퓨터, 특수 VoIP 전화 또는 특수 어댑터에 연결된 일반 전화기에서 직접 전화를 걸 수 있습니다. VoIP를 위해서는 고속 인터넷 연결이 필요합니다. 일반적으로, 인터넷을 통한 전화 통화에는 사용자가 인터넷 접근에 대해서만 금액 지불 이외의 추가 비용이 발생하지 않습니다. 이 방식으로 사용자가 인터넷을 통해 개별 이메일을 보내는 데 비용을 지불하지 않는 것과 거의 같습니다.

같이 보기
-----

* 위키백과의 VoIP
호출 스택
=====

**호출 스택**은 여러 함수들(functions)을 호출하는 스크립트에서 해당 위치를 추적하는 인터프리터 (웹 브라우저의 JavaScript 인터프리터같은)를 위한 메커니즘입니다. 현재 어떤 함수가 실행중인지, 그 함수 내에서 어떤 함수가 호출되어야 하는지, 등을 제어합니다.

* 스크립트가 함수를 호출하면, 인터프리터는 이를 호출 스택에 추가한 다음 함수를 실행하기 시작합니다.
* 해당 함수에 의해 호출되는 모든 함수는 호출 스택에 추가되고 호출이 도달하는 위치에서 실행합니다.
* 현재 함수가 끝나면, 인터프리터는 스택을 제거하고 호출 스택 마지막 코드 목록에서 중단된 실행을 다시 시작합니다.
* 스택이 할당된 공간보다 많은 공간을 차지하면, "stack overflow" 에러가 발생합니다.
예제
--


```js
function greeting() {
  // [1] 일부 코드가 들어갑니다.
  sayHi();
  // [2] 일부 코드가 들어갑니다.
}
function sayHi() {
  return "Hi!";
}

// `greeting` 함수를 호출합니다.
greeting();

// [3] 일부 코드가 들어갑니다.
```


위 코드는 다음과 같이 실행될 것입니다.

1. `greeting()` 함수에 도달할 때까지, 모든 함수를 무시합니다.
2. `greeting()` 함수를 호출 스택 리스트에 추가합니다.


**참고:** 호출 스택 리스트:
 - greeting
3. `greeting` 함수 내부의 모든 코드를 실행합니다.
4. `sayHi()` 함수를 호출합니다.
5. `sayHi()` 함수를 호출 스택 리스트에 추가합니다.


**참고:** 호출 스택 리스트:
 - sayHi
 - greeting
6. `sayHi()` 함수의 끝에 도달할 때까지, 함수 내부의 모든 코드를 실행합니다.
7. `sayHi()` 가 호출된 라인으로 돌아와 `greeting()` 함수의 나머지를 계속 실행합니다.
8. 호출 스택 리스트에서 `sayHi()` 함수를 제거합니다.


**참고:** 호출 스택 리스트:
 - greeting
9. `greeting()` 함수 내부의 모든 코드가 실행되었을 때, 이를 호출한 라인으로 돌아와 JS 코드의 나머지를 계속 실행합니다.
10. 호출 스택 리스트에서 `greeting()` 함수를 제거합니다.

**참고:** 호출 스택 리스트:
 EMPTY


요약하면, 우리는 빈 호출 스택으로 시작하였습니다. 함수를 호출할 때마다 자동으로 호출 스택에 추가되고, 해당 코드가 모두 실행된 후, 호출 스택에서 자동으로 제거됩니다. 결국, 마찬가지로 빈 호출 스택으로 끝납니다.

같이 보기
-----

* 위키피디아의 콜 스택
* 용어 사전
    + Call stack
    + Function
프레임 속도 (Frame rate, FPS)
========================

\*\*프레임 속도(FPS)\*\*는 브라우저가 콘텐츠를 다시 계산하고, 레이아웃을 설정하고 디스플레이에 그릴 수 있는 속도입니다. \*\*초당 프레임 수(frames per second, fps)\*\*는 1초에 다시 칠할 수 있는 프레임 수입니다. 웹사이트 컴퓨터 그래픽의 목표 프레임 속도는 60fps입니다.

일반적으로 영화의 프레임 속도는 24fps입니다. 모션 블러(연속적인 이미지가 겹쳐 보여, 영상 끌림이 보이는 현상)를 통해 물체의 환상이 만들어지기 때문애 초당 프레임 수를 줄일 수 있습니다. 모션 블러를 사용하여 이미지 스프라이트에 애니메이션을 적용하지 않는 경우를 제외하면, 컴퓨터 화면에서는 움직일 때 모션 블러가 없습니다.

같이 보기
-----

* 위키백과의 프레임 속도
* 용어 사전의 FPS
ICANN
=====

\*\*국제 인터넷 주소 관리 기구(Internet Corporation for Assigned Names and Numbers, ICANN)\*\*는 도메인 이름 시스템 및 IP 주소의 기록을 유지 관리하는 국제 비영리 단체입니다.

같이 보기
-----

* 공식 웹사이트
* 위키백과의 ICANN
노드 (Node)
=========

**노드(node)** 라는 용어는 상황에 따라 여러 가지 의미를 가질 수 있습니다. 다음을 참조할 수 있습니다.

노드 (DOM)
DOM 맥락에서는, **노드(node)** 는 노드 트리의 단일 지점입니다. 노드가 되는 요소는 문서 자체, 요소, 텍스트, 주석 등입니다.
노드 (networking)
네트워크에서, **노드** 는 네트워크의 연결 지점입니다. 물리적 네트워크에서 노드는 일반적으로 컴퓨터나 라우터와 같은 장치입니다.

이 단어의 또 다른 용도는 Node.js에 대해 이야기할 때입니다.
Adobe Flash
===========

Flash는 표현력이 풍부한 웹 애플리케이션, 멀티미디어 콘텐츠, 스트리밍 미디어를 보기 위해 Adobe에서 개발한 오래된 기술입니다.

2021년부터, Flash는 더 이상 Adobe 또는 주요 웹 브라우저에서 지원되지 않습니다.

같이 보기
-----

* Adobe Flash 수명 종료 발표
* Chrome의 Flash에 작별 인사하기
* Flash 수명 종료에 대한 Firefox 로드맵
* Microsoft Windows Flash Player 제거
SQL 인젝션 (SQL Injection)
=======================

SQL 주입은 사용자 입력의 유효성을 검사하지 못하는 웹 앱을 활용합니다. 해커는 백엔드 데이터베이스에서 실행하기 위해 웹앱을 통해 SQL 명령을 악의적으로 전달할 수 있습니다.

SQL 주입은 데이터베이스에 대한 무단 접근을 얻거나 데이터베이스에서 직접 정보를 검색할 수 있습니다. 많은 데이터 침해는 SQL 주입으로 인해 발생합니다.

![가장 일반적인 취약점의 원형 차트: SQL 주입은 취약점의 50%를 담당하고, 크로스 사이트 스크립팅은 취약점의 42%를 담당하고, 소스 코드 공개는 취약점의 7%를 담당합니다](/ko/docs/Glossary/SQL_Injection/sql_inj_xss.gif)

작동 방식
-----

![사용자 이름 및 비밀번호 필드가 포함된 로그인 양식의 스크린샷](/ko/docs/Glossary/SQL_Injection/updates_loginscreen.png)

사용자 이름과 비밀번호를 입력한 후 GUI 뒤에서 SQL 쿼리는 아래와 같이 작동합니다.


```sql
"SELECT Count(\*) FROM Users WHERE Username=' " + txt.User.Text+" ' AND Password=' "+ txt.Password.Text+" ' ";
```


이제 사용자가 사용자 이름을 admin, 비밀번호를 passwd123을 입력한다고 가정하고, 로그인 버튼을 클릭하면 SQL 쿼리가 아래와 같이 실행됩니다.


```sql
"SELECT Count(\*) FROM Users WHERE Username=' admin ' AND Password=' passwd123 ' ";
```


자격 증명이 정확하면, 사용자의 로그인이 허용되므로, 매우 간단한(따라서 안전하지 않은) 메커니즘입니다. 해커는 이러한 불안정성을 이용하여 무단 접근을 얻습니다.

해커는 Magical String이라는 간단한 문자열을 사용합니다. 예를 들면, 아래와 같습니다.

**사용자 이름: *admin***

**비밀번호: *anything 'or'1'='1***

로그인 버튼을 클릭하면, SQL 쿼리가 아래와 같이 작동합니다.


```sql
"SELECT Count(\*) FROM Users WHERE Username=' admin ' AND Password=' anything 'or'1'='1 ' ";
```


위 쿼리의 비밀번호 섹션을 자세히 살펴보세요.
```

Password=' anything 'or'1'='1 '
```


비밀번호는 'anything'이 아니므로, password=anything의 결과도 거짓(FALSE)이지만, '1'='1'은 참(TRUE) 문이므로 TRUE 값을 반환합니다. 마지막으로, OR 연산자로 인해, 값(FALSE 또는 TRUE)이 TRUE이므로, 인증 우회에 성공합니다. 단순한 문자열(Magical String) 때문에 전체 데이터베이스가 손상되었습니다.

예방 방법
-----

사용자 자격 증명에 대한 쿼리를 실행하기 전에, 아래와 같이 몇 가지 사항을 변경합니다.


```sql
$id = $_GET['id']

(1) $id = Stripslashes($id)

(2) $id = mysql_real_escape_String($id)
```


따라서 (1)로 인해 입력 문자열의 각 작은 따옴표(')가 큰따옴표(")로 바뀌고, (2)로 인해 모든 작은 따옴표(') 앞에 (/)가 추가됩니다. 수정된 Magical String은 인증을 우회하지 못하며, 데이터베이스는 안전하게 유지됩니다.

같이 보기
-----

* 위키백과의 SQL 인젝션
* OWASP (Open Web Application Security Project)의 SQL 인젝션에 대한 설명
시각적 뷰포트 (Visual Viewport)
=========================

현재 표시되는 뷰포트 부분을 시각적 뷰포트라고 합니다. 이는 사용자가 두 손가락으로 줌 설정(pinched-zoomed)한 경우와 같이 레이아웃 뷰포트보다 작을 수 있습니다. 시각적 뷰포트는 화면 키보드, 핀치 줌 영역 외부 영역 또는 페이지 크기에 따라 확장되지 않는 기타 화면 아티팩트를 제외한 화면의 시각적 부분입니다.

같이 보기
-----

* 시각적 뷰포트 API (en-US)
* 뷰포트 on Wikipedia
* 두 가지 뷰포트 이야기 (Quirksmode)
* MDN 용어사전의 뷰포트
* MDN 용어사전의 레이아웃 뷰포트
유럽 컴퓨터 제조업 협회 (European Computer Manufacturers Association, ECMA)
=================================================================

\*\*유럽 컴퓨터 제조업 협회 (European Computer Manufacturers Association, ECMA)\*\*는 컴퓨터 하드웨어, 통신 및 프로그래밍 언어의 표준을 개발하는 비영리 조직입니다.

웹에서는 JavaScript 언어의 핵심 명세인 ECMA-262 명세서 (aka. ECMAScript)를 관리하는 기관으로 유명합니다.

같이 보기
-----

* 위키백과의 Ecma 인터내셔널
* Ecma 인터내셔널 웹사이트
스모크 테스트 (Smoke Test)
====================

스모크 테스트는 중요한 소프트웨어 기능에 대한 기능 테스트 또는 단위 테스트로 구성됩니다. 스모크 테스트는 심층적인 추가 테스트보다 먼저 수행됩니다.

스모크 테스트는 아래와 같은 질문에 대답합니다.

* 프로그램이 제대로 시작되나요?
* 메인 컨트롤 버튼이 작동하나요?
* 단순한 비어있는 새 테스트 사용자 계정을 저장할 수 있나요?

이러한 기본 기능이 실패하면, 이 단계에서 더 자세한 QA 작업에 시간을 투자할 이유가 없습니다.

같이 보기
-----

* 위키백과의 스모크 테스팅 (소프트웨어)
사이트 맵 (Site map)
================

**사이트 맵(site map 또는 sitemap)** 은 웹사이트 페이지 목록입니다.

사이트 페이지의 구조화된 목록은 검색 엔진과 같은 웹 크롤러가 따라가야 할 링크를 제공하여 검색 엔진 최적화에 도움이 됩니다. 또한 사이트 맵은 사이트 콘텐츠의 개요를 한 눈에 제공하여 사용자의 사이트 탐색을 도와줍니다.
Crawler
=======

웹 크롤러(web crawler)는 웹 페이지에서 데이터를 수집하기 위해 Web을 체계적으로 탐색하는 프로그램입니다. 웹 크롤러는 종종 봇 또는 로봇이라고 합니다. 일반적으로 검색 엔진(예: Google, Bing 등)은 크롤러를 사용하여 인덱스를 구축합니다.

같이 보기
-----

* 위키피디아의 웹 크롤러
* Search engine (용어 사전)
Glyph
=====

\*\*글리프(Glyph)\*\*는 하나 이상의 문자를 시각적으로 표현하기 위해 타이포그래피에서 사용되는 용어입니다.

웹 사이트에서 사용되는 글꼴에는 글꼴의 문자를 나타내는 다양한 글리프 모음이 포함되어 있습니다.

같이 보기
-----

* 위키백과의 글리프
* Quora의 글리프, 문자 및 문자소
첫 사용에 대한 신뢰 (Trust On First Use, TOFU)
======================================

**첫 사용에 대한 신뢰 (Trust On First Use, TOFU)** 는 클라이언트가 알 수 없는 서버와 신뢰 관계를 생성해야 하는 보안 모델입니다. 이를 위해, 클라이언트는 로컬에 저장된 식별자(예, 공개 키)를 찾습니다. 식별자가 발견되면, 클라이언트는 연결을 설정할 수 있습니다. 식별자가 발견되지 않으면, 클라이언트는 사용자에게 클라이언트가 식별자를 신뢰해야 하는지 결정하라는 메시지를 표시할 수 있습니다.

TOFU는 브라우저가 리디렉션 규칙을 따르는 `Strict-Transport-Security` (HSTS)의 SSH 프로토콜에서 사용됩니다.

같이 보기
-----

* 위키백과의 TOFU
가상 클래스 (Pseudo-class)
=====================

CSS에서, **가상 클래스(pseudo-class)** 선택자는 문서 트리의 정보가 아닌 상태에 따라 요소를 대상으로 합니다. 예를 들어, `a``:visited` 선택자는 사용자가 이미 방문한 링크에만 스타일을 적용합니다.

같이 보기
-----

* 가상 클래스 문서
WCAG
====

**웹 콘텐츠 접근성 지침(Web Content Accessibility Guidelines, WCAG)** 는 W3C의 웹 접근성 표준 그룹에서 게시한 권장 사항입니다. WCAG는 주로 장애가 있는 사용자뿐만 아니라 휴대폰과 같이 리소스가 제한된 장치에서도 콘텐츠에 접근할 수 있도록 하기 위한 일련의 지침을 간략히 설명합니다.

WCAG 1.0을 대체하는 WCAG 2.0은 2008년 12월 11일 W3C 권장 사항으로 게시되었습니다. WCAG 2.0은 4가지 원칙(인식 가능, 실행 가능, 이해 가능 및 견고함)으로 구성된 12가지 지침으로 이루어져 있고, 각 지침에는 테스트 가능한 성공 기준이 존재합니다.

WCAG 세 가지 수준의 적합성을 사용합니다.

* 우선순위 1: 웹 개발자는 **반드시** 이러한 요구사항을 충족해야 합니다. 그렇지 않으면 하나 이상의 그룹이 웹 콘텐츠에 접근하는 것이 불가능합니다. 이 수준에 대한 적합성은 A입니다.
* 우선순위 2: 웹 개발자는 이러한 요구사항을 **충족해야** 합니다. 그렇지 않으면 일부 그룹에서는 웹 콘텐츠에 접근하기 어려울 것입니다. 이 수준에 대한 적합성은 AA 또는 Double-A가 됩니다.
* 우선순위 3: 일부 그룹이 웹 콘텐츠에 더 쉽게 접근할 수 있도록, 웹 개발자는 이러한 요구 사항을 **충족**할 수 있습니다. 이 수준에 대한 적합성은 AAA 또는 Triple-A로 설명됩니다.

WCAG 2.2 및 WCAG 3.0에 대한 작업이 진행 중에 있습니다.

같이 보기
-----

* 위키백과의 WCAG
* MDN의 접근성 정보 (en-US)
* W3C의 The WCAG 2.0 권고안
* 웹 콘텐츠 접근성 지침 2.2: 후보 권고안
* 웹 콘텐츠 접근성 지침 3.0: 초안
전송 계층 보안 (TLS)
==============

이전에 Secure Sockets Layer (SSL)로 알려진 **Transport Layer Security** (**TLS**)는 어플리케이션들이 네트워크 상에서 안전하게 통신하기 위해 사용된 프로토콜이며, 이메일, 웹 브라우징, 메시징, 그리고 다른 프로토콜들의 감청을 통한 정보의 변형을 방지합니다. SSL과 TLS 모두 네트워크 상에서 보안을 제공하는 암호화 프로토콜을 사용해 네트워크에 보안을 제공함으로써 통신 개인정보 보호를 보장하는 클라이언트 / 서버 프로토콜입니다. 서버와 클라이언트가 TLS로 통신을 할때, 어떠한 제 3자도 메시지를 변형시키거나 감청할 수 없도록 합니다.

모든 최신 브라우저들은 안전한 연결을 하기 위해서 서버가 자신의 신원을 확인하는 유효한 디지털 인증서를 제공하도록 요구하는 TLS 프로토콜을 지원합니다. 클라이언트와 서버 둘 다 각자 개별 디지털 인증서를 제공하면, 서로를 상호 인증해줄 수 있습니다.

**참고:** TLS 1.0 와 1.1은 2020년 초부터 대부분의 브라우저에서 지원하지 않을 예정입니다. 웹 브라우저가 TLS 1.2 나 TLS 1.3을 지원하는지 확인해보는 것이 좋습니다. Firefox는 버전 74 이후로 구 TLS 버전을 사용해서 서버에 연결을 시도할 경우 보안 연결 실패 오류를 반환합니다(Firefox bug 1606734).

같이 보기
-----

* 위키백과의 전송 계층 보안
* RFC 8446 (The Transport Layer Security Protocol, Version 1.3)
* RFC 5246 (The Transport Layer Security Protocol, Version 1.2)
* 전송 계층 보안
* OWASP: Transport Layer Protection Cheat Sheet
* 용어 사전
    + HTTPS
    + SSL
버퍼 (Buffer)
===========

버퍼(Buffer)는 데이터가 한 곳에서 다른 곳으로 전송되는 동안 데이터를 임시로 저장하는 데 사용되는 물리적 메모리의 저장소입니다.

같이 보기
-----

* 위키백과의 데이터 버퍼
프로토콜
====

**프로토콜**은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.

같이 보기
-----

* 위키백과 통신 프로토콜
* RFC 공식 인터넷 프로토콜 표준
* HTTP 개요
* 용어사전:
    + TCP
    + Packet
비표준 (Non-normative)
===================

소프트웨어 명세는 종종 독자가 명세서를 더 잘 이해하도록 도와주거나, 예제와 모범 사례를 보여주기 위해 제공되는 **비표준(non-normative)** 또는 '정보성'으로 표시된 정보가 포함되는 경우가 많습니다. 명세서의 비표준 부분은 지침으로 제공되며, 공식 명세서의 일부로 간주되지 않습니다. 명세서의 공식 부분을 포함하는 섹션은 종종 표준으로 표시됩니다.

같이 보기
-----

* WHATWG 위키의 표준 콘텐츠 및 정보성 콘텐츠에 대한 설명
암호문 (Ciphertext)
================

암호학에서, 암호문은 정보를 전달하는 섞여있는 메시지이지만, 맞는 암호 및 비밀(보통 키)을 통해 복호화하여 평문으로 복구하지 않으면 읽을 수 없습니다. 암호문의 보안, 즉 포함된 정보의 안전성은 보안 암호 사용 및 키 비밀 유지에 달려있습니다.

같이 보기
-----

* 위키백과의 암호문
URN
===

통합 자원 이름(Uniform Resource Name, URN)은 위치나 존재 여부를 지정하지 않고, 리소스를 참조하는 표준 형식의 URI입니다. 다음 예제는 RFC3986에서 가져왔습니다. `urn:oasis:names:specification:docbook:dtd:xml:4.1.2`

같이 보기
-----

* 위키백과의 URN
표현 헤더 (Representation header)
=============================

**표현 헤더 (representation header)** 는 HTTP 메시지 본문으로 전송된 리소스의 특정 '표현'을 설명하는 HTTP 헤더입니다.

 표현은 특정 리소스의 다양한 형태입니다.
 예를 들어, 동일한 데이터가 XML 또는 JSON과 같은 특정 미디어 타입으로 형식화되거나, 작성된 언어 또는 지리적 지역으로 지역화되거나, 전송을 위해 압축되거나 인코딩될 수 있습니다.
 기본 리소스는 각 경우에 동일하지만, 표현은 다릅니다.

클라이언트는 콘텐츠 협상(content negotiation) (`Accept-*` 헤더 사용) 중에 전송되기를 선호하는 형식을 지정하고, 표현 헤더는 실제로 수신한 '선택된 표현'의 형식을 클라이언트에게 알려줍니다.

표현 헤더는 HTTP 요청과 응답 메시지 모두에 존재할 수 있습니다. `HEAD` 요청에 대한 응답으로 전송되면, 리소스가 실제로 요청된 경우 '선택될' 본문 컨텐츠를 설명합니다.

표현 헤더는 `Content-Type`, `Content-Encoding`, `Content-Language` 및 `Content-Location`를 포함합니다.

같이 보기
-----

* RFC 9110, section 3.2: Representations
* 모든 HTTP 헤더의 목록
* Payload header
* Entity header
* `Digest` (en-US)/ `Want-Digest` (en-US)
MIME type
=========

과거에는 **MIME type**으로 불렸지만 지금은 "media type"으로 사용한다. 때때로는 "content type"이라고도 불리기도 한다. **MIME type**은 파일의 형식을 나타내는 문자열로 파일과 같이 송신되는데 content의 형식을 나타내기 위해 사용한다. 예를 들면 오디오 파일은 audio/ogg로 그림 파일은 image/png로 분류할 수 있다.

윈도우에서 사용하는 파일 확장자와 동일한 역할을 한다. **MIME type**이라는 명칭은 이메일에서 사용된 MIME standard에서 유래 됐다.

Learn more
----------

### General knowledge

* 미디어 타입 on Wikipedia
### 기술적인 참고

* MIME type의 종류
* 서버 MIME Type을 적절하게 설정하는 방법 (en-US)
* Web context에서 MIME Types을 사용하기 위한 자세한 방법
응답 헤더
=====

**응답 헤더**는 HTTP 응답에서 사용될 수 있는 HTTP 헤더이며, 메시지의 컨텐츠와는 관련이 없습니다. `Age`, `Location` (en-US) 또는 `Server`와 같은 응답 헤더는 더 상세한 응답의 컨텍스트를 제공하기 위해 사용됩니다.

응답에 나타나는 모든 헤더가 "응답 헤더"인것은 아닙니다. 예를 들어, `Content-Type` 헤더는 응답 메시지 본문(`Content-Encoding` 표현 헤더의 인코딩이 적용되기 전)의 원래 데이터 유형을 나타내는 representation header입니다. 그러나, "대화적으로" 모든 헤더는 일반적으로 응답 메시지에서 응답 헤더로 참조됩니다.

다음은 `GET` 요청 이후의 몇 가지 응답 헤더를 보여줍니다.


```http
200 OK
Access-Control-Allow-Origin: \*
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Mon, 18 Jul 2016 16:06:00 GMT
Etag: "c561c68d0ba92bbeb8b0f612a9199f722e3a621a"
Keep-Alive: timeout=5, max=997
Last-Modified: Mon, 18 Jul 2016 02:36:04 GMT
Server: Apache
Set-Cookie: mykey=myvalue; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; secure
Transfer-Encoding: chunked
Vary: Cookie, Accept-Encoding
X-Backend-Server: developer2.webapp.scl3.mozilla.com
X-Cache-Info: not cacheable; meta data too large
X-kuma-revision: 1085259
x-frame-options: DENY
```

같이 보기
-----

* 모든 HTTP 헤더 목록
* 용어 사전
    + Representation header
    + HTTP header
    + Response header
    + Fetch metadata response header
    + Request header
코드 경량화 (Minification)
=====================

**코드 경량화(Minification)** 는 브라우저에서 리소스를 처리하는 방식에 영향을 주지 않고 불필요하거나 중복되는 데이터를 제거하는 프로세스입니다.

코드 경량화에는 코드 주석, 공백, 사용되지 않는 코드 제거는 물론 변수 및 함수 이름 줄이는 것도 포함될 수 있습니다. 코드 경량화는 파일 크기를 줄여 웹 성능을 향상시키는 데 사용됩니다. 코드 경량화는 일반적으로 빌드 시 발생하는 자동화된 단계입니다.

코드 경량화로 인해 코드를 사람이 읽기가 어려워지므로, 개발자 도구에는 코드에 공백을 다시 추가하는 방식으로 좀 더 읽기 쉽게 만들어주는 '코드 정리(prettification)' 기능이 있습니다.
유효성 검사기 (Validator)
===================

유효성 검사기(validator)는 코드의 구문 오류를 검사하는 프로그램입니다. 유효성 검사기는 모든 형식이나 언어에 대해 생성될 수 있지만, 이 문서에서는 HTML, CSS 및 XML을 확인하는 도구에 대해 얘기합니다.

같이 보기
-----

* 위키백과의 유효성 검사기
* 유효성 검사기의 간단한 목록
손실 압축 (Lossy compression)
=========================

**손실 압축 (Lossy compression)** 또는 되돌릴 수 없는 압축은 콘텐츠를 표현하기 위해 부정확한 근사치와 부분 데이터 삭제를 사용하는 데이터 압축 방법입니다. 간단히 말하면, 손실 압축으로 인해 초기 파일의 데이터가 손실되어 품질이 저하될 수 있습니다. 이러한 압축은 되돌릴 수 없으며, 콘텐츠의 손실 압축이 수행되면 콘텐츠를 원래 상태로 복원할 수 없습니다.

따라서, 손실 압축을 거친 콘텐츠는 일반적으로 더 이상 편집해서는 안 됩니다.

손실 압축은 이미지 포맷에 널리 사용됩니다.

![손실 압축 이미지](/ko/docs/Glossary/Lossy_compression/2019-11-18.png)

위의 두 이미지 간에는 뚜렷한 품질 차이가 없지만, 손실 압축을 사용하여 두 번째 이미지의 크기가 크게 줄었습니다.

같이 보기
-----

* 무손실 압축
브라우징 맥락
=======

**브라우징 맥락**은 브라우저가 `Document`를 표시하는 환경을 말합니다. 오늘날에는 보통 탭이지만, 브라우저 창이나 페이지 내의 프레임도 가능합니다.

각 브라우징 맥락은 특정 출처, 활성화된 문서의 출처, 그리고 표시했던 모든 문서의 방문 기록을 가집니다.

브라우징 맥락 간 통신은 엄격히 제한됩니다. 같은 출처를 가진 브라우징 맥락끼리는 `BroadcastChannel`을 열어 사용할 수 있습니다.

같이 보기
-----

* origin 보기
플렉스 항목
======

플렉스 컨테이너(`display: flex` 또는 `display: inline-flex`를 지정한 요소)의 바로 아래 자식은 **플렉스 항목**이 됩니다.

플렉스 컨테이너 내의 텍스트 역시 플렉스 항목입니다.

같이 보기
-----

### 속성 참고서

* `align-self` (en-US)
* `flex-basis`
* `flex-grow`
* `flex-shrink`
* `order`
### 더 읽어보기

* CSS Flexbox Guide: Flexbox의 기본 개념
* CSS Flexbox Guide: flex items 순서 배열 (en-US)
* CSS Flexbox Guide: 주축을 따라 플렉스 항목의 비율 제어하기 (en-US)
해시 (Hash)
=========

해시 함수는 가변 길이 메시지 입력을 받아 고정 길이 해시 출력을 생성합니다. 일반적으로 128비트 "지문" 또는 "메시지 다이제스트" 형식입니다. 해시는 암호학에 매우 유용합니다. 해시는 전송된 데이터의 무결성을 보장하고, 메시지 인증을 가능하게 하는 HMAC의 기반을 제공합니다.

같이 보기
-----

* 위키백과의 해시 함수
역직렬화 (Deserialization)
======================

저수준의 형식(예, 네트워크를 통해 전송되었거나 데이터 저장소에 저장된 형식)을 읽을 수 있는 객체나 기타 데이터 구조로 변환하는 프로세스입니다.

JavaScript에서, 예를 들어, JSON 문자열을 객체로 역직렬화하려면 함수 `JSON.parse()`를 호출하세요.

같이 보기
-----

* 위키백과의 직렬화
Fetch 지시어 (Fetch directive)
===========================

**CSP fetch 지시어**는 특정 리소스 유형이 로드될 수 있는 `Content-Security-Policy` (en-US) 헤더 및 제어 위치에 사용됩니다. 예를 들어, `script-src`는 개발자가 신뢰할 수 있는 스크립트 소스가 페이지에서 실행되도록 허용하는 반면, `font-src` (en-US)는 웹 글꼴 소스를 제어합니다.

모든 fetch 지시문은 `default-src`으로 대체됩니다. 즉, CSP 헤더에 fetch 지시어가 없으면 사용자 에이전트는 `default-src` 지시어를 찾습니다.

전체 목록은 Fetch 지시어 목록 (en-US)을 참고해주세요.

같이 보기
-----

* 용어 사전
    + CSP
    + Reporting directive
    + Document directive
    + Navigation directive
* 참고서
    + https://www.w3.org/TR/CSP/#directives-fetch
    + `upgrade-insecure-requests` (en-US)
    + `block-all-mixed-content` (en-US)
    + `Content-Security-Policy` (en-US)
얕은 복사
=====

객체의 **얕은 복사**는 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조 (메모리 내의 같은 값을 가리킴)를 공유하는 복사입니다. 따라서 원본이나 복사본을 변경하면, 다른 객체 또한 변경될 수 있습니다. 이러한 동작은 원본과 복사본이 완전히 독립적인 깊은 복사의 동작과 대조적입니다.

더 공식적으로, 다음과 같은 경우 두 객체 `o1`과 `o2`는 얕은 복사입니다.

1. 두 객체는 같은 객체가 아닙니다 (`o1 !== o2`).
2. `o1`과 `o2`의 속성은 같은 이름과 순서입니다.
3. 두 객체의 속성 값은 동일합니다.
4. 두 객체의 프로토타입 체인은 동일합니다.

구조상 동일한 정의 또한 참고하세요.

속성이 모두 원시 값인 객체의 복사는 깊은 복사와 얕은 복사의 정의에 모두 부합합니다. 그렇지만 중첩된 속성이 없기 때문에 이런 복사의 깊이에 대해 이야기하는 것은 다소 쓸모가 없습니다. 보통 중첩된 속성을 변경하는 맥락에서 깊은 복사하는 것에 대해 이야기합니다.

얕은 복사의 경우, 중첩된 객체의 값이 아닌 최상위 속성만 복사합니다. 그러므로,

* 복사본의 최상위 속성을 재할당해도 원본 객체에는 영향을 끼치지 않습니다.
* 복사본의 중첩 객체 속성을 재할당하면 원본 객체에 영향을 끼칩니다.

JavaScript에서, 모든 표준 내장 객체의 복사 작업(전개 구문, `Array.prototype.concat()`, `Array.prototype.slice()`, `Array.from()`, `Object.assign()`, `Object.create()`)은 깊은 복사가 아닌 얕은 복사본을 생성합니다.

`ingredientsList` 배열 객체가 생성된 다음, `ingredientsList`를 복사하여 생성된 `ingredientsListCopy` 객체가 있는 다음 예제를 살펴보세요.


```js
const ingredientsList = ["noodles", { list: ["eggs", "flour", "water"] }];

const ingredientsListCopy = Array.from(ingredientsList);
console.log(ingredientsListCopy);
// ["noodles",{"list":["eggs","flour","water"]}]
```


중첩된 속성 값을 재할당하면 두 객체 모두에서 볼 수 있습니다.


```js
ingredientsListCopy[1].list = ["rice flour", "water"];
console.log(ingredientsList[1].list);
// Array [ "rice flour", "water" ]
```


최상위 속성 값(인덱스가 `0`인 경우)을 재할당하면 변경된 객체에서만 볼 수 있습니다.


```js
ingredientsListCopy[0] = "rice noodles";
console.log(ingredientsList[0]); // noodles
console.log(JSON.stringify(ingredientsListCopy));
// ["rice noodles",{"list":["rice flour","water"]}]
console.log(JSON.stringify(ingredientsList));
// ["noodles",{"list":["rice flour","water"]}]
```

같이 보기
-----

* 깊은 복사
Bandwidth
=========

대역폭은 주어진 시간 내에 얼마나 많은 정보가 데이터 연결을 통과 할 수 있는지를 나타냅니다. 대개 초당 메가 비트 (Mbps) 또는 초당 기가비트 (Gbps)와 같이 초당 비트 수 (bps)의 배수로 측정됩니다.

Learn more
----------

* 위키피디아의 Bandwidth
OOP
===

**OOP**(객체 지향적 프로그래밍)는 데이터가 "객체" 내에 캡슐화되고 구성 요소 부분이 아닌, 객체 자체가 운용되는 프로그래밍 접근 방식입니다.

JavaScript는 매우 객체 지향적인 언어입니다. JavaScript는 클래스 구문 (en-US) 기반의 것과는 대조적으로 **프로토타입** 기반의 모델을 따릅니다.

같이 보기
-----

* 위키백과의 객체 지향 프로그래밍
* 객체 지향 JavaScript의 소개
* 상속과 프로토타입 체인
GPL
===

(GNU) GPL (General Public License)은 Free Software Foundation에서 배포하는 copyleft 무료 소프트웨어 라이선스입니다. GPL 라이선스 프로그램의 사용자들은 동일한 면허에 따라 프로그램을 재분배(수정 또는 변경되지 않음)할 경우, 사용, 소스 코드 읽기, 수정 및 변경사항 재분배할 수 있는 자유가 부여됩니다.

같이 보기
-----

* GNU 라이선스의 FAQ
* 위키피디아의 GNU GPL
* GPL License 문단
HTTPS
=====

**HTTPS** (***HyperText Transfer Protocol Secure***)는 HTTP protocol의 암호화된 버전입니다. 이것은 대개 클라이언트와 서버 간의 모든 커뮤니케이션을 암호화 하기 위하여 SSL 또는 TLS을 사용합니다. 이 보안 연결은 클라이언트가 민감한 정보를 서버와 안전하게 주고받도록 해줍니다. 예를 들면, 금융 활동 이나 온라인 쇼핑이 있을 수 있습니다.

같이 보기
-----

* 위키 피디아의 HTTPS
* HTTPS 커뮤니티 가이드로 이동
* 보안 문맥
* MDN Web Docs 용어 사전
    + HTTP
    + SSL
    + TLS
Variable
========

변수는 값을 저장하기 위해 명명된 참조입니다. 변수를 사용하면 미리 정해진 이름을 통해 예측할 수 없는 값에 접근할 수 있습니다.

같이 보기
-----

* 위키백과의 변수 (컴퓨터 과학)
* JavaScript에서의 변수 선언
* JavaScript의 `var` 선언문
참 같은 값
======

JavaScript에서, **참 같은 값**(Truthy)인 값이란 불리언을 기대하는 문맥에서 `true`로 평가되는 값입니다. 따로 거짓 같은 값으로 정의된 값이 아니면 모두 참 같은 값으로 평가됩니다(예: `false`, `0`, `-0`, `0n`, `""`, `null`, `undefined`와 `NaN` 등).

JavaScript는 불리언 문맥에서 형 변환을 사용합니다.

다음은 참 같은 값에 대한 예시입니다. JavaScript는 불리언 문맥에서 참 같은 값을 `true`로 변환하기 때문에 아래의 모든 `if` 블록을 실행합니다.


```js
if (true)
if ({})
if ([])
if (42)
if ("0")
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
```

### 논리적 AND 연산자, &&

첫 번째 피연산자가 참인 경우, 논리적 AND 연산자는 두 번째 피연산자를 반환합니다.


```js
true && "dog"
// "dog" 반환합니다.

[] && "dog"
// "dog" 반환합니다.
```

같이 보기
-----

* 거짓 같은 값
* 형변환
* 불리언
* 불리언 형변환
첫 번째 CPU 유휴 상태 (First CPU idle)
===============================

\*\*첫 번째 CPU 유휴 상태(First CPU Idle)\*\*는 페이지가 최소한으로 대화형일 때 또는 창이 사용자 입력을 처리할 수 있을 만큼 조용할 때를 측정합니다. 첫 번째 CPU 유휴 상태는 비표준 Google 웹 성능 지표입니다. 일반적으로, 이 지표는 표시되는 모든 UI 요소가 반드시 그런 것은 아니지만, 대부분이 대화형이고 사용자 인터페이스가 평균적으로 대부분의 사용자 입력에 50ms 내에 응답할 때 발생합니다. 첫 번째 대화형이라고도 합니다.
타입 (Type)
=========

**타입** 은 저장할 수 있는 데이터 종류와 데이터가 지켜야 할 구조에 영향을 미치는 값의 특성입니다. 예를 들어, 불리언 데이터 타입은 일정 시간에 `true` 또는 `false` 값만 가질 수 있는 반면, 문자열은 문자열 또는 일련의 문자를 보유할 수 있는 기능이 있습니다. 숫자는 모든 종류의 숫자 값 등을 보유할 수 있습니다.

값의 데이터 타입은 해당 값에 유효한 작업에도 영향을 미칩니다. 예를 들어, 숫자 타입의 값은 다른 숫자와 곱할 수 있지만, 문자열로는 곱할 수 없습니다. 문자열 '2'와 같이 해당 문자열에 숫자'만' 포함되어 있는 경우에도 마찬가지입니다.

타입은 또한 서로 다른 값 간의 비교에 대한 유용한 지식을 제공합니다. 구조화된 타입 간의 비교는 항상 쉬운 가정은 아닙니다. 이전 데이터 구조가 동일하더라도 프로토타입 체인 내부에 상속된 구조가 있을 수 있기 때문입니다.

값 유형을 잘 모르는 경우, `typeof` 연산자를 사용할 수 있습니다.

같이 보기
-----

* 위키백과의 데이터 타입
* JavaScript 데이터 타입
* 용어 사전
    + JavaScript
    + string
    + number
    + bigint
    + boolean
    + null
    + undefined
    + symbol
직렬화 (Serialization)
===================

객체나 데이터 구조를 네트워크나 저장소(예, 배열 버퍼 또는 파일 형식)를 통한 전송에 적합한 형식으로 변환하는 프로세스입니다.

예를 들어, JavaScript에서는 함수 `JSON.stringify()`를 호출하는 것을 통해 객체를 JSON 문자열로 직렬화할 수 있습니다.

CSS 값은 `CSSStyleDeclaration.getPropertyValue()` (en-US) 함수를 호출하여 직렬화됩니다.

같이 보기
-----

* 위키백과의 직렬화