반응형

 

[AWS] Spring Boot 프로젝트를 AWS EC2 에 배포하기 (mac)

Spring Boot 프로젝트를 AWS EC2 에 배포하기 

 

프로젝트를 AWS EC2에 배포하기 위한 순서는 아래와 같다.

  1. Spring Boot 를 통해 프로젝트를 생성하기 (적어도 간단한 텍스트라도 출력되어야 좋음)
  2. Github / AWS 계정이 있어야 한다.
  3. 생성한 프로젝트를 Github 에 Push 한다.
  4. AWS EC2 인스턴스를 생성한다.
  5. AWS EC2 mac OS 터미널에서 접속한다.
  6. AWS EC2 배포한다.

 

환경은 macOS 로 스프링부트를 통해 생성한 프로젝트를 AWS EC2에 배포하는 방법을 알아보자.
스프링부트에서 간단히 Hello world 를 출력하는 프로젝트 만들기는 이 포스팅을 참고하면 된다. 
그리고 Github 에 해당 프로젝트를 push 하면 된다.

첫 번째, Github 에 Spring Boot 프로젝트 Push 하기

Gihub에서 repository 생성후 스프링부트 프로젝트에서 아래와 같이 입력한다.

git remote origin add <내 repository 주소>
git add .
git push 
git push --set-upstream origin master

 

두 번째, AWS EC2 인스턴스 생성하기 

AWS 의 간단한 소개

AWS EC2는 간단하게 가상서버라고 생각할 수 있으며, 몇 가지 주요 특징은 다음과 같다.

  • 클릭 몇 번 만으로 가상 컴퓨팅 환경을 제공받을 수 있음
  • 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능
  • 클라우드 컴퓨팅 (참고)
  • Machine Image (AMI)
  • Elastic Block Store (EBS)
  • Elastic IP Addresses (EIP)

 

1) EC2 인스턴스 생성하기 

EC2 서비스에서 생성한 가상 서버를 인스턴스라 한다. 서버를 켜고 끄는것은 인스턴스를 실행하고 종료한다 의미와 같다. AWS 로그인 후, EC2 서비스로 이동하여 [인스턴스 시작] 버튼을 클릭한다. 

EC2 인스턴스 생성하기

이름 및 태그 부분에서 이름은 임의로 입력하면 된다. (나의 경우 EC2TEST 이런 식으로 입력했다.)

AMI는 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿으로서, 이미지를 통해 인스턴스를 쉽게 만들 수 있다.
여기서는 Amazon Linux 2 AMI (HVM), SSD Volume Type 인스턴스를 선택한다.
Amazon Linux 2는 차세대 Amazon Linux 운영 체제로, 현대식 애플리케이션 환경에 Linux 커뮤니티의 최신 향상 기능과 함께 장기적인 지원을 제공한다고 한다.

 

2) 인스턴스 유형 선택하기

인스턴스 유형 선택

3) 키 페어 (key_pair) 생성하기

키 페어 (key_pair) 생성

키 페어가 없는 경우 우측의 [새 키 페어 생성] 버튼을 클릭하여 생성하면 된다. 
키 페어(key pair)는 SSH 터미널로 인스턴스에 접근할 때 꼭 필요한 파일이기 때문에 외부에 노출되어서는 안되고, 잃어버려서도 안되기 때문에 꼭 개인이 잘 보관하고 있어야 한다.

  1. AWS의 키 페어가 존재하지 않으면 키 페어를 생성해야 한다.
  2. 키 페어 이름을 작성한다.
  3. 키 페어를 다운로드하면 .pem 파일이 생성되는데 터미널 접근에 사용되므로 꼭 잘 보관해야 한다.
  4. 키 쌍을 다운받고 "인스턴스 시작"을 눌러서 인스턴스를 시작한다.

 

4) 인스턴스 확인하기 

인스턴스 확인하기

이와 같이 running(실행중) 상태가 되고, 초기화에서 검사 통과 상태로 되면 인스턴스를 실행되고 있는 상태가 된 것이다. 

 

세 번째, AWS EC2 mac OS 터미널에서 접속하기

처음에는 putty 를 통해 접속하려고 열심히 서칭했는데 아래와 같이 하는 게 더 간단하다..
putty는 Window 인 경우 더 편한듯!?

위에서 생성한 key 페어는 AWS를 통해 딱 한번 다운로드 가능하니 잘 받아두어야 한다.. 

