TCP의 세 가지 제어 기능

 

  • TCP는 흐름 제어, 오류 제어, 혼잡 제어 이 세 가지 제어 기능으로 안정적인 1:1 송.수신을 구현합니다. 이러한 기능들 덕분에 TCP를 사용할 경우 상위 레이어에만 개발에 집중할 수 있습니다.




흐름 제어

 

  • 흐름 제어는 상대방의 window size를 고려하여 송신 데이터의 크기를 조절하고 응답에 상관없이 window size만큼 데이터를 연속적으로 송신하는 기능을 담당합니다.




Stop and wait

 

 

  • 데이터를 송신하면 상대방이 데이터를 잘 수신 받았는지 여부를 확인하기 위해 ACK 응답을 기다립니다. ACK 응답의 Acknowledge Number를 통해서 수신 여부 및 정말로 보낸 데이터 만큼 잘 수신 받았는지를 확인할 수 있습니다.




Sliding window

 

 

  • sliding window는 TCP가 3-way-hasdshake 과정에서 알아냈던 상대방의 window size만큼 수신 응답을 기다리지 않고 데이터를 연속적으로 보내며 수신자 측은 지금까지 수신받았던 데이터 크기와 Sequence Number를 기반으로 Acknowledge Number를 셋팅하여 한 번에 응답합니다. 이러한 기능 덕분에 TCP의 패킷 당 송.수신 확인 응답으로 인한 지연을 줄일 수 있습니다.




오류 제어

 

  • TCP는 일정시간 수신자에게 응답이 없거나 송신 데이터가 잘못되어 NACK(Negative Ack)로 응답이 올 경우 자동으로 재전송하는 ARQ(Automatic Repeat Request) 기법을 사용합니다. 그리고 TCP는 Checksum과 Sequence Number, Acknowledge Number를 이용해서 송.수신 데이터의 오류를 검출하며 Go Back N, Selective Repeat을 혼합한 형태로 오류 제어를 합니다.(Stop and Wait 전송 속도가 매우 느리고 효율이 낮아서 사용되지 않습니다.)




Stop and Wait

 

 

  • 데이터를 송신하고 수신자로부터 일정시간 동안 ACK 응답이 없어 timeout이 되거나 NACK가 올 경우 전송했던 데이터를 재전송합니다.




Go Back N ( GBN )

 

 

  • Go Back N 방식은 위와 같이 sliding window를 이용해 연속적으로 데이터를 보내다가 timeout으로 데이터가 유실되었음을 인지하거나 수신자로부터 NACK 응답이 왔을 경우 문제가 발생된 데이터부터 다시 재전송하는 방식을 말합니다. 구현은 간단하지만 잘못된 데이터부터 모두 다시 보내야 한다는 단점이 있습니다.




Selective Repeat( SR )

 

 

  • Selective Repeat은 모든 응답에 대해서 ACK를 보내고 누락되거나 잘못된 패킷에 대해서만 NACK를 통해 재전송 요청을 합니다. 중간에 잘못되거나 누락된 패킷이 재전송되어 수신할 경우 기존에 받았던 패킷들과 순서에 맞게 재조합을 해야하기 때문에 추가적인 작업과 버퍼가 필요합니다. 또한 모든 패킷에 대한 응답이 필요하기 때문에 네트워크 트래픽이 증가될 수 있습니다.

 

  • 데이터를 연속적으로 송신하다가 중간의 데이터가 유실되어 동일한 ACK가 지속적으로 올 경우 timeout을 기다리지 않고 데이터가 유실되었다고 판단하여 재전송합니다.




혼잡 제어

 

 

  • 통신하는 네트워크 내의 트래픽이 과도하게 증가하여 송.수신이 원활하게 이루어지지 않는 상태를 혼잡이라고 합니다. TCP가 패킷 유실률 그리고 응답 속도를 종합하여 혼잡도를 판단합니다. 그리고 혼잡 제어는 네트워크의 혼잡한 현상을 방지하고 제거하기 위해 사용되는 기능입니다.




