작업 환경
IDE: intellij
JDK: 1.8
Spring: Spring Boot 2.5.1 + Gradle
1. 들어가기 전
- JWT(JSON Web Token)란 무엇인가?
위키백과에서는 아래와 같이 정의한다. 즉 로그인 정보, 등 선택적인 데이터를 암호화하여 JSON으로 보관한다.
JSON 웹 토큰(JSON Web Token, JWT)은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로, 페이로드는 몇몇 클레임(claim) 표명(assert)을 처리하는 JSON을 보관하고 있다. / 위키 백과
JWT 공식 사이트: https://jwt.io/
- Spring Security는 무엇인가?
스프링에 서블릿 Filter를 이용해 "접근 주체", "인증", "인가", "권한"를 확인 및 접근을 가능하게 해줍니다.
즉 개발자가 신경써야할 보안 관련 일이 줄어드는 장점이 생깁니다.
아래는 참고 사이트와 제가 생각한 Spring Security에 대한 장점을 적어 보았습니다.
<Spring Security 장점>
1. "인증" 과 "권한" 에 대한 부분을 Filter의 흐름에 따라 처리함으로써 접근을 Filter에서 제한 할 수있습니다.
2. 보안과 관련해서 많은 옵션을 제공함으로써, 개발자에게 일일이 보안 관련 로직을 작성하지 않아도 됩니다.
3. 제공해주는 권한룰에 따라 권한별 주소 접근을 지정할 수 있습니다.
참고 사이트:
https://spring.io/projects/spring-security
https://velog.io/@dnjscksdn98/Spring-Spring-Security%EB%9E%80
- Swagger
REST 웹 서비스를 제공하려면 프론트엔드 개발자에게 전달해줄 API문서가 필수적이다.
그런 문서를 작업해서 전달해주는건 수고로운 일이다.
그래서 나타난게 Swagger이며, 이것은 문서뿐 아니라 빌드, 테스트 케이스, 등도 작성할 수 있다.
스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. 대부분의 사용자들은 스웨거 UI 도구를 통해 스웨거를 식별하며 스웨거 툴셋에는 자동화된 문서화, 코드 생성, 테스트 케이스 생성 지원이 포함된다. / 위키 백과
Swagger github: https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Getting-started
2. 세팅 작업
- 사이드 프로젝트를 진행하며 작성하는 글이라 패키지가 많다.
- 로그인과 관련된 정보를 우선 적고 프로젝트 세팅도 글을 써볼 예정이다.
1. build.gradle을 통헤 Spring Security, JWT, Swagger 라이브러리 받아오기
2. application.yml 설정
- Swagger는 배포(release) 상태에서는 사용하지 않을 것이기 때문에 profiles를 정의했다.
- 데이터베이스는 테스트에선 h2를 사용했다.
데이터를 초기화하면 테스트하기가 힘들어 프로젝트 내 memoryDb (./memoryDb)로 저장했다.
spring:
profiles:
active: local
jpa:
show-sql: true
hibernate:
ddl-auto: update
#ddl-auto: none / create-drop / create / update / validate
properties:
hibernate:
format_sql: true
database-platform: org.hibernate.dialect.H2Dialect
jackson:
property-naming-strategy: SNAKE_CASE
server:
servlet:
encoding:
force-response: true
logging:
level:
root: info
sql: error
jdbc: off
jdbc.sqlonly: debug
org.springframework.web: DEBUG
# org.hibernate.SQL: DEBUG
# org.hibernate.type: trace
file:
path: /logs
---
# 로컬
spring:
config:
activate:
on-profile: local
h2:
console:
enabled: true
path: /h2-console
datasource:
# url: jdbc:h2:~/test; #메모리
url: jdbc:h2:file:./memoryDb #상대경로 파일저장(memoryDb.mv.db)
driver-class-name: org.h2.Driver
username: sa
password:
server:
port: 8080
jwt:
key: 12345678901234567890123456789012
---
# 개발
spring:
config:
activate:
on-profile: dev
server:
port: 9090
---
# 배포
spring:
config:
activate:
on-profile: release
server:
port: 9000
3. 마무리
프로젝트에서 사용할 기술들과 세팅에 대해서 정리를 해봤다.
Spring Security + JWT + Swagger는 백엔드 개발자를 하고 싶다면 잘 알고 공부할 필요가 있는 것 같다.
아직은 공부를 하는 단계라 설정과 설명이 안맞을 수 있다.
그런 부분들이 있다면, 글을 다시 수정할 예정이다.
사이드 프로젝트 github: https://github.com/SimKyunam/item-bank
'백엔드 > SpringBoot' 카테고리의 다른 글
[ 스프링부트 / Spring Boot ] 2.5.x data.sql 문제 (h2, mysql) (9) | 2021.07.18 |
---|---|
[ 스프링부트 / Spring Boot ] Swagger 간단히 구현 (0) | 2021.07.11 |
[ 스프링부트 / Spring Boot ] Interceptor (0) | 2021.06.26 |
[ 스프링부트 / Spring Boot ] Filter (2) | 2021.06.26 |
[ 스프링부트 / SpringBoot] Exception 처리 (0) | 2021.06.20 |