이 글은 제가 작은 프로젝트를 진행하며 공부하며 정리한 글이기때문에, 코드의 질도 낮고 부정확한 부분이 많을거라고 생각합니다. 감안하고 봐주시면 감사하겠습니다. (특히 저는 제대로된 배포는 안해봤습니다)
저는 Gradle 스프링 부트 3.2.3버전을 사용중이며, JDK 17 자바를 사용하고 있습니다.
저번 포스팅까지 오라클 클라우드 인스턴스 생성 -> DB 연동 -> 버킷으로 이미지 업로드 까지 모두 마쳤습니다.
이번 포스팅에서는 마지막으로 스프링 프로젝트를 빌드하고, 오라클 서버로 옮긴 뒤 실행시키는 것 까지 다뤄보겠습니다.
Oracle 인스턴스에 서버 띄우기
먼저, 저번시간에 연결했던 오라클 서버 콘솔로 접속합니다. 저는 jar파일로 빌드해서 사용할것이기 때문에, JDK를 설치해야 합니다.
우분투 패키지 업데이트
# 업데이트
sudo apt update
sudo apt-get update
# 업그레이드
sudo apt upgrade
# vim 편집기 다운로드
sudo apt-get install vim
환경변수 설정을 위해 vim 편집기 까지 다운로드 받아줍니다.
Jdk 17 다운로드
# JDK 17 설치
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
#압축 해제
tar xvf openjdk-17.0.2_linux-x64_bin.tar.gz
#이동
sudo mv jdk-17.0.2/ /opt/jdk-17/
환경변수 설정
vim ~./bashrc
# 파일이 열리면 left shift + g를 눌러 맨 아래로 이동 -> 맨 아래에 아래 코드 두줄을 추가
# i를 눌러 편집모드 진입
export JAVA_HOME=/opt/jdk-17
export PATH=$PATH:$JAVA_HOME/bin
# esc를 누르고 :wq를 입력해 저장 및 나가기
# 변경 사항 적용
source ~/.bashrc
# 자바 버전 확인
java --version
version 명령어로 jdk 17이 나오면 정상적으로 설치가 완료된겁니다!
배포
배포하는 방법은 여러가지가 존재합니다. git이나 도커를 이용할 수도 있고, 로컬에서 빌드 버튼을 눌러 직접 옮긴 후 실행할 수 있습니다.
저는 이전에도 언급하였 듯, 로컬에서 빌드한 후 배포하겠습니다.
jar과 war 배포 방식이 있는데, 자세한건 추후에 다루도록 하겠습니다.
빌드하기
인텔리제이 우측편에 Gradle 버튼을 클릭합니다.
저기 저 build 버튼을 누르면 프로젝트/build/libs 에 ***.SNAPSHOT.jar 파일이 생성됩니다.
혹시 테스트를 빼고 빌드해야 한다면,
빌드를 하고 나면 run버튼 옆에 빌드관련 configuration이 생기는데, 눌러서 Edit Configuration으로 들어갑니다. 그리고 build -x test를 입력하면 테스트 파일을 제외하고 빌드를 할 수 있습니다.
자 이제, build/libs로 이동합니다.
저는 프로젝트 파일을 오라클 리눅스 인스턴스로 이동시키기 위해 scp를 사용할겁니다. 간단히 말해 ssh를 이용한 cp(복사)명령어 입니다.
scp -r -i {서버 private 키 경로와 이름} {빌드 파일} ubuntu@{할당받은 공용 Ip}:/home/ubuntu/{옮길 디렉토리}
#예시
scp -r -i ~/my_private.key server-0.0.1-SNAPSHOT.jar ubuntu@100.100.10.100:/home/ubuntu/project
명령어를 입력한 뒤, 다시 오라클 클라우드에 접속하여 build파일이 있는지 확인합니다. 이제 아래 명령어를 통해 실행을 시켜봅시다
# 8080포트 수신 열어주기
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
# 백그라운드에서 실행 (내가 터미널을 닫아도 동작함)
nohup java -jar server-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &
#그냥 실행
java -jar server-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
- 저희는 인스턴스 수신 규칙에 8080포트를 추가 해놨음에도, 오라클 클라우드는 내부에서 한번 더 설정해야 정상적으로 작동한다고 합니다. 그래서 인스턴스가 동작하기 시작했을때 최초 한번은 위 명령어를 통해 8080 포트를 열어주어야 합니다.
- --spring.profiles.active=prod : 지난 포스팅에서 개발 배포 환경 분리에 대해 언급하였습니다. 이것 옵션으로 저는 실행시 배포환경으로 실행하도록 하였습니다.
- nohup & 옵션으로 실행하게 되면, 콘솔 로그는 실행시 생성되는 nohup.out 파일에 기록됩니다. cat nohup.out으로 기록된 콘솔창을 확인할 수 있습니다. 백엔드에서 오라클 터미널을 키고 있지 않아도 프론트가 사용할 수 있어야 하기에 이 옵션을 적용하였습니다.
이제 Postman을 통해 확인 해보고 사용하시면 됩니다.
혹시 기존 프로그램을 닫고 새로운 빌드파일로 다시 돌리고 싶으신 분들은, 아래 명령어를 통해 종료 시킨 후 다시 실행시키면 됩니다.
# 실행중인 작업 확인
ps -ef
# jar 파일에 해당하는 pid 확인 후 강제종료
task -9 {pid}
이렇게 최종적으로 서버까지 배포를 완료했습니다. 토이 프로젝트에서 프론트와 협업하기 위해 만든 서버이며, 후에 실제 서비스를 배포하게 된다면 손볼게 매우많다고 생각되지만, 당장 쓰기에는 부족하지 않다는 생각이 듭니다..ㅎㅎ
한창 공부하며 작성한 글이라 사실과 다른 부분이 많은 점 양해부탁드리며, 포스팅 마치겠습니다.
끝까지 봐주셔서 감사합니다 ! 다음에 또 다른 좋은 글로 찾아 뵙겠습니다.
참고
'Spring' 카테고리의 다른 글
[Spring]Security - 스프링시큐리티의 기본 개념과 구조 (1) | 2024.04.12 |
---|---|
[Spring]JPA - 영속성 컨텍스트(Persistence Context) (0) | 2024.04.12 |
[Spring] Spring Boot + Oracle Cloud 연동하여 배포하기 [4-1] - 버킷으로 이미지 업로드 구현 중 마주친 에러 탐방기 (1) | 2024.04.05 |
[Spring] Spring Boot + Oracle Cloud 연동하여 배포하기 [4] - Object Storage를 이용하여 이미지를 업로드 하기 (0) | 2024.04.05 |
[Spring] Spring Boot + Oracle Cloud 연동하여 배포하기 [3] - 버킷 생성 (0) | 2024.04.04 |