Awnd( Advertised window )와 Cwnd( Congention window)

 

  • Awnd는 실제로 수신자가 한 번에 데이터를 수신받을 수 있는 최대 버퍼 크기를 의미합니다.

 

  • Cwnd는 TCP가 네트워크 혼잡도에 따라서 실제로 수신자에게 한 번에 송신할 수 있는 데이터 크기를 의미하며, 최대 크기는 Awnd입니다.




Slow Start

 

  • TCP는 처음 연결직후 Cwnd의 사이즈를 1로 하고 임계 지점을 Awnd의 1/2로 합니다. 수신자로부터 ACK 응답을 받을 때마다 Cwnd 사이즈를 2베씩 증가시켜가며 Cwnd가 임계 지점에 도달했다면 ACK 응답을 받을 때마다 1씩 증가시켜 Awnd 크기 만큼 증가시킵니다.

 

  • timeout이 발생되었다면 네트워크가 혼잡하다고 판단하여 Cwnd를 1로 하고, 임계 지점의 크기를 반으로 줄인 후 다시 Slow Start 방식으로 Cwnd를 증가시킵니다.




Fast Retransmit( 빠른 재전송 ) & Fast Recovery( 빠른 회복 )

 

  • sliding window를 통해서 패킷을 송신하는 도중에 중간 패킷이 유실되어 수신자가 유실전 패킷에 대한 ACK를 3번 연속으로 보내게 될 경우 timeout을 기다리지 않고 유실된 패킷을 재전송합니다. 이러한 방식을 Fast Restransmit이라 하며, 이를 통해 TCP는 네트워크의 혼잡함을 인지하여 Cwnd를 1이 아닌 1/2로 줄이며 해당 지점을 임계 지점으로 설정합니다. 이후 ACK를 받을 때마다 1씩 최대 Awnd만큼 증가시키며 이를 Fast Recovery 라고 합니다.




URL 문법

 

URL 구조

 

<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/경로;<파라미터>?<질의>#<프래그먼트>




스킴

 

  • 어떤 프로토콜을 사용하여 서버 리소스를 요청해야 하는지를 의미합니다.

 

  • 스킴 컴포넌트는 알파벳으로 시작해야 하고 URL의 나머지 부분들과 :로 구분합니다.

 

  • 스킴명은 대소문자를 구분하지 않습니다.




사용자 이름

 

  • 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 합니다.




비밀번호

 

  • 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론(:)으로 이어서 기술합니다.




호스트

 

  • 리소스를 호스팅하는 서버의 호스트 명이나 IP주소를 의미합니다.




포트

 

  • 리소스를 호스팅하는 서버의 포트 번호를 의미합니다.




경로

 

  • 서버 내 리소스가 어디에 있는지를 가리킵니다. 경로 컴포넌트의 문법은 서버와 스킴에 따라 다릅니다.

 

  • 경로 컴포넌트는 유닉스 파일 시스템 경로와 유사한 구조를 가집니다.

 

  • 각 경로조각은 자체만의 파라미터 컴포넌트를 가질 수 있습니다.




파라미터

 

  • 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용되며 파라미터는 이름/값을 쌍으로 가집니다.

 

  • URL에서 경로마다 파라미터를 가질 수 있습니다.

 

  • URL 나머지 부분과 ; 문자로 구분하여 URL에 기술합니다.




쿼리

 

  • 스킴에서 애플리케이션(데이터베이스, 게시판, 검색엔진 등)에 파라미터를 전달하는데 사용됩니다.

 

  • URL 나머지 부분과 ?로 구분하여 이름/값을 쌍으로 가집니다.

 

  • &을 이용해서 여러개의 쿼리문을 사용할 수 있습니다.




프래그먼트

 

  • 리소스의 조각이나 일부분을 가리키는 이름입니다. 프래그먼트 필드는 서버에 전달되지 않습니다. 이는 클라이언트에서만 사용하며 리소스의 특정 부분을 가리킬 수 있도록 사용하는 기능입니다.




relational data model에서의 용어

 

 

domain

 

  • "set of atomic values"로서 attribute가 가질 수 있는 원자적인 값의 집합을 의미힙니다.




demain name

 

  • domain 이름을 의미합니다.




attribute

 

  • domain이 relation에서 맡은 역할 이름으로서 테이블에서 데이터들의 속성 이름입니다.




