[스프링] 스프링 클라우드 시큐리티에서의 단위 테스트

스프링 애플리케이션을 개발할 때 클라우드 환경에서 보안을 효과적으로 관리하기 위해 스프링 클라우드 시큐리티를 사용하게 될 수 있습니다. 강력한 보안을 제공하면서도 유연성을 유지할 수 있도록 도와주는 이러한 라이브러리를 효과적으로 테스트하는 것은 매우 중요합니다. 이 포스트에서는 스프링 클라우드 시큐리티에서의 단위 테스트에 대해 알아보겠습니다.

시큐리티 설정 단위 테스트

시큐리티 설정에 대한 단위 테스트를 작성하는 것은 애플리케이션의 보안을 보장하기 위해 필수적입니다. @WebMvcTest 애노테이션을 사용하여 스프링 MVC 레이어에 대한 테스트를 작성하고, Spring Security 테스트 지원을 활용하여 시큐리티 관련 설정을 확인할 수 있습니다.

예를 들어, 다음은 스프링 부트 애플리케이션에서 시큐리티 구성을 검증하는 단위 테스트의 예시입니다:

@RunWith(SpringRunner.class)
@WebMvcTest(SecurityConfig.class)
@WithMockUser
public class SecurityConfigTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testLoginPageAccess() throws Exception {
        mockMvc.perform(get("/login"))
                .andExpect(status().isOk());
    }

    // 다른 테스트 메소드 작성...
}

커스텀 필터 단위 테스트

스프링 클라우드 시큐리티를 사용하면 자체적으로 커스텀 시큐리티 필터를 작성할 수도 있습니다. 이러한 커스텀 필터를 테스트하기 위해서는 @AutoConfigureMockMvc 애노테이션을 사용하여 모의 MVC를 생성하고, 필터가 예상대로 동작하는지 확인할 수 있습니다.

예를 들어, 커스텀 시큐리티 필터의 단위 테스트 코드는 다음과 같을 수 있습니다:

@RunWith(SpringRunner.class)
@WebMvcTest
@AutoConfigureMockMvc(addFilters = false)
public class CustomSecurityFilterTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private FilterChainProxy springSecurityFilterChain;

    @Test
    public void testCustomFilter() throws Exception {
        mockMvc.perform(get("/secured"))
                .andExpect(status().isOk())
                .andExpect(content().string("Custom filter worked!"));
    }

    // 다른 테스트 메소드 작성...
}

스프링 시큐리티 테스트 유틸리티 활용

스프링 시큐리티 테스트 유틸리티는 시큐리티 관련 테스트에 편의성을 제공합니다. SecurityMockMvcConfigurers를 사용하여 MockMvcBuilders를 구성할 때 SecurityMockMvcConfigurers.springSecurity()를 호출하여 스프링 시큐리티 설정을 자동으로 적용할 수 있습니다.

@RunWith(SpringRunner.class)
@WebMvcTest
public class SecurityUtilTest {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .apply(springSecurity())
                .build();
    }

    @Test
    public void testSecurityUtil() throws Exception {
        mockMvc.perform(get("/secured"))
                .andExpect(status().isOk())
                .andExpect(content().string("Security util test passed!"));
    }

    // 다른 테스트 메소드 작성...
}

스프링 클라우드 시큐리티에서의 단위 테스트는 애플리케이션의 보안과 유연성을 보장하는 데 중요한 부분입니다. 이러한 테스트는 시큐리티 설정 및 커스텀 필터 동작의 정확성을 확인하는 데 도움이 됩니다.

참고 문헌