위클리페이퍼

세션 기반 인증 vs. 토큰 기반 인증: 개념과 차이점

불닭냠냠 2024. 11. 4. 00:15
웹사이트나 애플리케이션에 로그인을 하게 되면, 우리가 누구인지 확인하고 계속 로그인 상태를 유지해주는 편리한 방식이 필요합니다. 이를 ‘인증’이라고 하죠. 웹이나 애플리케이션에서 가장 흔히 쓰이는 인증 방식은 세션 기반 인증토큰 기반 인증이 있습니다.
 

 

1. 세션 기반 인증

세션 기반 인증은 전통적인 방식으로, 주로 예전부터 웹사이트에서 사용해온 인증 방법입니다. 우리가 로그인할 때마다, 서버는 우리 정보와 인증 상태를 확인한 후 서버의 메모리에 세션이라는 것을 생성하고, 여기에 로그인 정보를 저장합니다. 그리고, 세션 ID라는 고유한 ID를 만들어 브라우저에 쿠키 형태로 보내줍니다.

이 다음에는 사이트 내에서 여러 페이지를 이동해도, 브라우저는 자동으로 세션 ID를 보내면서 우리가 로그인된 상태임을 서버에 알리는 것입니다. 서버는 이 세션 ID를 확인하면서 우리가 누구인지, 어떤 권한을 갖고 있는지 알 수 있습니다.

예시

쇼핑몰에서 로그인한 상태로 장바구니에 물건을 넣고 결제할 때, 서버는 같은 세션 ID로 우리의 로그인 상태를 계속 확인하면서 필요한 작업을 처리해줍니다.

 

장점: 서버가 직접 세션을 관리하므로 보안이 좋습니다.

단점: 많은 사용자가 동시에 접속하면 확장성이 떨어질 수 있습니다. 즉, 큰 규모의 시스템에서 효율이 떨어질 수 있다는 뜻입니다!

2. 토큰 기반 인증

토큰 기반 인증은 모바일 앱이나 SPA(Single Page Application)같이, 웹페이지가 새로고침 없이 빠르게 업데이트되는 앱에서 주로 사용하는 방식입니다. 사용자가 로그인하면 서버는 토큰이라는 고유 코드를 발급해 클라이언트(브라우저)에게 주고, 이후 요청을 할 때마다 이 토큰을 보내서 인증을 진행합니다. 서버는 클라이언트가 보낸 토큰이 유효한지 검증하는 것만으로 우리가 누구인지 알아낼 수 있습니다.

토큰은 주로 JWT(JSON Web Token)라는 형식을 사용해서, 안전하게 암호화되어 있습니다. 이 토큰은 클라이언트 측에서 브라우저의 로컬 저장소에 저장되기도 합니다.

 JWT는 저번 초급 프로젝트에서도 사용했는데, 앞으로도 유용하게 쓰일 것 같습니다!


JWT를 조금 더 설명하자면 아래와 같이 파트를 나눌 수 있습니다.

1. Header: 토큰의 유형과 해싱 알고리즘을 포함

2. Payload: 사용자 정보(예: 사용자 ID, 만료 시간 등)를 포함

3. Signature: Header와 Payload를 비밀 키로 해시하여 생성된 서명

 

https://jwt.io/ 이 사이트는 해독할 수 있는 사이트니 이용해보세요.

 

예시

인스타그램 같은 소셜 미디어에서 로그인 후 내가 새로고침을 하지 않아도 피드가 계속 업데이트되는 경우를 많이 봤을 것입니다. 이런 경우, 토큰 기반 인증이 사용되기 때문에 서버는 토큰을 통해 인증을 확인하면서 빠르게 데이터를 전송해 줄 수 있습니다.

 

장점: 서버는 토큰을 계속 관리하지 않고 인증 요청 때마다 검증만 하면 되므로 확장성이 좋습니다.

단점: 토큰이 클라이언트에 저장되기 때문에, 보안에 취약할 수 있습니다. 예를 들어, 토큰이 탈취되면 다른 사용자가 내 계정에 접근할 수도 있습니다.

 

아래 그림을 통해서 차이점을 뚜렷하게 봅시다

 


세션 기반 인증과 토큰 기반 인증, 언제 사용하면 좋을까?

각각의 인증 방식은 사용하는 상황에 따라 위에 써놓았던 것처럼 장점과 단점이 있기에, 상황에 따라 알맞게 사용하는 것이 중요합니다.

세션 기반 인증이 유리한 상황

  1. 전통적인 서버 중심의 웹 애플리케이션
    세션 기반 인증은 주로 서버가 중심이 되는 전통적인 웹 애플리케이션에서 유리합니다. 예를 들어, 회사 내부에서 사용하는 ERP 시스템(경영 자원 관리 시스템)처럼, 서버와 클라이언트가 같은 네트워크에서 운영되는 환경에서 좋아요.
  2. 보안이 중요한 웹사이트
    세션은 서버에서 관리하기 때문에, 보안이 중요한 금융 사이트나 정부 웹사이트에 사용하기 좋습니다. 서버가 세션을 관리하는 방식이기 때문에 클라이언트에서의 보안 리스크가 낮고, 민감한 정보가 보호되기 때문입니다.

토큰 기반 인증이 유리한 상황

  1. 모바일 앱이나 SPA
    모바일 앱이나 싱글 페이지 애플리케이션은 토큰 기반 인증과 잘 맞습니다. 비동기 방식으로 서버와 빠르게 통신하면서 여러 데이터를 교환해야 하기 때문입니다. 예를 들어, 채팅 앱이나 SNS는 로그인 후 피드를 빠르게 불러오거나 새로고침 없이 내용을 갱신하는 데 토큰 기반 인증이 효율적입니다.
  2. 확장성이 중요한 대규모 시스템
    토큰 기반 인증은 여러 서버가 분산된 대규모 시스템에서도 잘 맞습니다. 예를 들어, 마이크로서비스 구조로 만들어진 애플리케이션이나 대규모 전자 상거래 사이트에서 유리합니다. 서버가 직접 세션을 관리하지 않아도 토큰만 검증하면 되므로 서버 확장에 용이합니다.

결론

정리하자면, 보안이 중요하고 서버가 상태를 관리하는 전통적인 웹사이트에서는 세션 기반 인증이 적합하고, 클라이언트 중심의 앱, 빠른 업데이트가 필요한 애플리케이션, 확장성을 중시하는 대규모 시스템에서는 토큰 기반 인증이 좋습니다.

 

차이점을 알았으니, 앞으로 행해질 프로젝트에서 알맞은 방식을 생각하고 선택해서 좋은 어플리케이션을 만들어야겠습니다!