나의 삽질일기/Infra

[aws] AWS EC2 서버에 spring-boot 띄우기

2023. 6. 20. 21:24
목차
  1. 1. EC2 인스턴스 생성
  2. 2. 탄력적 IP (Elastic IP)
  3. 3. SSH 클라이언트로 서버 접속
  4. 4. 보안 그룹 생성
  5. 5. EC2 인스턴스에 Spring Boot 서버 띄우기
728x90

1. EC2 인스턴스 생성

1.1. AWS Rsgion 설정

위치를 서울로 설정한다.

 

위치에 따라 인스턴스 위치가 결정되기 때문에 서울이 아닌 곳으로 설정하면 속도가 낮을 수도 있다.

 

 

1.2. ec2 메뉴 진입 후 새 인스턴스 생성

검색을 통해 ec2 메뉴로 이동한다.

 

이동 후 좌측 인스턴스 카테고리를 선택해 우측 상단의 인스턴스 시작 버튼을 클릭해 인스턴스를 생성한다.

 

 

1.3. Amazon Machine Image(AMI) 및 인스턴스 유형 선택

이름을 입력해 주고 AMI를 선택한다.

 

AMI는 서버의 종류를 선택하는 것이다. 본인이 원하는 걸 선택하면 된다.

 

인스턴스는 프리티어를 이용한다면 t2.micro 외에 다른 선택권은 없다.

 

 

1.4. 키페어 생성

키페어는 EC2 서버에 SSH 접속을 하기 위한 필수 요소라 꼭 생성해야 한다.

 

우측 새 키 페어 생성을 눌러 원하는 이름의 키페어를 생성한다. 생성을 하면 자동으로 my-key.pem 파일이 다운되는데 추후 SSH 환경에 접속하기 위해선 이 키 파일이 존재하는 위치에서 ssh 명령어를 실행하면 된다.

 

한 번밖에 다운로드하지 못하기 때문에 안전한 곳에 저장해 두자.

 

생성 후에 생성한 키 페어를 선택하면 된다.

 

 

1.5. 네트워크 및 스토리지 선택

네트워크 설정은 EC2에 접근을 허용하는 ACL과 같다.

 

추후에 '보안그룹'이라는 설정을 별도로 할 예정이기에 SSH 트래픽만 내 IP로 허용해 준다. 이렇게 설정하면 SSH 트래픽에 접속 가능한 IP가 내 IP로 자동 설정 된다.

 

프리티어에서 최대 최대 30까지의 스토리지 설정을 지원하기 때문에 30으로 바꿔준다.

 

볼륨 유형은 범용 SSD로 선택한다.

 

 

1.6. 인스턴스 요약 및 인스턴스 시작

우측 인스턴스 요약에 이상한 부분이 없다면 인스턴스 시작을 눌러 인스턴스를 생성한다.

 

이후 ec2 메뉴로 돌아오면 다음과 같이 인스턴스가 생성된 것을 볼 수 있다.

 

 

2. 탄력적 IP (Elastic IP)

AWS EC2 인스턴스는 서버를 중지하고 재실행시키면 퍼블릭 IP가 변경되어 클라이언트가 사용할 수 있는 변하지 않는 IP가 필요하다.

 

이때 필요한 것이 탄력적 IP로, 탄력적 IP는 외부에서 인스턴스에 접근 가능하도록 하는 고정 IP이다. 탄력적 IP는 생성 후 사용하지 않아도 과금이 되기 때문에 꼭 필요한 만큼만 생성하자.

 

 

2.1. 탄력적 IP 메뉴 이동

아까 인스턴스를 생성하였던 EC2 메뉴에서 탄력적 IP 카테고리를 선택한 후 우측 상단의 탄력적 IP 주소 할당을 클릭한다.

 

 

2.2. 탄력적 IP 할당

클릭하면 다음과 같은 화면이 뜨는데 따로 수정할 부분은 없고 바로 할당 버튼을 눌러주면 된다.

 

처음 화면으로 돌아오면 탄력적 IP가 성공적으로 할당된 것을 볼 수 있다. 

 

 

2.3. 인스턴스 선택 및 연결

위의 녹색 섹션에 '이 탄력적 IP 주소 연결' 버튼을 눌러도 되고, 베너가 사라졌다면 작업 탭을 통해서도 진입할 수 있다.

 

방금 만들었던 인스턴스를 선택하고, 프라이빗 IP 주소도 할당받아 준 뒤 연결을 누른다.

 

 

2.4. Amazon Machine Image(AMI) 및 인스턴스 유형 선택

