recursal/MDN huggingface dataset:
IMAP
====

인터넷 메시지 접근 프로토콜 (Internet Message Access Protocol, IMAP)은 이메일을 검색하고 저장하는 데 사용되는 프로토콜입니다. POP보다 최신 버전인 IMAP은 서버의 폴더와 규칙을 허용합니다.

POP3와 달리, IMAP은 하나의 사서함에 여러 동시 연결을 허용합니다. 사서함에 접근하는 클라이언트는 다른 클라이언트의 상태 변경 정보를 받을 수 있습니다. IMAP은 또한 클라이언트가 연결을 유지하고 요청 시 정보를 받을 수 있는 모드를 제공합니다.

Mark Crispin은 1986년에 'Interim Mail Access Protocol'로 불리는 IMAP를 처음 개발했습니다. IMAP4 개정본 1은 RFC 3501에 정의된 최신 버전입니다.

같이 보기
-----

* RFC 3501
* POP
* 위키백과의 IMAP
유니코드
====

**유니코드**는 세계 각국의 서로 다른 언어와 쓰기 방식, 기호 등을 모아 번호를 할당하고 문자를 정의하는 표준 문자 집합입니다.

각각의 문자에 번호를 매김으로써, 프로그래머는 문자 인코딩을 제작할 수 있고, 컴퓨터는 그 인코딩을 사용해 같은 파일 또는 프로그램 내에서 어떠한 언어 조합을 사용하더라도 저장, 처리, 전송할 수 있습니다.

유니코드 이전에는, 하나의 데이터가 여러 언어를 한 번에 가지기 힘들었고, 오류에도 취약했습니다. 예를 들어, 하나의 문자 집합은 일본어, 다른 집합은 영문 알파벳을 저장할 수 있다고 했을 때, 데이터의 어디서부터 어디까지가 일본어이고 어디까지가 영문 알파벳인지 분명하게 표시해놓지 않으면 다른 프로그램이나 컴퓨터가 데이터를 잘못 표시하거나, 처리 과정에서 손상시킬 수 있었습니다. 어떤 글이 동근 따옴표(“”)와 같은 문자가 `Ã‚Â£`와 같이 말도 안되는 글자로 표시되는걸 본 적이 있다면, Mojibake라고 알려진 이 문제를 본 적이 있을 것입니다.

웹에서 제일 널리 쓰이는 유니코드 문자 인코딩은 UTF-8입니다. UTF-16이나 이제 사용하지 않는 UCS-2 등 다른 인코딩도 존재하지만, UTF-8을 추천합니다.

같이 보기
-----

* 위키백과 유니코드
* 유니코드 표준: 기술 소개
바인딩 (Binding)
=============

프로그래밍 관점에서, \*\*바인딩(Binding)\*\*은 값과 식별자 사이의 연관 관계를 의미합니다. 모든 바인딩이 변수인 것은 아닙니다. 예를 들어, 함수 매개변수 및 `catch (e)` (en-US) 코드 블록은 엄격하게 "변수"가 아닙니다. 또한, 일부 바인딩은 언어에 의해 암시적으로 생성됩니다. 예를 들어, JavaScript에서의 `this`와 `new.target`를 들 수 있습니다.

바인딩은 재할당이 가능하면 mutable이고, 그렇지 않으면 immutable입니다. 이는 그것이 보유한 값이 불변이라는 것을 의미하지는 **않습니다.**

바인딩은 종종 스코프와 연결됩니다. 일부 언어에서는 동일한 범위 내에서 바인딩 재생성(재선언이라고도 함)을 허용하지만, 다른 언어에서는 그렇지 않습니다. JavaScript에서 바인딩을 다시 선언할 수 있는지 여부는 바인딩을 만드는 데 사용된 구문에 따라 달라집니다.

같이 보기
-----

* `var`
* `let`
* `const`
* `function`
* `class`
개발자 도구 (Developer Tools)
========================

개발자 도구 (또는 "개발자 도구" 또는 줄여서 "DevTools")는 개발자가 소프트웨어를 생성, 테스트 및 디버깅할 수 있게 해주는 프로그램입니다.

현재 브라우저는 웹사이트를 검사할 수 있는 통합 개발자 도구를 제공합니다. 사용자는 페이지의 HTML, CSS 및 JavaScript를 검사하고 디버그할 수 있으며, 페이지로 인해 발생하는 네트워크 트래픽을 검사할 수 있고, 성능 등을 측정할 수 있습니다.

같이 보기
-----

* 위키백과의 웹 개발자 도구
* MDN의 Firefox 개발자 도구
* Firebug (Firefox의 이전 개발자 도구)
* chrome.com의 Chrome 개발자 도구
* apple.com의 Safari 개발자 도구
* microsoft.com의 Edge 개발자 도구
플렉스 컨테이너
========

플렉스박스 레이아웃은 부모 요소의 `display` 속성에 `flex` 또는 `inline-flex` 값을 지정해 정의합니다. 이 때, 부모 요소는 **플렉스 컨테이너**, 각각의 자식 요소를 플렉스 항목이 됩니다.

`flex` 값은 요소를 블록 레벨 플렉스 컨테이너로 지정하고, `inline-flex`는 인라인 레벨 플렉스 컨테이너로 지정합니다. 두 값은 요소에 새로운 **플렉스 서식 맥락**을 생성합니다. 플렉스 서식 맥락은 블록 서식 맥락과 유사하여 플로팅 요소가 컨테이너를 침범하지 않으며, 컨테이너의 바깥 여백이 자기 아래 플렉스 항목의 바깥 여백과 상쇄되지 않습니다.

같이 보기
-----

### 속성 참고서

* `align-content`
* `align-items` (en-US)
* `flex`
* `flex-direction`
* `flex-flow`
* `flex-wrap`
* `justify-content`
### 더 읽어보기

* CSS Flexbox Guide: Flexbox의 기본 개념
* CSS Flexbox Guide: flex container 항목 나열
* CSS Flexbox Guide: flex items 래핑 마스터하기 (en-US)
* Firefox Developer Tools > How to: CSS Flexbox 검사기: Flexbox 레이아웃 검사
Hypertext (하이퍼텍스트)
==================

하이퍼텍스트는 다른 텍스트에 링크를 포함하는 텍스트로, 소설과 같은 단일 선형 흐름과 반대입니다.

