Login

김창모·2023년 5월 31일
0

SpringBoot

목록 보기
13/19

Member Entity 를 만들었고 Member Entity 에 대한 CRUD 가 가능해졌다.
보통 서비스를 처음 이용하고자 할때 가장 먼저 해야할 일은 회원가입이다.
필자는 국비지원 과정에서 진행한 프로젝트 에서 로그인 부분에 대해 상당히 아쉬웠다
이번 시간엔 Session 방식의 로그인 구현과 JWT 토큰을 이용한 로그인 방식의 차이에 대해 알아보자.

로그인 구현 방법

Session

  • 사용자가 로그인 페이지에 아이디와 비밀번호를 입력한다.
  • 서버는 입력된 정보를 검증하여 유효한 사용자인지 확인한다.
  • 검증이 성공하면 서버는 해당 사용자를 식발할 수 있는 세션 ID 를 생성한다.
  • 세션 ID 는 서버에서 관리되는 세션 스토리지에 저장되고 클라이언트에게 응답으로 전달된다.

Session 장점

  • 세션은 서버에서 관리되므로 클라이언트에게 직접적으로 노출되지 않아 암호화된 세션 ID 를 사용하면 보안성을 강화할수 있다.
  • 세션은 일반적으로 사용되는 개념으로 많은 프레임 워크에 내장된 세션 관리 기능을 제공하여 비교적 간단하게 구현이 가능하다.
  • 세션은 서버에서 만료 시간을 설정하여 관리하므로 보안성을 강화할수 있다.

Session 단점

  • 세션은 서버측에서 관리되기 때문에 서버 자원을 사용하여 서버 부하가 증가된다.
  • 여러 서버가 분산 환경에서 세션을 공유하기 위한 추가적인 설정과 동기화가 필요하며 이때 구현이 복잡해질수 있으며 서버간 통신 비용이 발생한다.
  • 서버 수평 확장에 제약이 있을수 있으며 서버의 개수를 늘려서 처리 능력을 확장하기 어렵다.

JWT

  • 사용자가 로그인 페이지에 아이디와 비밀번호를 입력한다.
  • 서버는 입력된 정보를 검증하여 유효한 사용자인지 확인한다.
  • 검증이 성공하면 서버는 해당 사용자에게 secret Key 를 통해 Access token 을 발행한다.
  • 클라이언트는 이후 요청시 Authorization Header 에 발급받은 토큰을 함께 보낸다.
  • 서버는 JWT Signature 를 통해 토큰을 확인하여 사용자 정보를 확인한 후 요청을 처리한다.

JWT 장점

  • JWT 는 클라이언트와 서버간의 상태를 저장하지 않고( stateless ) 토큰을 사용하므로 여러 서버나 도메인에 걸쳐 사용자 인증을 확장하기 쉽다.
  • JWT를 사용하면 인증 서비스를 분리하여 독립적으로 관리하여 다양한 클라이언트와 애플리케이션에 대해 중앙 집중식 인증을 제공할수 있다.
  • JWT 토큰은 클레임을 포함하고 있어 사용자의 추가 정보를 토큰에 포함시킬수 있다.
  • JWT 토큰을 클라이언트에 저장하므로 서버의 부담을 줄일수 있다.

JWT 단점

  • JWT 토큰 자체에 정보를 포함하기 때문에 토큰이 커질경우 네트워크 리소스 소모가 발생할수 있다.
  • JWT 토큰은 불변성을 가지기에 토큰을 취소하거나 권한갱신이 필요할 경우 추가적인 검증 절차를 필요로 한다.
  • JWT 토큰은 한번 발행되면 만료 시간까지 유효하기 때문에 토큰의 만료 시간을 짧게 설정하거나 즉시 로그아웃 처리에 대한 추가적인 구현이 필요하다.
  • JWT 토큰은 클라이언트 측에 저장되므로 보안의 취약점이 될수 있다.

총평

세션은 서버 기반의 인증 방식으로 상태를 유지 ( stateful ) 하므로 보안에 강점이 있고 세션을 통한 인증 정보의 관리와 만료 시간 설정이 비교적 간단하다.
하지만 서버의 확장성이 제한될수 있으며 서버간 세션 공유를 위한 추가적인 설정이 필요하다.
JWT 는 클라이언트 측에 토큰을 저장 ( stateless ) 하므로 서버의 확장성에 용이하고 과부하를 줄일수 있다. 하지만 클라이언트에 토큰이 저장되기 때문에 보안상의 추가 구현이 필요하다.

확장성 -> JWT
보안성 -> 세션

0개의 댓글