logo
한달 포트폴리오 멘토링
블로그

HTTP는 Stateless Protocol입니다. 상태가 없기 때문에 매 요청을 새롭게 생성됩니다. 이러한 HTTP의 특성을 보완하기 위해 Cookie, Session, JWT와 같이 상태를 저장하는 기술을 개발하게 되었습니다.

HTTP에 대한 설명을 먼저 듣고 싶으신 분은 여기를 확인해 주세요

Cookie

Cookie는 웹 브라우저에 Cookie라는 데이터를 저장하여 HTTP 상태를 저장하는 방식입니다. 위 그림과 같이 동작하는데 서버에서 Set-Cookie를 헤더에 담아서 응답을 하면 웹 브라우저는 해당 정보를 Cookie로 저장합니다. 그래서 다음 HTTP요청때는 해당 Cookie를 Header에 추가해서 보내느 방식으로 동작합니다.

Cookie는 웹 브라우저에 저장되기 때문에 브라우저를 나가도 해당 데이터는 계속 저장이 됩니다. 가장 오랫동안 저장이 가능하기 때문에 자동로그인 기능, 로그인 없는 장바구니 저장, 일주일간 보지않기, 마케팅 정보 등에 사용합니다.

그러나 쿠키의 정보는 브라우저 상에 저장되어 사용자가 확인, 수정이 가능 할 수 있기 때문에 보안에 민감한 정보노출되면 안되는 개인정보, 인증정보 등은 쿠키로 저장하는 것을 권하지 않습니다.

Session

Cookie가 웹 브라우저 상에 데이터를 저장하는 방식이었다면, Session은 서버상에 데이터를 저장하는 방식입니다.

사용자가 접속을 하면 서버는 사용자를 식별할 수 있는 SessionId를 생성하고 메모리에 SessionId와 사용자 상태를 저장합니다.(사용자 개인정보, 유저 정보 등 저장할 정보) 그후 Set-Cookie를 통해 jsessionid에 세션 ID를 담아 리턴해주고, 다음 응답마다 쿠키에 SessionId를 같이 보내주면 Server는 SessionId 별로 저장된 정보를 확인할 수 있습니다.

Session은 서버에 데이터가 저장되기 때문에 사용자에게 데이터가 노출될 가능성이 적습니다. 따라서 로그인 후 사용자 정보와 같이 노출되거나 수정되면 안되는 정보가 저장됩니다. 또한 보안을 위해서 Session 유지시간을 적절하게 유지하는 것이 중요합니다.

최근에는 ScaleOut을 통해 서버를 확장하기 때문에 서버 메모리에 Session을 저장할시 같은 서버로 접속하지 않으면 세션 유지가 불가능합니다. 따라서 Redis와 같은 캐싱 DB에 Session 정보를 저장하는 방식을 사용하고 있습니다.

JWT

JWT는 JSON Web Token의 약자로 Header(Json), Payload(Json), Signature(Hash)형태의 데이터를 Base64로 인코딩하여 만든 토큰입니다. JWT에는 서명이 담겨 있어 해당 토큰을 발행한 발행자를 식별이 가능하고, 아무나 토큰을 발행하는 것을 방지해줍니다. (자세한 내용이 궁금하면 디지털 서명에 대해서 공부해보세요 ㅎㅎ, 비대칭 키를 통해서 서명을 만들면 서명을 아무나 만들 수 없습니다.)

JWT는 json payload에 데이터를 담아서 서명을 동봉한 증명 토큰으로 토큰 자체에 데이터가 저장되어있습니다.

JWT는 주로 인증에 사용되는데, 인증서버를 통해 인증을 수행하면 인증 서버는 자신의 서명과 유효기간을 포함한 JWT를 리턴해줍니다. 그 후 Header의 Authroization에 담아 API를 요청하면 서버는 인증서버를 통해 토큰 유효성을 검증하는 방식으로 실행됩니다.

JWT는 주로 Oauth(구글로그인) 등 제 3자 로그인이나, MSA 구조의 서버에서 사용됩니다. JWT는 토큰에 데이터가 저장되기 때문에 서버를 Stateless로 개발할 수 있게 만들어주는 장점이 있습니다.

오늘은 Cookie, Session, JWT에 대해서 알아보았습니다. 용도와 특성에 따라 잘 사용할 수 있길 바랍니다.

PortfolioAD
관련있는 글

couchcoding

2022-12-07

프레임워크가 무엇이고, 어떻게 사용해야할까?? (프레임워크 동작방식 예제)

프레임워크(Framework) 라는 단어는 Frame(틀) + work(일)이라는 단어의 합성어입니다. 일 구조, 혹은 작업 구조라는 뜻과 같이 프레임워크는 어떠한 일을 처리하기 위한 구조를 제공합니다. 프레임워크 위에서 개발을 하면 우리는 일을 하기위한 전체 구조와...

개발 이론

spring
react
프레임워크
redux
django
IoC
spring mvc

couchcoding

2022-12-07

HTTP에 대해서 알아보자(정의와 구조)

HTTP는 HyperText Transfer Protocol의 약자로 주로 HTML과 같은 HyperText문서를 주고 받기 위해 만들어졌고, 최근에는 HTML뿐 아니라 모든 웹 관련 API통신에 이용하고 있는 통신 프로토콜입니다. HTTP 프로토콜은 비연결성(Con...

개발 이론

HTTP
네트워크
웹 개발
세션
쿠키

couchcoding

2022-12-07

웹 서비스를 구성하는 구성요소들을 알아보자 - 1

현재 우리는 웹서비스의 시대에 살고있다고 과언이 아닙니다. 브라우저를 통해 다양한 컨텐츠와 금융활동, 커뮤니티등의 서비스를 이용하고 있으며 우리가 사용하는 앱 또한 대부분 네이티브 앱이 아닌 웹앱으로 구성되어 있습니다. 그러면서 예전의 클라이언트 - 서버 의 단순한 ...

개발 이론

웹 서비스
클라우드 아키텍처
CDN
load balancer
WAS
database
file storage

couchcoding

카우치코딩 공식 계정입니다.