Back-End/Springboot와 AWS로 혼자 구현하는 웹 서비스 32

Chapter 10. 24시간 365일 중단 없는 서비스를 만들자 (2)

10.2 엔진엑스 설치와 스프링 부트 연동하기 가장 먼저 EC2에 엔진엑스를 설치 엔진엑스 설치 EC2에 접속해서 다음 명령어로 엔진엑스를 설치한다. sudo yum install nginx 설치가 완료되었으면 다음 명령어로 엔진엑스를 실행한다. sudo service nginx start 엔진엑스가 잘 실행되었다면 다음과 같은 메시지를 볼 수 있다. Starting nginx: [ OK ] 외부에서 잘 노출되는지 확인해 보겠다. 보안 그룹 추가 먼저 엔진엑스의 포트번호를 보안 그룹에 추가한다. 엔진엑스의 포트번호는 기본적으로 80이다. 해당 포트 번호가 보안 그룹에 없으니 [EC2->보안 그룹-> EC2 보안 그룹 선택-> 인바운드 편집]으로 차례로 이동해서 변경한다. 리다이렉션 추가 8080이 아닌 ..

Chapter 10. 24시간 365일 중단 없는 서비스를 만들자 (1)

10.1 무중단 배포 소개 예전애는 배포라고 하면 팀의 아주 큰 이벤트이기 때문에 다 같이 코드를 합치는 날과 배포를 하는 날을 정하고 진행했다. 특히 배포일에는 사용자가 적은 새벽 시간에 개발자들이 모두 남아 배포 준비를 해야만 했고 배포가 잦아질 때는 새벽마다 남아야 했다. 배포를 하고 나서 정말 치명적문제가 발생하면 어떻게 해야 할까? -> 새벽 시간에 부랴부랴 문제를 해결하다가, 사용자 유입이 많아지는 아침이 되면 긴급 점검을 공지로 올리고, 수정을 해야 한다. 이렇게 배포가 서비스를 정지해야만 가능할 때는 롤백조차 어려우므로 개발자들이 정말 고생한다. 그리고 서비스 입장에서도 배포만 했다 하면 서비스가 정지돼야 하니 곤혹스럽다 그래서 서비스를 정지하지 않고, 배포할 수 있는 방법들을 찾기 시작했..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (4)

9.5 배포 자동화 구성 앞의 과정으로 Travis CI, S3, CodeDeploy연동까지 구현되었다. 이제 이 것을 기반으로 실제 Jar를 배포하여 실행까지 해보겠다. deploy.sh파일 추가 먼저 step2 환경에서 실행될 deploy.sh를 생성한다. .scripts 디렉토리를 생성해서 여기에 스크립트를 생성한다. #!/bin/bash REPOSITORY=/home/ec2-user/app/step2 PROJECT_NAME=springboot-study-webserivce echo "> Build 파일 복사" cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/ echo "> 현재 구동 중인 애플리케이션 pid 확인" CURRENT_PID=$(p..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (3)