이 용어는 1965년경 Ted Nelson에 의해 만들어졌습니다.

같이 보기
-----

* 위키페디아의 하이퍼텍스트
오페라 브라우저 (Opera Browser)
========================

**오페라(Opera)** 는 1996년에 공개적으로 출시되었으며 처음에는 Windows에서만 실행되었던 다섯 번째로 가장 많이 사용되는 웹 브라우저입니다. 오페라는 2013년부터 레이아웃 엔진으로 Blink를 사용합니다(이전에는, Presto). 오페라는 모바일 및 태블릿 버전에도 존재합니다.

같이 보기
-----

* 위키백과의 오페라 브라우저(Opera Browser)
* 오페라 브라우저 웹사이트
TTL
===

생존 시간(Time To Live, TTL)은 네트워크의 패킷 수명 또는 캐시된 데이터의 만료 시간을 나타낼 수 있습니다.

네트워킹
----

네트워킹에서, 패킷에 포함된 TTL은 일반적으로 홉 수 또는 패킷이 삭제된 후 만료 타임스탬프로 정의됩니다. TTL은 네트워크 정체를 방지하는 방법을 제공하지만, 네트워크를 너무 오랫동안 돌아다닌 후에는 패킷을 해제합니다.

캐싱
--

캐싱과 관련하여, HTTP 응답 헤더 또는 DNS 쿼리의 일부인 TTL(부호 없는 32비트 정수)은 요청자가 리소스를 캐시할 수 있는 시간(초)을 나타냅니다.

같이 보기
-----

* 위키백과의 TTL
* IETF의 RFC 2181
* IETF의 RFC1035
데이터그램 전송 계층 보안 (Datagram Transport Layer Security, DTLS)
========================================================

**데이터그램 전송 계층 보안** (**DTLS**)은 데이터그램 기반 통신을 보호하는 데 사용되는 프로토콜입니다. DTLS은 스트림 중심의 전송 계층 보안 (TLS)을 기반으로 하며, 유사한 수준의 보안을 제공합니다. 데이터그램 프로토콜로서, DTLS는 메시지 전달 순서를 보장하지 않으며, 메시지 전달도 전혀 보장하지 않습니다. 그러나, DTLS는 특히 오버헤드가 낮아지고 대기 시간이 줄어드는 데 있어 데이터그램 프로토콜의 이점도 얻습니다.

이런 기능은 DTLS가 사용되는 가장 일반적인 분야 중 하나인 WebRTC에 특히 유용합니다. 모든 WebRTC 관련 프로토콜(SCTP, SRTP, 및 STUN)은 DTLS를 사용하여 통신을 암호화해야 합니다.

같이 보기
-----

* 위키백과의 데이터그램 전송 계층 보안
* 명세서:
    + RFC 9147: The Datagram Transport Layer Security (DTLS) Protocol Version 1.3
    + RFC 6347: Datagram Transport Layer Security Version 1.2
* 관련 명세
    + RFC 5763: Framework for Establishing a Secure Real-time Transport Protocol (SRTP) Security Context Using DTLS
    + RFC 5764: DTLS Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP)
    + RFC 6083: DTLS for Stream Control Transmission Protocol (SCTP)
    + RFC 8261: Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets
    + RFC 7350: Datagram Transport Layer Security (DTLS) as Transport for Session Traversal Utilities for NAT (STUN)
    + RFC 7925: TLS / DTLS Profiles for the Internet of Things
RTP (Real-time Transport Protocol, 실시간 전송 프로토콜) 및 SRTP (Secure RTP, 보안 RTP)
===========================================================================

**실시간 전송 프로토콜(Real-time Transport Protocol, RTP)** 은 다양한 미디어(오디오, 비디오)를 한 엔드포인트에서 다른 엔드포인트로 실시간으로 전송하는 방법을 설명하는 네트워크 프로토콜입니다. RTP는 비디오 스트리밍 애플리케이션, Skype와 같은 IP를 통한 전화 통신 및 회의 기술에 적합합니다.

RTP의 보안 버전인 **SRTP**는 WebRTC에서 사용되며 암호화 및 인증을 사용하여 서비스 거부 공격의 위험 및 보안 침해를 최소화합니다.

RTP는 단독으로 사용되는 경우가 거의 없습니다. 대신, RTSP 및 SDP와 같은 다른 프로토콜과 함께 사용됩니다.

같이 보기
-----

* 실시간 전송 프로토콜에 대한 소개 (en-US)
* 위키백과의 RTP
* RFC 3550 (프로토콜의 작동 방식을 정확하게 표시한 문서 중 하나)
색상환 (Color wheel)
=================

**색상환(color wheel 또는 color circle)** 은 원 안에 색상 팔레트를 나타내는 차트입니다. 색상환은 원의 중심인 원점으로부터의 '각도'와 '거리'라는 두 극좌표로 식별되는 색상을 표시할 수 있습니다.

색상환은 `hsl()` (en-US), `hwb()` (en-US) 또는 `lch()` (en-US)와 같이 극좌표나 원통형 좌표로 표현된 색상을 비교할 때 편리합니다.

이러한 경우, '보색'은 동일한 직경의 반대편에서 주로 발견됩니다. 마찬가지로, '단색 색상'(동일한 '톤'이지만 다른 '음영'의 색상)은 동일한 반경에서 위치하고, '삼중 색상'(색상한 주위에 균일한 간격으로 배치되어 함께 잘 어울리는 색상으로 이어지는 세 가지 색상)도 쉽게 찾을 수 있습니다.

색상환은 실생활에서 다양한 색상 중에서 선택하려고 할 때 사용됩니다. 예를 들어, 벽 페인트를 선택하거나 가구의 색상을 선택할 때입니다.

디지털 세계에선, macOS의 기본 색상환(![macOS Monterey의 기본 색상 선택기](/ko/docs/Glossary/Color_wheel/color_wheel_macos.png))처럼, '색상 선택기'에서 색상환이 사용됩니다.

같이 보기
-----

* 색상 이론과 색상환
* Better Homes & Gardens의 색상환을 사용하여 완벽한 색상 팔레트를 선택하는 방법
* 위키백과의 색상환
* `<color>` (CSS 색상 유형)
조건 (Conditional)
================

**조건**은 조건의 완료되었는지 아닌지에 따라 정상적인 코드 실행을 중단하거나 변경할 수 있는 규칙의 집합입니다.

