오라클 클라우드(OCI) 우분투에 Spring Boot 배포 및 systemd 서비스 등록 방법

📖 개요

오라클 클라우드(OCI) 우분투 서버에 GitHub의 Spring Boot 프로젝트를 배포하고,
systemd를 통해 서버 재부팅 시 자동 실행되도록 설정하는 방법을 정리합니다.


1. Java 및 Gradle 환경 준비

Spring Boot 3.x 기준으로 Java 17 이상이 필요합니다.

sudo apt update
sudo apt install -y openjdk-17-jdk
java -version

프로젝트에 Gradle Wrapper(gradlew)가 있으면 지정된 버전을 우선 사용합니다. 아래 Gradle 8.7 수동 설치는 Wrapper가 없는 환경의 예시이며, 프로젝트의 Spring Boot·JDK 호환성을 먼저 확인하세요.

sudo apt remove -y gradle
cd /tmp
wget https://services.gradle.org/distributions/gradle-8.7-bin.zip
sudo apt install -y unzip
sudo mkdir -p /opt/gradle
sudo unzip -o gradle-8.7-bin.zip -d /opt/gradle
echo 'export GRADLE_HOME=/opt/gradle/gradle-8.7' >> ~/.bashrc
echo 'export PATH=$GRADLE_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
gradle -v

2. GitHub 소스 다운로드

git clone https://github.com/계정/프로젝트.git
cd 프로젝트

3. Gradle 빌드 (메모리 문제 대응 포함)

gradle --stop
gradle clean build -x test --no-daemon

빌드 성공 시:

ls build/libs

예:

adm-0.0.1-SNAPSHOT.jar
adm-0.0.1-SNAPSHOT-plain.jar

👉 실행은 plain 아닌 일반 jar 사용


4. Spring Boot 실행

nohup java -jar build/libs/adm-0.0.1-SNAPSHOT.jar > app.log 2>&1 &

로그 확인:

tail -f app.log

5. 업로드 디렉토리 생성 및 권한 설정

sudo mkdir -p /home/ubuntu/****/upload
sudo chown -R ubuntu:ubuntu /home/ubuntu/****
chmod 755 /home/ubuntu/****/upload

Spring 설정:

file:
  upload-dir: /home/ubuntu/****/upload

6. systemd 서비스 등록 (자동 실행)

sudo nano /etc/systemd/system/adm.service

내용:

[Unit]
Description=Spring Boot ADM App
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/adm
Environment="SPRING_PROFILES_ACTIVE=dev"
ExecStart=/usr/bin/java -jar /home/ubuntu/adm/build/libs/adm-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

저장:

Ctrl + O → Enter → Ctrl + X

7. 서비스 실행 및 관리

sudo systemctl daemon-reload
sudo systemctl enable adm
sudo systemctl start adm
sudo systemctl status adm

8. 재기동(Restart) 방법

sudo systemctl restart adm

상태 확인:

sudo systemctl status adm

로그 확인:

journalctl -u adm -f

9. 배포 업데이트 방법

cd ~/adm
git pull
gradle --stop
gradle clean build -x test --no-daemon
sudo systemctl restart adm

🔥 핵심 요약

  • Java 17 + Gradle 8.x 필요
  • Spring Boot jar 실행은 plain 제외
  • 업로드 디렉토리는 반드시 쓰기 권한 설정
  • systemd로 자동 실행 구성
  • 재배포 후 서비스 상태·로그·실제 응답을 확인하고 실패 시 이전 JAR로 복원

배포 전후 확인과 복원

이 글의 ubuntu 사용자, adm 서비스명, JAR 이름, dev 프로필과 업로드 경로는 예시입니다. 실제 OS·JDK·Gradle·Spring Boot 버전을 기록하고 운영 프로필로 바꾸세요. 비밀번호는 서비스 파일이나 저장소에 직접 넣지 않습니다. 수동 실행한 프로세스가 있다면 systemd로 시작하기 전에 종료하여 포트 충돌을 피합니다.

Wrapper가 있는 저장소에서는 ./gradlew --version으로 버전을 확인하고 ./gradlew clean build --no-daemon으로 테스트를 포함해 빌드합니다. 본문의 -x test는 테스트 생략 옵션이므로 별도 검증이 끝난 경우에만 사용하세요.

sudo systemd-analyze verify /etc/systemd/system/adm.service
sudo systemctl is-active adm
sudo systemctl is-enabled adm
sudo journalctl -u adm -n 100 --no-pager
curl -I http://127.0.0.1:8080/

응답 확인 주소는 실제 서비스 포트와 공개된 확인 경로로 바꿉니다. 업데이트 전에 이전 JAR와 설정을 보관하고, 실패하면 보관한 JAR를 복원한 후 서비스를 재시작해 같은 점검을 반복합니다. Gradle Wrapper 공식 문서도 함께 참고하세요.

관련 글

답글 남기기