recursal/MDN huggingface dataset:
pageAction.show()
=================

지정한 탭의 페이지 액션을 보인다. 페이지 액션은 해당 탭이 활성일 때 표시된다.

`show()`는 설정된 URL 패턴과 상관없이 동작한다. 따라서 `show_matches`와 일치하지 않아도 `hide_matches`여도 표시된다.

`show()`는 아무런 내용도 없는 탭에는 효과가 없다.

문법
--


```js
browser.pageAction.show(
  tabId, // integer
);
```

### 매개변수

`details`

`object`. An object containing the `tabId` to check.

`tabId`

`integer`. ID of the tab to check.


### 반환 값

A `Promise` that will be fulfilled with `true` if the extension's page action is being shown for the given tab, and `false` otherwise.

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

예제
--

콘텍스트 메뉴가 선택되면 페이지 액션을 보이는 예제다. 메뉴를 만들려면 `contextMenus` 권한 (en-US)이 manifest에 필요하다.


```js
browser.contextMenus.create({
  id: "show",
  title: "Show page action",
});

browser.contextMenus.onClicked.addListener(function (info, tab) {
  if (info.menuItemId == "show") {
    browser.pageAction.show(tab.id);
  }
});
```

### Example extensions

* apply-css
* chill-out
* history-deleter
* menu-remove-element