다시 인스턴스 정보를 확인해 보면 IP가 할당된 것을 볼 수 있다.

 

퍼블릭 IP 주소도 기존 값에서 탄력적 IP주소로 자동으로 변경되었다.

 

 

3. SSH 클라이언트로 서버 접속

인스턴스를 만들었으니 만들어진 인스턴스에 접속해보자.

 

우측 상단 연결 버튼을 누르면 인스턴스에 접속할 수 있는 여러 가지 방법을 알려주는데, 우리는 'SSH 클라이언트'로 접속하는 방법을 알아볼 거다.

 

사실 설명이 너무 잘되어 있어서 저대로 따라만 하면 된다. 

 

 

3.1. SSH 클라이언트 접속

먼저 터미널에서 이전에 다운로드한 키페어가 있는 파일 위치로 이동한다.

 

$ chmod 400 my-key.pem

이후 키 파일의 권한을 변경해 준다.

 

// public DNS
$ ssh -i "my-key.pem" ec2-user@ec2-3-34-236-66.ap-northeast-2.compute.amazonaws.com

// public IP
$ ssh -i "my-key.pem" ec2-user@3.34.236.66

퍼블릭 DNS나 퍼블릭 IP를 이용해 인스턴스에 접속해 준다.

 

 

3.2. 호스트 등록해서 간편하게 접속

우린 이제 SSH로 EC2 인스턴스 서버에 접속할 수 있다.

 

하지만 매번 'ssh -i "my-key.pem" ec2-user@ec2-3-34-236-66.ap-northeast-2.compute.amazonaws.com'와 같은 명령어를 쳐서 접근하기엔 번거롭기 때문에 호스트로 등록해 쉽게 접속할 수 있도록 변경해 보자.

 

 

3.2.1 ~/. ssh 디렉터리로 키 페어 파일 복사 후 권한 변경

cp my-key.pem ~/.ssh/

먼저 키 페어 파일을 ~/.ssh/ 로 복사한다.

 

 

3.2.2 ~/.ssh 로 이동 후 키페어 권한 변경

터미널에서 복사된 키 페어가 있는 디렉터리로 이동한다.

 

chmod 600 my-key.pem

이후 복사된 키 페어의 권한을 변경한다.

 

 

3.2.3. ~/.ssh/config 파일 생성

$ vi ~/.ssh/config

Host {원하는 호스트 이름}
User {유저 이름}
HostName {탄력적 IP}
IdentityFile {키 페어 파일 위치}

~/.ssh/ 디렉터리에 config 파일을 생성해서 다음과 같이 입력한다.

우분투의 경우에만 User에 ubuntu를 작성하고 나머지는 ec2-user이다.

 

 

3.2.4.  설정한 Host로 접속

$ ssh {Host}

이제 어느 위치에서든 방금 설정한 Host로 인스턴스에 접근할 수 있게 된다.

 

 

4. 보안 그룹 생성

보안 그룹은 AWS에서 제공하는 방화벽 모음이다.

 

서비스를 제공하는 애플리케이션이라면 괜찮지만 RDS와 갗이 외부에서 함부로 접근하면 안 되는 인스턴스는 허용된 IP에서만 접근하도록 설정이 필요하다.

  • 인바운드 (Inbound) : 외부 -> EC2 인스턴스 내부 허용
  • 아웃바운드 (Outbound) : EC2 인스턴스 내부 -> 외부 허용

 

 

4.1. 현재 보안 그룹 확인

인스턴스 정보의 보안 탭에서 현재 설정된 보안 그룹을 확인할 수 있다.

 

지금은 default 값만 들어가 있는 모습니다.

 

 

4.2. 보안 그룹 리스트 확인

보안 그룹 카테고리에 들어가면 보안 그룹 리스트를 볼 수 있다.

 

보안 그룹은 인스턴스와 별개로 존재해 한번 만들어둔 보안그룹은 새 인스턴스를 만들 때 적용할 수 있다.

 

이제 우측 상단의 보안그룹 생성을 눌러 새 보안그룹을 만들어보자.

 

 

4.3. 보안 그룹 생성

보안 그룹의 이름과 설명을 추가한다.

 

인바운드 규칙을 추가해 준다. 인바운드는 외부에서 EC2로 요청할 때 허용할 IP 대역을 설정할 수 있다.

 

왼쪽 하단의 '규칙 추가' 버튼을 통해 규칙을 추가하고, 유형을 선택하면 자동으로 그에 맞는 프로토콜과 포트 범위가 고정된다. 

 