tuple

 

  • 각 attribute의 값으로 이루어진 리스트 즉, 테이블에서 하나의 행(row) 입니다.




relation

 

  • tuple들의 집합을 relation을 의미하며 즉, 테이블으로도 불립니다.




relation name

 

  • relation의 이름을 의미합니다.




relation schema

 

  • relation의 구조를 나타내며, relation 이름과 attributes 리스트로 표기됩니다.




degree of a relation

 

  • relation schema에서 attribute의 수를 의미합니다.




relational database

 

  • relational data model에 기반하여 구조화된 database를 의미하며, relational database는 여러 개의 relations로 구성됩니다.




relational database schema

 

  • relation schemas들의 집합과 relations간의 무결성 제약조건(integrity constraints set)으로 구성된 schema를 의미합니다.




relation의 특징

 

  • relation은 중복된 tuple을 가질 수 없습니다.

 

  • relation의 tuple을 식별하기 위해 attribute의 부분 집합을 key로 설정합니다.

 

  • relation에서 tuple의 순서는 중요하지 않습니다. 순서가 바뀐다고하여 relation의 의미가 바뀌지 않기 때문입니다.

 

  • 하나의 relatino에서는 attribute의 이름은 중복돼선 안됩니다. 또한 attribute의 순서도 중요하지 않습니다.

 

  • attribute는 atomic 해야됩니다.




relation의 key의 의미

 

super key

 

  • relation에서 tuple을 unique하게 식별할 수 있는 attributes set을 말합니다. 즉, super 키는 하나의 attribute 또는 여러 개의 attributes가 될 수 있습니다.

 

  • 슈퍼키는 릴레이션을 구성하는 모든 튜플에 대해 유일성을 만족시키지만, 최소성은 만족시키지 못할 수 있습니다. 즉, super key의 attribute 일부를 가지고 튜플을 식별할 수도 있습니다.




candidate key

 

  • 어느 한 attribute라도 제거하면 unique하게 tuples를 식별할 수 없는 super key를 의미합니다. candidate key는 minimal super key로도 불립니다. 즉, candidate key는 유일성과 최소성을 만족하는 key 입니다.




primary key

 

  • relation에서 tuple을 unique하게 식별하기 위해 선택된 candidate key를 의미합니다. 한 relation에서 특정 튜플을 유일하게 식별할 수 있으며 NULL을 가질 수 없습니다.




unique key

 

  • unique key는 primary key가 아닌 candidate key를 의미합니다. 혹은 alternate key라고도 불립니다.




foreign key

 

  • 다른 relation의 primary key를 참조하는 attribute를 말합니다.




constraint(제약 조건)

 

  • relatinoal database의 relations들이 언제나 항상 지켜줘야 하는 제약 사항을 의미힙니다.




implicit contraints

 

  • relational data model 자체가 가지는 constraint를 의미합니다. relation내에서 중복되는 tuple 또는 중복되는 attribute 가질 수 없다는 제약 사항이 있습니다.




schema-based constraints(or explicit constraints)

 

  • 주로 DDL을 통해 schema에 직접 명시할 수 있는 constraints를 의미합니다. 예를들어 제약 사항을 통해서 attribute의 value를 domain에 속한 value로 제한하거나 서로 다른 tuple이 동일한 key 값을 가질 수 없게 하거나 NULL 값을 가질 수 없게 지정할 수 있습니다.




모듈(module)이란?


  • 모듈이란 애플리케이션을 구성하는 개별적 요소로서 재사용이 가능한 코드 모음을 말합니다. Javascript에서의 모듈은 기능을 기준으로 파일 단위로 분리합니다. 이때 모듈이 성립하려면 모듈은 자신만의 파일 스코프(모듈 스코프)를 가질 수 있어야 합니다.




모듈 export


export const hello = () => {
  console.log("Hello World");
};

  • 자신만의 모듈(파일) 스코프를 갖는 모듈 내부에 있는 코드들은 기본적으로 비공개 상태입니다. 하지만, 모듈안에 있는 기능을 사용자가 사용하거나 다른 모듈에서 사용하기 위해서는 선택적으로 공개할 수 있어야 합니다. 이렇게 일부 코드를 공개하기 위해서는 공개할 코드에 export 키워드를 사용하고 다른 모듈에서는 사용할 외부 모듈의 코드에 대해서 import하여 해당 코드를 접근할 수 있도록 할 수 있습니다.