**참고:** **Acknowledgements**This API is based on Chromium's `chrome.pageAction` API. This documentation is derived from `page_action.json` in the Chromium code.Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
```

// Copyright 2015 The Chromium Authors. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//    * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
//    * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
menus.getTargetElement()
========================

주어진 `targetElementId`에 해당하는 요소를 돌려준다.

이 함수는 오직 클릭된 요소가 있는 문서에서만 동작한다. so everywhere but in the background page.

문법
--


```js
let elem = browser.menus.getTargetElement(targetElementId);
```

### 파라메터

`targetElementId`

``menus.onClicked` (en-US)` 핸들러 또는 ``menus.onShown` (en-US)` 이벤트에 전달된 ``menus.OnClickData` (en-US)` 객체의 속성

### 반환값

`targetElementId`로 참조되는 요소를 반환한다. `targetElementId`가 유효하지 않으면 `null`를 반환한다.

예제
--

아래 예제는 인수로 전달된 `info.targetElementId` 값으로 요소를 구하고, 그것을 지운다. 하지만 `getTargetElement`는 요소가 있는 문서에서만 동작하므로 문서가 있는 탭에 스크립트를 주입하는 형태로 처리하고 있다.


```js
browser.menus.create({
  title: "Remove element",
  documentUrlPatterns: ["\*://\*/\*"],
  contexts: [
    "audio",
    "editable",
    "frame",
    "image",
    "link",
    "page",
    "password",
    "video",
  ],
  onclick(info, tab) {
    browser.tabs.executeScript(tab.id, {
      frameId: info.frameId,
      code: `browser.menus.getTargetElement(${info.targetElementId}).remove();`,
    });
  },
});
```

### Example extensions

* menu-remove-element
브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

같이 보기
-----

* `menus.create` (en-US)
* `menus.OnClickData` (en-US)
menus.ContextType
=================

메뉴 항목이 표시될 수 있는 컨텍스트들입니다.

타입
--

이 타입의 값은 문자열입니다. 지정된 컨텍스트가 적용될 때 항목이 나타납니다. `menus.ContextType`에서 사용 가능한 값은 다음과 같습니다.

all

'all'을 지정하면 'bookmark', 'tab', 'tools\_menu'를 제외한 모든 컨텍스트의 조합과 동일하게 동작합니다.

action

사용자가 Manifest V3 확장의 브라우저 액션을 컨텍스트 클릭할 때 적용됩니다. 최상위 브라우저 액션 컨텍스트 메뉴에 추가할 수 있는 최대 항목수는 `menus.ACTION_MENU_TOP_LEVEL_LIMIT` (en-US)이지만, 서브 메뉴에는 얼마든지 추가할 수 있습니다.

audio

사용자가 audio (en-US) 요소를 컨텍스트 클릭할 때 적용됩니다.

bookmark

사용자가 북마크 툴바나 북마크 메뉴, 북마크 사이드바(`Ctrl`+`B`)나 라이브러리 윈도우(`Ctrl`+`Shift`+`B`)에서 북마크 항목을 컨텍스트 클릭할 때 적용됩니다. 북마크 사이드바와 라이브러리 윈도우에서의 적용은 Firefox 66부터 지원됩니다. 매니페스트에 "bookmarks" API 권한 (en-US)이 요구됩니다.

browser\_action

사용자가 Manifest V2 확장의 브라우저 액션을 컨텍스트 클릭할 때 적용됩니다. 최상위 브라우저 액션 컨텍스트 메뉴에 추가할 수 있는 최대 항목수는 `menus.ACTION_MENU_TOP_LEVEL_LIMIT` (en-US)이지만, 서브 메뉴에는 얼마든지 추가할 수 있습니다.

editable

textarea (en-US)처럼 편집 가능한 요소를 컨텍스트 클릭할 때 적용됩니다.

frame

중첩된 iframe (en-US)을 컨텍스트 클릭할 때 적용됩니다.

image

사용자가 이미지를 컨텍스트 클릭할 때 적용됩니다.

link

사용자가 링크를 컨텍스트 클릭할 때 적용됩니다.

page

사용자가 페이지를 컨텍스트 클릭했지만 다른 페이지 컨텍스트가 적용되지 않는 경우에 적용됩니다(예: 클릭이 이미지나 중첩된 iframe, 혹은 링크에서 발생하지 않은 경우).

page\_action

사용자가 페이지 액션을 컨텍스트 클릭할 때 적용됩니다. 최상위 페이지 액션 컨텍스트 메뉴에 추가할 수 있는 최대 항목수는 `menus.ACTION_MENU_TOP_LEVEL_LIMIT` (en-US)이지만, 서브 메뉴에는 얼마든지 추가할 수 있습니다.

password

사용자가 password 입력 요소 (en-US)를 컨텍스트 클릭할 때 적용됩니다.

selection

페이지 일부가 선택되어 있을 때 적용됩니다.

tab

사용자가 탭을 컨텍스트 클릭할 때 적용됩니다. 구체적으로 페이지 자체가 아니라, 사용자가 한 브라우저 탭에서 다른 탭으로 전환할 수 있도록 하는 탭 스트립 또는 기타 사용자 인터페이스 요소를 의미합니다.

Firefox 63부터는 탭의 메뉴 항목을 클릭하면 현재 활성 탭이 아닌 경우에도 클릭한 탭에 대해 activeTab (en-US) 권한이 부여됩니다.

tools\_menu

항목이 브라우저의 도구 메뉴에 추가됩니다. 이 기능은 `menus` 네임스페이스를 통해 `ContextType`에 접근하는 경우에만 사용할 수 있다는 것을 참고하십시오. `contextMenus` 네임스페이스를 통해 접근하는 경우에는 사용할 수 없습니다.

video

video 요소에 컨텍스트 클릭을 할 때 적용됩니다.

참고: "launcher"는 지원되지 않습니다.

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

**참고:** 이 API는 Chromium의 `chrome.contextMenus` API를 기반으로 합니다. 이 문서는 Chromium 코드의 `context_menus.json`에서 파생되었습니다.
tabs.create()
=============

새 탭을 만듭니다.

`tabs.create()`는 `Promise`를 반환하는 비동기 함수입니다.

구문
--


```js
let creating = browser.tabs.create(
  createProperties   // object
)
```

### 매개변수

`createProperties`

`object`. 새 탭에 줄 속성들입니다. 이 속성들에 대해 더 알아보려면 `tabs.Tab` (en-US) 문서를 확인하십시오.

`active`Optional

`boolean`. 탭을 창의 활성 탭으로 변경할지에 대한 여부입니다. `false`인 경우에는 효과가 없습니다. 창에 포커스가 맞춰져 있는지 여부에는 영향을 주지 않습니다(`windows.update` (en-US)를 참조하십시오). 기본 값은 `true`입니다.

`cookieStoreId` Optional

`string`. 쿠키 저장소 ID가 `cookieStoreId`인 탭을 생성하기 위해 사용합니다. 이 옵션은 확장이 `"cookies"` 권한 (en-US)을 가져야만 사용할 수 있습니다. 상황별 신원을 사용해 작업하기 (en-US)에서 더 많은 정보를 확인하세요.

`discarded` Optional

`boolean`. 탭이 생성된 뒤 메모리에 로드된 콘텐츠 없이 탭 표시줄에 표시되는 상태인지에 대한 여부입니다. 탭이 활성화되면 탭의 콘텐츠가 로드됩니다.

`index`Optional

`integer`. 창에서 탭이 차지할 위치입니다. 제공되는 값은 0부터 창의 탭 개수 사이로 고정됩니다.

`muted` Optional

`boolean`. 탭의 음소거 여부입니다. 기본 값은 `false`입니다.

`openerTabId`Optional

`integer`. 이 탭을 연 탭의 ID입니다. 이 값이 지정된 경우, 새로운 탭을 연 탭은 반드시 새로 생성한 탭과 같은 창에 있어야 합니다.

`openInReaderMode`Optional

`boolean`. `true`일 경우, 이 탭을 읽기 모드 (en-US)로 엽니다. 기본 값은 `false`입니다.

`pinned`Optional

`boolean`. 탭의 고정 여부입니다. 기본 값은 `false`입니다.

`selected`Optional

`boolean`. 창에서 선택된 탭이 되는지에 대한 여부입니다. 기본 값은 `true`입니다.

**경고:** 이 속성은 폐기되었으며, Firefox에서는 지원되지 않습니다. 대신 `active`를 사용하십시오.

`title` Optional

`string`. 탭의 제목입니다. `discarded` 속성이 `true`로 생성된 탭에서만 사용할 수 있습니다.

`url` Optional

`string`. 탭이 초기에 이동할 URL입니다. 기본 값은 새 탭 페이지입니다.

정규화된 URL에는 반드시 스킴이 포함되어야 합니다. 예를 들어, 'www.google.com' 이 아닌 'http://www.google.com' 을 사용해야 합니다.

보안상의 이유로 Firefox에서는 특수한 권한을 가진 URL은 사용할 수 없습니다. 따라서 다음과 같은 URL을 전달하면 실패하게 됩니다.

* chrome: URLs
* javascript: URLs
* data: URLs
* file: URLs (예: 파일시스템의 파일들. 단, 확장 안에 패키지된 파일을 사용하려면 아래를 참조하십시오.)
* 특수한 권한을 가지는 about: URLs (예: `about:config`, `about:addons`, `about:debugging`). 권한이 없는 URL(예: `about:blank`)은 허용됩니다.
* URL 값이 주어지지 않으면 새 탭 페이지 (`about:newtab`)가 열립니다.

확장 프로그램과 함께 패키지된 페이지를 로드하려면, 확장 프로그램의 manifest.json 파일에서부터 시작하는 절대 URL을 지정하십시오. 예를 들어 '/path/to/my-page.html' 앞의 '/'를 생략하면, URL이 상대 URL로 취급되어 브라우저마다 다른 절대 URL을 생성할 수 있습니다.

`windowId`Optional

`integer`. 새 탭을 생성할 창입니다. 기본 값은 현재 창입니다.


### 반환 값

생성된 탭에 대한 세부 정보가 포함된 `tabs.Tab` (en-US) 객체로 이행되는 `Promise`입니다. 탭을 만들 수 없는 경우(예: `url`에 권한이 있는 스킴을 사용한 경우) 오류 메시지와 함께 프로미스가 거부됩니다.

`browser.tabs.create()`가 반환한 프로미스는 탭이 생성되는 즉시 리졸브됩니다. 탭은 아직 로드 중일 수 있습니다. 탭 로딩이 완료되었는지 확인하려면, `tabs.create`를 호출하기 전에 `tabs.onUpdated` (en-US) 또는 `webNavigation.onCompleted` (en-US) 이벤트를 수신하십시오.

예제
--

새 탭에서 "https://example.org" 열기.


```js
function onCreated(tab) {
  console.log(`새 탭 생성: ${tab.id}`);
}

