WAS (Spring Boot)와 WEB 서버 (React)를 각각 2개씩 생성하여 배포 완료하고 1번끼리 2번끼리 각각 연동하여 주었다.
지금은 엄밀히 말하면 2개의 WAS와 2개의 WEB서버가 각각 연동이 되었다기 보단, WEB-WAS가 연동된 서버 두개가 하나의 DB를 함께 사용하는 중이다.
여기서 로드밸런서를 적용하여 각각의 WEB 서버와 각각의 WAS가 연동될 수 있게 구성 해보겠다.
WEB 서버용 대상 그룹과 WAS 용 대상 그룹 총 2개를 생성한다.
이름에 WAS 표기를 깜빡함
로드밸런서가 정상작동하는지 AWS가 자체적으로 테스트를 위해 지정된 경로로 주기적으로 요청을 보낸다.
만약 /index.html
로 요청을 받고싶다거나 HTTPS
로 요청을 받고싶다면 아래에 기재한다.
생성 완료
자세히 보면 WEB 대상그룹의 포트가 80으로 되어 있는데, 3000번 (React 포트) 으로 입력 해야하는데 잘못 입력했다.
근데 문제는 없는게 대상 인스턴스를 선택할 때 보면 포트번호를 입력하게 되어있다. (생성 후 대상 인스턴스는 수정도 가능하다.)
여기에만 포트 번호를 제대로 입력해주면 이후에 작동은 문제 없다.
이후에 로드밸런서를 생성할 때 보겠지만 WEB서버와 WAS서버 둘 다 80포트를 통해 로드밸런서를 타게끔 설정할 것이다.
그러므로 보안 그룹은 공통으로 쓸 것 하나만 생성하겠다.
위에서 생성한 보안 그룹 추가해주기
자세히 보면 화질이 조금 이상한데, 이미 생성한 후에 이 포스팅을 작성하면서 스크린샷만 따다 보니까 이미 생성된 대상 그룹은 선택이 안되서 합성했다.
자세히 안보면 티 안나니까 넘어가자.
++
마지막으로 작업할 내용이 남아있다.
첫번째로 React 애플리케이션 내부에 API baseUrl을 WAS 로드밸런서의 DNS 이름으로 바꿔주자.
import axios from "axios";
const api = axios.create({
baseURL: "WAS_로드밸런서_DNS_이름",
headers: {
'Content-Type': 'application/json; charset=UTF-8;',
accept: 'application/json'
}
})
export default api;
그리고 스프링 부트 애플리케이션에서도 CORS 설정에 허용된 origin 설정이 있다면 WEB 로드 밸런서 DNS로 바꿔준다.
package com.practice.api;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("WEB_로드밸런서_DNS_이름")
.allowedMethods("GET", "POST", "PATCH", "DELETE")
.allowCredentials(true);
}
};
마지막으로 WEB 서버 로드밸런서 DNS로 접속해보면
정상작동!