특정 조건을 만족하게 되면, 하나 이상의 명령이 실행됩니다. 그렇지 않다면, 또 다른 명령이 실행됩니다. 조건이 아직 만족하지 않는 상태 동안 명령어 또는 명령어 세트의 실행을 반복하는 것도 가능합니다.

같이 보기
-----

* 위키백과의 조건문
* MDN의 제어 흐름
* 코드에서 결정하기 — 조건절
* MDN의 JavaScript의 제어 흐름 및 오류 처리
SCTP
====

**스트림 제어 전송 프로토콜 (Stream Control Transmission, SCTP)** 은 메시지를 안정적이고 순서대로 전송할 수 있는 전송 프로토콜에 대한 IETF 표준입니다. 혼잡 제어, 멀티 호밍 및 기타 기능을 통해 연결의 신뢰성과 안정성을 향상시킵니다. SCTP는 인터넷을 통해 전통적인 전화 통화를 보내는 데 사용되지만, WebRTC 데이터에도 사용됩니다.

같이 보기
-----

* RFC 4960: 스트림 제어 전송 프로토콜
* 위키백과의 스트림 제어 전송 프로토콜
버벅거림 (Jank)
===========

\*\*버벅거림(Jank)\*\*은 일반적으로 메인 스레드에서 긴 작업을 실행하거나, 렌더링을 차단하거나, 백그라운드 프로세스에서 너무 많은 프로세서 성능을 소비함으로써 발생하는 사용자 인터페이스의 느린 현상을 나타냅니다.
Chrome
======

브라우저에서, 크롬은 웹페이지를 제외한 브라우저의 모든 가시적인 요소입니다(예: 도구 모음, 메뉴 바, 탭). 이것은 Google Chrome 브라우저와 혼동해서는 안 됩니다.

같이 보기
-----

* 브라우저 및 GUI Chrome
데이터 구조 (Data structure)
=======================

**데이터 구조**는 '데이터'를 효율적으로 사용할 수 있도록 구성하는 특별한 방법입니다.

같이 보기
-----

* 위키백과의 데이터 구조
XSLT
====

확장가능한 스타일시트 언어 변환(eXtensible Stylesheet Language Transformations, **XSLT**)는 XML 문서를 다른 XML 문서, HTML, PDF, 일반 텍스트 등으로 변환하는 데 사용되는 선언적 언어입니다.

XSLT은 has its own processor that accepts XML 입력이나 XQuery 및 XPath 데이터 모델로 변환할 수 있는 모든 형식을 허용하는 자체 프로세서가 있습니다. The XSLT 프로세서는 XML 문서와 XSLT 스타일시트를 기반으로 새 문서를 생성하며, 프로세서에서 원본 파일을 변경하지 않습니다.

같이 보기
-----

* XSLT on Wikipedia
* MDN의 XSLT 명세서
ATAG
====

ATAG (Authoring Tool Accessibility Guildelines (작성 도구 접근성 가이드라인)의 약자)는 접근 가능한 콘텐츠를 생성하는 접근 가능한 작성 도구를 구축하기 위한 W3C 권장 사항입니다.

같이 보기
-----

* 위키백과의 웹 접근성 이니셔티브의 일환으로의 ATAG
* 작성 도구 접근성 지침 (ATAG) 개요
* ATAG 2.0 권장사항
믹스인 (Mixin)
===========

'믹스인(mixin)'은 메소드 및/또는 속성의 일부 또는 전체가 구현되지 않아 다른 클래스나 인터페이스가 누락된 구현을 제공해야 하는 클래스 (WebAPI 명세 용어의 인터페이스)입니다.

믹스인을 사용하고 나면, 새 클래스 또는 인터페이스에는 믹스인의 속성과 메서드는 물론 자체 정의된 속성도 포함됩니다. 모든 메서드와 속성은 믹스인에서 구현되었는지, 믹스인을 구현하는 인터페이스나 클래스에서 구현되었는지에 관계없이 정확히 동일하게 사용됩니다.

믹스인의 장점은 여러 인터페이스가 동일한 메서드와 속성을 포함하는 API 디자인을 단순화하는 데 사용할 수 있다는 부분입니다.

예를 들어, `WindowOrWorkerGlobalScope` 믹스인은 `Window` 및 `WorkerGlobalScope` (en-US) 인터페이스 모두에서 사용할 수 있어야 하는 메서드와 속성을 제공하는 데 사용됩니다. 믹스인은 `Window` 및 `WorkerGlobalScope` (en-US) 두 인터페이스 모두에 의해 구현됩니다.

같이 보기
-----

* 위키백과의 Mixin
RTCP (RTP 제어 프로토콜)
==================

**RTP 제어 프로토콜 (RTP Control Protocol, RTCP)** 은 RTP 프로토콜의 파트너입니다. RTCP는 RTP 미디어 스트리밍 세션에 대한 제어 및 통계 정보를 제공하는 데 사용됩니다.

이를 통해 기본 패킷 전달 계층을 사용하여 RTCP 신호와 RTP 및 미디어 콘텐츠를 전송하는 동시에 제어 및 통계 패킷을 미디어 스트리밍에서 논리적, 기능적으로 분리할 수 있습니다.

RTCP는 데이터 패킷을 전송하는 데, 사용되는 것과 동일한 메커니즘을 사용하여 RTP 세션의 모든 참가자에게 주기적으로 제어 패킷을 전송합니다. 해당 기본 프로토콜은 데이터 및 제어 패킷의 다중화를 처리하며 각 패킷 유형의 대해 별도의 네트워크 포트를 사용할 수 있습니다.

같이 보기
-----

* 실시간 전송 프로토콜 소개 (en-US)
* RTP 제어 프로토콜
* RFC 3550, 섹션 6: RFC 3550 Section 6
HTML5
=====

HTML5라는 용어는 본질적으로 일련의 최신 웹 기술을 나타내는 전문 용어입니다. HTML5에는 스토리지, 멀티미디어 및 하드웨어 접근을 향상시키는 JavaScript API와 함께 HTML Living Standard가 포함 됩니다.

