자 이제 초기 세팅이 끝이 났다.
먼저 AWS에 Spring을 올리기 위해서는 Jar 파일로 만들어서 내보내주어야 한다.
Spring Jar 생성
Gradle탭에 들어가 Build를 눌러준다.
여기서 bootJar을 실행하면 된다.
이렇게 되면 아래와 같은 경로에 파일이 생성되게 된다.
파일 명은 `프로젝트명-version값. jar` 로 생성되게 된다.
여기서 jar은 뭐고 bootjar은 뭐지라는 궁금증이 생길 것인데, 아래 표에 설명하겠다.
특성 | (*)bootJar→단독구동(주연) | jar→단독구동 X(조연) |
용도 | 실행 가능한 Spring Boot 애플리케이션 JAR 생성 | 기본 Java 클래스 파일을 포함한 JAR 생성 |
내장 WAS 서버 포함 여부 | 포함 (예: Tomcat, Jetty) | 미포함 |
의존성 포함 여부 | 포함 | 미포함 |
실행 가능 여부 | 가능 | 불가능 |
Manifest 설정 | 실행 진입점(Main-Class) 포함 | 기본 Manifest만 포함 |
파일 크기 | 상대적으로 큼 (의존성 및 서버 포함) | 상대적으로 작음 (클래스 파일만 포함) |
특징 | MSA, 클라우드 환경(Docker, Kubernetes 등)과 컨테이너화를 할 때 적합 | 독립 실행이 필요 없는 경우 적합, 라이브러리처럼 재사용하거나 다른 프로젝트의 의존성으로 사용 |
이렇기에 bootJar로 생성해 준다.
java -jar build/libs/demo-deploy-0.0.1-SNAPSHOT.jar
위와 같이 실행하면 IntelliJ에서 단독으로 구동할 수 있다.
자 이제 이 Jar파일을 AWS에 올리기 위해 프로그램을 설치하자.
Mobaxterm 설치
https://mobaxterm.mobatek.net/download-home-edition.html
MobaXterm free Xserver and tabbed SSH client for Windows
The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!
mobaxterm.mobatek.net
해당 페이지에 들어가 Portable 에디션을 설치해 준다.
설치 완료가 되면 Session을 눌러주고
이와 같은 화면이 뜰 건데, Remote host에는 여러분이 전에 생성한 탄력적 IP 주소를 입력한다.
그 오른쪽의 Specify username은 ubuntu로 하겠다.
아래 Use private key를 체크하고, 키 페어 파일을 올려준다.
자 OK를 누르면 SSH를 통한 원격 접속이 가능하다.
자 전과 같이 먼저 업데이트를 진행해 주자.
# 패키지 최신 업데이트
$ sudo apt update
# jdk 17 설치
$ sudo apt install openjdk-17-jdk -y
# 설치 확인
$ java -version
openjdk version "17.0.13" ...
그다음 최상위 폴더에 아까 만든 Jar 파일을 올려준다.
자 그다음 아래와 같은 명령어를 입력해 준다.
$ nohup java -jar demo-deploy-0.0.1-SNAPSHOT.jar &
여기서 &는 오타가 아닌 백그라운드에서 실행한다는 뜻이다.
$ tail -f nohup.out
이렇게 하면 모니터링하면서 백그라운드 서비스의 로그를 확인할 수 있다.
그리고 http://`본인의 탄력적 Ip 주소`:8080으로 접속하면!
이런!
연결할 수 없단다. 이런 오류가 뜨는 건 당연하다.
바로 보안 때문이다.
인스턴스를 생성하면 인바운드 규칙에 SSH를 위한 22번 포트 이외에는 막혀있다.
그렇다면 우린 80 포트와 8080 포트를 열어 보겠다.
인스턴스를 체크해 주면 아래와 같이 규칙이 보인다.
인바운드 규칙 편집을 누른 후
아래와 같이 수정해 보자.
그다음 다시 들어가면?!
성공적으로 적용되었다!
이렇게 간단히 Spring 프로젝트를 만들어 AWS EC2에 올려보는 절차를 밟아보았다.
이제 다음번엔 CI/CD deployment를 자동화 처리하고 GitAction + CI/CD + AWS를 시도해 보겠다!
'SK 루키즈 > Cloud' 카테고리의 다른 글
[Rookies 개발 2기] VPC 기본 개념 및 설정 (0) | 2025.01.16 |
---|---|
[Rookies 개발 2기] 스프링부트 + GitAction + CI/CD (1) (3) | 2025.01.16 |
[Rookies 개발 2기] AWS에 Java Spring 프로젝트를 올려보자 (1) (3) | 2025.01.16 |
[Rookies 개발 2기] DevOps 개념과 도구 (3) (2) | 2025.01.16 |
[Rookies 개발 2기] DevOps 개념과 도구 (2) (1) | 2025.01.16 |