Infra/Aws

[AWS] AWS EC2를 이용하여 스프링 웹 애플리케이션 배포해보기

kth990303 2022. 6. 1. 00:52
반응형

 

AWS는 아마존에서 개발한 클라우드 서비스 플랫폼이다. 여기서 클라우드 서비스란, IT 리소스(CPU, 메모리 등의 자원)를 인터넷으로 빌려주고 사용한 만큼의 비용을 받는 것을 의미한다. EC2는 Elastic Computer Cloud → ECC → EC2로, 클라우드에서 컴퓨팅 파워의 규모를 자유자재로 변경할 수 있는 웹서비스이다. EC2는 탄력적인 특성을 갖고 있어 개발자들이 트래픽의 스파이크 또는 수요에 맞춰 즉시 용량을 조정할 수 있다. EC2에 대해 궁금하다면 아래 FAQ를 확인해보자.

https://aws.amazon.com/ko/ec2/faqs/

 

Amazon EC2 FAQ – Amazon Web Services

 

aws.amazon.com

 

AWS EC2를 이용하면 로컬에서뿐만 아니라, 다른 사람들이 내가 개발한 웹 애플리케이션을 이용할 수 있도록 서버를 쉽게 띄울 수 있다. 물론 트래픽이 몰릴 수록, IT 리소스를 많이 사용하게 되므로 요금도 그에 비례하게 된다.

 

이번 포스팅에선 내가 틈틈이 볼 용도로, 우아한테크코스에서 배운 스프링 웹 애플리케이션을 aws ec2로 배포하는 방법을 간단하게 적어보려 한다. 참고로, EC2 인스턴스는 이미 생성했다는 가정 하에 작성한다.


1. AWS에 로그인하여 인스턴스 정보 확인

아래 링크로 들어가서 로그인하자.

https://aws.amazon.com/ko/console/

 

AWS Management Console

AWS Support 플랜은 AWS로 성공하는 데 도움이 되는 다양한 도구, 프로그램 및 전문 지식에 대한 액세스의 조합을 제공합니다.

aws.amazon.com

로그인 후, 인스턴스 정보를 확인해주자. 

퍼블릭 IPv4 주소랑 다운받은 pem 확장자의 키페어 위치를 알고 있어야 배포를 할 수 있다.

 

2. EC2를 이용한 웹 애플리케이션 구동

 

1. 키페어(ex. key-kay.pem)를 저장받은 폴더에서 아래 명령어 실행

ssh -i {키페어} {ubuntu}@{자동 할당된 퍼블릭 IP 주소}	// ubuntu 서버 사용중일 때에
  • 만약 WARNING: UNPROTECTED PRIVATE KEY FILE! 경고가 발생할 경우 chmod 400 {키페어} 입력 후 재실행
    • chmod: 리눅스 파일 사용 권한 설정 명령어. (chmod rwx (read write execute))
    • ex. chmod 400 {키페어}: 파일 소유 사용자에게만 read 허용. 파일 사용 그룹 및 그 외에게는 아무 권한도 부여하지 않음. → ec2 키페어 보안성이 높아져 WARNING이 뜨지 않게 됨. (보통 chmod 755, chmod 700을 많이 사용한다고 함.)
  • 명령어가 어떤 역할을 하는지 모른다면 man {명령어} 를 입력하면 그 명령어에 대한 설명을 해준다.

아래와 같이 초록색으로 표시된 인스턴스에서 입력을 받을 수 있으면 성공적으로 명령어가 실행된 것이다.

 

1-1. 실행 후에 java —version을 입력했을 때 아래와 같이 not found일 경우 추가로 명령어를 입력해주자.

위 화면은 git은 설치돼있으나 java가 설치돼있지 않은 경우이다. git --version, java --version을 입력했을 때 버전이 떠야 한다.

wget -O- https://apt.corretto.aws/corretto.key | 
sudo apt-key add -sudo add-apt-repository 'deb https://apt.corretto.aws stable main'
sudo apt-get update; sudo apt-get install -y java-11-amazon-corretto-jdk

위 명령어를 차례대로 입력해주자.

  • JAVA 11 버전을 설치하는 명령어이다.
  • | 커맨드를 이용하여, corretto jdk 키를 출력 스트림으로 보내고, 그 결과를 입력 스트림으로 받아 add-apt-repository에 접속하여 jdk를 설치한다.

2. 웹 애플리케이션을 clone 받은 후, 아래 명령어를 입력해준다.

./gradlew bootJar
예시

1. git clone -b kth990303 --single-branch https://github.com/kth990303/jwp-shopping-cart.git 입력
2. cd jwp-shopping-cart
3. ./gradlew bootJar

 

3. build/libs 폴더로 이동하여 jar 파일명을 확인하고 java -jar {해당 jar 파일} & 또는 nohup java -jar {해당 jar 파일} &명령어로 웹 애플리케이션을 실행

스프링 웹 애플리케이션을 ec2 서버에서 구동했다.

참고로 위 PID (2618)은 나중에 프로세스를 안전하게 종료 (kill)할 때 사용된다. 그렇다고 외워둘 필요는 없다. 명령어를 이용하면 언제든 조회할 수 있기 때문이다.

  • & 명령어를 맨 뒤에 붙이지 않아도 실행 가능하지만, 붙일 경우에 터미널에서 서버를 실행시킨 상태로 유지하여 추가적인 명령을 내려줄 수 있음. & 을 붙이지 않으면 프로세스 실행 시에, 터미널에서 명령어를 내려줄 수 없음.
  • nohub 명령어는 프로세스 실행 터미널의 세션 연결이 끊어지더라도 지속적으로 동작할 수 있게 해주는 명령어.
  • 종료 시에는 kill 명령어로 프로세스를 종료해주어야 한다.
  • (ex. curl -X POST "localhost:8080/api/products" -H 'Content-Type: application/json' -d '{"name": "치킨", "price": 10000,"imageUrl": "test"}'명령어를 터미널에 실행시켜 CREATE 작업 가능

4. 웹 애플리케이션 종료하기

아래 명령어를 이용하여 종료할 수 있다.

ps -ef | grep [프로세스명]	// 실행 프로세스 PID 식별용

kill -15 [PID]	// 종료

kill -9 [PID]	// 강제종료

 

참고.

AWS EC2 작동원리 그림을 한눈에 볼 수 있는 그림이다.


AWS 포스팅은 보안 때문에 IP 주소를 가리는 등, 그림 편집을 많이 해야돼서 너무 힘들다...

리눅스 커맨드 명령어, 운영체제, 네트워크 지식들을 함께 공부하면 학습 효율을 높일 수 있을 듯 하다 :)

반응형