때때로 '새로운 HTML5 요소'에 대해 듣거나 HTML의 새로운 버전으로 표현되고 있는 HTML5를 찾을 수도 있습니다. HTML5는 이전 HTML 버전의 후속 버전으로 이전 버전인 HTML 4.01에 더해 언어에 새로운 요소와 기능을 도입했을 뿐만 아니라, 일부 기존 기능을 개선하거나 제거했습니다. 그러나, Living Standard HTML에는 이제 버전이 없습니다. 최신 명세는 html.spec.whatwg.org/에서 확인할 수 있습니다.

모든 최신 사이트는 HTML doctype (en-US)을 사용해야 합니다. 이 방법은 최신 버전 HTML을 사용할 수 있게 합니다.

**참고:** 2019년까지, W3C에서는 버전 번호와 함께 경쟁 HTML5 표준을 발표했습니다. 2019년 5월 28일 이후, WHATWG Living Standard가 W3C에 의해 HTML의 유일한 버전으로 발표되었습니다.

같이 보기
-----

* HTML 문서
* HTML 초보자 교육 안내서
* Web API
실제 사용자 모니터링 (Real User Monitoring, RUM)
=======================================

**실제 사용자 모니터링 (Real User Monitoring, RUM)** 은 실제 사용자 컴퓨터의 페이지 성능을 측정합니다. 일반적으로, 타사 스크립트는 각 페이지에 스크립트를 삽입하여 모든 요청에 대한 페이지 로드 데이터를 측정하고 보고합니다. 이 기술은 애플리케이션의 실제 사용자 상호 작용을 모니터링합니다. RUM에서, 타사 스크립트는 실제 사용자의 브라우저에서 성능 지표를 수집합니다. RUM은 사용자의 지리적 분포와 해당 분포가 최종 사용자 경험에 미치는 영향을 포함하여, 애플리케이션이 사용되는 방식을 식별하는 데 도움이 됩니다.

같이 보기
-----

* 실제 사용자 모니터링 vs 종합 모니터링 (en-US)
* 종합 모니터링
* 비콘(Beacon)
일급 함수
=====

 프로그래밍 언어는 해당 언어의 함수들이 다른 변수처럼 다루어질 때 **일급 함수**를 가진다고 합니다.
 예를 들어, 일급 함수를 가진 언어에서 함수는 다른 함수들에 전달인자로 제공되고, 다른 함수에 의해 반환될 수 있으며, 변수에 값으로서 할당될 수 있습니다.

예제
--

### 변수에 함수 할당


```js
const foo = () => {
  console.log("foobar");
};
foo(); // 변수를 사용해 호출
// foobar
```


변수에 '익명함수'를 할당한 다음, 끝에 괄호 `()`를 추가하면서 함수를 호출할 해당 변수를 사용합니다.

**참고:** 함수가 이름을 가지고 있더라도, 변수 이름을 사용하여 함수를 호출할 수 있습니다. 함수에 이름을 지정하는 것은 코드를 디버깅할 때 도움이 됩니다. 하지만 함수를 호출하는 방식에는 영향을 미치지 않을 것입니다.

### 함수에 인자로 전달


```js
function sayHello() {
  return "Hello, ";
}
function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}
// `sayHello`를 전달인자로 `greeting` 함수에 전달
greeting(sayHello, "JavaScript!");
// Hello, JavaScript!
```


`sayHello()` 함수를 `greeting()` 함수에 전달인자로 전달하는데, 이것은 함수를 값으로서 어떻게 다루는지 설명합니다.

**참고:** 다른 함수에 전달인자로 전달하는 함수를 콜백 함수라고 합니다. `sayHello()`는 콜백 함수입니다.

### 함수 반환


```js
function sayHello() {
  return () => {
    console.log("Hello!");
  };
}
```


 이번 예제에서, 다른 함수로부터 함수를 반환합니다.
 JavaScript에서 함수들은 값들로서 다루어질 수 있기 때문에 함수를 반환할 수 있습니다.

**참고:** 함수를 반환하거나 다른 함수들을 전달인자로서 사용하는 함수를 "고차 함수"라고 합니다.

같이 보기
-----

* 위키피디아의 일급 함수
* MDN Web Docs 용어 사전
    + 콜백 함수
    + 함수
    + 변수
정규식
===

\*\*정규식("regex")\*\*은 연속적인 문자들을 검색하는 제어하는 방법입니다.

정규식은 다양한 언어에서 구현되지만, 펄 스크립트 언어에서 가장 잘 구현되어 있으며, 이는 PCRE ("Perl Compatible Regular Expression")라고 불리는 자체 문법 체계를 구현했습니다. 웹에서, JavaScript는 `RegExp` 객체를 통해 또다른 정규 표현식 문법을 제공합니다.

같이 보기
-----

* 위키백과의 정규 표현식
* 대화식 자습서
* 정규 표현식 시각화
* JavaScript 정규식
합자 (Ligature)
=============

\*\*합자(ligature)\*\*는 두 문자를 하나의 모양으로 결합하는 것입니다. 예를 들어, 프랑스어에서 "œ"는 "oe"의 합자입니다.

`font-variant-ligatures` (en-US)를 사용하여 웹페이지에 합자를 구현할 수 있습니다.

같이 보기
-----

* 위키백과의 합자
하위 자원 무결성 (Subresource Integrity, SRI)
======================================

**하위 자원 무결성 (Subresource Integrity, SRI)** 은 브라우저가 가져오는 파일(예, CDN)이 예기치 않은 조작없이 전달되는지 확인할 수 있는 보안 기능입니다. 가져온 파일이 일치해야 하는 암호화 해시를 제공할 수 있게 함으로써 작동합니다.

같이 보기
-----

* 하위 자원 무결성
LGPL
====

LGPL (GNU Lesser General Public License)은 자유 소프트웨어 재단(Free Software Foundation)에서 발행한 무료 소프트웨어 라이센스입니다. LGPL은 엄격한 copyleft GPL에 대해 보다 관대한 대안을 제공합니다. GPL 라이센스 프로그램을 사용해서 만들어진 저작물은 동일한 조건 (사용, 공유, 연구 및 수정의 자유)로 출시되어야 하지만, LGPL은 LGPL을 계속 사용하려면 파생 프로그램의 LGPL 라이선스 컴포넌트만 요구합니다(프로그램 전체가 아닙니다). LGPL은 일반적으로 라이브러리(`.dll`, `.so`, `.jar` 등)와 같은 공유 컴포넌트에 라이센스를 부여하는 데 사용됩니다.

같이 보기
-----

