[NB] 위클리 페이퍼: Node.js 백엔드 개발 중급[15]

권나현·2025년 7월 19일
post-thumbnail

Q. 세션 기반 인증에 대해 설명해 주세요.

세션 기반 인증(Session-based Authentication)이란?

  • 웹 애플리케이션에서 사용자 인증(Authentication)은 필수적인 보안 요소이다.
    그중 세션 기반 인증(Session-based Authentication)은 가장 오래되고 널리 사용되는 인증 방식 중 하나이다.

1. 개념

  • 세션 기반 인증은 사용자가 로그인하면 서버가 해당 사용자에 대한 세션(Session)을 생성하고, 이 정보를 서버 메모리나 저장소에 보관하는 방식이다. 이후 사용자의 모든 요청에는 이 세션 정보를 바탕으로 인증 여부를 확인하게 된다.

2. 동작 방식

  • 세션 기반 인증의 동작은 다음과 같은 흐름으로 진행된다.

2-1. 로그인 요청

  • 사용자가 ID와 Password를 입력해 서버에 로그인 요청을 보낸다.

2-2. 인증 처리 및 세션 생성

  • 서버는 사용자 정보를 확인하고 인증에 성공하면, 고유한 세션 ID를 생성한다.

  • 이 세션 ID는 서버 내 저장소(메모리, Redis, DB 등)에 사용자 정보와 함께 저장된다.

2-3. 세션 ID를 쿠키에 저장

  • 서버는 생성된 세션 ID를 쿠키(Cookie)에 담아 클라이언트에게 응답한다.

  • 클라이언트는 이후 요청마다 이 쿠키를 함께 보낸다.

2-4. 요청 시 인증 확인

  • 서버는 클라이언트가 보낸 쿠키를 통해 세션 ID를 확인하고, 해당 세션이 유효한지 검사한 후 요청을 처리한다.

3. 예시

1. 로그인 요청
POST /login
→ 서버: 세션 ID 'abc123' 생성 후, 사용자 정보와 함께 서버 저장소에 저장
→ 클라이언트: 쿠키에 'abc123' 저장

2. 인증된 요청
GET /my-page
→ 클라이언트: 쿠키에 'abc123' 포함
→ 서버: 세션 저장소에서 'abc123' 찾기 → 인증 성공 → 응답 전송

4. 장점

  • 구현이 간단하다: 오래된 방식이라 프레임워크 지원이 잘 되어 있어 빠르게 적용 가능하다.

  • 보안성이 좋다: 세션 데이터가 서버에 저장되므로, 클라이언트가 직접 데이터를 조작할 수 없다.

  • 자동 로그아웃 처리 가능: 세션 만료 시간을 설정해 자동 로그아웃 구현 가능하다.

5. 단점

  • 서버에 부하가 크다: 사용자 수가 많아질수록 세션 데이터를 저장하는 서버 리소스가 증가한다.

  • 수평 확장에 불리하다: 서버가 여러 대로 분산될 경우, 세션 동기화(Sticky Session 또는 Redis 사용 등)가 필요하다.

  • 모바일·SPA에서 쿠키 기반 인증은 불편할 수 있다.

6. 세션 기반 인증 vs 토큰 기반 인증 (JWT)

구분세션 기반 인증토큰 기반 인증 (JWT)
저장 위치서버클라이언트 (로컬스토리지 등)
상태상태 유지 (Stateful)상태 없음 (Stateless)
확장성낮음 (세션 동기화 필요)높음 (무상태 처리)
보안상대적으로 안전토큰 탈취 시 위험
만료 처리서버에서 직접 관리토큰 내 정보로 판단 (재발급 필요)

7. 언제 세션 기반 인증을 선택할까?

  • 세션 기반 인증은 다음과 같은 상황에 적합하다.

    • 서버-클라이언트 구조가 단순할 때 (ex: 서버 렌더링 기반 웹사이트)

    • 인증 보안이 중요한 내부 서비스

    • 사용자 수가 상대적으로 적은 서비스

    • 서버에 상태를 유지할 수 있는 환경

profile
node.js 백앤드 개발자가 되기 위한 Study Vlog

0개의 댓글