[Infra] AWS EC2를 이용한 WAS 서버 배포

1. EC2 인스턴스 생성

(1) AWS Region 서울로 설정

IAM 사용자로 회원가입 후 로그인하면 아래와 같이 지역을 설정할 수 있다. 작성자는 Seoul로 설정했다.

 

(2) 인스턴스 시작 버튼 누르기

 EC2 서비스에 들어가 "인스턴스 시작" 버튼을 누른다.

 

 

  • 이름 작성(비어있어도 됨)

 

  • OS 선택 및 AMI 선택(프리티어 사용가능으로)

AMI는 Amazon Machine Image의 약자이다. AMI는 어떤 서버로 구성할지 선택하는 것으로, 작성자는 프리티어의 Ubuntu LTS 버전을 선택했다.

 

 

  • 인스턴스 유형 선택(프리티어 사용가능으로)

 인스턴스 유형은 프리 티어를 사용한다면 다른 선택권이 없다.

 

 

  • 키 페어 생성

 키 페어는 EC2 서버에서 SSH 접속을 하기 위해 필수이기 때문에 생성해야 한다. "새 키 페어 생성" 을 눌러 원하는 이름을 적고 생성한다. 생성하면 자동으로 aws-key.pem 파일이 다운되며, SSH 환경에 접속하기 위해서는 해당 키 파일이 존재하는 위치로 가서 ssh 명령어를 실행하면 된다.

 

 

  • 스토리지 구성

 

2. 탄력적 IP(Elastic IP) 생성

Elastic IP는 외부에서 인스턴스에 접근 가능한 고정 IP이다. ElasticIP 주소는 인터넷에서 연결 가능한 퍼블릭 IPv4 주소로, 퍼블릭 IPv4 주소가 없는 인스턴스에 연결해야 하는 경우 Elastic IP 주소를 인스턴스에 연결하여 인터넷 통신을 활성화할 수 있다.

 

 

 Elastic IP 주소 할당 버튼을 클릭해 Elastic IP를 생성한다.

 

 

 생성한 Elastic IP 주소를 선택해 인스턴스와 연결한다.

 

 

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

 이제 본인이 만든 EC2 인스턴스에 접속한다. 인스턴스 정보에서 "연결" 버튼을 클릭하면 인스턴스에 연결 가능한 여러가지 방법을 알려줍니다. 현재 블로그에서는 "SSH 클라이언트" 로 접속할 예정이다.

 

 

(1) 여기서 SSH란?

 SSH는 Secure SHell의 약자로, 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고, 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 프로토콜을 의미한다. 기본적으로 22번 포트를 사용한다.

 

 

(2) 터미널 실행 후 키 페어 파일 위치로 이동

 터미널을 실행해서 다운 받은 키 페어 파일 위치로 이동한다. 본인은 터미널 대신 iterm을 사용하는 편이다.

 

$ cd Downloads
$ ls aws-key.pem

 

(3) 키 파일 권한 변경

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

 

$ chmod 400 my-key.pem

 

(4) SSH 접속

가이드에 있는 대로 퍼블릭 DNS 또는 퍼블릭 IP 를 사용해 인스턴스에 접속할 수 있다. 필자는 퍼블릭 DNS를 사용했다.

 

# 퍼블릭 DNS 로 접속
$ ssh -i "aws-key.pem" ubuntu@ec2-3-39-30-233.ap-northeast-2.compute.amazonaws.com

# 퍼블릭 IP 로 접속
$ ssh -i "aws-key.pem" ubuntu@3.39.30.233

 

4. Spring boot 애플리케이션 실행

  • 자바 설치
$ sudo apt update sudo apt install openjdk-17-jdk -y java -version

 

  • 그래들 설치
$ sudo apt install gradle -y gradle -v

 

  • 프로젝트 클론
$ git clone <https://github.com/Choi-JJunho/spring-roomescape-playground.git> cd spring-roomescape-playground

 

  • 빌드 및 실행
