라이킷 15 댓글 공유 작가의 글을 SNS에 공유해보세요

You can make anything
by writing

C.S.Lewis

세션이란 무엇일까?

로그인에서 로그아웃까지, 인증, 인가

by 퉁퉁코딩 Dec 26. 2024
브런치 글 이미지 1

우리는 매일 다양한 웹 서비스를 사용합니다.
메일을 보내고, 쇼핑을 하고, 게임을 즐기는 등 모든 작업의 시작은 로그인입니다.


로그인은 단순히 계정을 확인하는 절차를 넘어, 웹 서비스에서 사용자 상태를 관리하는 데 중요한 세션(Session)의 시작점이기도 합니다.


이번 글에서는 세션이 어떻게 동작하는지, 인증(Authentication), 인가(Authorization), 로그아웃까지 모든 과정을 살펴보겠습니다.


인증과 인가: 웹 서비스의 기본 구조


인증(Authentication): 사용자를 확인하는 과정

인증은 사용자가 자신의 신원을 증명하는 첫 번째 단계입니다.  

사용자가 브라우저에서 ID와 비밀번호를 입력하면, 서버는 데이터베이스(DB)에서 해당 정보가 올바른지 확인합니다.  

이 과정을 통해 서버는 사용자가 등록된 계정의 소유자인지를 판단합니다.  

인증을 위해 ID와 비밀번호, 2단계 인증(OTP, 이메일 인증), 생체 인증(지문, 얼굴 인식) 등을 활용합니다.

그 결과, 인증이 성공하면 서버는 세션 ID를 생성하고 이를 브라우저에 전달합니다.  


인가(Authorization): 권한을 확인하는 과정

인증이 완료된 후, 사용자가 요청한 작업을 수행할 수 있는 권한이 있는지 판단하는 것이 인가입니다.

예를 들어, 사용자가 자신의 배송 내역을 조회하려고 할 때, 서버는 해당 계정으로만 접근 가능한 데이터를 반환합니다.
반대로 다른 사용자의 계정 정보에 접근하려는 요청은 거부됩니다.


인증은 “당신이 누구입니까?”를 묻는다면, 인가는 “이 작업을 할 수 있는 권한이 있습니까?”를 묻습니다.


HTTP의 한계와 세션의 필요성

HTTP는 비연결성(Connectionless)비상태성(Stateless)이라는 특징을 가지고 있습니다.  

비연결성: 클라이언트와 서버 간의 요청/응답이 완료되면 연결이 종료됩니다.

비상태성: 서버는 이전 요청의 상태를 기억하지 않습니다.


이로 인해 다음과 같은 문제가 발생합니다.  

사용자가 로그인했더라도, 서버는 매 요청마다 사용자가 누구인지 알 수 없습니다.

인증된 사용자가 자신의 계정 데이터(예: 배송 내역)를 요청할 때도, 서버는 인증 여부를 확인할 수 없습니다.


이 문제를 해결하기 위해 세션(Session)과 쿠키(Cookie)가 도입되었습니다.


세션(Session)의 동작 원리

브런치 글 이미지 2


1. 로그인: 세션의 시작

로그인은 세션을 시작하는 단계로, 다음과 같은 과정을 거칩니다.  

1. 사용자가 ID와 비밀번호를 입력하여 서버로 전송합니다.

2. 서버는 데이터베이스(DB)에서 입력값과 일치하는 계정을 확인합니다.

3. 인증이 성공하면 서버는 고유한 세션 ID를 생성합니다. 세션 ID는 난수를 기반으로 생성되며, 예측이 불가능하도록 설계됩니다.

4. 생성된 세션 ID는 세션 DB에 저장되고, 브라우저로 전달되어 쿠키에 저장됩니다.


2.페이지 이동 및 요청 처리: 세션의 활용

로그인 이후 사용자가 페이지를 이동하거나 데이터를 요청할 때, 세션은 사용자의 상태를 관리하는 데 중요한 역할을 합니다.
1. 사용자가 배송 내역을 확인하려고 요청하면, 브라우저는 세션 ID가 담긴 쿠키를 함께 전송합니다.
2. 서버는 요청받은 세션 ID를 세션 DB에서 조회합니다.
3. 세션 ID가 유효하면, 서버는 요청한 데이터를 반환합니다.
4. 세션 ID가 없거나 유효하지 않다면, 서버는 접근 권한이 없음을 알립니다.


