HTTP 프로토콜
세션과 쿠키를 설명하기 앞서 HTTP프로토콜의 특징에 대해서 알아보겠습니다. HTTP프로토콜은 Connectionless(비연결)을 지향합니다. 즉 클라이언트와 서버가 대화(요청, 응답)를 주고받은 후 연결을 유지하지 않았다는 말입니다.
매번 대화를 할 때마다 SYN, ACK 교환하며 Connection을 맺는데 이는 인터넷 보급이 지금처럼 잘되어있지 않았을 시절에는 무리가 없어 보였습니다. 또한 "연결합니다, 연결됐습니다." 이런 단순한 개념의 방식이 아닌 아래와 같은 TCP방식(3 way-handshake)을 사용합니다.
위 과정이 모두 끝나야 그제야 connection이 맺어집니다. 매번 연결을 다시 할 때마다 위 과정을 거치기에는 서버가 부담이 갑니다. 그렇기에 현재에는 HTTP는 Persistent Connection (지속적인 연결) 방식으로 변하게 된 것입니다.
과거에 네이버에 로그인하시고 사용하시다 웹브라우저를 종료했을 경우에 로그인을 다시 하는 경험을 다들 해보셨나요? 현재에는 로그인이 유지되어 있지만 HTTP 특징 두 번째인 stateless(무상태) 특징으로 인하여 과거에는 Connection이 끊기면 상태 정보를 유지하지 않았습니다.
그렇다면 상태를 어느 한 공간에 저장해 주면 되지 않을까? 그래서 나온 개념으로 Stateful방식입니다. 이는 쿠키와 세션을 사용하는 방식으로 쿠키는 클라이언트(PC)에 상태 정보를 저장하고 세션은 서버 쪽에서 이를 저장합니다.
쿠키
쿠키는 위에서 말했듯 클라이언트 쪽에 저장되는 작은 정보 파일(하나당 4kb 용량)입니다. 총 300개 저장이 가능하며 한 개의 도메인(도메인 개념을 모르시는 분들은 편하게 홈페이지라 생각하시면 됩니다.) 당 20개 쿠키를 저장할 수 있고 언제든 참조가 가능한 저장소입니다.
쿠키의 동작 방식
1. 클라이언트 : 요청(웹 페이지 접근)
서버 : 쿠키 생성 후 쿠키와 같이 HTTP 페이지를 응답메시지로 전송
2. 클라이언트 : 응답받은 쿠키를 PC에 저장, 재 요청시 쿠키와 함께 전송
서버 : 요청받은 메시지에 쿠키가 포함되어있는 경우 페이지와 쿠키 같이 전송
세션
개인 PC는 서버보다 보안이 떨어질수바께 없습니다. 그렇기에 쿠키에 민감한 데이터(개인정보 등)를 담기에는 안전하지 못한 방법으로 로그인 유지 같은 기능은 서버에서 세션으로 유지합니다.
세션은 서버에 연결된 상태를 하나의 단위로 취급합니다. 세션은 각 클라이언트마다 고유의 Session ID가 부여되고 구분하여 서비스를 제공하며 상태 유지를 위해 쿠키(세션 쿠키, 지속쿠키)를 사용합니다. 게다가 세션은 휘발성으로 세션이 끊기면 유지 정보가 사라지는 방식으로 클라이언트의 쿠키보다 보안면에서 안전합니다.
.
그렇다면 안전한 세션만 사용하면 되지 왜 클라이언트 쿠키도 사용하는 건가? 위에서 말했듯 세션은 서버 쪽 비용이 발생합니다. 물론 쿠키와 다르게 저장에 한계도 없어 좋아 보이지만 다른 말로는 서버의 용량을 사용한다는 뜻입니다. 서버 쪽에서 모든 부분을 전담하는 것은 상당히 무리가 있는 부분입니다. 또한 클라이언트 입장에서 세션을 사용하는 것보다 가까운 PC에 저장되어 있는 쿠키를 사용하는 부분이 접근 속도측면에서도 이점이 있기에 쿠키의 사용도 필요합니다.
간단하게 HTTP 특징과 쿠키 그리고 세션에 대해 알아봤습니다. 다음 포스팅에서는 로그인을 구현하면서 최대한 세션과 쿠키를 사 용해도록 하겠습니다.
'Backend > Node.js' 카테고리의 다른 글
[Node.js 개발자 되기] 7. Token 기반 인증에 대하여 (0) | 2023.02.28 |
---|---|
[Node.js 개발자 되기] 6. 로그인 구현 (0) | 2023.02.23 |
[Node.js 개발자 되기] 4. BootStrap 적용 (0) | 2023.02.22 |
[Node.js 개발자 되기] 3. 코드 정리하기 (0) | 2023.02.22 |
[Node.js 개발자 되기] 2. REST를 이용한 CRUD (0) | 2023.02.22 |