AWS EC2 프로젝트 첫 배포 과정 정리

송성빈·2024년 5월 23일
post-thumbnail

백엔드 개발자의 필수 요소라고 볼 수 있는 AWS 배포를 해보았다.
많은 시행착오가 있었기 때문에 정리 차원에서 배포 과정을 작성해 보려 한다.


1. 프로젝트 완성

서버에 배포할 프로젝트는 개인 프로젝트로 진행했던 기타 판매 온라인 쇼핑몰이다.
백엔드 API 서버 구축 프로젝트이고 프론트는 구현하지 않았다.
https://github.com/ssbin0916/GUITAR-SHOP


build.gradle 설정이다. 개발은 H2 DB Embedded Mode 로 했지만 배포는 MySQL로 할거기 때문에 의존성을 추가해줬다.


마찬가지로 application.yml 파일에도 MySQL URL과 드라이버를 설정해줬다.


2. 배포 준비

예전에 배포를 해보려고 만들어둔 AWS 계정을 사용했다.

우선 AWS 콘솔에 들어가서 우측 상단에 리전을 본인 위치와 가까운 곳으로 설정해 준다. 나는 서울이 거주지라서 서울로 설정했다.
그리고 EC2 항목을 찾아서 들어가준다.


이름은 원하는 대로 적어주고 나는 Ubuntu를 사용했다.
인스턴스 유형은 t2.micro 로 했는데 프리 티어 사용 가능이라 1년 동안 무료로 사용할 수 있기 때문에 확인해 준다.
키 페어는 생성할 때 말고는 재발급이 안되니 저장 위치를 기억해놔야 한다.
나머지는 따로 건들지 않았는데 보안 그룹 같은 경우에는 인스턴스 생성 후 설정해 주었다.
설정이 끝났으면 인스턴스 시작을 눌러준다.


인스턴스 요약에 들어가서 보안에 인바운드 규칙을 설정해줘야 하는데, 나는 8080 포트와 HTTP, HTTPS, MySQL 접속 포트까지 열어줬다.


보안 그룹 설정이 끝났으면 연결을 눌러준다.



터미널 창에 아래 명령어를 입력해준다.

sudo apt update
sudo apt upgrade

프리 티어를 사용중이다 보니 1GB 메모리 밖에 못쓰는데 메모리 부족으로 인해 EC2 에서 ./gradlew build를 하면 무한 로딩이 되는 문제를 해결해야 한다.

  1. 루트 파일 시스템에 스왑 파일 생성
sudo dd if=/dev/zero of=/swapfile bs=128M count=32

  1. 읽기 및 쓰기 권한 업데이트
sudo chmod 600 /swapfile
  1. 스왑 영역 설정
sudo mkswap /swapfile
  1. 스왑 공간에 스왑 파일을 추가하여 즉시 사용할 수 있도록 한다.
sudo swapon /swapfile
  1. 프로시저가 성공적인지 확인
sudo swapon -s
  1. etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 시작
sudo vi /etc/fstab
  1. 파일 끝에 다음 줄을 새로 추가하고 저장한 다음 종료
/swapfile swap swap defaults 0 0


메모리 부족 문제를 해결한 뒤에 필요한 프로그램들을 설치해준다.

  1. JAVA 17 설치
sudo apt install openjdk-17-jre-headless
  1. GIT 설치
sudo apt-get install git
  1. MySQL 설치
sudo apt install mysql-server

MySQL 설치 후 설정을 해줘야 한다.

  1. 초기화 해주기
sudo mysql_secure_installation

강력 암호 키 사용 여부 등 설정을 해야 되는데 처음 것만 n, 나머지는 y로 해줬다.

  1. root로 접속하기
sudo mysql -u root
  1. 데이터 베이스, 계정 생성 및 권한 주기
create database guitar;
create user 'guitar'@'%' identified by 'guitar';		//앞은 아이디, 뒤는 비밀번호
grant all on guitar.* to 'guitar'@'%' with grant option;
flush privileges;
exit;
  1. guitar 계정으로 접속하기
mysql -u guitar -p
접속해준 뒤 테이블 생성을 해준다.
  1. 외부 접속 허용하기
sudo su
cd /etc/mysql/mysql.conf.d
vi mysqld.cnf
bind-address = 0.0.0.0 으로 수정

  1. 서버 재시작
sudo service mysql restart

이제 배포할 페이지를 깃 클론하고 빌드해주면 된다.

  1. 아래 명령어로 이동 후 깃 클론해준다.
cd ~/.ssh
git clone 프로젝트 깃 주소
  1. 클론한 디렉토리로 이동 후 빌드해준다.
cd 클론한 디렉토리
./gradlew build
  1. 배포 파일 위치로 이동 후 배포를 실행해준다.
cd build
cd libs
java -jar 배포 파일

실행에 성공한 모습이다.

인스턴스의 퍼블릭 아이피를 통해 접속해보자.

http://43.201.107.128:8080/

간단하게 만들어둔 웰컴 페이지가 나타났다.

이로써 처음으로 프로젝트 배포에 성공했다.

0개의 댓글