일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 코드로 배우는 스프링 부트 웹 프로젝트
- ExceptionHandlerFilter
- asciidoctor
- 도메인 주도 설계(DDD) 기반 마이크로서비스(MSA) 모델링
- INSERT ON DUPLICATE KEY UPDATE
- Spring Security
- 오블완
- StringCacheKeyGenerator
- Apple 로그인
- Spring Reactive Programming
- microsoft
- CHAR 와 VARCHAR
- 비식별
- FeignClients
- querydsl
- OAuth2.0
- 티스토리챌린지
- OpenFeign
- async 와 await
- 2024년 상반기 회고
- 사이드 프로젝트
- 비사이드프로젝트
- 네이버클라우드 서버
- Spring Cloud OpenFeign
- springboot
- spring boot
- JWT
- 쿼리 메소드
- rest docs
- REDIS
- Today
- Total
기록하기
Controller 테스트 시 인증 정보 주입(Spring Security + JWT) 본문
프로젝트를 수행하던 중 REST docs 설정을 한 뒤 간단한 ControllerTest 코드를 수행해보았으나 build 가 되지 않는 문제점을 발견했다.
오류의 주 내용은, 빈 주입이 잘 되지 않아서 security 설정에서 문제가 발생함을 알게 되었고 Spring Security + JWT 방식으로 인증, 인가 기능을 활용했던 프로젝트에서 인증된 정보를 제공받지 않고서는 단위테스트를 실행할 수 없음을 알게 되었다.
따라서 미리 설계해둔 custom 한 UserDetailsService 클래스(필자의 경우 UserService 라는 이름으로 설계를 했다.) 에서 인증 정보를 먼저 제공받은 뒤 테스트를 실행할 수 있도록 처리가 필요했다.
@Service
@RequiredArgsConstructor
public class UserService implements UserDetailsService {
...
}
@WithUserDetails
spring.io 에서의 공식문서에 의하면, "custom UserDetailsService 로 UserDetails 와 커스텀 타입을 모두 구현한 객체를 반환한다. 이런 상황에선 custom UserDetailsService 로 테스트 사용자를 만들 수 있어야 한다." 라고 되어 있으며 이게 바로 @WithUserDetails 가 하는 일이라고 되어있다.
필자의 경우, @WithUserDetails(value = "custom 한 username", userDetailsServiceBeanName = "custom 한 UserDetailsService 를 빈으로 등록시 사용한 이름") 으로 설정을 해주었다.
@PostConstruct
@WithUserDetails(value = "01012341234", userDetailsServiceBeanName = "userService")
public void setUp() throws Exception {
Optional<Member> member = memberMapper.findByHp("01012341234");
}
그리고 실행 시점에 대해서 고민하던 중 이 블로그를 참고하여 @PostConstruct 어노테이션을 추가하여 빌드를 했는데 Bean 의 순서 결정법에 대해 정리해 볼 필요성을 느꼈다.
@PostConstruct
먼저 PostConstruct 입니다.
이 어노테이션을 메소드 선언부에 붙여주게 되면, 빈이 생성되고 의존성 주입까지 완료된 이후에 실행되는 초기화 메소드임을 의미하게 된다.
@DependsOn
해당 클래스에 이 어노테이션과 함께 value = {빈 이름} 을 명시해주면 이 클래스가 value 에 적힌 빈에 의존하고 있다는 것을 알려주게 되는데 여러 곳에 작성을 하게 되면 헷갈릴 수도 있으며 순환 참조가 생길 수도 있다.
@Order
여러 Bean 들이 어느 한 객체로 주입될 때 순서를 정할 수 있다.
여기서 @PostConstruct 의 경우 빈 사이클에서 오직 한 번만 수행된다는 것을 보장할 수 있으며 빈이 초기화 됨과 동시에 의존성을 확인할 수 있다는 장점을 갖고 있다.
참고
https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/test-method.html
'Server > Spring Boot' 카테고리의 다른 글
EhCache - StringCacheKeyGenerator 사용 시 @Cacheable 적용 (0) | 2022.09.18 |
---|---|
logback 설정 - 특정 변수에 따라 log 파일 다른 위치에 저장하기 (0) | 2022.08.25 |
ExceptionHandlerFilter 적용(3) (0) | 2022.07.10 |
ExceptionHandlerFilter 적용(2) (0) | 2022.07.03 |
ExceptionHandlerFilter 적용(1) (0) | 2022.06.19 |