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 등 컨테이너를 사용해 더 효율적으로 배포할 수도 있습니다.
'프레임워크 > Spring' 카테고리의 다른 글
[Spring] Filter가 두 번씩 실행되던 현상 (0) | 2024.03.19 |
---|---|
[Spring] java.sql.SQLException: Field 'id' doesn't have a default value 에러 (1) | 2023.06.11 |
스프링으로 우당탕탕 게시판 만들기 1 - CRUD (+MySQL) (5) | 2023.05.08 |