브라우저와 모듈 시스템


  • 자바스크립트는 웹 페이지의 보조적인 역할을 목적으로 태어났기 때문에 다른 일반 프로그래밍 언어보다 지원하는 기능이 많지 않았습니다. 그래서 모듈 시스템이 지원되지 않았고 브라우저에서 각 파일로 분리된 자바스크립트 파일을 script 태그로 불러와도 하나의 파일처럼 동작하기 때문에 전역 코드의 오염이 발생되는 경우가 많았습니다.(Node.js는 모듈 시스템을 지원하고 있습니다.)




브라우저에서 모듈 시스템 사용하기


<!DOCTYPE html>
<html>
  <body>
    <script type="module" scr="foo.mjs"></script>
    <script type="module" scr="bar.mjs"></script>
  </body>
</html>

  • ES6 이후 부터는 브라우저에서도 모듈 시스템을 사용할 수 있으며, 모듈로서 사용할 파일의 확장자 이름은 .mjs로 해야합니다. 그리고 script 태그의 속성으로 type="module"을 지정하면됩니다.




'Programming Language > JavaScript' 카테고리의 다른 글

Javascript의 이터레이션 프로토콜이란?  (0) 2022.12.20
Javascript 배열  (0) 2022.12.20
Javascript의 async/await 사용법  (0) 2022.12.19
Javascirpt fetch 사용 방법  (0) 2022.12.19
Javascript의 Promise란?  (0) 2022.12.19

fetch


fetch(url).then((res) => console.log(res));

  • fetch 함수는 Promise 방식을 지원하고 HTTP request 기능을 제공하는 함수입니다. fetch 함수는 HTTP 응답을 나타내는 Response 객체를 래핑한 Promise 객체를 반환합니다. 그리고 res 객체에는 HTTP 응답을 나타내는 다양한 프로퍼티를 제공합니다.

  • featch 에러는 서버로부터 온 응답이 404 또는 500이여도 rejected 상태가 되지 않고 fulfilled 상태가 됩니다. rejected 상태가 되는 경우는 네트워크 장애나 CORS 에러에 의해 요청이 완료되지 못한 경우에는 Promise를 rejected 합니다.




fetch 사용 예시


fetch(url).then((res) => {}); // method를 설정하지 않으면 GET으로 정의합니다.

fetch(url, {
  method: "POST", // or PUT, PATCH
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(payload),
}).then((res) => {});

fetch(url, { method: "DELETE" }).then((res) => {});



// async/await 을 사용한 버전

(async () => {
  const res = await fetch(url);
})();

(async () => {
  fetch(url, {
    method: "POST", // or PUT, PATCH
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(payload),
  });
})();

(async () => {
  fetch(url, { method: "DELETE" }).then((res) => {});
})();




JSON(Javascript Object Notation)이란?


  • JSON(Javascript Object Notation)은 Javascript Object 객체 표현 방식으로 데이터를 표기하는 포맷입니다.




JSON 표기방식


{
  "name": "devhun",
  "age": "25",
  "isHandsome": true,
  "body": ["traveling", "tennis"]
}

  • JSON 표기법은 위와 같으며 key에는 반드시 큰따옴표로 묶어야합니다.




JSON.stringify


const player = {
  name: "devhun",
  age: "25",
  isHandsome: true,
  body: ["traveling", "tennis"],
};

const jsonStr = JSON.stringify(player);

  • JSON.stringify는 객체를 JSON 포맷의 문자열로 변환하는 작업을 수행합니다.




JSON.parse


  • JSON 포맷의 문자열을 객체로 변환해줍니다. 예를들어서 서버로 부터 받은 JSON 포맷의 문자열을 클라이언트가 JSON.parse를 통해서 다시 객체로 변환하여 사용할 수 있습니다.




'Programming Language > JavaScript' 카테고리의 다른 글

