Introduction
아마존, 구글, 메타의 시스템 디자인 인터뷰에서 가장 많이 나오는 질문이 무엇인지 아시나요? 바로 "인증 시스템을 어떻게 설계하시겠습니까?"입니다.
얼핏 보면 단순해 보이는 이 질문은 사실 시니어 개발자들도 자주 실수하는 함정이 숨어있습니다. "JWT가 최신 기술이니까 무조건 좋겠죠?"라고 대답했다가 탈락한 10년차 개발자부터, "세션은 이제 구식이에요"라며 자신있게 말했다가 탈락한 실리콘밸리 스타트업 CTO까지.
선배 개발자들의 값비싼 실수를 통해 배우는 게 가장 빠른 법이죠. 오늘은 실제 면접 사례와 함께, 시스템 디자인 인터뷰에서 자주 나오는 인증 시스템 설계에 대해 깊이 있게 파헤쳐보겠습니다.
과연 FAANG 기업들은 어떤 답변을 기대하고 있을까요? 세션과 JWT의 진정한 트레이드오프는 무엇이며, 어떤 상황에서 어떤 선택을 해야 할까요? 시스템 디자인 인터뷰의 핵심을 관통하는 이 질문에 대해, 실전 경험을 바탕으로 한 완벽한 답변 전략을 아래 글로 준비해보겠습니다.
Javarevisited Newsletter의 <Difference between JWTs (JSON Web Token) and Session Based Authentication? When to use?>를 번역해 소개합니다.
JWT(JSON Web Token)와 세션(Session) 기반 인증의 차이점 및 활용 방안
이번에는 JWT와 세션 기반 인증의 차이점에 대해 알아보겠습니다. 이는 시스템 설계 면접에서 자주 다루는 핵심 주제이므로 잘 준비해야 합니다.
인증(Authentication)과 인가(Authorization)는 모든 애플리케이션에서 사용되는 핵심 개념으로, 이에 대한 깊은 이해는 특히 면접에서 큰 도움이 됩니다.
이 주제와 관련하여 가장 흔히 받는 질문은 "세션 기반 인증과 JWT(JSON Web Token) 인증의 차이점이 무엇인가요?"입니다.
이 질문은 신입 개발자부터 경력자까지 모두에게 자주 묻는 질문이며, 특히 이력서에 JWT 관련 경험을 언급했다면 더욱 그렇습니다.
면접관들은 완벽한 답변을 기대하지는 않습니다(API 보안 엔지니어 직무가 아니라면). 하지만 이러한 개념들에 대한 기본적인 이해를 보여주는 것만으로도 합격 가능성을 크게 높일 수 있습니다.
이 글에서는 세션 기반 인증과 JWT 기반 인증의 주요 차이점을 설명하고, 이 질문에 대한 효과적인 답변 방법을 알려드리겠습니다.
세션 기반 인증
세션 기반 인증은 서버 측에서 사용자의 세션 정보를 저장하고, 클라이언트에게는 해당 세션을 식별할 수 있는 고유한 세션 ID를 제공하는 방식입니다.
세션 기반 인증의 작동 방식
- 사용자가 로그인하면 프론트엔드가 인증 정보를 백엔드 서버로 전송합니다.
- 백엔드는 비밀 키를 사용해 세션을 생성하고 세션 데이터를 데이터베이스나 세션 저장소에 저장합니다.
- 서버는 고유한 세션 ID가 포함된 쿠키를 사용자의 브라우저로 전송합니다.
- 이후의 요청에서 브라우저는 헤더에 세션 ID를 포함시켜 전송합니다.
- 서버는 세션 ID를 검증하고 접근을 허용합니다.
세션 기반 인증의 장점
- 세션 관리가 용이합니다: 세션 저장소에서 간단히 세션을 제거하여 로그아웃 처리가 가능합니다.
- 중앙 집중식 세션 관리로 사용자 활동 추적과 제어가 편리합니다.
세션 기반 인증의 단점
완벽한 시스템은 없습니다. 세션 기반 인증에도 다음과 같은 한계가 있습니다:
- 확장성 문제: 사용자가 증가하면 세션 저장소가 병목 현상을 일으킬 수 있습니다.
- 서버 의존성: 세션 상태 관리를 위해 항상 서버가 필요합니다.
JWT 기반 인증
JWT(JSON Web Token) 인증은 세션 기반 인증과는 다른 접근 방식을 취합니다. 사용자의 정보를 토큰 자체에 암호화하여 담아 전달하는 방식입니다.
모든 탑승 정보가 안전하게 암호화되어 있는 전자 탑승권과 유사하다고 볼 수 있습니다.
JWT의 작동 방식
- 사용자가 로그인하면 백엔드 서버가 인증을 수행합니다.
- 서버는 개인 키로 서명된 JWT를 생성합니다. 별도의 세션 저장소는 필요하지 않습니다.
- JWT는 클라이언트의 브라우저로 전송됩니다(주로 쿠키를 통해).
- 이후 모든 요청에서 브라우저는 헤더에 JWT를 포함하여 전송합니다.
- 서버는 JWT의 유효성을 검증하고 토큰에서 사용자 정보를 추출합니다.
JWT의 장점
- 무상태(Stateless) 방식: 별도의 세션 저장소가 필요 없어 수평적 확장이 용이합니다.
- 높은 이식성: 백엔드 세션 저장소 공유 없이도 여러 서비스와 도메인에서 사용할 수 있습니다.
JWT의 단점
- 토큰 무효화의 어려움: 발급된 토큰을 만료 전에 강제로 무효화하기가 복잡합니다.
- 데이터 갱신의 제한: 토큰에 담긴 정보는 만료되기 전까지 업데이트할 수 없습니다.
- 페이로드 크기: JWT는 포함된 정보량에 따라 크기가 커질 수 있어 네트워크 부하가 증가할 수 있습니다.
세션 vs JWT: 어떤 것을 선택해야 할까요?
소프트웨어 엔지니어링에서 흔히 하는 말처럼 "상황에 따라 다릅니다." 애플리케이션의 특성과 보안 요구사항을 고려하여 선택해야 합니다.
세션을 사용해야 할 때
- 실시간 사용자 상태 관리와 즉각적인 세션 무효화가 중요한 경우
- 사용자 관리의 단순성을 우선시하는 경우
JWT를 사용해야 할 때
- 서비스의 확장성과 시스템 간 연동이 중요한 경우
- 인증 처리의 서버 의존도를 최소화하고 싶은 경우
면접에서 이 질문에 답변하는 방법
면접관들은 지원자의 기술적 지식뿐만 아니라 실무 적용 능력도 평가합니다. 다음 내용을 체계적으로 설명하면 좋은 인상을 남길 수 있습니다:
면접 준비 핵심 포인트
- 세션 기반과 JWT 기반 인증의 기본 작동 원리
- 각 방식의 장단점과 트레이드오프
- 실제 적용 사례와 선택 기준
예를 들어:
- "세션 방식은 실시간 사용자 관리가 필요한 금융 서비스에 적합합니다."
- "JWT는 마이크로서비스 아키텍처에서 서비스 간 인증을 효율적으로 처리할 수 있습니다."
이러한 실무적인 예시를 들어가며 설명하면 더욱 설득력 있는 답변이 될 것입니다.
심화 질문 대비하기
면접관은 종종 다음과 같은 심화 질문을 할 수 있습니다:
- 세션과 JWT를 함께 사용하는 하이브리드 방식의 장단점
- JWT 보안 강화 방법 (예: 토큰 만료 시간 설정, 리프레시 토큰 활용)
- 토큰 탈취나 세션 하이재킹 같은 보안 위협 대응 방안
이러한 심화 질문에 대한 준비도 필요합니다. 단순히 개념만 암기하는 것이 아니라, 실제 개발 경험이나 학습을 통해 얻은 인사이트를 공유하면 더욱 좋습니다.
결론
JWT와 세션 기반 인증은 각각의 장단점이 있습니다. 세션 방식은 즉각적인 사용자 상태 관리가 필요한 애플리케이션에 적합하고, JWT는 확장성이 중요한 시스템에 적합합니다.
결국 선택은 여러분의 시스템 요구사항에 달려있습니다. 실시간 사용자 관리와 보안이 최우선이라면 세션 기반 인증을, 확장성과 시스템 간 연동이 중요하다면 JWT를 고려해보시기 바랍니다.
👥 더 나은 데브필을 만드는 데 의견을 보태주세요
Top 1% 개발자로 거듭나기 위한 처방전, DevPill 구독자 여러분 안녕하세요 :)
저는 여러분들이 너무 궁금합니다.
어떤 마음으로 뉴스레터를 구독해주시는지,
어떤 환경에서 최고의 개발자가 되기 위해 고군분투하고 계신지,
제가 드릴 수 있는 도움은 어떤 게 있을지.
아래 설문조사에 참여해주시면 더 나은 콘텐츠를 제작할 수 있도록 힘쓰겠습니다. 설문에 참여해주시는 분들 전원 1개월 유료 멤버십 구독권을 선물드립니다. 유료 멤버십에서는 아래와 같은 혜택이 제공됩니다.
- DevPill과의 1:1 온라인 커피챗
- 멤버십 전용 슬랙 채널 참여권
- 채용 정보 공유 / 스터디 그룹 형성 / 실시간 기술 질의응답
- 이력서/포트폴리오 템플릿
의견을 남겨주세요