$ ./gradlew build java -jar build/libs/spring-roomescape-playground-0.0.1-SNAPSHOT.jar

 

5. 도메인 발급

  • 내도메인 한국에서 발급

https://xn--220b31d95hq8o.xn--3e0b707e/

 

내도메인.한국 - 한글 무료 도메인 등록센터

한글 무료 도메인 내도메인.한국, 웹포워딩, DNS 등 무료 도메인 기능 제공

xn--220b31d95hq8o.xn--3e0b707e

 

 위 링크에서 도메인을 발급 받는다. 작성자는 "aws-study.kro.kr"을 사용했다.

 

 

  • IP 연결에 발급받은 Elastic IP 입력

 

6. Nginx 리버스 프록시 적용 - 발급받은 도메인 서버와 연결

  • Nginx 설치
sudo apt update
sudo apt install nginx -y

 

  • Nginx 설정 파일 수정 - 발급받은 도메인과 서버 연결
$ sudo nano /etc/nginx/sites-available/default

server {
	listen 80;
	server_name 내도메인.한국;

	location / {
    	proxy_pass <http://127.0.0.1:8080>;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

$ sudo systemctl restart nginx

 

  • 번외 - nano 편집기
    • Ctrl + O : 파일 저장
    • Ctrl + X : 종료 (저장 여부 선택) 

 

  • Nginx 재시작
$ sudo systemctl restart nginx
$ sudo systemctl enable nginx

 

  •  Nginx 방화벽 설정

80번(HTTP), 443번(HTTPS) 포트를 열어준다.

$ sudo ufw allow 'Nginx Full'

 

7. AWS 보안 그룹 설정

  • 인바운드
    • 외부에서 인스턴스로 들어오는 트래픽을 제어한다.
  • 아웃바운드
    • 인스턴스에서 외부로 나가는 트래픽을 제어한다.

 

구분 인바운드 아웃바운드
방향 외부 -> 인스턴스 인스턴스 -> 외부
기본 상태 모든 트래픽 차단 모든 트래픽 허용
설정 목적 서버 접근 허용(웹, SSH 등) 외부 통신 허용(API 호출, DB 연결 등)
보안 설정 최소한으로 열기(필요한 포트만) 기본적으로 모두 열려 있음

 

 Nginx 방화벽을 설정 그대로 인바운드 규칙을 추가해준다.

 

 

8. 도메인 연결 확인

웹 브라우저에서 http://www.aws-study.kro.kr에 접속해 연결이 정상적으로 되었는지 확인한다.

 

 

참고자료

https://aws.amazon.com/ko/iam/features/mfa/

 

IAM - 다중 인증

패스키와 보안 키는 FIDO 표준을 기반으로 하므로 사용자의 디바이스 전체에서 더 쉽고 안전하게 로그인할 수 있습니다. FIDO 인증 표준은 퍼블릭 키 암호화를 기반으로 하며, 이를 통해 암호보다

aws.amazon.com

 

 

https://bcp0109.tistory.com/356

 

AWS 1편: EC2 생성 후 Spring Boot 띄우기

Overview AWS EC2 인스턴스를 생성하고 Spring Boot 서버를 띄워보는 것까지 진행합니다. 주 목표는 서버를 외부에 제공하는 거라서 따로 배포 시스템을 구축하지 않고 단순히 빌드 파일을 복사해서 수

bcp0109.tistory.com

 

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html

 

탄력적 IP 주소 - Amazon Elastic Compute Cloud

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

https://velog.io/@jonghyun3668/SpringBoot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-EC2-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

 

SpringBoot 프로젝트 EC2 배포하기

깃헙에 있는 프로젝트를 AWS EC2에 git clone을 통해 내려받아 jar 파일 빌드를 해보겠습니다.(EC2 인스턴스는 우분투로 진행합니다. 또한 따로 배포 시스템을 구축하지 않고 수동으로 배포하는것만

velog.io