에러 기록
새로 프로젝트를 배포할 때 주의할 점..
uhyvn
2024. 1. 29. 23:42
이번에 간단한 프로젝트를 시작하려고 레포를 파고, 배포 세팅을 하고 있었다.
그런데 자꾸 Degraded가 뜨는 것이다!!
엘라스틱 빈스톡을 들어가 확인을 해봐도 아래 로그밖에 찍히지 않는 것이다.
process default has been unhealthy for 29 seconds (target.responsecodemismatch).
3~4시간정도 피폐한 상태로 알아보다가, 원인은 로드밸런서에서 내가 설정한 health check를 하는데 200 성공 코드가 안오는게 문제였다.
보통은 ec2의 로드밸런서 -> 대상 그룹을 들어가보면 기본 설정은 위와 같을 것이다.
물론 defaultcontroller로 "/" url은 만들어뒀었다.
그런데 저건 저번 배포에서도 같은 세팅이어서 뭐가 문제지 싶었다 한참을.....
해결
난 이번 배포를 하면서 rds 생성이나 eb를 생성할 때 시간이 걸리니까 HTTPS 인증서를 미리 받고 리스너도 돌려야겠다~ 해서 HTTPS 리다이렉트 설정까지 모두 마친 후였다,,
그런데 코드에는 webconfig, corsconfig와 같은 "/" 요청이 왔을 때 열어주는 코드가 없어서 계속 200 ok코드를 돌려주지 않은 것이었다!!!!!!
바로 config 코드를 작성해줬다..
@Configuration
public class WebConfig implements WebMvcConfigurer {
private static final String[] ALLOW_ORIGINS = {
"http://localhost:8080",
"https://도메인"
};
private static final String[] ALLOW_METHODS = {
"GET", "POST", "PATCH", "DELETE", "HEAD", "OPTIONS", "PUT"
};
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins(ALLOW_ORIGINS)
.allowedMethods(ALLOW_METHODS)
.allowCredentials(true)
.maxAge(3000);
}
}
아래 PERMIT_PATHS 에서 "/"를 열어줬다..
@Configuration
@RequiredArgsConstructor
public class SecurityConfig {
private static final String[] PERMIT_PATHS = {
"/swagger-ui/**", "/", "/api-docs/**","/login/kakao/**"
};
private static final String[] ALLOW_ORIGINS = {
"http://localhost:8080",
"https://도메인"
};
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.httpBasic(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
.formLogin(AbstractHttpConfigurer::disable)
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.authorizeHttpRequests((request) -> request
.requestMatchers("/api/auth/logout").authenticated()
.requestMatchers(OPTIONS, "**").permitAll()
.requestMatchers(PERMIT_PATHS).permitAll()
.anyRequest().authenticated()
);
return http.build();
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of(ALLOW_ORIGINS));
configuration.setAllowedMethods(List.of("*"));
configuration.setAllowedHeaders(List.of("*"));
configuration.addExposedHeader("Authorization");
configuration.setAllowCredentials(true);
configuration.setMaxAge(3600L);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
배포는 천천히 꼼꼼하게 하자..^^