## 권한 부여
chmod 600 key_pair.pem

## ssh 접속
ssh -i /Users/유저명/Desktop/key_pair.pem ec2-user@13.125.229.246

 

세 번째, AWS EC2 mac OS 터미널에서 접속

 

네 번째, 배포하기 (패키지 설치)

애플리케이션을 배포할 때 필요한 패키지들을 설치한다.

1. git 설치

[ec2-user@ip-172-31-40-18 ~]$ sudo yum install -y git
[ec2-user@ip-172-31-40-18 ~]$ git --version

 

2. java 설치

[ec2-user@ip-172-31-40-18 ~]$ sudo amazon-linux-extras install java-openjdk11
[ec2-user@ip-172-31-40-18 ~]$ java -version
// openjdk version "11.0.13" 2021-10-19 LTS
// OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
// OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

 

3. 배포하기 (git clone)

배포하기

Gitgub 에 올려둔 Hello world 어플리케이션 소스를 EC2 인스턴스로 clone 해야한다.
주소를 복사해두고 아래와 같이 작업한다.

[ec2-user@ip-172-31-40-18 ~]$ mkdir apps
[ec2-user@ip-172-31-40-18 ~]$ cd apps/
[ec2-user@ip-172-31-40-18 apps]$ git clone https://github.com/githubId/aws_test.git
'aws_test'에 복제합니다...
remote: Enumerating objects: 33, done.
remote: Counting objects: 100% (33/33), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 33 (delta 2), reused 32 (delta 1), pack-reused 0
오브젝트를 받는 중: 100% (33/33), 59.93 KiB | 19.98 MiB/s, 완료.
델타를 알아내는 중: 100% (2/2), 완료.

 

4. 배포하기 (build)

프로젝트를 빌드해주어야 한다. 그 전에 빌드하기 위해서는 실행권한이 있어야 하므로, 권한을 수정해주도록 한다.

[ec2-user@ip-172-31-40-18 apps]$ cd aws_test
[ec2-user@ip-172-31-40-18 aws_test]$ sudo chmod 777 ./gradlew
[ec2-user@ip-172-31-40-18 aws_test]$ ./gradlew build
Downloading https://services.gradle.org/distributions/gradle-7.4.1-bin.zip
...........10%...........20%...........30%...........40%...........50%...........60%...........70%...........80%...........90%...........100%

Welcome to Gradle 7.4.1!

Here are the highlights of this release:
 - Aggregated test and JaCoCo reports
 - Marking additional test source directories as tests in IntelliJ
 - Support for Adoptium JDKs in Java toolchains

For more details see https://docs.gradle.org/7.4.1/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 2m 13s
7 actionable tasks: 7 executed

 

5. 배포하기 (실행)

SpringBoot는 톰캣 서버가 내장되어있으므로, 빌드된 파일(jar)만 실행해주면 서버가 가동된다.

[ec2-user@ip-172-31-40-18 libs]$ java -jar AWS_Test-0.0.1-SNAPSHOT.jar

배포하기

 

6. 배포하기 - 인바운드 규칙 설정

마지막으로 EC2 인스턴스 인바운드 규칙에 8080포트가 설정되어 있어야 한다.
애플리케이션 앞 단에 웹서버가 존재한다면 80포트를 그대로 두고 웹 서버에서 설정을 통해 처리하면 되지만, 지금은 웹서버 없이 바로 애플리케이션에 접근하는 것이므로 인바운드 규칙이 필요하다.

인바운드 규칙을 추가하는 방법은 다음과 같다.

인바운드 규칙 설정

 

좌측 네트워크 보안 - 보안그룹을 클릭한 후, 해당 보안 그룹을 선택하고 하단의 인바운드 규칙 탭에서 [인바운드 규칙 편집] 버튼을 클릭한다.

 

인바운드 규칙 설정

사용자 지정 TCP / 8080 포트 를 선택하고 0.0.0.0./0 입력한 후 [저장] 버튼을 클릭하면 된다.

 

7. 테스트하기

이제 브라우저에서 Hello World가 잘 출력되는지 확인하면 된다.

도메인은 EC2 인스턴스의 IPv4 퍼블릭 IP를 그대로 입력하면 된다.

테스트하기

이렇게 EC2에 애플리케이션을 배포하여 외부에서도 접근할 수 있게 되었다!!!! 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기