Uknow's Lab.
article thumbnail

 

 

AWS Lightsail 세팅

 

AWS(Amazon Web Services). 클라우드 서비스의 대표격인 플랫폼입니다.

AWS를 처음 사용할 때, 초기 세팅이나 설치해야 할 것들이 다소 있습니다.

AWS Lightsail은 보다 간편하고 사용하기 쉬워 초보자, 개인, 소규모 팀이 사용하기 좋습니다.

 

오늘은 이 AWS Lightsail에 Spring + Thymeleaf를 사용해 제작한 웹 사이트를 배포해보려 합니다.

 

먼저, AWS Lightsail 홈페이지에 접속합니다.

https://lightsail.aws.amazon.com

 

https://lightsail.aws.amazon.com/ls/webapp

 

lightsail.aws.amazon.com

 

회원가입 과정은 생략하겠습니다.

 

 

저의 경우 이전에 미리 생성한 인스턴스가 있어 해당 인스턴스가 나오네요.

인스턴스 생성을 눌러 새 인스턴스를 만듭시다.

 

 

 

위치는 서울 리전을 선택하였습니다.

운영체제는 리눅스/유닉스 뿐 아니라 윈도우 역시 지원합니다.

저는 서버용 운영체제로는 리눅스, 그 중에서도 우분투를 가장 선호하므로

Linux/Unix > Ubuntu를 선택했습니다.

아래 이어질 내용도 모두 Ubuntu 기준으로 작성되었습니다.

 

 

 

SSH 키 페어를 하나 생성하여 지정합니다.

기존에 사용중인 SSH가 있다면 해당 키를 사용하여도 됩니다.

단, SSH 키는 처음 만들 때에만 다운로드가 가능하므로 잃어버리지 않도록 주의하여야 합니다.

 

 

 

 

 

플랜 선택 창입니다. 처음 세 가지 플랜 모두 3개월이 무료입니다.

$3.5 플랜은 생각보다 리소스가 부족해 $5 플랜을 선택했습니다.

 

 

 

인스턴스 이름은 자유롭게 설정하고, 인스턴스 생성을 누릅니다.

 

 

 

 

인스턴스 생성이 완료되면 대기 중 -> 실행 중으로 바뀌며,

이제 해당 인스턴스를 사용할 수 있는 상태가 되었습니다.

 

 

 

해당 인스턴스를 클릭하여 네트워킹 탭으로 이동합니다.

고정 IP 연결을 클릭해 고정 IP를 생성합니다.

고정 IP란, IP가 변하지 않고 늘 그대로 고정되어 있음을 의미합니다.

매번 AWS의 IP가 바뀐다면 불편하니, 해당 기능으로 IP를 고정시키는 절차가 필요합니다.

 

 

아래로 내려가다 보면 방화벽 포트 개방 규칙이 있습니다.

저는 기본 포트를 스프링 웹 사이트의 기본 포트를 8080으로 설정해 놓았기에,

8080 포트를 개방하도록 설정하였습니다.

 

 

 

다시 인스턴스 목록 화면으로 돌아옵니다.

인스턴스의 터미널 버튼을 눌러 해당 서버에 접근할 수 있습니다.

 

 

 

aws 위에서 구동되고 있는 ubuntu에 접속한 모습입니다.

 

 

 

AWS에 Spring 애플리케이션 (웹 서비스) 배포

AWS에 스프링 애플리케이션을 배포하는 방법에는 여러 방법이 있습니다.

이 포스팅에선 jar 파일을 추출해 빌드하는 방식으로 진행하며,

1. 내 PC에서 jar 파일 추출 후 서버에 업로드하여 배포

2. 서버에서 스프링 레포지토리를 git clone 하여 jar 파일 생성 후 배포

 

 

공통 - AWS 서버 세팅 (Java, MySQL 설치)

스프링 애플리케이션을 배포하려면 먼저 서버에 Java를 설치해야 합니다.

윈도우에 자바를 설치할 때 처럼 홈페이지에서 설치 파일을 다운로드 하여 설치하는 과정 없이,

리눅스의 패키지  관리 도구인 APT(Advanced Package Tool)를 사용하면 명령어 몇 줄로 쉽게 설치 가능합니다.

mac의 homebrew와 비슷하지요.

 

 

sudo apt update

먼저 위 명렁어로 apt를 업데이트 합니다.

 