* 위키백과의 GNU LGPL
* gnu.org의 LGPL License 문서
점진적 향상
======

**점진적 향상**은 가능한 많은 사용자에게 필수 콘텐츠와 기능을 제공하기 위한 설계 철학입니다. 그리고 필요한 모든 코드를 실행할 수 있는 최신 브라우저 사용자에게 최상의 경험을 제공합니다.

"점진적 향상"에서 "점진적"이라는 단어는 기능이 제한적인 이전 브라우저 및 장치를 사용하는 사람들을 위해 간단하지만 여전히 사용가능한 환경을 제공하고, 동시에 **사용자 경험을 향상**하는 디자인을 만드는 것을 의미합니다. 더 풍부한 기능을 갖춘 최신 브라우저와 장치를 사용하는 사람들을 위해서는 더욱 매력적이고 모든 기능을 갖춘 사용자 경험을 제공합니다.

기능 탐지 (en-US)는 일반적으로 브라우저가 최신 기능을 사용할 수 있는지 여부를 판단하는데 사용합니다. 반면, JavaScript 폴리필은 없는 기능을 구현하는데 종종 사용합니다.

접근성에 또한 신경을 써야 합니다. 가능하다면 수용할 수 있는 대체 수단을 제공하는 것이 좋습니다.

점진적 향상은 웹 개발자가 알려지지 않은 다양한 사용자 에이전트에서 해당 웹 사이트가 작동하도록 하면서 가능한 최상의 웹 사이트를 개발하는 데 집중할 수 있도록 하는 유용한 기술입니다. 단계적 기능 축소는 관련이 있지만 다르고, 종종 점진적 향상과 반대인 것처럼 생각되지만, 실제로 두 접근법은 유효하고 서로를 보완할 수 있습니다.

같이 보기
-----

* 위키백과의 점진적 향상
* freeCodeCamp의 점진적 향상이란 무엇이며, 왜 중요한가요? (2018)
* 호환모드의 점진적 향상 (2021)
* Piccalilli의 점진적 향상의 힘 (2018)
ARPA
====

**.arpa** (주소 및 라우팅 매개변수 영역)는 인터넷 인프라 목적, 특히 역방향 DNS 조회에 사용되는 DNS(Domain Name System)의 top-level domain입니다(즉, 특정 IP 주소에 대한 도메인 이름을 찾습니다).

이 이름은 현재 DARPA로 알려져 있는 국방고등연구계획국(Defense Advanced Research Projects Agency) **ARPA**에서 유래되었습니다. DARPA는 인터넷(ARPANET), GPS, 인공 지능 및 가상 현실의 전신을 개발한 것으로 알려져 있습니다.

TLD는 ARPA라고 불렸던 시기에 DARPA에서 설계되었으므로 `.arpa` 도메인 이름이 붙었습니다.

가장 눈에 띄는 `.arpa` 도메인에는 각각 IPv4 및 IPv6 주소의 역방향 DNS 조회를 위한 네임스페이스를 제공하는 `addr.arpa` 및 `ip6.arpa`가 포함됩니다.

같이 보기
-----

* ARPANET
* 공식 웹사이트
* 위키 백과의 .arpa
TURN
====

**TURN** (Traversal Using Relays around NAT)은 컴퓨터가 네트워크 주소 변환 (NAT) 또는 방화벽 뒤에서 데이터를 주고받을 수 있도록 하는 프로토콜입니다. TURN은 WebRTC에서 인터넷상의 임의의 두 장치가 P2P(peer-to-peer) 연결을 시작할 수 있도록 하는 데 사용됩니다.

같이 보기
-----

* 위키백과의 TURN
* WebRTC 프로토콜
* 명세서
* IPv6에 대한 명세서 업데이트
특권 코드 (Privileged code)
=======================

**특권 코드(Privileged code)** - 확장 프로그램의 JavaScript 코드. 예를 들어, 콘텐츠 스크립트의 코드입니다.

**특권이 없는 코드 (Non-privileged)** - 웹페이지의 JavaScript 코드.
명세서 (Specification)
===================

**명세서(specification)** 는 전달 전에 제품에 포함되어야 하는 기능이나 특성을 자세히 설명하는 문서입니다. 웹을 설명하는 맥락에서, '명세서(spec)'라는 용어는 일반적으로 언어, 기술 또는 전체 개방형 웹 기술 세트를 구성하는 API를 설명하는 문서를 의미합니다.

같이 보기
-----

* 위키백과의 명세서
Web standards
=============

웹 표준은 여러 국제 표준 기구가 정한 규칙으로서 웹이 작동하는 방식을 정의합니다. (때로는 인터넷을 제어하기도 합니다).

각 표준 기구는 웹의 서로 다른 측면을 정의할 책임을 지니고 있으며 모든 표준은 웹의 사용성과 접근성을 극대화하도록 조정되어야 합니다. 웹 표준은 또한 현재 상태를 개선하고 새로운 환경에 적응하도록 진화해야 합니다.

다음 대략적인 목록은 웹사이트와 네트워크 시스템이 준수해야 하는 표준에 대한 아이디어를 제공합니다.

* **IETF** (Internet Engineering Task Force): URI, HTTP, MIME의 설정과 사용 등에 관한 인터넷 표준(STD)
* **W3C**: 마크업 언어의 명세(예, HTML), 스타일 정의(예, CSS), DOM, 접근성
* **IANA** (Internet Assigned Numbers Authority): 이름과 숫자 레지스트리
* **Ecma Intl.:** JavaScript로 잘 알려진 스크립팅 표준
* **ISO** (International Organization for Standardization): 문자 인코딩, 웹사이트 관리, 사용자 인터페이스 디자인 등 다양한 면을 다루는 표준
같이 보기
-----

* 위키백과의 웹 표준
GIF
===

GIF (Graphics Interchange Format)는 무손실 압축을 사용하며 애니메이션에 사용되는 이미지 형식입니다. GIF는 픽셀 당 최대 8비트를 사용하며 최대 256가지의 색을 24비트 색 공간에서 사용합니다.

같이 보기
-----

* 위키피디아의 GIF
모뎀 (Modem)
==========

\*\*모뎀(변조기-복조기(modulator-demodulator), modem)\*\*은 네트워크를 통해 데이터를 전송하기 위해 디지털 정보를 아날로그 신호로 또는 그 반대로 변환하는 장치입니다.

