[AWS] Spring 프로젝트 배포하기

이진서·2023년 12월 4일

AWS

목록 보기
2/3

EC2 인스턴스 생성 및 접속

  1. AWS콘솔에 접속 후 원하는 Region으로 변경 (ap-southeast-2 (서울))

  2. EC2 선택 후 인스턴스 시작을 눌러 인스턴스 생성

    • 이름: 원하는 인스턴스 이름 입력
    • QuickStart -> Ubuntu 선택
      - 사용할 AMI(Amazone Machine Image)가 있다면 내 AMI를 눌러서 선택
    • Architecture: 64비트(x86)
  3. 키 페어 생성

    • 새 키 페어 생성 -> 키 페어 이름 입력
    • 원하는 옵션 선택후 키 페어 생성(RSA, .pem)
    • WSL을 통해 EC2에 접속할 것이므로 .pem파일을 WSL의 홈 폴더 안에 넣어줌
    • 생성된 키 페어를 선택
  4. 보안 그룹 선택

    • 기존의 보안 그룹을 선택하거나, 필요하다면 새로 생성
  5. 스토리지 구성

    • 용량과 스펙을 선택
  6. 필요하다면 추가적인 설정을 맞춰준 이후 인스턴스 시작


탄력적 IP (Elastic IP) 설정

  • EC2 콘솔화면에서 인스턴스를 선택한 후 탄력적 IP 설정 가능
  • 할당된 IP로 해당 인스턴스의 퍼블릭 IPv4를 고정할 수 있지만, 추가적인 요금이 발생하므로 주의

WSL 혹은 AWS에서 생성한 인스턴스에 접근

  • 인스턴스 콘솔창에서 연결 버튼을 눌러 CLI화면으로 넘어갈 수 있음
  • 혹은 아까 생성한 RSA키를 이용해 WSL에서 원격으로 접속이 가능
# .pem 파일이 있는 디렉토리
chmod 400 {FILE_NAME}.pem # pem파일에 루트 사용자의 write 권한 부여

# 퍼블릭 IP 혹은 DNS로 인스턴스에 접속
# ssh -i {FILE_NAME}.pem {USER_NAME}@{DNS_OR_PUBLIC_IP}
ssh -i my_key.pem ubuntu@13.125.254.209
ssh -i my_key.pem ubuntu@ec2-13-125-254-209.ap-northeast-2.compute.amazonaws.com
  • OS가 우분투라면 ubuntu, 이 외에는 ec2-user가 디폴트 유저 이름

config파일로 간편하게 접속하는 법

# .pem 파일을 루트아래 숨겨진 ssh폴더로 복사
cp my-key.pem ~/.ssh

# 파일에 write, excute 권한을 부여
chmod 600 my-key.pem

# config파일 작성
vi ~/.ssh/config

# config파일 내부 내용
Host {HOST_NAME}
User {USER_NAME}
HostName {ELASTIC_IP}
IdentityFile {KEY_PAIR_FILE_LOCATION}

# 이후 ssh {HOST_NAME}으로 접속
ssh {HOST_NAME}

Spring Boot Project

1. EC2 인스턴스에 자바 설치

# in EC2 instance
sudo apt-get update #apt update
sudo apt-get install openjdk-17-jdk #jdk17 install

2. Spring Boot 프로젝트 빌드 및 실행

# 프로젝트 파일 클론
git clone {레포지토리 주소} {폴더명}
cd {폴더명}

# gradlew에 사용 권한 부여
chmod +x gradlew

# gradle로 빌드
./gradlew clean build

# 빌드 된 jar 파일 위치
cd build/libs

# nohup(no hangup)으로 백그라운드에서 jar파일 계속 돌리기
nohup java -jar {jar파일명} &

# 'nohup.out' 파일로 로그를 볼 수 있음
cat nohup.out

# jobs로 백그라운드에서 돌아가는 프로세스 확인 후 선택, 종료가능
jobs
fg %{index} # 해당 프로세스에 접근
^C # Ctrl + C로 종료

# 다음과 같은 방법으로도 종료 가능
ps -ef # 현재 작동중인 프로세스 목록 확인 가능
kill -9 {프로세스ID} # 9는 강제 종료
  • 이후 배포된 프로젝트를 확인하기 위해 외부에서 브라우저로 IP주소와 포트번호(8080)를 입력하여 접속해본다.

발생했던 에러 및 해결방법

swap

  • gradle로 build하는 중, :compilejava 상태에서 멈추는 현상이 발생하여 인스턴스를 강제로 종료하였다.
  • swap을 적용시키면 해결된다는 글을 보고 swap을 적용시켰다.
# 스왑 공간의 크기를 설정해준다. 128M * 16이므로 스왑 공간의 크기는 2GB가 된다.
sudo dd if=/dev/zero of=/swapfile bs=128M count=16

# 스왑 파일의 읽기 및 쓰기 권한 부여
sudo chmod 600 /swapfile

# Linux 스왑 영역 설정
sudo mkswap /swapfile

# 스왑 공간에 스왑 파일을 추가 -> 스왑 파일을 바로 사용할 수 있다
sudo swapon /swapfile
sudo swapon -s # 프로시저가 성공적인지 확인

# FSTAB을 통해 부팅 시 스왑 파일을 시작하도록 변경
sudo vim /etc/fstab

/swapfile swap swap defaults 0 0 # vim으로 파일 맨 아랫줄에 추가

lib32 설치

sudo apt-get install lib32stdc++6
sudo apt-get install lib32z1

0개의 댓글