MSA: Swagger UI로 API 문서 통합 프로세스 (4) Web Config(CORS) 및 Security Config

Letsdev·2023년 5월 28일
5

Index

1: 독립형 Swagger UI 서비스
2: 도커 컴포즈 파일
3: Rest Docs를 Open API로 정적 배포(Gradle Task)
4: Web Config(CORS) 및 Security Config

여태 앞선 글에서 쓰인 것과 같은 그림. 스웨거 유아이 프로세스가 다른 서버 애플리케이션으로부터 오픈 에이피아이 문서를 제공받고 있다. 그것을 모아서 사용자에게 제공하고 있기도 하다는 그림.

왜 하죠

독립 실행 된 Swagger UI 서비스가 각 서버로 API 문서를 요구하기 위해서는, 브라우저의 Preflight 요청을 먼저 통과해야 한다. 그러려면 일단 CORS 설정이 필요할 수도 있고, 아니면 SOP를 순수하게 충족해도 된다. Security Config는 CORS와 독립적인 설정이지만, 어차피 테스트 코드 짜 가려면 어느 정도 반영해 놓는 게 좋으니 넣어 놨다.

Security Config

자신의 시큐리티 컨피그가 원래 잘 작동하고 있다면 그걸 사용하고, Deprecated 보기 싫다면 이걸 참고해서 본인 것을 수정한다. Security Config가 예전에는 보기 싫은 메서드 체이닝의 표본을 있는 그대로 사용했다면(무관한 것들 구분하지 않고 나열), 그것을 마치 안티패턴인 것처럼 하고, 이제는 함수형으로 잘 수납해서 쓰라고 하는 것으로 보인다.

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class SecurityConfig {

    @Bean
    protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf(AbstractHttpConfigurer::disable)
                .sessionManagement((sessionManagement) ->
                        sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                )
                .authorizeHttpRequests((authorizeRequests) ->
                        authorizeRequests.anyRequest().permitAll()
                );

        return http.build();
    }

}

Web Config: CORS

CORS 설정을 통해 스웨거 쪽 도메인을 허용해 준다.
본인의 세팅이나 이용하는 브라우저(비표준)에 따라 이런 설정까진 안 해도 될 수도 있다.

@Configuration
@RequiredArgsConstructor
public class WebApplicationConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .exposedHeaders("*")
                .allowedHeaders("*")
                .allowedMethods("*")
                .allowedOrigins(
                		"http://localhost:8000",
                        "http://127.0.0.1:8000"
                );
    }
}

깃허브 레포지터리에 올려 놓은 코드는 이런 설정을 Properties 파일로 구분해 놨다.

코드 수준에서 관리하는 것보다는 Properties로 관리하는 것이 나중에 편리하다.

문법 수준은 자바 16 이상인데, 스프링 부트 3 이후로는 어차피 자바 17을 요구한다.


< Rest Docs를 Open API로 정적 배포(Gradle Task)
첫 글: 독립형 Swagger UI 서비스

profile
아 성장판 쑤셔 (블로그 이전) https://letsdev.hashnode.dev

0개의 댓글