JWT를 선택하는 이유
JWT를 선택하는 것에는 다양한 이유가 존재합니다.
- Stateless
- 서버 측에서 세션을 유지하지 않기 떄문에 상태 정보를 저장하고 확인하지 않아 서버 부하의 원인이 되지 않고, 여러 대의 서버나 분산 시스템으로 구성된 환경에서도 동일한 토큰을 사용하여 인증 처리가 가능합니다.
- Scalable
- 디바이스별 요청마다 발급되는 토큰의 값만 확인하고 체크하는 행위로 안전하게 접근 제어 및 권한 부여등 작업을 처리할 수 있어 확장에 용이합니다.
- Extensibility
- 로그인 정보가 사용되는 분야의 확장이 가능합니다. 이는 토큰을 사용하여 다른 서비스에서 권한을 공유할 수있는 것을 말합니다.(소셜 로그인)
- Security
- HTTPS와 함께 사용하면 더 안전하게 사용할 수 있습니다.
하지만 이 토이 프로젝트를 진행한 이유는 한번도 사용해본적 없고 많은 기업에서 사용하기에 구현해보기 위해 JWT를 이용해보기로 하였습니다.
JWT 인증방식은 이전글에서 설명하여 생략
1. 스프링부트 프로젝트 생성
JAVA 버전 11로 환경을 구성하여 세팅하였습니다.
2. 의존성 설정
스프링 스타터 패키지, JPA, security, redis, jwt, lombok, mariadb, configuration-processor에 관한 의존성을 추가해줍니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
annotationProcessor 'org.projectlombok:lombok'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
3. application.yml 세팅
DB는 Mariadb를 사용하기 때문에 MariaDb에 관한 세팅을 해주었습니다.
redis는 로그아웃할 떄 이용하기 때문에 설정을 추가해줍니다.
jwt의 secret관련 부분은 HS512알고리즘을 사용하기 때문에 64바이트 이상의 길이를 가진 secret으로 설정해줍니다.
spring:
datasource:
url: jdbc:mariadb://localhost:3306/{DbName}?characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 1234
driver-class-name: org.mariadb.jdbc.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
default_batch_fetch_size: 100
redis:
pool:
min-idle: 0
max-idle: 8
max-active: 8
port: 6379
host: localhost
logging:
level:
org.hibernate.SQL: debug
org.hibernate.type: trace
jwt:
header: Authorization
secret: eyJSb2xlIjoiQWRtaW4iLCJJc3N1ZXIiOiJQc3NyIERldiIsIlVzZXJuYW1lIjoiUHJlc2lkZW50aWFsIFByb3RlY3Rpb24gQW5kIFNlY3VyaXR5IiwiaWF0IjoxNjg3MDA0Mjg1fQ
refresh_secret: RUUyNkIwREQ0QUY3RTc0OUFBMUE4RUUzQzEwQUU5OTIzRjYxODk4MDc3MkU0NzNGODgxOUE1RDQ5NDBFMERCMjdBQzE4NUY4QTBFMUQ1Rjg0Rjg4QkM4ODdGRDY3QjE0MzczMkMzMDRDQzVGQTlBRDhFNkY1N0Y1MDAyOEE4RkY=
access_token_expired: 360000
refresh_token_expired: 1209600000
'Spring > Server' 카테고리의 다른 글
Spring JPA + JWT로 로그인 구현하기(5) - 로그아웃 구현(Redis) (1) | 2023.10.05 |
---|---|
Spring JPA + JWT로 로그인 구현하기(4) - 인증 API 구현 (1) | 2023.10.04 |
Spring JPA + JWT로 로그인 구현하기(3) - Configuration 구현 (0) | 2023.08.18 |
Spring JPA + JWT로 로그인 구현하기(2) - 엔티티 구현 (0) | 2023.08.05 |
[JWT] JWT(Json Web Token)란 무엇인가? (0) | 2023.07.21 |