📖 개요
오라클 클라우드(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 공식 문서도 함께 참고하세요.