[Spring] 스프링부트와 AWS 스터디 - 3주차
배포 및 CI/CD 스터디
이제 스프링부트 코드를 작성하는 부분은 끝났고 서버에 배포하고 CI/CD를 적용해보면 된다.
하지만 중간에 시험기간이 껴있어서 AWS 인스턴스들을 비용 문제로 삭제한 상황이다.
그리고 버전이 달라지면서 실습환경도 달라져서 이번에는 간단히 개념적인 부분을 정리하려고 한다.
8장 EC2 서버에 프로젝트를 배포해 보자
EC2에 프로젝트 Clone 받기
1. EC2에 Git을 설치한다.
2. git clone을 사용해 코드를 원격저장소에서 복사해온다.
3. test를 수행해 코드가 잘 작동하는지 확인한다.
배포 스크립트 만들기
배포할 때마다 개발자가 명령어를 하나하나 실행하는 것은 매우 번거롭다.
명령어를 쉘 스크립트에 입력해두면 편리하게 재사용할 수 있다.
.gitignore에 등록된 파일은 git clone으로 복사할 수 없기 때문에 애플리케이션이 정상적으로 실행되지 않는다.
EC2 서버에 접속해서 필요한 파일을 직접 생성하면 된다.
스프링 부트 프로젝트로 RDS 접근하기
DB와 스프링 부트를 연결하려면 우선 DB 테이블을 미리 생성해야한다.
그리고 스프링 부트에 DB와 관련된 라이브러리를 설치하고 적절한 properties를 설정한다.
EC2에서 소셜 로그인하기
1. EC2의 퍼블릭 DNS를 확인한다.
2. 구글 OAuth에 도메인을 등록한다.
3. 네이버 API에 도메인을 등록한다.
여기까지하면 빌드와 배포 성공이다.
하지만 수동 테스트와 수동 빌드는 번거롭다. 이를 자동화해보자.
9장 Travis CI 배포 자동화
CI/CD 소개
여러 개발자가 협업을 할 때 코드를 원격저장소에 Push하면 자동으로 테스트를 수행하고 빌드하는 것을 CI
그렇게 검증된 코드를 운영서버의 중단없이 자동으로 배포하는 것을 CD라고 한다.
Travis CI 툴을 사용하면서 CI에 대해 익혀보자.
Travis CI 연동하기
Travis CI는 GIthub에서 제공하는 무료 오픈소스 서비스다.
1. travis 홈페이지에서 github 저장소 상태바를 활성화시킨다.
2. .travis.yml 파일을 생성한다.
3. travis 홈페이지에서 연동을 확인한다.
Travis CI와 AWS S3 연동하기
AWS S3는 이미지 업로드 파일이나 배포 파일 등을 관리하는 파일 서버이다. 빌드한 Jar 파일을 보관한다.
실제 배포는 AWS CodeDeploy를 사용한다.
1. AWS IAM에서 Key를 발급받는다. (외부서비스 접근 키)
2. S3 버킷을 생성한다.
3. .travis.yml에 S3 연동 설정을 추가한다.
Travis CI와 AWS S3, CodeDeploy 연동하기
1. IAM에 CodeDeploy역할을 생성한다.
2. EC2에 생성한 IAM을 연결한다.
3. EC2에 CodeDeploy를 설치한다.
4. AWS에서 CodeDeploy를 생성한다.
5. EC2에 appspec.yml을 생성해 CodeDeploy 연동 설정을 추가한다.
이제 deploy.sh를 만들고 필요한 파일만 사용하도록 yml 파일을 수정해주면 된다.
CodeDeploy 로그를 확인해서 배포 과정에서 생기는 문제를 확인할 수 있다.
이제 배포 자동화는 끝났지만 배포하는 동안 스프링 부트 애플리케이션은 실행이 종료된다.
이것을 해결하기 위해 필요한 것이 CD, 무중단 배포이다.
10장 24시간 365일 중단 없는 서비스를 만들자
무중단 배포 소개
Nginx를 이용해 무중단 배포를 진행한다.
1. EC2에 8081포트와 8082포트로 두 개의 서버 애플리케이션을 실행한다.
2. Nginx가 외부의 요청을 받아 백엔드 서버로 전송한다.
3. 한 서버에서 배포를 진행해도 다른 서버에서는 이전 버전으로 실행되고 있으므로 중단이 없다.
엔진엑스 설치와 스프링 부트 연동
1. EC2에 Nginx를 설치한다.
2. nginx.conf에 스프링 부트 연동 설정을 추가한다.
3. properties 파일을 두 가지 버전으로 추가한다. (8081, 8082)
4. 배포스크립트를 작성한다.
스터디 마무리
이번 주차로 스프링 부트 스터디가 마무리되었다.
이제 실제로 서비스를 개발하고 운영해보면서 필요한 내용들을 그때그때 공부하면 좋을 것 같다.