https://www.yes24.com/Product/Goods/83849117
이 책의 내용을 따라한 후 정리한 내용입니다.
배포과정에만 집중하기 위해
네이버 로그인 등 OAUTH와 무중단배포의 내용은 제외합니다.
배포 과정 구성
0. 개발자가 변경사항을 깃허브에 커밋
1. Travis CI가 빌드(jar파일 생성) - 생성된 jar파일을 S3가 저장
2. Travis CI가 Code Deploy에게 배포 요청
3. Code Deploy가 S3에게 jar를 전달 받음
4. Code Deploy가 EC2에 jar파일 배포.
EC2는 AWS에서 제공하는 하나의 서버컴퓨터입니다.
이 컴퓨터에서 spring 프로젝트를 실행합니다.
그림에서는 단순히 EC2와 인스턴스 내부로 설명되어있지만,
S3, Code Deploy와 EC2 (그외 기타 등등) 은 AWS에서 제공하는 것으로
AWS에서 여러가지 설정을 해줘야 합니다.
자세한 설정 방법은 글을 진행하면서 함께 할 것이고
여기서는 간단히 설정 관계를 살펴봅시다.
EC2 인스턴스 - AWS에서 제공하는 가상의 서버컴퓨터 1대를 의미합니다.
RDS 데이터베이스
- AWS에서 제공하는 DB.
EC2에 배포된 프로젝트 설정파일에서 DB URL은 이 RDS의 주소여야한다.
보안그룹 (VPC)
- 위의 EC2와 RDS에 관한 보안설정을 담당
네트워크 인터페이스
- 보안그룹에서 가상 네트워크 카드를 나타내는 논리적 네트워킹 구성 요소
탄력적 IP
- EC2는 가상의 서버 컴퓨터인데 EC2를 껏다 키면 IP가 매번 바뀜
이를 특정 IP로 고정시키기 위한 설정
IAM
-AWS Identity and Access Management(IAM)은
AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다
(travis CI에서 빌드한 jar파일을 저장하는)S3와
배포를 담당하는 Code Deploy에 관한 정책을 설정합니다.
AWS 시작 준비
AWS 회원가입, 카드 등록 후에
내 region이 서울로 되어있는지 확인합니다. 서울이 아니라면 서울로 변경해줍니다.
EC2(Elastic Compute Cloud) 생성
검색창에 EC2를 검색합니다.
인스턴스 탭을 선택합니다.
인스턴스 시작을 눌러 인스터를 생성합니다.
먼저 태그입니다. 태그는 해당 인스터를 표현하는 여러 이름으로 사용 될 수 있습니다.
EC2의 이름이라고 생각하면 됩니다. key에 ch, 값도 ch로 값을 설정했습니다.
다음으로 AMI(Amazon Machine Image)은 다음과 같이 선택합니다.
인스턴스 유형으로는 t2.micro를 선택합니다.
인스턴스 유형은 요금제로 일단은 t2.micro를 선택하고
후에 사용자가 많아진다면 다른 요금제를 선택하면 됩니다.
다음은 스토리지입니다. 서버의 하드디스크 크기이며 기본값은 8GB입니다.
다만 30GB까지 프리티어로 사용가능하기때문에 30GB로 설정해줍니다.
key페어입니다.
EC2로 접근하기 위한 pem 키(비밀키)로서 절대 외부에 유출해서는 안됩니다.
새 키 페어생성을 누르면 .pem 파일이 생성됩니다.
이 pem키는 내가 EC2로 접근하기 위한 필수 파일이니
잘 관리할 수 있는 디렉토리로 저장합니다.
다음은 보안그룹입니다.
유형 항복에서 SSH면서 포트항목에서 22인 경우는 AWS EC2터미널에 접속 할 때를 말합니다.
이 부분은 지정된 IP에서만 접속가능하도록 합니다.
이제 인스턴스 시작버튼을 눌러 인스턴스를 생성합니다.
생성이 완료됐다면 다음과 같이 인스턴스 정보를 확인할 수 있습니다.
EIP 할당
이렇게 만든 인스턴스도 결국 하나의 서버 컴퓨터이기 때문에 ip를 갖고 있습니다. 다만 이 ip는
해당 인스턴스를 재시작할 때마다 새로운 ip가 할당됩니다.
프로젝트를 빌드,배포하는 과정 등에서 인스턴스가 재시작되어야 하는 경우가 많이 있을 수 있는데
이때마다 ip주소를 확인해서 접속하는것은 번거로운 일이므로 고정 ip를 가지게 해야 됩니다.
이를 Elastic IP(탄력적 IP)라고 합니다 .
왼쪽 탭에서 탄력적 IP를 선택합니다.
탄력적IP를 생성했다면 이를 아까 만들었던 EC2 인스턴스와 연결하도록 합니다.
방금만든 탄력적IP를 선택하고 오른쪽에 있는 작업버튼 -> 주소 연결 메뉴를 선택합니다.
아까 만들었던 인스턴스를 선택하고 연결버튼을 누릅니다.
다시 인스턴스로 가서 탄력적 ip가 잘 연결되었는지 확인합니다.
※탄력적 ip는 생성하고 EC2서버에 연결하지 않으면 비용이 발생합니다.
더는 사용할 인스턴스가 없다면 탄력적 IP는 반드시 삭제해줘야 합니다.
작업 중 '릴리스'가 삭제입니다.
EC2 컴퓨터(서버)에 접속하기
window 운영체제인 내 컴퓨터에서 EC2에 접속하기 위해선 따로 putty라는 프로그램이 필요하다 .
https://putty.en.softonic.com/에서 putty를 다운받자.
install 파일을 실행한 후 해당 폴더에 가보면 실행파일이 2개가 있다.
- putty.exe
- puttygen.exe
먼저 puttygen.exe를 실행한다.
상단의 탭에서 Conversions-import key 를 선택한 후 아까 EC2에서 만들었던
.pem 키를 선택한다.
그 후 Save private key를 눌러 ppk파일을 만들어준다.
(파일이름은 pem파일과 같게 만들자.)
ppk파일과 pem파일은 같은곳에 저장해야 관리가 편하다.
나는 putty파일이 있는곳에 pem,ppk 파일을 저장해뒀다.
(아까도 말했다시피 이 파일들은 서버에 접속할 마스터키이기때문에
절대 깃허브 같은 공유 서비스에 올리면 안된다.)
ppk를 만들었으면 이번엔 putty.exe를 실행하고 다음과 같이 입력한다.
빨간색으로 칠한곳은 EC2의 탄력적IP를 입력한다.
그 후 Connection-SSH-Auth-Credential에서 내가 아까 만든 ppk를 선택한다.
다음과 같이 콘솔이 실행되면 EC2서버에 잘 접속한 것이다.
EC2 서버 컴퓨터 기본 설정하기
EC2 서버 컴퓨터는 linux 운영체제이다.
이 컴퓨터에 먼저 기본적으로 설정해줘야 하는 것들은 다음과 같다.
- JAVA 설치
- 타임존 변경
- 호스트네임 변경
JAVA 설치
기본적으로 EC2리눅스에 설치된 자바는 7인데,
우리가 서버에 배포하려는 프로젝트에 맞춰서 자바를 설치해 줘야 한다.
나는 springboot의 자바 11버전을 쓰려하기 때문에 자바 11을 다운받겠다.
다음과 같이 명령어를 실행해주고 자바 11을 다운받자.
sudo yum install java-11-amazon-corretto.x86_64
다운받은 후 다음의 명령어를 실행하자.
sudo /usr/sbin/alternatives --config java
아래의 화면에서 원하는 자바버전의 숫자를 입력해서 자바버전을 선택한다.
(여기서 나는 자바11만 설치되어있어서 1이다.)
자바 버전을 선택했다면
java -version
을 입력해 현재 선택된 자바 버전을 확인하자 .
타임존 변경
EC2서버의 기본 타임존은 UTC입니다 .이를 한국 시간대(KST)로 변경해줍니다
다음의 명령어를 차례로 수행해줍니다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
이렇게 하면 변경이 잘 되었을 것이고 이를
date
명령어로 확인해줍니다.
(실수로 스샷 찍기전에 sudo rm /etc/localtime 해서 no such file or directory 부분이 나왔는데..
여러분들은 안 나올겁니다. date 입력 후 KST 시간대로 잘 나오기만 하면 잘 된겁니다.)
Hostname변경
여러 서버를 관리하는 경우 ip만으로는 어떤 서비스의 서버인지 확인이 어렵습니다.
그래서 각 서버(EC2 인스턴스)가 어느 서비스인지
표현하기 위해 HOSTNAME을 변경합니다.
(보통 프로젝트 이름에 맞게 변경합니다)
먼저 다음의 명령어를 입력합니다.
sudo hostnamectl set-hostname 원하는호스트네임(난 ch)
sudo reboot
다시 putty.exe를 이용해 서버에 접속했을 때 다음과 같이 호스트네임이 보인다면 성공입니다.
호스트네임을 등록했다면 한 가지 작업을 더 해야 합니다.
다음 명령어로 /etc/hosts 파일을 열어봅니다.
sudo vim /etc/hosts
그럼 다음과 같은 화면이 나옵니다
이렇게 vim 명령어를 통해 파일을 열고 나면 바로 편집할 수 없습니다.
이 파일을 편집하기 위해서는 편집모드로
들어가기 위해 'ㅐ' 를 입력해 줍니다. ( i가 잘 안보여서 ㅐ로 썻습니다.)
편집모드로 들어갔다면 아래에 편집모드인걸 알려주고
이제 파일의 내용을 수정 할 수 있습니다.
다음과 같이 수정해 줍시다
편집모드를 종료하기 위해서는 "ESC"를 눌러주면 됩니다.
이후 완전히 vim 파일을 종료하기 위해선 ' : ' 를 입력한 후 'wq'를 입력해줍니다.
이후 다음 명령어로 호스트네임이 잘 등록되었는지 확인해봅니다.
curl 등록한 호스트네임
잘 등록했다면 다음과 같이 80포트로 접근이 불가하다는 에러가 발생합니다.
이는 아직 80포트로 실행된 서비스가 없음을 의미하기 때문에
curl 호스트 이름으로 실행한 명령어는 정상적으로 수행된것입니다.
※vim 편집기를 처음 다루다보면 수정하는과정에서 ctrl+Z를 누른다거나
아무 명령이 듣지않아서 EC2서버자체를 종료하거나 할 수 있다.
이 때 다시 vim편집기를 통해 파일을 열어보면
Attention : ~~ found a swap file by name 하면서
에러가 나오고 하단에 선택지가 주어진다.
비정상적 종료시 리눅스가 자동으로 원본파일(vim으로 수정하려던 파일)의
swp파일을 만들어서 나오는 에러다. 이 떄는 swp 파일을 지워주자. Delete it.
원본파일이 지워지는 것이 아니다. 단지 원본파일에 그동안 수정했던 내용이
적용이 안 되어 있을 수도 있다. 이때는 그냥 다시 하자.
이로써 EC2를 설치하고 기본 설정을 끝냈습니다.
여기까지는 AWS에서 제공하는 인스턴스(서버컴퓨터)를 설정한 것에 불과합니다.
다음글에서는 인스턴스가 사용할 DB 설정에 관한 글을 작성하겠습니다.