SSH, HTTP, HTTPS와 같은 기본 포트를 열고 사용자 지정으로 스프링부트 프로젝트를 추가해 준다.

 

이때 여러 사람이 함께 작업하는 프로젝트라면 SSH에 각각의 로컬 PC IP를 소스의 사용자지정으로 전부 추가해 준다.

 

아웃바운드 규칙은 따로 설정할 것 없이 모든 트래픽 그대로 둔다.

 

 

 

4.4. 현재 보안 그룹 확인

다시 인스턴스로 돌아와서 우측 상단의 작업 탭에서 보안, 보안 그룹 변경을 통해 방금 만든 보안 그룹으로 변경할 수 있다.

 

방금 만든 보안 그룹 MySecureGroup을 추가해 준다. 보안 그룹은 여러 개를 동시에 설정할 수 있기 때문에 기존에 설정된 launch-wizard-1 은 제거해 준다.

 

 

4.5. 변경된 보안 그룹 확인

이제 인스턴스에서 보안탭을 확인해 보면 아까 설정한 규칙들이 적용되어 있는 것을 볼 수 있다.

 

 

5. EC2 인스턴스에 Spring Boot 서버 띄우기

Spring Boot 서버를 띄우는 방법에는 두 가지 방법이 있다.

  1. jar 파일을 빌드하여 EC2 복사 후 실행
  2. EC2에서 프로젝트 git clone 후 실행

두 가지 방법 중 첫 번째 방법으로 진행하겠다.

 

 

5.1.  EC2 인스턴스에 JDK 설치

EC2 인스턴스
// ubuntu
$ sudo apt-get update
$ sudo apt-get install openjdk-11-jdk

// linux
$ sudo yum install java-11-amazon-corretto.x86_64

위 명령어를 통해 EC2 인스턴스에 JDK를 설치해 준다. AMI 종류에 따라 명령어가 상이하니 잘 구분해서 사용해야 한다.

 

 

5.2. Spring Boot 프로젝트 빌드

spring boot 프로젝트
$ gradle clean build

다음 명령어를 이용해 스프링부트 프로젝트를 빌드한다. 

 

프로젝트 빌드를 완료하면 다음과 같이./build/libs 디렉터리에 jar 파일이 생성되는 것을 볼 수 있다.

 

spring boot 프로젝트
$ scp ./build/libs/{project-name}-0.0.1-SNAPSHOT.jar {Host}:/home/{User}

이제 이 명령어로 빌드된 jar 파일을 ec2 인스턴스에 복사한다.

  • {project-name} : 빌드한 프로젝트의 이름
  • {Host} : ~/.ssh/config 에 설정한 호스트 이름을 사용한다. 만약 설정을 하지 않았다면 '{user}@{퍼블릭 DNS or IP}' 를 기입하면 된다.
  • {user} : unbuntu는 ubuntu, 나머지는 ec2-user 가 들어간다.

 

5.3. EC2 인스턴스에서 프로젝트 실행

EC2 인스턴스
java -jar {project-name}-0.0.1-SNAPSHOT.jar &

이제 EC2 인스턴스에서 복사된 프로젝트를 실행만 하면 된다.

 

로컬에서 보던 것과 같은 로그가 뜨면 성공이다.

 

 

5.3. EC2 인스턴스에서 프로젝트 실행

서버를 띄웠으니 'http://{탄력적 IP}'로 접속하면 정상적으로 서버에 연결되는 것을 볼 수 있다.

 

 

 


참고자료

https://bcp0109.tistory.com/356

728x90
저작자표시 비영리 (새창열림)
  1. 1. EC2 인스턴스 생성
  2. 2. 탄력적 IP (Elastic IP)
  3. 3. SSH 클라이언트로 서버 접속
  4. 4. 보안 그룹 생성
  5. 5. EC2 인스턴스에 Spring Boot 서버 띄우기
'나의 삽질일기/Infra' 카테고리의 다른 글
  • [CI/CD] Github Actions CD : AWS EC2 에 Spring Boot 배포하기
  • [CI/CD] Github Actions CI : 자동 빌드 및 테스트 하기
  • [aws] RDS 생성 후 EC2와 연동
wwan13
wwan13
내가 보려고 정리해둔 블로그
wwan13
taewan.log
wwan13
전체
오늘
어제
  • ALL (35)
    • 회고 (1)
    • 나의 삽질일기 (34)
      • Spring (12)
      • JPA (6)
      • Algorithm (4)
      • Cleancode & Refactoring (8)
      • Infra (4)
hELLO · Designed By 정상우.
wwan13
[aws] AWS EC2 서버에 spring-boot 띄우기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.