Chaptor.01 - 스프링부트 기초세팅 + 스프링 시큐리티 설정 + Hello API 생성
서버와 클라이언트가 같은 세션 ID 를 공유하는 방식의 기존의 세션 로그인 방식은
서버가 각 클라이언트들의 세션ID를 서버의 별도 공간에 저장해야 한다는 점 때문에 여러가지 제한 사항들이 있다.
(서버의 저장공간 필요, 서버가 여러 대 일 경우 세션 클러스터링 필요. 각 서비스별로 별도 로그인 필요등)
JWT 로그인 방식은 서버에서 클라이언트에게 토큰을 발급 한 후 별도로 저장 해 놓을 필요가 없기 때문에
세션 로그인 방식에 비해 여러가지 장점을 가지고 있다. (물론 단점도 있다.)
이번 실습으로 JWT 토큰 인증 방식을 REST API 적용하는 방법을 익히고자 한다.
목적 :
- SpringSecurity + JWT 토큰인증 구축해보기
- JWT 토큰인증방식을 REST API 에 적용해보기
- JPA 활용 공부
- JUNIT 테스트 코드 작성 공부
- Swagger로 API문서 만들어보기
- Docker로 도커 이미지파일 생성, 로컬 에서 구동해보기
기능 :
- JWT 토큰인증을 이용한 회원가입, 로그인(토큰발급), 상품조회, 유저조회, 주문하기 REST API 제공
개발환경
- 언어 : java 11
- 프레임워크 : springboot 2.6.4
- 빌드도구 : gradle 7.4.1
- 개발도구 : Intellij IDEA (Community Edition)
- ORM : JPA
- 데이터베이스 : h2
- 인증방식 : Spring Security + JWT
- 테스트 : Junit 4.13.1
- api문서 : Swagger 2.9.2
<진행 할 것>
- 스프링부트 기초 세팅
- Hello API 생성
- 401 Unauthorized 해결을 위한 security 설정
1. https://start.spring.io/ 접속
- springboot/java-version/project meta-data 설정
- 추가할 dependency 선택
2. generate로 zip파일 다운로드 / 압축해제
3. 인텔리제이에서 압축해제한 폴더 open 한 후 gradle build > successful 확인
4. lombok를 사용하기 때문에 설정 > annotation proceccers > Enable annotation processing CHECK필요
5. controller 패키지생성 + HelloController 작성
/**
* 테스트 API 컨트롤러
*/
@RestController
@RequestMapping("/api/hello")
public class HelloController {
@GetMapping("/hello")
public ResponseEntity<String> hello(){
return ResponseEntity.ok("hello");
}
}
6. 포스트맨 실행 + http://localhost:8080/api/hello 실행
7. 401 Unauthorized 결과 확인
8. config 패키지 생성 > securityConfig.java 생성
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
//http 요청에대한 권한 제한 설정
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/hello/**").permitAll() //hello 테스트 > 전체허용
.anyRequest().authenticated()
}
}
9. 구동후 postman 재확인 > hello 응답 확인.