vi vite.config.js
server:{
proxy:{
"/api":{
target: "<Backend 주소>",
rewrite: (path)=>path.replace(/^\/api/,""),
},
}
}
1 . Dockerfile 수정
FROM node:lts-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
2 . Dockerfile에서 빌드될 nginx.conf 작성
server {
listen 80;
client_max_body_size 5M;
server_name _;
location / {
root /usr/share/nginx/html/;
index index.html;
try_files $uri $uri/ /index.html;
}
}
vi src/main/resources/application-aws.yml
spring:
datasource:
url: jdbc:mysql://<RDS 엔드포인트 주소>:<포트 번호>/<데이터베이스>?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true
username: <RDS 사용자이름>
password: <RDS 패스워드>
driver-class-name: com.mysql.cj.jdbc.Driver
- 포스트맨에서 백엔드서버주소/admin/auth/signup 경로에 회원가입 정보와 함께 요청을 보냈다.
( = Frontend가 하는 일을 임의로 수행)- 이후 mysql -u admin -p -h <RDS 주소>를 입력하여 RDS에 접속 후 아래와 같이 명령어를 입력하였다
show databases; # test 데이터베이스 확인
use test; # test 데이터베이스 사용
show tables; # test데이터베이스가 가진 table 확인
select * from admin; # admin table의 저장된 정보 확인- 정보를 확인한 결과 포스트맨에서 보낸 회원가입 정보가 저장되어 있는 것을 확인하였다. 즉, 백엔드 서버와 DB가 정상적으로 연결되어 작동하는 것이였다.
- 마찬가지로 포스트맨에서 백엔드주소/admin/auth/login 경로에 이전에 회원가입한 정보와 함께 요청했다.
- 이미 DB에 회원가입한 정보가 존재하므로 정상적으로 login이 되는 것 또한 확인하였다.
- 결과적으로, 405에러는 프론트엔드의 에러인 것이다.
📒 사실 이전에 3-tier 연결을 했을 때는 404에러가 발생했었고, nginx에 문제인거 같아서 위와같이 nginx.conf파일을 생성하고 이 파일을 default.conf로 지정하는 Dockerfile을 작성해서 새로 이미지를 빌드한것 이였다
vi front-deployment
. . .
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 0
minReadySeconds: 20
. . .
vi back-deployment
. . .
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 0
minReadySeconds: 20
. . .
이러한 문제를 해결하기 위해 deployment에 위의 코드와 같이 strategy를 적용하였다.
- maxSurge값을 0으로 지정함에 따라 Rolling Update과정중에 임시적으로 초과할 수 있는 파드의 개수를 0개로 지정했다. 따라서 새로운 이미지가 적용된 파드가 먼저 생성되는 것이아니라 기존의 이미지가 적용된 파드를 삭제하고 이에 따라 replica개수가 하나가 줄었음으로 그제서야 새로운 이미지가 적용된 파드를 하나 생성한다.
- 이런 strategy를 적용하니 새로운 버전의 파드가 정상적으로 배포되는 것을 확인한다.
- 다만, Rolling Update는 새로운 이미지가 적용된 파드를 우선적으로 생성해보고 문제가 없다면 그제서야 기존의 이미지가 적용된 파드를 삭제하면서 새로운 버전으로 배포하는 방식이다. 이것은 잘못된 배포를 할 경우에 새로운 배포를 중단하고 기존의 파드를 유지할 수 있다는 장점이 있다. 따라서 maxSurge 값을 0으로 지정하면서 기존의 이미지가 적용된 파드를 먼저 삭제하는 것은 잘못된 배포를 하는 경우에 기존의 서비스에 다운타임이 발생할 수 있다는 위험이 있을 수 있을 것 같다.