9.4 Travis CI와 AWS S3, CodeDeploy 연동하기 AWS의 배포 시스템인 CodeDeploy를 이용하기 전에 배포 대상인 EC2가 CodeDeploy를 연동 받을 수 있게 IAM 역할을 하나 생성한다. EC2에 IAM 역할 추가하기 S3와 마찬가지로 IAM을 검색하고, 이번에는 [역할] 탭을 클릭해서 이동한다. [역할 -> 역할 만들기] 버튼을 차례로 클릭한다. 앞에서 만들었던 IAM의 사용자와 역할은 어떤 차이가 있을까? 역할 AWS 서비스에만 할당할 수 있는 권한 EC2, CodeDeploy, SQS등 사용자 AWS 서비스 외에 사용할 수 있는 권한 로컬 PC, IDC 서버 등 지금 만들 권한은 EC2에서 사용할 것이기 때문에 사용자가 아닌 역할로 처리한다. 서비스 선택에서는 [A..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (2)

9.3 Travis CI와 AWS S3연동하기 S3랑 AWS에서 제공하는 일종의 파일 서버이다. 이미지 파일을 비롯한 정적 파일들을 관리하거나 지금 진행하는 것처럼 배포 파일들을 관리하는 등의 기능을 지원한다. 보통 이미지 업로드를 구현한다면 이 S3을 이용하여 구현하는 경우가 많다. S3를 비롯한 AWS 서비스와 Travis CI를 연동하게 되면 전체 구조는 다음과 같다. 첫 번째 단계로 Tavis CI와 S3을 연동한다. 실제 배포는 AWS CodeDeploy라는 서비스를 이용한다. 하지만, S3 연동이 먼저 필요한 이유는 Jar 파일을 전달하기 위해서이다. CodeDeploy는 저장 기능이 없다. 그래서 Travis CI가 빌드한 결과물을 받아서 CodeDeploy가 가져갈 수 있도록 보관할 수 있..

Chapter 09. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (1)

9.1 CI & CD 소개 8장에서 스프링 부트 프로젝트를 간단하게 EC2에 배포해 보았다. 스크립트를 개발자가 직접 실행함으로써 발생하는 불편을 경험했다. 그래서 CI, CD환경을 구축하여 이 과정을 개선하려고 한다. 근데 CI, CD 이랑 무엇일까? 코드 버전 관리를 하는 VCS 시스템(Git, SVN 등)에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정을 CI(Continuous Integration - 지속적 통합)라고 하며, 이 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정을 CD(Continuous Deployment - 지속적인 배포)라고 한다. 일반적으로 CI만 구축되어 있지는 않고, CD도 함께 구축된 경우가 대부분이다. 왜 이렇게 ..

Chapter 08. EC2 서버에 프로젝트를 배포해 보자 (3)

8.3 외부 Security 파일 등록하기 이유는 다음과 같다. ClientRegistrationRepository를 생성하려면 clientId와 clientSecret가 필수이다. 로컬 PC에서 실행할 때는 application-oauth.properties가 있어 문제가 없었다. 하지만 이 파일은 .gitignore로 git에서 제외 대상이라 깃허브에는 올라지 있지 않다. 애플리케이션을 실행하기 위해 공개된 저장소에 ClientId와 ClientSecret을 올릴 수 없으니 서버에서 직접 이 설정들을 가지고 있게 해 준다. 먼저 step1이 아닌 app디렉터리에 properties파일을 생성한다. vim /home/ec2-user/app/application-oauth.properties 그리고 로컬..

Chapter 08. EC2 서버에 프로젝트를 배포해 보자 (2)

8.2 배포 스크립트 만들기 배포 : 작성한 코드를 실제 서버에 반영하는 것 git clone 혹은 git pull을 통해 새 버전의 프로젝트 받음 Gradle이나 Maven을 통해 프로젝트 테스트와 빌드 EC2 서버에서 해당 프로젝트 실행 및 재실행 이러한 과정을 배포할 때마다 개발자가 하나하나 명령어를 실행하는 것은 불편함이 많음 -> 그래서 이를 쉘 스크립트로 작성해 스크립트만 실행 * 쉘 스크립트 : .sh라는 파일 확장자를 가진 파일 / 리눅스에서 기본적으로 사용할 수 있는 스크립트 파일의 한 종류 * 빔 : 리눅스 환경과 같이 GUI(원도우와 같이 마우스를 사용할 수 있는 환경)가 아닌 환경에서 사용할 수 있는 편집 도구 일단 ~/app/step1에 deploy.sh 파일을 하나 생성 vim ..

Chapter 08. EC2 서버에 프로젝트를 배포해 보자 (1)

8.1 EC2에 프로젝트 Clone 받기 먼저 깃허브에서 코드를 받아올 수 있게 EC2에 깃을 설치한다. sudo yum install git 설치가 완료되면 다음 명령어로 설치 상태를 확인한다. git --version 깃이 성공적으로 설치되면 git clone으로 프로젝트를 저장할 디렉토리를 생성한다. mkdir ~/app && mkdir ~/app/step1 생성된 디렉토리로 이동한다. cd ~/app/step1 내 깃허브 웹페이지에서 https 주소를 복사한다. 그리고 복사한 https 주소를 통해 git clone을 진행한다. git clone 복사한 주소 git clone이 끝났으면 클론된 프로젝트로 이동해서 파일들이 잘 복사되었는지 확인한다. cd 프로젝트명 ll 그리고 코드들이 잘 수행되는..

Chapter 07. AWS에 데이터베이스 환경을 만들어보자 - AWS RDS (3)

7.3 내 PC에서 RDS에 접속해 보기 로컬 PC에서 RDS로 접근하기 위해서 RDS의 보안 그룹에 본인 PC의 IP를 추가한다. RDS의 세부 정보 페이지에서 [보안 그룹] 항목을 클릭한다. RDS의 보안 그룹 정보를 그대로 두고, 브라우저를 새로 열어본다. 그래서 브라우저 다른 창에서 보안 그룹 목록 중 EC2에 사용된 보안 그룹의 그룹 ID를 복사한다. 복사된 보안 그룹 ID와 본인의 IP를 RDS 보안 그룹의 인바운드로 추가한다. 인바운드 규칙 유형에서는 MYSQL/Aurora를 선택하면 자동으로 3306 포트가 선택된다. 보안 그룹의 첫 번째 줄 : 현재 내 PC의 IP를 등록 보안 그룹의 세 번째 줄 : EC2의 보안 그룹을 추가한다. 이렇게 하면 EC2와 RDS 간에 접근이 가능하다. RD..