전화선용 DSL 모뎀, 단거리 무선 신호용 Wi-Fi 모뎀, 셀룰러 데이터 타워용 3G 모뎀 등 다양한 네트워크에 다양한 종류가 사용됩니다.

모뎀은 라우터와 다르지만 많은 회사에서 라우터와 결합된 모뎀을 판매합니다.

같이 보기
-----

* 위키백과의 Modem
고정 활성화 (Sticky activation)
==========================

**고정 활성화(Sticky activation)** 또는 sticky user activation(고정 사용자 활성화)는 사용자가 버튼을 누르거나, 마우스를 이동하거나, 메뉴를 사용하거나, 기타 사용자 상호 작용을 수행했음을 나타내는 창 상태입니다.

사용자가 현재 페이지와 상호 작용 중이거나 페이지 로드 이후 터치, 포인터 또는 키보드 상호 작용을 완료할 경우 페이지는 '사용자 활성화'로 생각합니다. 고정 사용자 활성화를 사용하면, (일시적 활성화와 달리) 활성화가 설정되어 있으면 세션 기간 동안 재설정되지 않습니다.

'고정 활성화'가 필요한 API의 예는 사용자 활성화로 제한되는 기능을 참조하세요.

현재 창의 고정 활성화 상태에 프로그래밍 방식으로 접근하려면 `UserActivation.hasBeenActive` (en-US) 속성을 참조하세요.

같이 보기
-----

* HTML Living Standard > Sticky activation
* Transient activation
* `UserActivation.hasBeenActive` (en-US)
암호화 (Encryption)
================

암호학에서, \*\*암호화(encryption)\*\*는 평문을 코드화된 텍스트 또는 암호문으로 변환하는 것입니다. 암호문은 권한이 없는 사용자가 읽을 수 없도록 만들어졌습니다.

암호화는 암호화 기본 요소입니다. 암호라는 암호화 알고리즘을 사용하여 일반 텍스트 메시지를 암호문으로 변환합니다. 현대 암호의 암호화는 특정 알고리즘과 키라는 비밀을 사용하여 수행됩니다. 알고리즘은 공개되는 경우가 많기 때문에, 암호화가 안전하게 유지된다면 키는 비밀로 유지되어야 합니다.

![암호화 작동 방식](/ko/docs/Glossary/Encryption/encryption.png)

비밀을 모르면, 반대 연산인 복호화는 수학적으로 수행하기 어렵습니다. 얼마나 어려운지는 선택한 암호화 알고리즘의 보안에 따라 달라지며 암호화 분석의 진행과 함께 발전합니다.
안전함
===

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

안전함 (HTTP 메서드)
HTTP 메서드가 서버의 상태를 바꾸지 않으면 그 메서드가 **안전**하다고 말합니다. 다른 말로 하면, 읽기
 작업만 수행하는 메서드는 안전합니다. 흔히 쓰이는 HTTP 메서드 중에서는 `GET`, `HEAD`,
 `OPTIONS`가 안전합니다. 모든 안전한 메서드는 멱등성 또한
 갖지만, 모든 멱등성을 지닌 메서드가 안전한 것은 아닙니다. 예컨대 `PUT`과 `DELETE`는 둘
 다 멱등성을 가졌지만 안전하지는 않은 메서드입니다.
종합 모니터링 (Synthetic monitoring)
==============================

**종합 모니터링(Synthetic monitoring)** 은 일반적으로 가능한 한 일관된 환경에서 자동화 도구를 사용해, '실험실' 환경에서 페이지 성능을 모니터링하는 작업을 의미합니다.

일관된 기준을 사용하는, 종합 모니터링은 코드 변경이 성능에 미치는 영향을 측정하는 데 좋습니다. 그러나 사용자가 경험하고 있는 상황이 반드시 반영되는 것은 아닙니다.

종합 모니터링에는 최종 사용자가 웹 애플리케이션을 통해 이동할 수 있는 경로를 시뮬레이션하기 위한 스크립트 배포가 포함되며, 시뮬레이터 경험의 성능 결과를 다시 보고합니다. 널리 사용되는 종합 모니터링 도구의 예로는 WebPageTest 및 Lighthouse가 있습니다. 측정된 트래픽은 실제 사용자가 아니라, 페이지 성능에 대한 데이터를 수집하여 종합적으로 생성된 트래픽입니다.

실제 사용자 모니터링 (Real User Monitoring, RUM)과 달리, 종합 모니터링은 사용자 차이를 고려하지 않는 좁은 성능 보기를 제공합니다. 그래서 애플리케이션 성능에 대한 기본 데이터를 얻고 개발 환경에서 성능을 즉각적으로 확인하는 데 유용합니다. 네트워크 조절과 같은 다른 도구와 결합하면, 잠재적인 문제 영역에 대한 뛰어난 통찰력을 제공할 수 있습니다.

같이 보기
-----

* 실제 사용자 모니터링 (Real User Monitoring, RUM)
* 실제 사용자 모니터링 vs 종합 모니터링 (en-US)
* 비콘
파비콘 (Favicon)
=============

파비콘(favicon, favorite icon)은 웹 사이트에 포함된 작은 아이콘으로, 브라우저의 주소 표시줄, 페이지 탭, 북마크 메뉴와 같은 위치에 표시됩니다.

그러나, 대부분의 최신 브라우저는 주소 표시줄의 파비콘을 웹 사이트가 HTTPS의 사용 여부를 나타내는 이미지로 대체했습니다.

일반적으로, 파비콘의 크기는 16 x 16 픽셀이고 GIF, PNG 또는 ICO 파일 형식으로 저장됩니다.

파비콘은 사용자 경험을 개선하고 브랜드 일관성을 강화하는 데 사용됩니다. 예를 들어, 브라우저 주소 표시줄에 익숙한 아이콘이 표시되면, 사용자는 자신이 올바른 위치에 있다는 것을 알 수 있습니다.

같이 보기
-----

* 위키백과의 Favicon
* 페이지에 파비콘을 추가하는 데 사용되는 link rel="icon" 요소 문서
* 도구
    + 무료 파비콘 생성기
    + Favicon.ico 및 앱 아이콘 생성기
JSON
====