Javascirpt fetch 사용 방법  (0) 2022.12.19
Javascript의 Promise란?  (0) 2022.12.19
Javascript의 비동기 처리 방식  (0) 2022.12.19
Set과 Map  (0) 2022.12.19
자바스크립트 Symbol이란?  (0) 2022.12.19

Set 자료구조란?

 

구분
배열
Set 객체
동일한 값을 중복하여 포함할 수 있다. O X
요소 순서에 의미가 있다. O X
인덱스로 요소에 접근할 수 있다. O X

 

  • Set 객체는 중복되지 않는 유일한 값을 저장하는 해시 테이블 자료구조입니다. Set 객체는 배열과 유사하지만 위와 같은 차이가 있습니다.




Set 사용법

 

const set = new Set([1, 2, 3, 4]);

set.add(5).add(4);

// true return
set.delete(1);

console.log(set);

 

  • Set 생성자 함수는 이터러블을 인수로 전달받아 Set 객체를 생성합니다. 이때 이터러블의 중복된 값은 Set 객체에 요소로 저장되지 않습니다. 중복을 허용하지 않는 Set 객체의 특성을 활용하여 배열에서 중복된 요소를 제거할 수 있습니다.

 

  • add를 통해서 요소를 추가할 수 있으며, 중복된 요소가 추가될 경우 무시됩니다. NaN === NaN은 false를 return 하지만 Set에서는 이를 동일하다고 평가합니다.

 

  • delete는 요소를 삭제할 때 사용하는 함수이며 return 값은 삭제 성공 여부에 다라서 true, false를 return 합니다.




Map 자료구조란?

 

구분
객체
Map 객체
키로 사용할 수 있는 값 문자열 또는 심벌 값 객체를 포함한 모든 값
이터러블 X O
요소 개수 확인 Object.keys(obj).length map.size
  • Map 객체는 키와 값의 쌍으로 이루어진 해시 테이블 자료구조 입니다. Map 객체는 객체와 유사하지만 위와 같은 차이가 있습니다.




Map 사용법

 

const map = new Map([
  ["key1", "value1"],
  ["key2", "value2"],
]);

map.set("key3", "value3").set("key1", "Hello");

map.get("key3");

// return 값은 boolean
map.delete("key1");

console.log(map);

 

  • Map 생성자 함수는 이터러블을 인수로 전달받아 Map 객체를 생성합니다. 이때 인수로 전달되는 이터러블은 키와 값의 쌍으로 이루어진 요소로 구성되어야 합니다. Map 생성자 함수의 인수로 전달한 이터러블에 중복된 키를 갖는 요소가 존재하면 값이 덮어씌워집니다. 따라서 Map 객체에는 중복된 키를 갖는 요소가 존재할 수 없습니다.

 

  • set 메서드를 통해서 요소를 추가할 수 있으며 추가된 Map 객체를 return합니다.

 

  • get 메서드를 통해서 key에 대응하는 value를 얻을 수 있으며 key가 없을 경우 undefined를 return 합니다.

 

  • Map 또한 Set과 동일하게 NaN === NaN을 true로 평가합니다. 객체의 키로는 제한이 있지만 Map 객체의 키 타입에는 제한이 없으며 객체를 포함한 모든 값을 키로 사용할 수 있습니다.




'Programming Language > JavaScript' 카테고리의 다른 글

JSON(Javascript Object Notation)이란?  (0) 2022.12.19
Javascript의 비동기 처리 방식  (0) 2022.12.19
자바스크립트 Symbol이란?  (0) 2022.12.19
ES6에서의 함수  (0) 2022.12.19
자바스크립트와 클래스  (0) 2022.12.15

심벌(Symbol)이란?


  • 심벌(Symbol)은 ES6에서 도입된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값입니다. 심벌 값은 다른 값과 중복되지 않는 유일무이한 값입니다. 따라서 주로 이름 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용합니다.




심벌 값의 생성


  • 심벌 값은 Symbol 함수를 호출을 통해서만 생성할 수 있습니다. 이떄 생성된 심벌 값은 외부로 노출되지 않아 확인할 수 없으며, 다른 값과 절대 중복되지 않는 유일무이한 값입니다.