3. 세션 데이터의 관리 및 보안

세션은 사용자의 민감한 데이터를 직접 저장하지 않고, 세션 ID를 통해 사용자 상태를 관리합니다.

이를 통해 보안성을 높이고, 데이터를 안전하게 유지합니다.  


세션 ID의 암호화 

세션 ID는 HTTPS를 통해 암호화된 상태로 전송됩니다. 

브라우저는 HttpOnly 속성을 사용해 JavaScript로 접근하지 못하도록 보호합니다.

세션 타임아웃 

세션은 일정 시간 동안 사용자의 요청이 없을 경우 자동으로 만료됩니다. 

이를 통해 세션 DB의 용량을 최적화하고, 보안성을 강화합니다.      

다중 기기 로그인 

사용자가 여러 브라우저나 기기에서 로그인하면, 각기 다른 세션 ID가 생성됩니다. 

서버는 각 세션을 독립적으로 관리하며, 필요 시 특정 세션만 무효화할 수 있습니다.      

로그인 유지하기

사용자가 "로그인 유지" 옵션을 활성화하면, 세션 ID의 만료 시간을 길게 설정하거나 리프레시 토큰을 활용해 인증 상태를 지속적으로 유지합니다.


4. 로그아웃: 세션의 종료

로그아웃은 세션을 종료하는 과정으로, 명시적 로그아웃과 암묵적 로그아웃으로 나뉩니다.  


명시적 로그아웃

사용자가 로그아웃 버튼을 클릭하면, 브라우저는 서버로 로그아웃 요청을 보냅니다. 

서버는 해당 세션 ID를 세션 DB에서 삭제하고, 브라우저에 저장된 쿠키를 삭제하도록 응답합니다.      


암묵적 로그아웃 

사용자가 명시적으로 로그아웃하지 않더라도, 일정 시간 동안 요청이 없으면 서버는 세션 ID를 만료 처리합니다. 

이를 세션 타임아웃(Session Timeout)이라고 하며, 세션 DB에서 오래된 세션 데이터를 삭제하여 서버의 효율성을 유지합니다.      


세션의 실제 활용 사례  

쇼핑몰: 로그인 상태 유지, 장바구니 정보 관리.      

은행 서비스: 짧은 세션 타임아웃을 설정해 금융 정보를 보호.      

소셜 미디어: 다중 기기에서 로그인 관리, 로그인 유지 기능 제공.      


세션(Session)과 쿠키(Cookie)의 차이점

1. 저장 위치  

세션(Session): 서버 측에서 관리됩니다. 서버는 세션 ID를 발급하고, 해당 세션 ID를 통해 사용자의 상태를 추적합니다.

쿠키(Cookie): 클라이언트(브라우저) 측에 저장됩니다. 브라우저는 서버로부터 전달받은 쿠키를 저장하고, 이후 요청 시 이를 서버로 전송합니다.


2. 보안성  

세션: 상대적으로 보안성이 높습니다. 민감한 데이터는 서버에서만 관리되며, 클라이언트에 노출되지 않습니다.

쿠키: 보안에 취약합니다. 쿠키는 브라우저에 직접 저장되므로 사용자가 쉽게 접근하거나 수정할 수 있습니다. 민감한 정보는 저장하지 않는 것이 원칙입니다.


3. 유효 기간  

세션: 브라우저 종료 시 또는 서버에서 설정한 타임아웃 시간이 지나면 만료됩니다.

쿠키: 유효 기간을 명시적으로 설정할 수 있습니다. 설정된 기간 동안 브라우저를 닫아도 유지되며, 만료되면 삭제됩니다.


4. 데이터 크기  

세션: 서버가 데이터를 관리하므로 저장 용량에 제약이 거의 없습니다.

쿠키: 브라우저별로 데이터 크기가 제한됩니다. 일반적으로 하나의 쿠키는 4KB 이하로 저장됩니다.


5. 사용 목적  

세션: 민감한 정보를 포함한 사용자 상태를 안전하게 관리하는 데 적합합니다.

쿠키: 사용자 선호도나 상태를 저장하여, 빠르고 간단한 정보 교환에 유용합니다.


더 자세한 이야기는?

https://youtu.be/N9RrtUrADRY?si=SGWJCNqf8WshPdrK

이 글이 좋았다면
응원 댓글로 특별한 마음을 표현해 보세요.
추천 브런치
작가의 이전글 쿠키란 무엇일까?

브런치 로그인

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari