인증과 인가란 무엇일까?
- 인증(Authentication): 사용자가 실제 유저인지 확인하는 과정이다.
- 인가(Authorization): 사용자가 특정 리소스에 대한 접근 권한을 가지고 있는지 확인하는 과정이다.
비연결성
비연결성은 서버와 클라이언트가 지속적으로 연결되어 있지 않은 상태를 말한다. 서버는 응답 후 연결을 끊어 리소스를 절약한다.
Stateless (무상태 프로토콜)
Stateless는 서버가 클라이언트의 상태를 저장하지 않는 프로토콜이다. 서버는 각 요청을 이전의 상태와 독립적으로 처리한다.
비연결성과 무상태 프로토콜에서 유저 인증 정보를 유지하는 방법
- 쿠키-세션
- JWT (JSON Web Token)
세션 저장소를 사용하여 쿠키에 토큰을 저장하고, 세션에 인증 정보를 저장하는 방식이다.
쿠키와 세션이란 무엇일까?
쿠키와 세션은 HTTP에서 상태 정보를 유지하기 위해 사용된다.
쿠키와 세션 비교
항목 | 쿠키 | 세션(세션 쿠키) |
---|---|---|
저장 위치 | 클라이언트 (웹 브라우저) | 서버 (웹 서버) |
예시 | 사이트 팝업의 “오늘 다시 보지 않기” 정보 저장 | 로그인 정보 저장 |
만료 시점 | 쿠키 저장 시 만료일시 설정 가능 | 1. 브라우저 종료 시 2. 로그아웃 시 3. 일정 시간 동안 재요청 없을 경우 만료 |
용량 제한 | 브라우저별로 다르며, 크롬 기준 하나의 도메인당 180개, 하나의 쿠키당 4KB | 제한 없음 |
보안 | 취약 (클라이언트에서 쉽게 변경, 삭제 가능) | 안전 (서버에 저장되므로 클라이언트가 수정할 수 없음) |
JWT란 무엇일까?
JWT(Json Web Token)는 Claim 기반의 Web Token으로, JSON 형식을 사용하여 데이터를 인코딩한다.
JWT의 사용
대용량 트래픽을 처리하는 서버 환경에서 유용하며, 특히 서버가 2대 이상일 때 아래 방법으로 처리할 수 있다:
- Sticky Session: 특정 클라이언트의 요청을 고정된 서버에서 처리한다.
- 세션 저장소: 모든 세션을 하나의 저장소에 저장한다.
- JWT: 서버가 토큰만을 확인하고 별도의 세션 저장 없이 인증을 처리한다.
모든 서버는 동일한 Secret Key를 가지고 있어야 하며, 이를 통해 암호화하고 위조 여부를 검증한다.
JWT의 장점과 단점
- 장점: 외부와 연결 없이 인증 정보를 처리하므로, 동시 접속자가 많을 때 서버 부하를 줄일 수 있다.
- 단점: 구현이 복잡해지고, JWT의 크기가 클수록 네트워크 비용이 증가한다. 또한, 일부 토큰만 만료시키는 방법이 없고, Secret Key가 유출되면 JWT를 조작할 수 있다.