function onError(error) {
  console.log(`오류: ${error}`);
}

browser.browserAction.onClicked.addListener(() => {
  let creating = browser.tabs.create({
    url: "https://example.org",
  });
  creating.then(onCreated, onError);
});
```

### Example extensions

* commands
* contextual-identities
* find-across-tabs
* firefox-code-search
* open-my-page-button
* permissions
* store-collected-images
* tabs-tabs-tabs
브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

**참고:** 이 API는 Chromium의 `chrome.tabs` API를 기반으로 합니다. 이 문서는 Chromium 코드의 `tabs.json`에서 파생되었습니다.
storage.local
=============

`local` 저장소 영역을 표현한다. `local` 저장소의 항목은 확장이 설치된 기기에 제한된다.

브라우저는 local 저장소에 저장할 수 있는 데이터의 양을 제한한다:

* "unlimitedStorage" 권한이 없으면 크롬은 데이터의 양을 5M로 제한한다.
* Firefox는 버전 56부터 "unlimitedStorage" 권한을 요청할 수 있다. 아직은 저장 용량을 제한하지는 않지만, 앞으로 그렇게 할 것이므로 큰 용량의 저장할 의도라면 지금 "unlimitedStorage" 권한을 요청하는 것이 좋다.

확장이 제거되면, 그것과 연결된 local 저장소는 지워진다.

Firefox에서는 확장을 제거해도 local 저장소를 브라우저가 지우지 않도록 막을 수 있다. "about:config"에서 "keepUuidOnUninstall"와 "keepStorageOnUninstall" 두 브라우저 기본 설정을 `true`로 고치면 된다. 이 특징은 개발자가 확장을 테스트하는데 도움을 주려는 것이다. 확장 스스로 이 값들을 바꿀 수는 없다.

이 API는 `Window.localStorage`와 비슷하지만, 확장 코드가 확장 관련 데이터를 저장하는데 `Window.localStorage`를 사용하지 말 것을 권장한다. 사적이 이유로 사용자가 방문 기록이나 데이터를 지우는 다양한 상황에서 확장이 localStorage API로 저장된 데이터는 지워지지만, `storage.local` API로 저장한 데이터는 정확하게 유지된다.

메소드
---

`local` 객체는 `storage.StorageArea` (en-US) 자료형에 정의된 메소드로 구현되었다:

`storage.StorageArea.get()`

저장소 영역에서 하나 이상의 항목을 가져온다.

`storage.StorageArea.getBytesInUse()` (en-US)

저장소의 사용된 크기를 바이트단위로 얻는다.

`storage.StorageArea.set()`

저장소에 하나 이상의 항목을 설정한다. 이미 있는 항목은 교체된다. 값을 설정하면 `storage.onChanged` (en-US) 이벤트가 발생한다.

`storage.StorageArea.remove()` (en-US)

저장소에서 하나 이상의 값을 지운다.

`storage.StorageArea.clear()` (en-US)

저장소의 모든 항목을 지워서 비운다.

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### Example extensions

* annotate-page
* forget-it
* navigation-stats
* proxy-blocker
* quicknote
* stored-credentials

**참고:** **Acknowledgements**This API is based on Chromium's `chrome.storage` API. This documentation is derived from `storage.json` in the Chromium code.Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
storage.sync
============

`sync` 저장 공간을 의미합니다. `sync` 저장 공간에 있는 데이터는 브라우저 사이에서 동기화되며 서로 다른 기기 간에 사용자가 브라우저에 로그인 한 경우 언제든지 접근 가능합니다.

Firefox에서 `sync.storage` 는 고유한 부가기능 ID에 의존성을 갖고 동작합니다. `sync.storage`, 를 사용하신다면 `어플리케이션` (en-US) manifest.json 파일에 있는 키를 통해 여러분의 부가기능에 고유한 ID를 부여해야 합니다.

이 API는 주로 여러분의 부가기능에 사용자 설정 정보를 저장하고 서로 다른 프로필 간에 설정을 동기화 할 수 있도록 사용됩니다. 이 API는 100KB까지 저장할 수 있습니다. 이보다 더 큰 데이터를 저장하려고 하는 경우, API 요청은 특정한 에러 메시지를 반환할 것입니다. 이 API는 아쉽게도 현재까지 특정한 성능을 보장하진 않습니다.

메소드
---

`sync` 객체는 `storage.StorageArea` (en-US) 타입에 정의 된 메소드를 제공합니다:

`storage.StorageArea.get()`

저장소 영역에서 하나 이상의 항목을 가져온다.

`storage.StorageArea.getBytesInUse()` (en-US)

저장소의 사용된 크기를 바이트단위로 얻는다.

`storage.StorageArea.set()`

저장소에 하나 이상의 항목을 설정한다. 이미 있는 항목은 교체된다.

`storage.StorageArea.remove()` (en-US)

저장소에서 하나 이상의 값을 지운다.

`storage.StorageArea.clear()` (en-US)

저장소의 모든 항목을 지워서 비운다.

Browser 호환성
-----------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

### Example extensions

* favourite-colour

**참고:** **Acknowledgements**This API is based on Chromium's `chrome.storage` API. This documentation is derived from `storage.json` in the Chromium code.Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.
StorageArea.set()
=================

저장소 영역에 하나 이상의 항목을 저장하거나, 있는 항목을 고친다.

이 API로 값을 저장하거나 고치면, `storage.onChanged` (en-US) 이벤트가 발생한다.

비동기 함수로 `Promise`를 돌려준다.

문법
--


```js
let settingItem = browser.storage.&#x3C;storageType>.set(
  keys             // object
)
```


`<storageType>`은 쓰기 가능한 저장소 중의 하나다 — `storage.sync` 또는 `storage.local`.

### 매개변수

`keys`

저장소에 저장할 하나 이상의 키/값 쌍을 가진 객체다. 이미 있는 항목이라면 그 값은 고쳐진다.값은 기초 자료형 (숫자, 논리값, 그리고 문자열 같은) 또는 `배열`이다.`Function`, `Date`, `RegExp`, `Set`, `Map`, `ArrayBuffer` 기타등등 다른 자료형의 저장은 일반적으로 안된다. 지원되지 않는 이런 자료형들은 빈 객체로 저장되거나 에러를 발생시킨다. 정확한 것은 브라우저에 달렸다.

### 반환값

반환된 `Promise`는 동작이 성공하면 아무런 인수없이 완료를 수행하고, 실패하면 에러 문장과 함께 거부를 수행한다.

브라우저 호환성
--------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

예제
--


```js
function setItem() {
  console.log("OK");
}

