[Node.js 개발자 되기] 5. HTTP프로토콜 특징 그리고 세션과 쿠키
HTTP 프로토콜 세션과 쿠키를 설명하기 앞서 HTTP프로토콜의 특징에 대해서 알아보겠습니다. HTTP프로토콜은 Connectionless(비연결)을 지향합니다. 즉 클라이언트와 서버가 대화(요청, 응답)를 주고받
pventi.tistory.com
들어가기 전
앞의 포스트 내용에 대해 간략하게 설명드리겠습니다. Http 프로토콜은 Stateless(무상태)를 유지하도록 설계된 프로토콜입니다. 하지만 정보를 유지하기 위해서는 stateful 방식(쿠키, 세션)을 사용한다고 설명드렸습니다.
왜 stateless(무상태)을 유지하도록 설계된 프로토콜인데 stateful이 기술적으로 좋다면 기본적으로 stateful을 유지하도록 설계하는 편이 낫지 않은가? 무상태를 유지한다는 것은 저장하는 상태 정보가 없어(서버, 클라이언트의 연결성이 없습니다.) 확장성면에서 상당히 좋습니다. 쉽게 생각하면 누군가 나를 감시하고 있다면 행동에 제약이 생긴다고 이해하시면 편합니다..
그렇다면 무상태를 유지하면서 어떻게 로그인 인증을 할 수 있을까요? 간단하게 서버의 인증 방식을 보겠습니다.
1. 클라이언트 : 로그인 인증 요청
서버(아직 세션 없음): 받은 요청정보 확인 후 세션 생성, 응답(세션유지)
2. 클라이언트 : 요청
서버 : 세션 저장소에서 세션 확인 후 응답
위 방식에는 몇 가지 문제가 있습니다. 첫 번째로 비용(메모리) 측면 문제입니다. 세션은 메모리상에 저장됩니다. 그렇다면 수 없이 많은 사용자가 접근해 세션 생성을 요청한다면 상당한 비용이 발생활 겁니다.
두 번째로는 CORS(Cross-Origin Resource Sharing) 문제입니다. 세션을 사용하기 위해서는 쿠키가 필요합니다. (실제로 아래 포스트에서 보시면 세션 생성을 위해 쿠키를 생성한 부분을 확인하실 수 있습니다.) 쿠키는 단일 도메인에서만 동작하도록 설계되었기에 여러 도메인을 유지, 관리하기에는 어렵습니다.
[Node.js 개발자 되기] 6. 로그인 구현
[Node.js 개발자 되기] 5. HTTP프로토콜 특징 그리고 세션과 쿠키 HTTP 프로토콜 세션과 쿠키를 설명하기 앞서 HTTP프로토콜의 특징에 대해서 알아보겠습니다. HTTP프로토콜은 Connectionless(비연결)을 지
pventi.tistory.com
Token 기반 인증
Token 기반 인증은 클라이언트가 서버에 요청을 하면, 서버는 검증 후 토큰을 클라이언트에게 발급합니다. 토큰을 받은 클라이언트는 요청 시 이를 헤더나 URL에 포함시키며, 서버는 해당 토큰이 유효한 토큰인지 검증 후 클라이언트 요청에 응답합니다.
위 과정을 보면 서버는 메모리에 저장하는 데이터가 없습니다. 또한 유효한 토큰이면 어느 도메인이든 사용이 가능합니다. 토큰 인증기술은 비용적인 측면뿐만 아니라 멀티 플랫폼 시대인 현재 가장 적합한 인증 기술이며 추후에 다양한 플랫폼들이 등장하더라도 쉽게 확장 가능한 기술입니다. 또한 보안적인 면에서 토큰 인증 방식은 쿠키를 사용하지 않음으로써 쿠키 관련 보안 취약점이 해소됩니다.
끝으로 독자분들의 이해를 도울 수 있도록 실생활에서 관찰 가능한 예를 하나 들고 마치겠습니다. 현대에는 어느 사이트를 방문하든 회원가입이나 로그인 시 구글, 페이스북 그리고 카카오 인증으로 손쉽게 가입, 로그인하신 경험이 있을 겁니다. 해당 방식이 바로 토큰 기반 인증의 예입니다.
'Backend > Node.js' 카테고리의 다른 글
[Node.js] web token(jwt) 인증 + Redis(In memory) + 최소한의 보안 (0) | 2023.04.01 |
---|---|
[Node.js] 캐시, LRU 캐시 (0) | 2023.03.05 |
[Node.js 개발자 되기] 6. 로그인 구현 (0) | 2023.02.23 |
[Node.js 개발자 되기] 5. HTTP프로토콜 특징 그리고 세션과 쿠키 (0) | 2023.02.23 |
[Node.js 개발자 되기] 4. BootStrap 적용 (0) | 2023.02.22 |