*JavaScript Object Notation* (**JSON**) 은 데이터 교환 형식의 일종입니다. 엄격한 부분 집합은 아니지만, JSON은 JavaScript 구문과 매우 유사합니다. 많은 프로그래밍 언어가 JSON을 지원하지만, 웹 사이트와 브라우저 확장기능을 포함한 JavaScript 기반 앱에 특히 유용합니다.

JSON은 숫자, 불리언, 문자열, `null`, 배열(순서가 지정된 값들의 연속) 및 객체(문자열 값 매핑)로 구성된 값(또는 다른 배열 및 객체)을 표현할 수 있습니다. JSON은 함수, 정규 표현식, 날짜 등과 같은 더 복잡한 데이터 타입을 기본적으로 표현하지 않습니다. (Date 객체는 기본적으로 ISO 형식의 날짜를 포함하는 문자열로 직렬화되므로 정보가 완전히 손실되지 않습니다.) 추가적인 데이터 타입을 표현하기 위해 JSON이 필요하다면, 직렬화되거나 역직렬화되기 전에 값을 변환하세요.

같이 보기
-----

* JSON on Wikipedia
* JSON on MDN
코드 단위 (Code unit)
=================

**코드 단위**는 문자 인코딩 시스템(예, UTF-8 또는 UTF-16)에서 사용되는 기본 구성 요소입니다. 문자 인코딩 시스템은 하나 이상의 코드 단위를 사용하여 유니코드 코드 포인트를 인코딩합니다.

UTF-16 (JavaScript 문자열에 사용되는 인코딩 시스템)에서 코드 단위는 16비트 값입니다. 이것은 문자열에 대한 인덱싱이나 문자열 길이 가져오는 작업이 이러한 16비트 단위에서 작동함을 의미합니다. 이러한 단위는 우리가 문자로 간주할 수 있는 항목에 항상 1대1로 매핑되지는 않습니다.

예를 들어, 악센트와 같은 발음 구별 부호가 있는 문자는 때때로 두 개의 유니코드 코드 포인트를 사용하여 표현될 수 있습니다.


```js
const myString = "\u006E\u0303";
console.log(myString); // ñ
console.log(myString.length); // 2
```


또한, 유니코드로 정의된 모든 코드 포인트가 16비트에 맞지 않기 때문에, 많은 유니코드 코드 포인트가 '대리 쌍'이라고 불리는 UTF-16 코드 단위 쌍으로 인코딩됩니다.


```js
const face = "🥵";
console.log(face.length); // 2
```


JavaScript `String` 객체의 `codePointAt()` (en-US) 메서드를 사용하면 인코딩된 형식에서 유니코드 코드 포인트를 검색할 수 있습니다.


```js
const face = "🥵";
console.log(face.codePointAt(0)); // 129397
```

같이 보기
-----

* 유니코드 인코딩 FAQ
반응형 웹 디자인 (Responsive web design)
=================================

반응형 웹 디자인 (Responsive web design, RWD)은 데스크톱에서 모바일에 이르기까지 모든 개인 컴퓨팅 장치에서 사이트가 최적으로 보이고 작동하도록 만드는 데 초점을 맞춘 웹 개발 개념입니다.

같이 보기
-----

* 프로그레시브 웹 앱
* 반응형 웹 디자인
캔버스
===

**캔버스 요소**는 HTML5의 일부이고, 2D 및 3D 도형과 비트맵 이미지의 동적 스크립트 렌더링을 허용합니다.

캔버스 요소는 비트맵을 갱신하고 내장된 장면 그래프가 없는 저수준의 절차적 모델입니다. 특정 JavaScript API가 그릴 수 있는 빈 그래픽 영역을 제공합니다(Canvas 2D 또는 WebGL와 같이).

같이 보기
-----

* 위키백과의 캔버스
* MDN의 캔버스 자습서
* MDN의 HTML `<canvas>` 요소
* MDN의 캔버스 공식 문서
* `CanvasRenderingContext2D` (en-US): 캔버스 2D 그리기 API
* 캔버스 2D API 명세
Reflow
======

대화형 사이트에서 갱신하고 난 이후의 경우와 같이 브라우저가 웹 페이지의 위치와 기하학적 구조를 다시 계산할 때 **리플로우**가 발생합니다. 그 다음에는, 브라우저가 웹 페이지를 다시 그려 결과적인 시각적 갱신을 표시하는 리페인트가 따라옵니다.

같이 보기
-----

* 리페인트
* developer.google.com의 "브라우저 리플로우 최소화하기"
* dev.to의 브라우저에서의 리플로우 및 리페인트 이해 (2020)
추상화
===

컴퓨터 프로그래밍에서의 **추상화**란 복잡한 소프트웨어 시스템을 효율적으로 설계하고 구현할 수 있는 방법입니다. 추상화는 뒷편 시스템의 기술적 복잡함을 단순한 API들 뒤에 숨깁니다.

데이터 추상화의 장점
-----------

* 사용자가 낮은 수준의 코드를 작성하지 않도록 도움.
* 코드 중복 방지 및 재사용성 향상.
* 사용자에게 영향을 끼치지 않은 채로 독립적으로 클래스의 내부 구현 변경 가능
* 중요한 세부 정보만 사용자에게 제공하므로 응용 프로그램 또는 프로그램의 보안 향상에 도움
예
-


```js
class ImplementAbstraction {
  // 내부 멤버 변수의 값을 설정하는 메소드
  set(x, y) {
    this.a = x;
    this.b = y;
  }

  display() {
    console.log(`a = ${this.a}`);
    console.log(`b = ${this.b}`);
  }
}

const obj = new ImplementAbstraction();
obj.set(10, 20);
obj.display();
// a = 10
// b = 20
```

같이 보기
-----

* Wikipedia의 Abstraction
캡슐화 (Encapsulation)
===================

캡슐화는 데이터와 함수를 하나의 컴포넌트(예, 클래스)로 압축하고, 그 다음에 해당 컴포넌트에 대한 접근을 제어하여 객체에서 '블랙박스'를 만듭니다. 이 때문에, 해당 클래스의 사용자는 숨겨진 구현이 아닌 해당 인터페이스(즉, 클래스 외부에 노출된 데이터 및 함수)만 알면 됩니다.

같이 보기
-----

* 위키백과의 캡슐화
Null
====

컴퓨터 과학에서, `null` 값은 일반적으로 존재하지 않거나 유효하지 않은 object 또는 주소를 의도적으로 가리키는 참조를 나타냅니다. null 참조의 의미는 언어의 구현에 따라 다양합니다.