function gotKitten(item) {
  console.log(`${item.kitten.name} has ${item.kitten.eyeCount} eyes`);
}

function gotMonster(item) {
  console.log(`${item.monster.name} has ${item.monster.eyeCount} eyes`);
}

function onError(error) {
  console.log(error);
}

// define 2 objects
var monster = {
  name: "Kraken",
  tentacles: true,
  eyeCount: 10,
};

var kitten = {
  name: "Moggy",
  tentacles: false,
  eyeCount: 2,
};

// store the objects
browser.storage.local.set({ kitten, monster }).then(setItem, onError);

browser.storage.local.get("kitten").then(gotKitten, onError);
browser.storage.local.get("monster").then(gotMonster, onError);
```


**참고:** **Acknowledgements**This API is based on Chromium's `chrome.storage` API. This documentation is derived from `storage.json` in the Chromium code.
오래 걸리는 작업 (Long task)
=====================

**오래 걸리는 작업 (Long task)** 은 완료하는 데 50ms 이상이 걸리는 작업입니다.

메인 UI 스레드가 50ms 이상 사용되는 중단 없는 기간입니다. 흔한 예로는 오래 실행되는 이벤트 핸들러, 비용이 많이 드는 리플로우 및 기타 재렌더링, 50ms를 초과하는 이벤트 루프의 여러 반복 사이에서 브라우저가 수행하는 작업 등이 있습니다.

같이 보기
-----

* Long task API (en-US)
URI
===

**URI**(Uniform Resource Identifier)는 하나의 리소스를 가리키는 문자열입니다.

가장 흔한 URI는 URL로, 웹 상에서의 위치로 리소스를 식별합니다. 반면, URN은 주어진 이름공간 안의 이름으로 리소스를 식별합니다. 도서의 ISBN을 예시로 사용할 수 있습니다.

같이 보기
-----

* 위키백과의 URI
* URL에 관한 RFC 3986
Fork
====

포크는 프로젝트에 누군가의 자신의 수정 사항을 추가하기 위한 어떤 시점에 있는 기존 소프트웨어 프로젝트의 사본입니다.

기본적으로, 만약 원본 소프트웨어의 라이센스가 허가한다면, 당신은 코드를 복사하여 자신의 추가사항을 가지고 그 코드를 개발할 수 있는데, 이것이 "포크"가 될 것이다.

포크는 종종 무료 오픈소스 소프트웨어 개발에서 볼 수 있다. 이는 Git(또는 GitHub 플랫폼)을 사용한 기여 모델 덕분에 더 많이 사용되는 용어다.

같이 보기
-----

* 위키피디아의 Fork
* GitHub repo를 포크하는 방법 (Git 컨텍스트로 포크)
* 다양한 "잘 알려진" 포크들
    + Linux distributions
    + Node.js and io.js (which have been merged together back)
    + LibreOffice, a fork of OpenOffice
NNTP
====

**네트워크 뉴스 전송 프로토콜 (Network News Transfer Protocol, NNTP)** 은 클라이언트에서 서버로 또는 서버 간에 유즈넷 메시지를 전송하는 데 사용되는 프로토콜입니다.

같이 보기
-----

* 위키백과의 NNTP
* IETF에서: NNTP에 관한 RFC 3977 (2006)
다목적 인터넷 메일 확장 (MIME)
====================

 \*\*다목적 인터넷 메일 확장(Multipurpose Internet Mail Extensions, MIME)\*\*은 오디오, 비디오, 이미지 등 ASCII 텍스트 이외의 다른 형식으로 문서를 설명하기 위한 표준입니다.
 처음에는 이메일 첨부에 사용되었지만 어느 곳에서나 문서 타입을 정의하는 사실상의 표준이 되었습니다.

같이 보기
-----

* MIME-Type
* 위키백과의 MIME
WebExtensions
=============

WebExtensions은 Firefox에서 브라우저 Extension을 개발하기위한 크로스 브라우저 시스템입니다. 이 시스템은 Mozilla Firefox, Google Chrome, Opera Browser 및 Microsoft Edge, Apple Safari와 같은 다양한 브라우저에서 지원되는 API를 제공합니다.

같이 보기
-----

* MDN의 브라우저 확장
클릭재킹 (Clickjacking)
===================

클릭재킹(Clickjacking)은 웹사이트 사용자를 속여 자신도 모르게 악성 링크를 클릭하도록 하는 인터페이스 기반 공격입니다. 클릭재킹을 통해, 공격자는 악성 링크를 웹사이트의 버튼이나 합법적인 페이지에 삽입합니다. 감염된 사이트에서 사용자가 합법적인 링크를 클릭할 때마다, 공격자는 해당 사용자의 기밀 정보를 얻게 되고, 궁극적으로 인터넷에서 사용자의 개인 정보를 손상시킵니다.

콘텐츠 보안 정책(frame-ancestors) (en-US) 및 Set-Cookie 속성 (en-US)를 구현하면 클릭재킹을 방지할 수 있습니다.

같이 보기
-----

* 웹 보안: 클릭재킹 방지
* 위키백과의 클릭재킹
* OWASP의 클릭재킹
JPEG
====

**JPEG**(Joint Photographic Experts Group)는 디지털 이미지에 많이 사용하는 손실 압축법입니다.

JPEG 압축은 크로마 서브샘플링(chroma subsampling), 이산 코사인 변환 및 양자화(discrete cosine transformation/quantization), 그리고 런 렝스(run-length) 델타 & 허프만 인코딩 세 가지의 압축 기술을 순차적으로 적용해서 수행합니다. 크로마 서브샘플링은, 사람의 시각이 색상보단 밝기에 민감하다는 점을 활용해서 색상 정보를 밝기 정보보다 낮은 해상도로 줄입니다. 이산 코사인 변환은 유한한 수의 데이터 좌표로 이루어진 시퀀스를 서로 다른 주파수로 진동하는 코사인 함수의 합으로써 표현합니다.

같이 보기
-----

* 위키피디아의 JPEG
단일 페이지 애플리케이션 (Single-page application, SPA)
============================================

단일 페이지 애플리케이션 (Single-page application, SPA)은 단일 웹 문서만 로드한 다음 다른 콘텐츠가 표시될 때 `XMLHttpRequest` 및 Fetch와 같은 JavaScript API를 통해 해당 단일 문서의 본문 콘텐츠를 업데이트하는 웹 앱 구현체입니다.

따라서, 사용자는 서버에서 완전히 새로운 페이지를 로드하지 않고도 웹사이트를 사용할 수 있으므로, 성능이 향상되고 보다 동적인 경험을 얻을 수 있지만, SEO와 같은 일부 절충이 되는 단점이 있으며, 상태를 유지하고 탐색을 구현 및 의미 있는 성능 모니터링을 하는 데 더 많은 노력이 필요합니다.

같이 보기
-----

* 위키백과의 단일 페이지 애플리케이션
* 클라이언트 사이드 JavaScript 프레임워크의 이해
* 용어 사전
    + API
    + AJAX
    + JavaScript
* 인기있는 SPA 프레임워크
    + React
    + Angular
    + Vue.JS
최초 입력 지연 (First input delay, FID)
=================================

**최초 입력 지연 (First input delay, FID)** 은 사용자가 사이트와 처음 상호작용할 때(예, 링크를 클릭 또는 버튼을 탭하거나 사용자 정의 JavaScript 기반 컨트롤 UI를 사용할 때)부터 실제로 해당 상호작용에 응답할 수 있는 시간까지 측정합니다.

웹 페이지에서 첫 번째 사용자와의 상호작용과 해당 상호 작용에 대한 브라우저의 응답 사이의 시간(밀리초)입니다. 스크롤 및 확대/축소는 이 측정 부분에 포함되지 않습니다.

콘텐츠가 페이지에 그려지는 시점과 모든 기능이 사람과의 상호작용에 반응하는 시점 사이의 시간은 메인 스레드에서 다운로드, 구문 분석 및 실행해야 하는 JavaScript의 크기와 복잡성 및 장치 속도에 따라 달라지는 경우가 많거나 부족합니다(저사양 모바일 장치를 생각해보세요). 지연 시간이 길어질수록, 사용자 경험은 더욱 안 좋아집니다. 사이트 초기화 시간을 줄이고 시간이 오래 걸리는 작업 (en-US)을 제거하면 최초 입력 지연을 제거하는 데 도움이 될 수 있습니다.

같이 보기
-----

* requestIdleCallback
* 지연 로딩
Microsoft Internet Explorer
===========================

Internet Explorer (또는 IE)는 Microsoft에서 레거시 엔터프라이즈 사용을 위해 유지 관리하는 무료 그래픽 브라우저입니다. Microsoft Edge는 현재 기본 Windows 브라우저입니다.

Microsoft는 1995년 "Microsoft Plus!"라는 패키지의 일부로 IE를 Windows와 함께 번들로 제공했습니다. 2002년 무렵, Internet Explorer는 전 세계에서 가장 많이 사용되는 브라우저가 되었지만 Chrome, Firefox, Edge 및 Safari에 의해 기반을 잃었습니다.

IE는 많은 릴리즈를 거쳤으며 현재 데스크탑, 모바일 및 Xbox Console 버전을 사용할 수 있는 버전 11.0.12을 출시하였습니다. 마이크로소프트는 2003년과 2001년에 각각 이전에 Mac과 UNIX에서 사용되었던 버전을 중단하였습니다. 최종 Windows 릴리스는 2020년 11월 10일 Windows 11.0.220이었습니다.

Microsoft는 2022년 6월 15일에 IE에 대한 지원을 종료했습니다.

같이 보기
-----

* 위키피디아의 Internet Explorer
* 위키피디아의 History of Internet Explorer
* 위키피디아의 Internet Explorer versions on Wikipedia
* Internet Explorer EOL countdown
동기(Synchronous)
===============

**동기**란 각 참여자가 즉시(또는 가능한 한 즉시) 메시지를 수신(필요시 처리 및 회신)하는 실시간 통신을 말합니다.

사람으로 예를 들면 전화가 있습니다. 전화 통화 중에는 상대방에게 즉시 응답하는 경우가 많습니다.

많은 프로그래밍 명령어도 동기식입니다. 예를 들어, 계산을 입력할 때 결과를 프로그래밍하지 않는 한 환경에서 즉시 결과를 반환합니다.

같이 보기
-----

* 비동기(Asynchronous)
* XMLHttpRequest() API 를 활용한 동기, 비동기 요청 (en-US)
지역 변수 (Local variable)
======================

이름이 로컬 범위 내에서만 해당 값에 바인딩되는 변수입니다.

예제
--


```js
let global = 5; // 전역 변수

