이 글은 책 「스프링 부트와 AWS로 혼자 구현하는 웹 서비스」를 공부하고 정리한 글입니다.
오늘은 AWS를 이용하여 서버 배포를 해보자!
외부에서 우리가 만든 서비스에 접근하려면 24시간 작동하는 서버가 필요하다.
24시간 작동하는 서버에는 3가지 선택지가 있다.
일반적으로 비용은 호스팅 서비스나 집 PC를 이용하는 것이 저렴하지만, 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다.
클라우드 서비스에 대해 더 자세히 알아보자.
클라우드 서비스는 쉽게 말하면 인터넷(클라우드)을 통해 서버, 스토리지(파일 저장소), 데이터베이스, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것이다.
예를 들어 AWS의 EC2는 서버 장비를 대여하는 것이지만, 실제로는 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원한다. 그래서 단순히 물리 장비를 대여하는 것에서 그치는 것이 아니라 개발자가 직접 해야 할 일을 AWS가 모두 지원을 하는 것이다.
클라우드에는 몇 가지 형태가 있다.
IaaS
에서 한번 더 추상화한 서비스이다.다양한 클라우드 서비스(AWS, Azure, GCP 등) 중에서 AWS를 사용할 것이다.
앞으로 진행하는 모든 AWS 서비스는 IaaS
를 사용한다. AWS의 PaaS 서비스인 빈스톡을 사용하면 대부분 작업이 간소화되지만, 프리티어로 무중단 배포가 불가능하다.
배포할 때마다 서버가 다운되면 제대로 된 서비스를 만들 수 없으니 무중단 배포는 필수이고 빈스톡은 사용할 수 없다.
AWS 회원 가입을 완료했다고 가정하고 EC2 인스턴스 생성부터 진행하겠다.
EC2(Elastic Compute Cloud)
는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다. 보통 "AWS에서 리눅스 서버 혹은 윈도우 서버를 사용합니다."라고 하면 이 EC2를 말하는 것이다.
AWS에서 무료로 제공하는 프리티어 플랜에는 EC2 사용에 다음과 같은 제한이 있다.
t2.micro
만 가능하다.Region이란 AWS 서비스가 구동될 지역을 말한다. Region이 현재 위치에 가까이 있을수록 네트워크가 빠르다.
맨 처음 시작할 때 Region이 오아이주
로 선택되어 있다. 클릭해서 서울
로 변경하자.
EC2 대시보드에서 인스턴스 시작
버튼을 클릭한다. 인스턴스
란 EC2 서비스에 생성된 가상머신을 말한다.
AMI(Amazon Machine Image, 아마존 머신 이미지)
는 EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것을 말한다.
인스턴스라는 가상머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지라고 생각하면 된다.
→ Amazon Linux 2 AMI
선택하기
→ 프리티어로 표기된 t2.micro
선택하기
t2
는 요금 타입을 말하며micro
는 사양을 말한다.t2
외에도 t3
도 있으며 보통 합쳐서 T 시리즈
라고 하며, 범용 시리즈
라고 불릴만큼 다양한 사양을 사용할 수 있다.
이 시리즈는 다른 서비스와 달리 크레딧이라는 일종의 CPU를 사용할 수 있는 포인트 개념이 있다. 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받게 되며, 사용하지 않을 때는 크레딧을 축적하고, 사용할 때 이 크레딧을 사용한다.
정해진 사양보다 더 높은 트래픽이 오면 크레딧을 좀 더 적극적으로 사용하면서 트래픽을 처리하지만, 크레딧이 모두 사용되면 더이상 EC2를 사용할 수 없다. 그래서 트래픽이 높은 서비스들은 T2 시리즈가 아닌 다른 시리지를 사용하기도 한다. 그래도 그 전까지는 활용도가 높기 때문에 시작하는 단계에서는 사용하기 좋다.
기업에서 사용할 경우 VPC, 서브넷 등을 세세하게 다루지만, 혼자서 1대의 서버만 사용하니 별다른 설정을 하지 않고 바로 다음 단계로 넘어가면 된다.
스토리지는 흔히 하드디스크라고 부르는 서버의 디스크(SSD도 포함)를 말하며 서버의 용량을 얼마나 정할지 선택하는 단계이다.
기본값은 8GB이지만 프리티어로 30GB까지 사용 가능하므로 30GB로 변경해준다.
웹 콘솔에서 표기될 태그인 Name
태그를 등록한다. 태그는 해당 인스턴스를 표현하는 여러 이름으로 사용될 수 있다. EC2의 이름을 붙인다고 생각하고 넣으면 된다.
보안 그룹은 방화벽을 의미한다.
기존에 생성된 보안 그룹이 없으므로 새 보안 그룹 생성
을 선택한 뒤, 보안 그룹 이름
에는 유의미한 이름으로 변경하면 된다.
그 다음 화면과 같이 설정해주면 된다.
22
인 경우는 AWS EC2에 터미널로 접속할 때를 말한다. pem
키 관리와 지정된 IP에서만 ssh 접속이 가능하도록 구성하는 것이 안전하다.8080
을 추가한다.모든 설정이 잘 되었는지 확인하고 시작하기
버튼을 클릭하면 다음과 같은 창이 뜬다.
인스턴스로 접근하기 위해서는 pem 키(비밀키)
가 필요하다. 그래서 할당할 pem 키
를 선택하는 것이다.
인스턴스는 지정된 pem 키와 매칭되는 공개키를 가지고 있어, 해당 pem 키 외에는 접근을 허용하지 않는다. 일종의 마스터키이기 때문에 절대 유출되면 안된다.
기존에 생성된 pem 키가 있으면 선택하고 없다면 신규로 생성한 뒤 키 페어 다운로드
를 클릭하면 [설정한 키 페어 이름].pem
파일이 다운로드 된다.
EC2 목록으로 다시 이동하면 다음과 같이 인스턴스가 생성된 것을 확인할 수 있다.
인스턴스 생성 시 항상 새 IP를 할당하는데, 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당된다. 이런 이유로 매번 PC에서 접근할 때마다 IP 주소를 확인해야 한다. 이런 번거로움을 줄이기 위해 고정 IP를 가지게 해야 한다.
AWS의 고정 IP를
Elastic IP(EIP, 탄력적 IP)
라고 한다.
EC2 인스턴스 페이지의 왼쪽 카테고리에서 탄력적 IP
를 클릭한다.
탄력적 IP 주소 할당
버튼을 클릭한 뒤
할당
버튼을 클릭한다.
새 주소 할당이 완료되면 탄력적 IP가 발급된다.
다시 EC2 대시보드에 가서 생성한 EC2 인스턴스를 선택한 뒤 탄력적 IP 주소 연결
을 클릭한다.
주소 연결을 위해 생성한 인스턴스와 IP를 선택하고 연결
버튼을 클릭한다.
EC2 대시보드에 다시 들어가서 인스턴스에 퍼블릭, 탄력적 IP가 잘 연결되었는지 확인하면 끝이다.
⭐ 생성한 탄력적 IP는 무조건 EC2에 연결해야 한다!
그렇지 않으면 비용이 발생한다.
만약 더는 사용할 인스턴스가 없을 경우에는 탄력적 IP를 삭제해야 한다.
지금까지 만든 EC2로 접속해보자.
책에서는 윈도우 환경일 경우 putty를 사용했는데 나는 Windows terminal을 이용해서 접속하였다. 접속 방법은 아래 사이트를 참고했으므로 생략하겠다.
🔗 참고 사이트
다음 명령어를 이용하여 Java 11을 EC2에 설치해주자.
sudo yum install java-11-amazon-corretto.x86_64
설치 완료 후 다음 명령어를 이용해서 Java 버전이 11이 맞는지 확인해주자.
java -version
EC2 서버의 기본 타임존은 UTC으로, 한국의 시간과는 9시간 차이가 발생한다. 이렇게 되면 서버에서 수행되는 Java 애플리케이션에서 생성되는 시간도 모두 9시간씩 차이가 나기 때문에 꼭 수정해야 한다.
다음 명령어를 차례로 수행하자.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
모두 완료하면 date
명령어를 실행했을 때 타임존이 KST
로 변경된 것을 확인할 수 있다.
여러 서버를 관리 중일 경우 IP만으로 어떤 서비스의 서버인지 확인하기 어렵다. 그래서 각 서버가 어느 서비스인지 표현하기 위해 HOSTNAME을 변경해보자.
🔗 참고 사이트
다음 명령어를 수행한 뒤
sudo vim /etc/hosts
127.0.0.1
에 이름을 원하는 이름으로 변경하자.
다음 명령어를 수행한 뒤 위에서 바꾼 이름과 동일하게 변경하자.
sudo vim /etc/hostname
(원래는 ip-[IP주소]
가 저장되어 있다.)
모두 수정 완료했으면 서버를 재부팅하자.
sudo reboot
다시 서버에 접속하면 원하는 이름으로 변경된 것을 확인할 수 있다.
다음 시간에는 AWS의 데이터베이스 서비스인 RDS를 생성하고 설정해보도록 하겠다.