본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
안녕하세요 :)
오늘은 챌린지 58일차로, 챌린지 D-2의 날이네요 두근두근..
오늘 배울 내용은,
Part D. 스프링 시큐리티 활용
Ch 2. 스프링 시큐리티 테스트
"01. 사용자 테스트 - 1" 입니다.

오늘부터는 스프링 시큐리티 테스트를 공부하게 되었는데, 먼저 테스트를 작성하는 이유는 버그를 수정하거나 새 기능을 구현할 때 기존 기능에 사이드 이펙트를 최소화하기 위함이다.
그 중 회귀 테스트(regression) 라는 테스트 방법이 있는데 스프링 시큐리티 프레임워크를 사용하면서 단위 및 통합 테스트를 작성하는 방법에 대해 알아보았다.
모의 사용자 기반 테스트는 모의 사용자를 만들어서 권한 부여 구성을 테스트할 수 있는 방법이다. SecurityContext 에 모의 사용자를 포함시켜서 테스트를 할 수 있다.
테스트 시나리오는 먼저,
시나리오 1. 사용자 정보 없이 엔드포인트를 호출하면 '401 권한 없음' 을 반환한다.
시나리오 2. 인증된 사용자로 엔드포인트를 호출하면 '200 성공' 을 반환하며 본문 Hello! 를 반환한다.
본 코드 작성할 때는 HelloController 와 SecurityConfig 작성했다. 테스트 시나리오 1에서는 401 권한 없음을 반환하도록 테스트를 설정해보았고, 테스트 시나리오 2에서는 200 OK 케이스가 나오도록 했다. 인증된 사용자 ID 에 따라 다른 결과를 반환하도록 설정했고, /api/v2/hello 는 ADMIN 권한을 가진 사용자만 접근 가능한 경우로 설정했다.
RequestPostProcessor 를 사용하는 경우에 대해서도 알아보면, 지금까지 테스트를 할 때는 @WithMockUser 라는 어노테이션을 활용했었는데, 어노테이션을 활용하지 않고 하는 방법도 존재한다.
RequestPostProcessor 라는 방식인데, @Test 어노테이션을 사용하고, @WithMockUser 어노테이션이 없는 대신 동일하게 MockMvc 로 perform 이라는 메소드를 통해 엔드포인트 호출되었을 때, 함께 주입해주는 유저 정보를 작성할 수 있다.
어노테이션 vs RequestPostPorcessor 두 가지 방식이 존재하는데 두 가지 방식에 대해 알아보면 다음과 같다.
1)
어노테이션 기반 테스트 환경 구축
- Aspect 가 테스트 메소드를 가로채어 모의 사용자를 구축
테스트 환경 준비 → 테스트 환경 구축 → 테스트 요청 전송 및 응답 평가
2)
RequestPostProcessor 기반 테스트 환경 구축
- 테스트 환경 구축 이후에 지정된 구성으로 모의 사용자를 구축
테스트 환경 구축 → RequestPostProcessor 구성 적용 → 테스트 요청 전송 및 응답 평가