JavaScript에서 `null`은 동작이 원시적으로 보이기 때문에 원시 값 중 하나로 표시됩니다. 하지만 `typeof` 연산자를 사용할 때는 `"object"`를 반환합니다.


```js
console.log(typeof null); // "object"
```


이는 버그로 여겨지지만 수정하면 많은 스크립트에 문제가 발생할 수 있어서 고칠 수 없습니다.

같이 보기
-----

* JavaScript의 타입
* JavaScript 전역 객체: `null`
* 위키백과의 널 포인터
* **용어 사전**
    + JavaScript
    + string
    + number
    + bigint
    + boolean
    + null
    + undefined
    + `Symbol`
비무장지대 (DeMilitarized Zone, DMZ)
===============================

**비무장지대(DeMilitarized Zone, DMZ)** 는 내부 네트워크(기업 또는 개인)과 신뢰할 수 없는 외부 세계(일반적으로 인터넷) 사이에 격리된 보안 인터페이스를 제공하는 방법입니다.

정의된 특정 엔드포인트만 노출하며, 외부 노드에서 내부 네트워크에 대한 접근을 거부합니다.

같이 보기
-----

* 위키백과의 DMZ
심
=

**심shim**은 이미 존재하는 코드의 동작을 바로잡는 데 사용되는 코드 모음이며, 보통 문제를 야기시키는 신규 API에 대응한다. 시중에 배포된 브라우저에서 지원되지 않는 신규 API를 구현하는 폴리필(polyfill)과 대조된다.

더 많은 정보
-------

### 일반 정보

* Shim, 위키피디아
엔디언
===

**엔디언**(endian, endianness) 또는 **바이트 순서**는 숫자를 구성하는 바이트를 컴퓨터가 정렬하는 방법입니다.

메모리의 저장 공간은 인덱스 또는 주소를 가지고 있습니다. 각각의 바이트는 8비트 숫자(`0x00` 이상, `0xff` 이하)를 저장할 수 있으므로, 그보다 큰 숫자에 대해서는 두 개 이상의 바이트가 필요합니다. 여러 개의 바이트를 정렬하는, 지금까지 가장 많이 쓰이는 방법은 모든 Intel 프로세서가 사용하는 **리틀 엔디언**입니다. 리틀 엔디언은 작은 단위부터 정렬하는 방식으로, 가장 작은 단위의 바이트가 맨 앞 혹은 앞쪽 주소를 차지합니다. 이 방식은 유럽식 날짜 표기(31-12-2050)에 대입할 수 있습니다.

자연스럽게, **빅 엔디언**은 그 반대 순서를 나타내며 ISO 날짜 표기(2050-12-31)와 같습니다. 빅 엔디언은 "네트워크 바이트 순서"라고도 부르는데, 대부분의 인터넷 표준은 데이터의 저장 방식에 빅 엔디언을 요구하기 때문입니다. 이는 표준 UNIX 소켓 단계부터, 표준화 웹 이진 데이터 구조까지 올라갑니다. 또한, 68000 시리즈와 PowerPC 마이크로프로세서를 사용하는 구형 Mac 컴퓨터는 빅 엔디언을 사용했었습니다.

다음은 숫자 `0x12345678` (10진수 305 419 896)으로 나타낸 예제입니다.

* 리틀 엔디언: `0x78 0x56 0x34 0x12`
* 빅 엔디언: `0x12 0x34 0x56 0x78`
* 혼합 엔디언(구형, 매우 드묾): `0x34 0x12 0x78 0x56`
같이 보기
-----

* `ArrayBuffer`
* `DataView`
* 형식화 배열
* 엔디언
* 자료 구조
Beacon
======

웹 **비콘** 은 마크업에 포함된 1픽셀 gif와 같은 작은 객체로, 웹 서버나 서드 파티 서버에 정보를 다시 전달하는 데 사용됩니다. 비콘은 일반적으로 통계 목적으로 사용자에 대한 정보를 제공하기 위해 포함됩니다. 비콘은 사용자 데이터를 수집하기 위해 서드 파티 스크립트에 포함되는 경우가 많습니다.

성능에 부정적인 영향을 주지 않고 페이지 로드 전에 사용자 에이전트에서 웹 서버로 HTTP 데이터를 비동기적으로 전송하기 위한 인터페이스로 비콘을 표준화하는 W3C 초안 비콘 명세가 있습니다.

같이 보기
-----

* 실제 사용자 모니터링 (RUM)
URL
===

**URL**(Uniform Resource Locator)은 인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열입니다.

HTTP 맥락에서 URL은 "웹 주소" 또는 "링크"라고 불립니다. 브라우저는 `https://developer.mozilla.org` 등 URL을 주소창에 표시합니다. 일부 브라우저는 URL에서 "//" 뒤의 일부분, 즉 도메인 이름만 표시합니다.

URL은 파일 전송(FTP), 이메일(SMTP) 등 다른 응용 프로그램에서도 사용할 수 있습니다.

같이 보기
-----

* URL과 URL 구조에 대한 이해
* URL 문법은 URL Living Standard에 정의되어 있습니다.
* 위키백과의 URL
SISD
====

SISD는 컴퓨터 아키텍처 분류 중 하나인 **단일 명령어/단일 데이터 (Single Instruction/Single Data)** 의 약자입니다. SISD 아키텍처에서, 단일 프로세서는 단일 명령어를 실행하고 메모리의 단일 데이터 포인트에서 작동합니다.

여러 데이터 포인트에서 하나의 동일한 작업을 수행할 수 있는 병렬 아키텍처에 대해선 SIMD도 참조하세요.

같이 보기
-----

* 위키백과의 SISD
CRUD (Create, Read, Update, Delete)
===================================

**CRUD** (생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete))는 저장된 데이터에 대해 작업할 수 있는 방법의 약어입니다. 영속적인 저장소의 4가지 기본 기능에 대한 연상기호입니다. CRUD는 일반적으로 데이터베이스나 데이터 저장소에서 수행되는 작업을 의미하지만, 데이터가 실제로 삭제되지 않지만 상태에 삭제된 것으로 표시되는 일시 삭제와 같은 애플리케이션의 고수준 기능에도 적용될 수 있습니다.

같이 보기
-----

* 위키백과의 CRUD