function fun() {
  let local = 10; // 지역 변수
}
```

같이 보기
-----

* 위키백과의 지역 변수
지역 범위 (Local scope)
===================

지역 범위는 변수를 로컬로 만드는 변수의 특성입니다. 즉, 변수 이름은 전역 범위가 아닌 범위 안에서 해당 값에만 바인딩됩니다.

같이 보기
-----

* 위키백과의 스코프
포트 (Port)
=========

IP 주소를 사용하여 네트워크에 연결된 컴퓨터의 경우, **포트(port)** 는 통신의 종점입니다. 포트는 숫자로 지정되고, 1024 미만의 각 포트는 기본적으로 특정 프로토콜과 연결됩니다.

 예를 들어, HTTP 프로토콜의 기본 포트는 80이고 HTTPS 프로토콜의 기본 포트는 443이므로, HTTP 서버는 해당 포트에서 요청을 기다립니다. 각 인터넷 프로토콜은 기본 포트인
 각 인터넷 프로토콜은 기본 포트인 SMTP (25), POP (110), IMAP (143), IRC (194) 등과 연결되어 있습니다.

같이 보기
-----

* 위키백과의 Port
보고 지시어 (Reporting directive)
============================

**CSP 보고 지시어(reporting directives)** 는 `Content-Security-Policy` (en-US) 헤더에 사용되며 CSP 위반 보고 프로세스를 제어합니다.

전체 목록은 보고 지시어(Reporting directives) (en-US)를 참조합니다.

같이 보기
-----

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

컴퓨터 프로그래밍은 명령어 모음집을 작성하고 구성하는 과정입니다. 이것들은 컴퓨터/소프트웨어 프로그램에게 컴퓨터가 이해하는 언어로 무엇을 해야 하는지 알려줍니다. 이러한 명령어의 종류로 C++, Java, JavaScript, HTML, Python, Ruby, Rust와 같은 다양한 언어의 형태로 나온다.

적절한 언어를 사용하면, 모든 종류의 소프트웨어를 프로그래밍/생성할 수 있습니다. 예를 들면, 복잡한 계산을 하여 과학자들을 돕는 프로그램, 엄청난 양의 데이터를 저장하는 데이터베이스, 음악을 다운받을 수 있는 웹 사이트, 애니메이션 영화를 만들 수 있는 애니메이션 소프트웨어가 있습니다.

같이 보기
-----

* Wikipedia의 컴퓨터 프로그래밍
* 프로그래밍 언어의 종류: 위키피디아
유닉스 시간 (Unix time)
==================

유닉스 시간(Unix time)은 타임스탬프를 표현하는 방법으로, 일반적으로 1970년 1월 1일 자정(UTC)인 유닉스의 시간 표기(Unix epoch)가 시작된 이후의 초 수로 정의됩니다. 윤초(Leap seconds)는 무시됩니다.

웹 플랫폼에서, 유닉스 시간(Unix time)이 타임스탬프에 사용되며, 유닉스의 시간 표기(Unix epoch)가 시작된 이후의 밀리초 단위로 표시됩니다.

같이 보기
-----

* 위키백과의 Unix time
* 위키백과의 윤초(Leap second)
플러그인 (Plugin)
=============

브라우저 플러그인은 브라우저가 기본적으로 지원할 수 없는 콘텐츠를 처리하기 위해 사용자가 설치할 수 있는 소프트웨어 구성요소입니다. 브라우저 플러그인은 일반적으로 NPAPI (Netscape 플러그인 애플리케이션 프로그래밍 인터페이스) 아키텍처를 사용해 작성됩니다.

가장 잘 알려지고 널리 사용되는 플러그인은 브라우저에서 Adobe Flash 콘텐츠를 실행할 수 있게 해주는 오래된 Adobe Flash player이었습니다.

브라우저가 더욱 강력해지면서, 플러그인의 유용성이 떨어졌습니다. 플러그인에는 웹 사용자에게 보안 및 성능 문제를 일으킨 역사가 있습니다.

2016년부터 2021년까지 브라우저 공급업체는 플러그인, 특히 Adobe Flash에 대한 지원 중단 로드맵을 작성했고 현재 플러그인은 더 이상 주요 브라우저에서 지원되지 않습니다.

플러그인은 브라우저 확장 프로그램과 혼동해서는 안 됩니다. 브라우저 확장 프로그램은 플러그인과 달리 바이너리가 아닌 소스 코드로 배포되며 특히 WebExtensions 시스템을 사용하여 브라우저에서 여전히 지원됩니다.

같이 보기
-----

* Adobe Flash 수명 종료 발표
게코 (Gecko)
==========

**게코(Gecko)** 는 Mozilla Project에서 개발하고 Firefox 및 Firefox 운영체제를 포함한 많은 애플리케이션/장치에서 사용되는 레이아웃 엔진입니다.

웹 브라우저에는 HTML, CSS, JavaScript 및 삽입된 콘텐츠(예, 이미지)를 해석하고 모든 것을 화면에 그리는 레이아웃 엔진이라는 소프트웨어가 필요합니다. 추가적으로, 게코(Gecko)는 연관된 API가 게코(Gecko)가 지원하는 모든 운영체제에서 잘 작동하는지 확인하고, 적절한 API가 관련 지원 대상에만 노출되도록 합니다. 이것은 게코(Gecko)에는 무엇보다도 네트워킹 스택, 그래픽 스택, 레이아웃 엔진, JavaScript 가상 머신 및 포팅 레이어가 포함되어 있음을 의미합니다.

모든 Firefox 운영체제 애플리케이션은 웹 앱이므로 Firefox 운영체제는 애플리케이션 런타임으로도 게코(Gecko)를 사용합니다.

같이 보기
-----

* 위키백과의 게코(Gecko)
RTL (Right to Left)
===================

**RTL** 은 텍스트가 오른쪽에서 왼쪽으로 쓰여지는 것을 나타내는 locale 속성입니다.

예를 들어, `he` locale (히브리어의 경우)은 오른쪽에서 왼쪽으로 지정합니다. 아랍어 (`ar`)는 RTL로 작성된 또 다른 공용 언어입니다.

RTL과 반대로, LTR (Left To Right)은 영어 (`en`, `en-US`, `en-GB`, 등), 스페인어 (`es`) 및 프랑스어 (`fr`)를 포함한 다른 언어에서 사용합니다.

같이 보기
-----

* MDN 웹 문서 용어사전
    + Localization
    + LTR (Left to Right)
    + RTL (Right to Left)
엄격 모드 (Strict mode)
===================

JavaScript의 **엄격 모드(strict mode)** 는 제한된 JavaScript 변형을 선택하여 느슨한 모드를 암시적으로 거부하는 방법입니다. 엄격 모드는 그냥 부분 집합이 아니며, 의도적으로 일반 코드와 다른 의미론을 가지고 있습니다.

전체 스크립트에 대한 엄격 모드는 다른 문 앞에 `"use strict";` 문을 포함하여 호출됩니다.

같이 보기
-----

* 엄격 모드
* 용어 사전
    + Sloppy mode
RGB
===

*Red-Green-Blue* (**RGB**)는 'red', 'green' 및 'blue'라는 세 가지 기본 구성 요소(또는 채널)의 혼합으로 색상을 나타내는 색상 모델입니다. 이 모델은 일련의 세 개의 숫자(일반적으로 0.0에서 1.0 사이 또는 0에서 255 사이)로 색상을 설명합니다. 각 숫자는 최종 색상을 결정하는 데 있어 기본 색상의 다양한 강도(또는 기여도)를 나타냅니다.

RGB 값만으로는 의미가 없습니다. 색상 모델은 세 가지 구성 요소가 색상 공간과 어떻게 관련되는지 정의합니다. 그래픽적으로, 3차원 격자나 큐브의 점은 색상을 나타냅니다. 각 차원(또는 축)은 서로 다른 채널에 해당합니다. RGB 색상 모델은 기본 색상 공간의 '입방체(cubic)' 또는 '데카르트(Cartesian)' 좌표계입니다.

웹의 경우, RGB 값의 기본 색상 공간은 'sRGB' (표준 RGB)이고 각 RGB 구성 요소는 0에서 255 사이의 숫자입니다.

'Adobe RGB' 색상 공간과 같이 'sRGB' 색상 공간보다 더 넓은 색 재현율 색상을 표현할 수 있는 다른 RGB 색상 공간이 있습니다. 'sRGB'와 'Adobe RGB'의 좌표가 다릅니다.

색상의 RGB 구성 요소를 설명하는 방법에는 여러가지가 있습니다. CSS에서는 16진수 표기법(예, `#add8e6`은 연한 파란색) 또는 함수 표기법(`rgb(46 139.5 87)`와 같이 0과 255 사이의 세 개의 개별 숫자로 표현할 수 있는 `rgb()` (en-US))으로 단일 24비트 정수로 표시할 수 있습니다. `color()` (en-US) 함수에는 `srgb`, `srgb-linear`, `a98-rgb` 및 `prophoto-rgb` 색상 공간도 있습니다.

