[AWS] Lightsail 활용한 배포 방법

Hanjmo·2023년 7월 12일
0

💡 Lightsail이란?

AWS에서 만든 VPS(Virtual Private Server)로 기존 EC2보다 저렴하다는 장점이 있다.
또한 웹 서비스에 필요한 주요 기능들을 한 곳에서 쉽게 관리할 수 있게 구성되어 있어 입문자들도 쉽게 사용할 수 있다.

1️⃣ 인스턴스 생성

AWS에서 Lightsail 서비스에 들어가면 다음과 같이 뜨게 되는데, 나는 이미 생성해 놓았던 인스턴스가 하나 있다. 인스턴스 생성을 클릭하면 다음과 같이 인스턴스를 생성하는 페이지가 뜬다. 인스턴스 위치는 현재 살고 있는 리전으로 선택하고, 플랫폼은 Linux/Unix, OS는 Amazon Linux 2를 선택한다.
Amazon Linux 2가 Amazon에서 직접 만든데다가 Lightsail과 궁합이 가장 잘 맞는다고 한다. 인스턴스 플랜은 자신이 원하는 사양에 맞는 요금을 선택하면 되는데, 나는 아주 작은 프로젝트라서 5$로 선택했다. (처음 3개월은 무료) 인스턴스 이름은 임의로 작성하고, 인스턴스 생성 버튼을 클릭하면 처음 봤던 것과 같이 인스턴스가 생성되어 있을 것이다.

2️⃣ 기본 설정

생성된 인스턴스에서 빨간 박스 부분을 클릭하면 명령어를 칠 수 있는 창이 뜨며, 다음과 같은 순서로 설정을 진행한다.
  1. 호스트 이름 변경 후 재부팅
    sudo hostnamectl set-hostname 호스트이름
  2. 날짜 변경
    sudo timedatectl set-timezone Asia/Seoul
  3. Java 설치
    yum list | grep java-17를 입력하면 다음과 같이 java 17버전 목록이 보이는데, headless가 붙은 파일을 설치한다.
    (headless GUI에 관련된 기능이 생략되었다는 의미)

    sudo yum install java-17-amazon-corretto-headless까지만 입력하면 Java 17버전이 설치된다.
    java -version을 입력해서 버전이 나온다면 잘 설치된 것이다.

3️⃣ MariaDB 설치 및 Schema 생성

mariaDB 설치 및 확인

sudo amazon-linux-extras install mariadb10.5를 입력하면 아마존 라이브러리에서 쉽게 mariaDB 10.5버전을 설치할 수 있다.
mariadb -V 또는 mysql -V를 통해 잘 설치되었는지 확인한다.

mariaDB 활성화

설치가 잘 되었다면 다음과 같이 system상에서 mariadb가 동작하고 있는지 확인하고, inactive (dead)로 되어 있다면 sudo systemctl start mariadb를 통해 활성화한다.

password 설정 및 MySQL 실행

sudo mysqladmin -u root -p password를 입력하여 password를 설정해준 뒤에 mysql -u root -p 입력 후 password를 입력하면 mysql이 실행된다.

고정 IP 생성

AWS Lightsail에서 생성한 인스턴스의 고정 IP를 생성하면, 내 컴퓨터의 MySQL Workbench에서 해당 IP를 가지고 커넥션을 생성할 수 있다.

아까 생성한 인스턴스에 들어가면 네트워킹 항목이 있는데, 해당 항목에서 퍼블릭 IP 부근에 있는 고정 IP 연결을 클릭하여 이름은 임의로 작성하고 생성 및 연결하면 된다.

3306 port 추가

고정 IP를 생성했으면 다음으로 규칙 추가를 눌러 3306 port를 다음과 같이 추가한다.

접속 권한을 가진 계정 생성

외부에서 DB에 접속할 수 있도록 권한을 가진 계정을 생성한다.
create user '사용자이름' identified by '패스워드';
user mysql;
select user, host from user;

이렇게 계정을 생성하면 DB에 접속할 수 있게 된다.

MySQL 커넥션 생성

생성한 고정 IP와 password를 가지고 MySQL Workbench에서 커넥션을 생성한다.

스키마 생성 권한

다음과 같이 입력하면 스키마를 생성할 수 있는 권한을 받아올 수 있다.

  1. grant all privileges on *.* to '사용자이름'@'%' with grant option;
  2. flush privileges

4️⃣ 프로젝트 배포

파일질라(FileZilla) 설치

https://filezilla-project.org/
위 filezilla 사이트에서 client 버전을 설치한다.

jar 파일 다운로드

IntelliJ에서 Gradle - Tasks - build에 있는 boot.jar를 실행하면 jar 파일을 다운로드 받을 수 있다.

다운로드 받은 jar 파일은 프로젝트 폴더에서 build - libs에 위치한다.

FileZilla

설치한 파일질라를 실행하고나서 파일 - 사이트 관리자에 들어간 후 새 사이트를 다음과 같이 생성 및 연결한다.

  • 프로토콜: SFTP
  • 호스트: 인스턴스 고정 IP
  • 포트: 공백
  • 로그온 유형: 키 파일
  • 사용자: 임의로 입력
  • 키 파일: 생성한 인스턴스의 연결 항목에서 기본 키 다운로드를 클릭하여 다운 받은 파일을 업로드

Jar 실행

위와 같이 연결한 경로에 jar파일을 업로드 하고나서 `java -jar 파일명`를 입력하여 실행한다.

실행은 되는데 'http://고정 ip:8080' 경로로 접속이 안된다면 인스턴스 네트워킹 항목에서 8080포트를 추가한다.

서버 on/off

하지만 이렇게 하면 명령창을 닫았을 때 서버도 같이 내려가는데,
nohup java -jar 파일명 &를 입력하면 명령창을 꺼도 서버가 내려가지 않는다.

만약 서버를 끄고 싶다면 명령창에 ps -ef | grep 사용자이름을 입력하여 실행중인 프로세스를 찾고, 해당 프로세스 번호를 다음과 같이 입력하여 종료한다.
kill -9 번호

💭

이렇게 내가 만든 서버를 배포해보았다.
처음에는 Elastic Beanstalk로 시도했다가 뭔가 알 수 없는 이유로 계속 실패해서 Lightsail을 사용했다.
배포는 어찌어찌 따라해서 성공했지만, AWS에 대해 많은 공부가 필요하다고 느꼈다.

0개의 댓글