Node.js

21.02.17 통신 프로토콜, 패키지 모듈, 쿠키-세션

슈팅스타제제 2021. 2. 18. 06:12

프로토콜의 종류가 많은데 이것들의 관계가 제대로 이해가지 않아서 어떤 것이 어떤 프로토콜인지 헷갈렸다.

ISO에서 컴퓨터 네트워크 프로토콜 디자인과 통신을 7개의 계층으로 이루어져 있는 OSI 모형으로 정의하였다.

그 중 7계층에 해당하는 응용 계층(Application Layer)에 해당하는 통신 프로토콜 중 http에 대해서 알아볼 것이다.

 

OSI 7계층 모형

프로토콜이란?

일반적으로 공통적으로 데이터를 교환하는 방법이나 순서에 대해서 정의한 의사소통 약속, 규칙 체계를 말한다.

OSI 계층에 대한 프로토콜들로 많은 종류가 있다. 내가 헷갈리는 프로토콜은 통신 프로토콜과 네트워크 프로토콜이었는데 위의 OSI 모형에 따르면 전혀 다른 개념이었다. HTTP는 7계층 응용 계층에 대한 통신 프로토콜에 포함되고 네트워크 프로토콜은 대표적으로 인터넷 프로토콜 IP 가 있다. 오늘은  통신 프로토콜 중 HTTP와 HTTPS에 대해서 알아볼 것이다. 

 

 

HTTP : Hyper Text Transfer Protocol

W3 상에서 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다. 기본 포트 번호는 80이며 HTTP 프로토콜은 이전 데이터 요청과 다음 데이터 요청이 서로 관련 없는 stateless 프로토콜이다. 그렇기 때문에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점은 있다. 하지만 로그인, 로그아웃이나 장바구니 기능을 실행할 때는 사용자 정보를 저장하는 것이 꼭 필요하므로 이것을 해결하는 것이 필요하다. 그건 아래에서 다루도록 하겠다. 

 

HTTPS : Hyper Text Transfer Protocol over Secure Socket Layer

HTTPS는 HTTP 프로토콜의 보안이 강화된 버전으로 소켓 통신에서 일반 텍스트를 사용하는 대신 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화해서 보호한다. 기본  TCP/IP 포트는 443이다.

 

SSL : Secure Socket Layer

SSL은 인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜을 말한다. HTTP보다 HTTPS의 보안성이 뛰어난 원인이다. OSI 7계층 중에서 응용계층과 전송계층 사이에 독립적인 프로토콜 계층을 만들어서 동작한다. 

그 계층의 구조는 다음과 같다. 

SSL의 독립적인 프로토콜 구조

✔ SSL의 통신 절차는 다음과 같다. 

-클라이언트가 서버에 접속하면 서버 인증서를 전송 받는다. 

-클라이언트는 받은 서버 인증서를 분석하여 신뢰할 수 있는 인증서인지 검토한 후, 서버의 공개키를 추출한다. 

-클라이언트가 세션키로 사용할 임의의 메세지를 서버의 공개키로 암호화하여 서버에 전송한다. 

-서버에서는 자신의 개인키로 세션키로 복호화하여 그 키를 사용하여 대칭키 암호방식으로 메세지를 암호화하여 클라이언트와 통신한다. 

 

 

npm : Node Package Module

npm의 한계 : npm 저장소가 보안이 취약하고 의존 패키지의 versioning 문제를 가지고 있고 패키지가 많아짐에 따라 빌드 성능이 좋지 않다. 

 

yarn : npm과 같은 자바스크립트 패키지 매니저이다. 

npm 과 비교하여 다음과 같은 특징을 가지고 있다. 

1. 안정적이다!! : yarn은 모든 패키지를 유저 디렉토리에 저장해 캐싱하기 때문에 안정적이다. 

2. 빠르다!! : 각 단계에서 설치하는데 걸린 시간을 직접 비교한 아래 table을 보면 빨간색 npm보다 파란색 yarn이 평균적으로 적은 것으로 보아 속도가 빠르다는 것을 알 수 있다.

모듈 패키지의 설치 소요시간 비교

 

Cookie

이름, 값, 속성으로 이루어져 있으며 유효시간(쿠키가 유지되는 기간), 쿠키를 전송할 도메인, 쿠키를 전송할 요청 경로 등의 정보도 포함된다. 그리고 클라이언트 PC에 저장되는 text 형식의 데이터이다. 쿠키는 참조와 재사용이 가능하고 세션과 같은 조건이라면 요청 속도가 빠르다는 이점이 있다. 

 

 쿠키의 제약 조건 : 클라이언트에 300개까지의 쿠키를 저장할 수 있고 하나의 도메인 당 20개의 값만 가질 수 있다. 하나의 쿠키 값은 4KB까지 저장 가능하다. 

 

Session 

쿠키 기반이지만 접속 중인 웹 서버에 저장되는 Object 형식의 데이터이다. 쿠키는 클라이언트 PC에 저장되어 관리하지만 세션은 서버에서만 관리할 수 있기 때문에 보안성이 뛰어나다는 이점이 있다. 

 

 세션의 제약 조건 : 사용자에 대한 정보를 서버에 두기 때문에 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다. 

 

이러한 세션 제약 조건을 해결하기 위한 방법으로는 JWT* 같은 토큰 기반의 인증 방식을 사용하는 것이 있다. 

왜냐하면 서버가 클라이언트에게서 요청을 받을 때마다 해당 토큰이 유효하고 인증됐는지 검증을 하고 유저가 요청한 작업에 권한이 있는지 확인하여 작업을 처리하기 때문이다. 그렇기 때문에 서버 측에서는 유저의 세션을 유지할 필요가 없다!

*JWT(JSON WEB TOKEN) : JSON 객체를 사용하여 정보를 안전하게 전달해주는 토큰 방식 

 

 쿠키와 세션을 사용하는 이유 : 앞서 설명했던 프로토콜의 특징이자 약점을 해결하기 위해서이다. 

-connectionless 프로토콜 : 클라이언트가 서버에 요청을 했을 때 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식 

-stateless 프로토콜 : 클라이언트의 상태 정보를 가지지 않는 처리방식