정지용
기술스택 목록
백엔드

JJWT

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

Java 애플리케이션에서 JWT를 생성하고 파싱, 검증할 수 있는 라이브러리

JJWT(Java JWT)는 Java와 Android 환경에서 JSON Web Token(JWT)을 쉽게 다룰 수 있도록 만들어진 라이브러리입니다. JWT 스펙(RFC 7519)을 준수하며, 토큰 생성, 서명, 파싱, 검증을 직관적인 fluent API로 제공합니다. REST API나 마이크로서비스 환경에서 stateless 인증을 구현할 때 표준적으로 사용됩니다.

이럴 때 사용합니다

  • Spring Boot 등 Java 백엔드에서 JWT 기반 인증을 구현할 때
  • RESTful API의 stateless 인증 토큰을 생성하고 검증해야 할 때
  • 마이크로서비스 간 신뢰할 수 있는 사용자 정보를 토큰으로 전달할 때
  • 세션 대신 클라이언트가 토큰을 보관하는 구조를 원할 때

핵심 개념

Claims
JWT 페이로드에 담기는 정보 조각들입니다. 사용자 ID, 권한, 만료 시간 등 토큰이 전달하는 실제 데이터를 key-value 쌍으로 표현합니다.
JwtBuilder
JWT 토큰을 생성하기 위한 빌더 인터페이스입니다. claim 추가, 서명 알고리즘 지정, 만료 시간 설정 등을 체이닝 방식으로 작성할 수 있습니다.
JwtParser
JWT 문자열을 파싱하고 서명을 검증하는 인터페이스입니다. 서명 키를 설정하면 토큰의 무결성을 자동으로 확인하고, claims를 추출합니다.
SignatureAlgorithm
JWT 서명에 사용할 암호화 알고리즘을 지정합니다. HS256(HMAC-SHA256), RS256(RSA-SHA256) 등 대칭/비대칭 키 방식을 선택할 수 있습니다.
SecretKey
토큰 서명과 검증에 사용하는 비밀 키입니다. 대칭키 알고리즘에서는 같은 키로 서명하고 검증하며, 외부에 노출되지 않도록 관리해야 합니다.

JWT 생성과 파싱 기본 예시

HS256 알고리즘으로 사용자 ID를 담은 JWT를 생성하고, 같은 키로 서명을 검증한 뒤 claim을 추출하는 기본 흐름입니다.

Java
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;

// 비밀 키 생성
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);

// JWT 생성
String jwt = Jwts.builder()
    .setSubject("user123")
    .setIssuedAt(new Date())
    .setExpiration(new Date(System.currentTimeMillis() + 3600000))
    .signWith(key)
    .compact();

// JWT 파싱 및 검증
Claims claims = Jwts.parserBuilder()
    .setSigningKey(key)
    .build()
    .parseClaimsJws(jwt)
    .getBody();

String userId = claims.getSubject(); // "user123"

처음 쓸 때 흔한 함정

  • SecretKey를 코드에 하드코딩하면 보안 위험이 있으므로 환경 변수나 설정 파일로 관리해야 합니다
  • 만료 시간을 설정하지 않으면 토큰이 영구적으로 유효해져 보안 문제가 생길 수 있습니다
  • 파싱 시 서명 키가 다르거나 토큰이 변조되면 예외가 발생하므로 try-catch로 처리해야 합니다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.