본문 바로가기

프로젝트 & TIL/일별 공부 기록 (백엔드 스쿨)

59일차 - 프로그래머스 문제 풀이, JWT

https://school.programmers.co.kr/learn/courses/30/lessons/92343

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이

https://yurison.tistory.com/373

 

[프로그래머스/자바] 양과 늑대 (작성 중)

 

yurison.tistory.com


JWT

- 최근에는 웹브라우저-서버 뿐만 아니라 앱-서버 접근이 많아졌다. => 앱은 쿠키 기능이 기본적으로 제공되지 않는다.

- JWT 토큰은 정보를 담을 수 있고, 유효성 체크에 DB 조회를 수반하지 않는다.

  

JWT를 사용하는 이유(ChatGPT 답변)

  1. 인증 및 신원 확인: JWT는 클라이언트의 인증과 신원 확인에 사용됩니다. 서버는 JWT를 발급하여 클라이언트에게 전달하고, 이후 클라이언트의 요청에 포함된 JWT를 검증하여 클라이언트의 신원을 확인합니다. 이를 통해 인증된 사용자에 대한 접근 제어를 구현할 수 있습니다.
  2. 정보 전달: JWT는 토큰 내부에 클레임(claim) 정보를 포함시킬 수 있습니다. 클레임은 토큰에 대한 추가 정보를 담고 있으며, 클라이언트와 서버 간에 필요한 정보를 안전하게 전달하는 데 사용됩니다. 예를 들어, 사용자의 식별자, 권한 수준, 사용자 정의 데이터 등을 클레임에 담아 JWT로 전송할 수 있습니다.
  3. 서버 부하 감소: JWT는 서버 측에서 토큰의 유효성을 검증하고 처리함으로써 세션 관리와 관련된 부하를 줄일 수 있습니다. 토큰에 필요한 정보가 모두 포함되어 있기 때문에 서버는 추가적인 데이터베이스 조회나 상태 저장 없이도 토큰을 검증할 수 있습니다. 이로써 서버의 확장성과 성능을 향상시킬 수 있습니다.
  4. 분산 환경 지원: JWT는 클라이언트와 서버 간에 통신할 때 사용되는 표준 형식입니다. 이는 분산된 시스템 및 마이크로서비스 아키텍처에서 다양한 서비스 간의 인증과 통신을 지원하는 데 유용합니다. 모든 서비스가 동일한 JWT 검증 방식을 따르면 간편하게 인증을 처리할 수 있습니다.
  5. 플랫폼 독립성: JWT는 텍스트 기반의 형식이므로 플랫폼에 독립적입니다. 따라서 다양한 플랫폼(웹, 모바일 등)에서 동일한 토큰 형식을 사용하여 인증 및 권한 부여를 구현할 수 있습니다.

JWT의 구성(ChatGPT 답변)

  1. 헤더(Header): JWT의 유형 및 알고리즘을 지정하는 부분입니다. 일반적으로 JSON 형식으로 인코딩되며, 토큰의 타입(typ)과 서명에 사용되는 해시 알고리즘(alg)을 포함합니다.
  2. 페이로드(Payload): JWT에 포함되는 클레임(claim) 정보를 담고 있는 부분입니다. 클레임은 토큰에 관련된 정보를 키-값 쌍으로 표현하며, 등록된 클레임(Registered Claims), 공개 클레임(Public Claims), 비공개 클레임(Private Claims)으로 나뉩니다. 등록된 클레임은 일반적으로 토큰의 발급자(iss), 주제(sub), 만료 시간(exp) 등을 나타내며, 공개 클레임은 임의의 클레임을 나타내고 비공개 클레임은 애플리케이션에서 사용하는 클레임을 나타냅니다.
  3. 서명(Signature): 헤더와 페이로드를 암호화한 후 비밀 키를 사용하여 생성된 서명입니다. 서버는 헤더와 페이로드를 서명하여 생성된 서명을 검증하여 토큰의 무결성과 신원을 확인합니다.

https://jwt.io/

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io