심벌을 통한 enum


const Direction = Object.freeze({
  UP: Symbol(),
  DOWN: Symbol(),
  LEFT: Symbol(),
  RIGHT: Symbol(),
});

const myDirection = Direction.UP;
console.log(myDirection === Direction.UP);

  • enum은 명명된 숫자 상수의 집합으로 열거형이라 불립니다. C/C++, 자바, 파이썬 등 여러 프로그래밍 언어에서는 enum을 지원하지만 자바스크립트에서는 지원하지 않습니다. 그래서 위와 같이 심볼과 Object.freeze 메서드를 이용해서 enum을 구현할 수 있습니다.




심벌과 프로퍼티 키


const obj = {
  [Symbol.for("sym")]: "devhun",
};

// devhun return
console.log(obj[Symbol.for("sym")]);

  • Symbol을 이용해서 위와 같이 키로 사용할 Symbol을 대괄호와 Symbol 메서드를 통해 정의할 수 있습니다.

  • 표준 빌트엔 객체에 프로퍼티나 메서드를 추가하는 것은 향후 ES 버전이 올라감에 따라 중복될 수 있을 가능성이 있습니다. 이를 방지하기 위해서는 Symbol을 이용해서 추가하는 것이 중복되는 것을 방지하고 안전하게 사용할 수 있습니다.




'Programming Language > JavaScript' 카테고리의 다른 글

Javascript의 비동기 처리 방식  (0) 2022.12.19
Set과 Map  (0) 2022.12.19
ES6에서의 함수  (0) 2022.12.19
자바스크립트와 클래스  (0) 2022.12.15
자바스크립트의 클로저(Closure)란?  (0) 2022.12.14

함수의 구분

 

ES6 함수의 구분
constructor
prototype
super
arguments
일반 함수 O O X O
메서드 X X O O
화살표 함수 X X X X

 

  • ES6 이전에서는 모든 함수가 callable이며 constructor입니다. 하지만 ES6 이후부터는 메서드(ES6에서의 메서드)와 화살표 함수는 callable이면서 non-constructor입니다. 이러한 구분이 중요한 이유는 호출 용도로만 사용될 함수가 constructor이면 불필요한 prototype 프로퍼티를 가지며, 프로토타입 객체도 생성하는 불필요한 작업이 추가되기 때문입니다.




메서드

 

const player = {
  name: "devhun",

  // 메서드 축약표현
  sayHello() {
    console.log(`my name is ${name}`);
  },
};

 

  • 과거에는 메서드에 대한 명확한 정의가 없었지만, ES6 이후부터 메서드는 메서드 축약 표현으로 정의된 함수만을 의미합니다. ES6 사양에서 정의한 메서드는 non-constructor로서 new 연산자와 함께 호출될 경우 TypeError가 발생됩니다.

 

  • super 키워드로 부모 클래스의 프로퍼티 및 메서드를 참조하려면 반드시 ES6에서 정의한 메서드 축약표현으로 정의된 함수로만 참조할 수 있습니다.




화살표 함수

 

  • 화살표 함수는 표현만 간략한 것이 아니라 내부 동작도 기존의 함수보다 간략합니다. 화살표 함수는 non-constructor이며 prototype 프로퍼티도 없으며 프로토타입도 생성하지 않습니다.

 

  • 화살표 함수는 함수 내부에서 this, arguments, super new.target을 참조하면 스코프 체인을 통해 상위 스코프의 this, arguments, super, new.target을 참조합니다.

 

  • 화살표 함수는 콜백 함수로서 사용하기에 적합하며 this를 가지지 않기 때문에 인스턴스의 메서드나 프로토타입 메서드로서는 사용하기에 적합하지 않습니다.




Rest 파라미터

 

function foo(...args) {
  console.log(args);
}

