HTTP 특성
- HTTP (Hypertext Transfer Protocol)는 인터넷 상에서 데이터를 주고 받기 위해 서버/클라이언트 모델을 따르는 통신규약을 말한다.
- HTTP 프로토콜은 connectionless, stateless한 특성이 있다. 서버는 요청에 대한 응답을 완료하면 연결 상태를 유지하지 않고 클라이언트의 이전 상태를 저장하지 않는다. 클라이언트가 이전에 어떤 요청을 보냈는지 알지 못한다.
- 사용자가 로그인을 통해 인증해도, 다음 요청에 대해서는 클라이언트가 인증된 상태인지 알 수 없다. 최초 로그인 이후 매 요청마다 ID, PW를 입력해 인증해야 하는 것이다.
- 위 문제를 해결하기 위해 쿠키, 세션, JWT 방식을 통해 인증이 이루어진다. 각 장단점을 살펴보자.
Cookie
쿠키는 클라이언트 로컬에 저장되는 데이터 파일이다. 사용자가 로그인하면, 서버는 사용자 정보를 조회하고, 사용자 정보가 담긴 쿠키와 함께 응답을 보낸다. 브라우저는 서버에서 받은 쿠키를 저장해두었다가, 동일한 서버로 재요청할 때마다 쿠키를 함께 전송한다. 서버는 쿠키를 통해 클라이언트의 인증 여부를 확인할 수 있다.
장단점
- 서버의 부하가 적다.
- 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 사용자 정보가 노출될 우려가 있어 보안에 취약하다.
- 쿠키 사이즈가 커질수록 네트워크 부하가 심해진다.
Session
세션 기반 인증 시스템에서 사용자가 로그인하면, 서버는 사용자 정보를 조회하고, 세션 저장소에 회원 정보 세션을 생성한 다음, 세션 id를 발급한다. 발급된 id는 주로 브라우저의 쿠키에 저장한다.
로그인 이후 사용자가 쿠키와 함께 요청을 보낼 때마다 서버는 세션 저장소에서 세션을 조회한 후 로그인 여부를 결정하여 작업을 처리하고 응답한다.
세션 저장소는 주로 메모리, 디스크, 데이터베이스 등을 사용한다.
장단점
- 사용자 정보가 서버에서만 관리되기 때문에 쿠키만 사용했을 때보다 상대적으로 안전하다. (세션 아이디 자체는 유의미한 개인정보를 담고 있지 않다.) 하지만 세션 아이디를 탈취하여 사용자인척 위장할 수 있다.
- 서버에서 세션 아이디 정보를 추가적으로 저장하기 때문에 서버 부하가 상대적으로 크다.