RGB가 'sRGB' 색상 공간을 표현할 수 있는 유일한 색상 모델은 아닙니다. `HSL` (en-US) (색상-채도-밝기(hue-saturation-lightness)) 또는 `HWB` (en-US) (색상-백색-흑도(hue-whiteness-blackness))와 같은 원통형 좌표계 색상 모델은 웹에서 sRGB 색상을 나타내는 데에도 사용됩니다.

같이 보기
-----

* 위키백과의 RGB 색상 모델
* 위키백과의 sRGB 색 공간
* 위키백과의 Adobe RGB 색 공간
* CSS 데이터 타입: <color>
모바일 우선 (Mobile First)
=====================

점진적인 향상의 한 형태인 **모바일 우선 (Mobile first)** 은 데스크톱 화면 크기에 대한 디자인 및 개발보다, 모바일 화면 크기에 대한 디자인 및 개발에 우선순위를 두는 웹 개발 및 웹 디자인 접근 방식입니다. 모바일 우선 접근 방식을 사용하는 이유는 작은 화면에서 잘 작동하는 사용자 경험을 만드는 것부터 시작해, 화면 크기가 커짐에 따라 사용자 경험을 더욱 풍부하게 만들어 모든 화면 크기에서 사용자에게 좋은 사용자 경험을 제공하는 것입니다. 모바일 우선 접근 방식은 데스크톱 화면 크기에 맞게 먼저 디자인한 다음, 나중에 작은 화면 크기에 대한 일부 지원을 추가하는 기존 접근 방식과 반대됩니다.