foo(1, 2, 3, 4);

 

  • Rest 파라미터는 매개변수 이름 앞에 세개의 점 ... 을 붙여서 정의한 매개변수를 의미합니다. Rest 파라미터는 함수에 전달된 인수들의 목록을 배열로 전달받습니다.

  • Rest 파라미터는 이름 그대로 먼저 선언된 매개변수에 할당된 인수를 제외한 나머지 인수들로 구성된 배열이 할당됩니다. 따라서 Rest 파라미터는 반드시 마지막 파라미터여야 합니다.

 

  • Rest 파라미터는 함수 정의 시 선언한 매개변수 개수를 나타내는 함수 객체의 length 프로퍼티에 영향을 주지 않습니다.

 

  • Rest 파라미터는 배열이지만, arguments는 유사 배열 객체이며 메서드와 화살표 함수에서는 사용할 수 없습니다.




'Programming Language > JavaScript' 카테고리의 다른 글

Set과 Map  (0) 2022.12.19
자바스크립트 Symbol이란?  (0) 2022.12.19
자바스크립트와 클래스  (0) 2022.12.15
자바스크립트의 클로저(Closure)란?  (0) 2022.12.14
자바스크립트의 실행 컨텍스트란?  (0) 2022.12.13

express란?


  • express는 Node.js에서 가장 많이 사용되는 웹 서버 프레임 워크중 하나입니다. koa나 hapi같은 웹 서버 프레임워크도 있지만 express가 다운로드 수가 가장 많으며, 많은 사람이 사용하는 만큼 버그가 적고 기능 추가 및 유지보수가 가장 활발하게 일어나는 웹 서버 프레임 워크입니다.




express 시작


import express from "express";

const app = express();

app.set("port", process.env.PORT);

app.listen(app.get("port"), () => {});

  • express는 내부에 http 모듈이 내장되어 있기 때문에 위와같이 express 모듈을 import하고 express app 생성 후 listen 상태로 만들어서 웹 서버를 실행할 수 있습니다.




express 메서드


app.set(key, value)


  • app.set 메서드는 app에 key와 value를 저장할 수 있습니다. 그리고 나중에 app.get(key)을 통해서 저장했던 값을 가져올 수 있습니다.




app.get(주소, 라우터)


  • 라우터에 req,res,next를 인자로 받는 콜백 함수를 등록할 수 있으며, req에는 요청에 관한 정보가 들어있으며, res에는 응답에 관한 정보가 들어있습니다. next는 현재 콜백 함수가 최종 목적지가 아닐경우 next()를 호출하여 다음 middleware가 호출될 수 있도록 합니다.




GET, POST, PUT, PATCH, DELETE


  • express 메서드에는 HTTP 메서드와 맵핑된 메서드들이 있으며 이를 이용해서 요청된 HTTP 메서드에 따라서 get, post, put, patch, delete 등의 메서드가 호출됩니다.




app.use


  • app.use는 middleware를 등록하거나 라우터를 등록할 때 사용합니다.

  • 첫 번째 인자로 주소를 넣지 않는다면 해당 middleware는 모든 요청에서 실행됩니다.




middleware


  • express에서 middleware는 요청과 응답 중간에 위치하는 콜백 함수입니다. middleware를 통해서 요청과 응답을 조작하여 기능을 추가하거나 잘못된 요청을 걸러낼 수도 있습니다.

  • middleware에서 사용하는 인자는 (req, res, next) 입니다. next를 통해서 다음 미들웨어나 finaleware의 호출 여부를 결정짓습니다.

  • middleware는 app.use를 통해서만 등록할 수 있는 것은 아니며, get, post, put, delete 등의 http 메소드를 특정하여 해당 요청에서만 호출될 수 있도록 할 수 있습니다.




(err, req, res, next) middleware


  • 특정 middleware에서 error 가 발생되어 next 호출 시 error를 전달하였다면 (err, req, res, next)를 인자로 받는 middleware가 호출되어 에러를 핸들링 하도록 할 수 있습니다.




route


router
  .route("/abc")
  .get((req, res) => {})
  .post((req, res) => {});

  • route 메서드를 이용해서 동일한 Url로 요청한 메서드들을 가시성 있게 프로그래밍할 수 있습니다.




'Node.js' 카테고리의 다른 글

npm(node package manager)란?  (0) 2022.12.18
Node.js의 파일 시스템  (0) 2022.12.17
Node.js와 모듈  (0) 2022.12.11
Node.js란?  (0) 2022.12.11

+ Recent posts