sudo apt install openjdk-11-jdk

 

그 다음, 위 명령어로 OpenJDK 11을 설치합니다.

 

java -version

자바가 잘 설치되었는지 확인하고 싶다면, 위 명령어로 자바 버전을 확인할 수 있습니다.

 

 

 

 

내 PC에서 jar 파일 추출 후 서버에 업로드하여 배포

파일질라로 AWS 서버와 연결

첫 번째 방법은 제 컴퓨터에서 스프링 애플리케이션으로부터 jar 파일을 추출해,

이를 서버에 업로드하여 서버에서 jar 파일을 빌드해 배포하는 방법입니다.

 

서버에 업로드하는 도구는 여러 프로그램이 있지만, 저는 그 중에서도 FileZila를 주로 사용합니다.

https://filezilla-project.org/

위 사이트에서 파일질라 설치 파일을 다운로드 및 설치합니다.

 

 

파일 질라를 실행한 뒤, 파일 -> 사이트 관리자를 클릭합니다.

 

 

새 사이트 버튼을 누룬 뒤,

프로토콜은 SFTP,

호스트는 위에서 설정한 고정 IP를,

 

사용자는 ubuntu, 키 파일은 인스턴스를 생성할 때 지정한 ssh 키를 선택한 후 연결을 클릭합니다.

포트 번호는 비워놓아도 됩니다.

 

 

 

 

AWS 우분 서버와 연결이 완료되었습니다.

왼쪽 화면은 제 PC, 오른쪽 화면은 AWS 우분투 서버입니다.

이제 손쉽게 서버에 다운로드 및 업로드를 할 수 있습니다.

 

 

 

스프링 애플리케이션으로부터 jar 파일 추출 후 업로드

 

Gradle을 사용할 경우
./gradlew build

Maven을 사용할 경우
mvc clean package

 

스프링 애플리케이션 디렉토리로 가서,

터미널을 키고 위 명령어를 실행하면 [build] > [libs]에 {프로젝트명}-{버전}.jar 파일이 생성됩니다.

 

 

저는 myboar라는 디렉토리를 만들고, 해당 jar 파일을 업로드해줬습니다.

드래그 앤 드롭으로 쉽게 업로드 할 수 있습니다.

 

 

이제 aws 콘솔창으로 돌아옵니다.

 

cd [디렉토리 이름]으로 jar 파일을 업로드한 폴더로 이동한 뒤

java - jar (jar.파일 이름) 으로 jar 파일을 실행합니다.

저의 경우, jar 파일 명이 -jar board-0.0.1-SNAPSHOT.jar 이기에

java -jar board-0.0.1-SNAPSHOT.jar

위 명령어를 입력하였습니다.

 

이제 http://[퍼블릭ip]:[포트번호]로 접속하여 여러분이 만든 사이트를 볼 수 있습니다.

ex> http://123.456.789.123:8080

 

 

 

서버에서 스프링 레포지토리를 git clone 하여 jar 파일 생성 후 배포

git clone [repository 주소]

 

aws 콘솔에서 git clone으로 해당 배포할 레포지토리를 clone 합니다.

 

cd your-spring-repository

위 명령어로 클론한 디렉토리로 이동합니다.

 

./gradlew build

위 명령어를 실행하면 [build] > [libs] 디렉토리에 jar 파일이 생성됩니다.

파일 이름은 앞서 설명했듯 보통 {프로젝트명}-{버전}.jar로 생성됩니다.

 

 

java -jar build/libs/your-app.jar

이후, 생성된 jar 파일을 실행합니다.

 

 

[-bash: ./gradlew : permission denied] 에러가 발생할 경우

위 에러는 실행 권한이 부여되지 않았을 때 일어납니다.

chmod +x gradlew

위 명령어로 gradlew 실행 권한을 줄 수 있습니다.

 

chmod +x your-app.jar
./your-app.jar

jar 파일을 실행할 때는 위와 같이 실행 권한을 부여 후 실행할 수 있습니다.

 

 

 

마치며

일단 스프링을 aws로 배포하는 과정은 끝났습니다.

본 포스팅에서 소개한 2가지 배포 방법은 기초적인 배포 방법 중 하나입니다.

 

Github Action을 사용해 CI/CD 파이프라인을 개선시킬 수 있고,

Dokcer 등 컨테이너를 사용해 더 효율적으로 배포할 수도 있습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.