로그인 방식
개발에서 로그인을 session방식과 JWT방식의 로그인 둘중하나를 선택한다. 이둘은 장점과 단점이 명확하게 구별된다.
JWT(Json Web Token)

JWT 의 구성의 사진 처럼 Header,Payload,Signature으로 각각의 역할로는 !
header : type은 JWT alg은 서명의 필요한 알고리즘
payload:사용되는 사용자의 정보나 만료시간, 발급시간등을 저장한다.
Signature: 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드
JWT 동작원리
1. 사용자가 아이디 및 패스워드를 입력한다.
2. 로그인할때 입력한 사용자 정보가 맞으면 필요한 정보를 payload에 담고 Secret Key로 서명해서 JWT 토큰을 생성한다.
JWT 장점
- 서버 상태를 저장하지 않는 구조 (Stateless)
- 서버에 저장을 하지 않아 모든 정보에 대한 요청을 모든 인증 정보 포함에서 전송된다.
- 표준 규격이 있어 다양한 언어 플랫폼에서 사용가능하다.
- 데이터의 위조를 방지한다.
- ※CSRF 공격에 뛰어나다.
- CSRF
사용자가 인증된 상태를 악용하여 악의적으로 웹사이트가 사용자의 권한으로 원치 않는 요청을 보내는 공격.
JWT 단점
- Token의 길이가 증감함
- 요청마다 header에 token을 보내야함
Session
Session 동작원리
1. 사용자가 아이디 및 패스워드를 입력한다.
2. 로그인할 때 입력한 사용자 정보가 맞으면, 서버는 해당 사용자에 대한 세션(Session)을 생성하고, 고유한 JSESSIONID를 만든다.
3. 서버는 JSESSIONID를 쿠키에 담아 클라이언트에게 응답한다.
4. 클라이언트는 이후 요청마다 해당 JSESSIONID를 쿠키에 자동으로 포함하여 전송한다
Session 장점
- session ID 가 서버에 저장됨으로 사용자가 변경하기 어렵다.
- 서버의 사용자를 저장하는 방식으로 세션 만료와 갱신을 서버에서 처리할수있다
- 세션을 유지해서 인증된 사용자를 여러 페이지에서 관리할수있다.
- clinet가 민감한 정보 저장하지 않아 보완성이 좋다.
Session 단점
- Session은 서버에 저장됨으로 사용자가 많아지면 서버부하가 커진다.
- Session을 유지가 끊키면 로그인 상태도 끊킨다. 계속 유지하면 서버의 부화가 커짐
다음 글에서 코드 설명 및 조금 더 자세히 설명하겠습니다!
긴글 읽어주셔서 감사합니다 :)