지난 번에 단일 서버의 API 분할 배포 작업을 수행하여 마이그레이션이 완료된 API를 선택적으로 배포할 수 있는 환경을 구성해두었다. 이제 사용 방법을 동아리 부원들에게 온보딩해주어야 하는데, 지속적으로 쉽게 접근할 수 있도록 하기 위해 간단하게 문서화를 진행하기로 했다.
본문은 Stage 환경을 기준으로 설명한다. (Production은 아직 환경 세팅이 되어있지 않다.)
여러 API 중 특정 API만 배포하는 과정은 다음과 같이 이루어진다.
제일 먼저 Github에서 Merge가 이루어져야 한다. 이 과정은 엄연한 배포 과정인 만큼 배포를 되기 위한 준비가 코드 단에서 이미 완료되어 있어야 한다.
Stage에 배포하기 위해서는 develop 브랜치에, Production에 배포하기 위해서는 main 브랜치에 Merge되어야 한다. 즉, PR을 올리고 코드리뷰를 받고 성공적으로 Merge가 이루어져야 한다.
작업 내용이 Merge되었다면 다음은 Jenkins에서 Build할 단계이다. Jenkins는 Github의 코드를 가져와 해당 프로젝트를 빌드한 뒤 실제 서버에서 실행하는 역할을 담당한다.
동아리 jenkins 페이지에 접속하여 자신의 계정으로 로그인한 뒤, 아래 사진과 같이 KOIN_API_V2_STAGE의 RUN 버튼을 클릭하면 끝이다.
자세한 동작 과정이 궁금하다면 이전 게시글이나 젠킨스 아이템 구성 내용을 확인하자.
마지막으로 Nginx 설정을 변경해야 한다.
Nginx는 외부에서 들어온 요청에 대해 내부적으로 여러 포트에 분배할 수 있는 기능을 제공하는데, 우리는 이 기능을 통해 특정 API를 배포할 것이다.
ssh -i "~~~.pem" ubuntu@~~~.~~~.~~~.~~~
sudo su
cd /etc/nginx/sites-enabled/
vim api.stage.koreatech.in.conf
설정 파일을 열어보면 아래와 같은 내용을 확인할 수 있다.
location / {
...
proxy_pass http://localhost:8080;
}
location ~ ^(/tracks|/dept|/versions/|/swagger-ui/|/v3/api-docs) {
...
proxy_pass http://localhost:8081;
}
아랫 문단을 보면 /tracks|/dept|/versions/ ...
과 같이 작성되어 있는데, 이 내용은 다음을 의미한다.
/tracks
로 시작하는 path의 api를 8081 포트에 매핑한다./dept
로 시작하는 path의 api를 8081 포트에 매핑한다./versions/
로 시작하는 path의 api를 8081 포트에 매핑한다.위의 경로 표현식에 포함되어 있지 않은 path 요청이 들어오면 해당 api는 8080 포트로 매핑된다.
8080 포트: 기존 코인
8081 포트: 코인 마이그레이션
즉, 배포하고자 하는 api가 있다면 해당 api의 path를 위 경로식에 추가해주면 되는 것이다.
Nginx에서는 설정파일 검사 기능을 제공한다. 명령어는 다음과 같다.
nginx -t
이 기능을 사용하면 Nginx의 설정 파일 중 문법 오류나 문제가 있는지 확인할 수 있다. 해당 명령어를 호출한다고 해서 동작중인 Nginx에 영향을 미치지는 않기 때문에 배포 직전 이 명령어를 통해 마지막으로 검사해보자.
설정파일 검사 과정 없이 Nginx를 재시작했다가 설정파일에서 문제가 발견되면 Nginx가 죽어버린다. 즉 서버가 죽어버린다(실제 프로그램은 정상 동작하지만 요청이 전달되지 않으니 클라이언트 입장에서는 죽은 거나 마찬가지다). 그러니 꼭! 설정파일 검사를 선행하자.
수정한 설정 정보를 적용하기 위해 마지막으로 Nginx를 재시작해야 한다. 명령어는 다음과 같다.
systemctl restart nginx
nginx 재시작은 걸리는 시간이 매우 짧기 때문에 명령어 수행 후 바로 동작 여부를 확인할 수 있다.