root 비밀번호 변경
$ sudo passwd
OS 시간대 변경
시간 확인
$ date
한국 시간으로 변경
$ sudo cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime
패키지 목록 업데이트
현재 source와 비교하여 버전정보 업데이트
$ sudo apt update
버전정보에 맞게 업그레이드 -y 는 yes 라는 의미이며 중간에 yes/no 물어보는 상황에서 모두 Yes처리를 한다는 의미이다.
$ sudo apt upgrade -y
자바 설치
$ sudo apt install openjdk-17-jdk-headless -y
이슈 발생
깃 설치 및 Gradle 설치 및 gradlew로 빌드하기의 내용은 접은글에 정리되어 있지만 사용하지 않는다. 일단 gradlew를 사용하기 때문에 gradle은 설치 및 사용할 필요가 없고 인스턴스에서 빌드를 하면 서버가 정지되는 이슈가 발생하여 jar파일을 FTP를 이용하여 올리는 방식으로 우회한다.
깃 설치
$ sudo apt install git
깃 클론
$ git clone {Git Repository URL} {폴더명}
어차피 gradlew 로 빌드를 할 것이기 때문에 gradle 설치는 생략 가능
gradle 다운로드 및 설치
gradle 최신버전 확인
https://services.gradle.org/distributions/
$ wget https://services.gradle.org/distributions/gradle-9.1.0-bin.zip -P /tmp
gradle 압축 해제를 위한 unzip 설치
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install unzip
압축 해제
$ sudo unzip -d /opt/gradle /tmp/gradle-9.1.0-bin.zip
$ ls /opt/gradle/gradle-9.1.0

환경변수 설정
nano 설치
$ sudo apt-get update
$ sudo apt-get install nano
gradle.sh 파일 오픈
$ sudo nano /etc/profile.d/gradle.sh
아래 내용을 복사하고 nano창에 마우스 우측 버튼을 눌러 붙여넣기 하고 Ctrl + S(저장), Ctrl + X(끄기)
export GRADLE_HOME=/opt/gradle/gradle-9.1.0
export PATH=${GRADLE_HOME}/bin:${PATH}
gradle.sh 권한 설정
$ sudo chmod +x /etc/profile.d/gradle.sh
시스템 환경 설정 스크립트를 현재 셸에 반영
$ source /etc/profile.d/gradle.sh
Gradle 버전 확인
$ gradle -version
build 빌드 (gradlew)
해당 프로젝트 디렉토리로 이동
실행파일 권한 설정
$ sudo chmod +x gradlew
빌드 실행 (기존 빌드된 파일이 있으면 삭제하고 빌드)
$ ./gradlew clean build
방화벽 허용
포트 3306을 열었더라도, REJECT가 기본 차단 역할을 하고 있어서 VCN 내부 접근이 막히는 상황입니다.
문제되는 규칙 제거
$ sudo iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited
3306 포트 허용 규칙 추가
$ sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT
OS 재부팅 되어도 iptables 데이터 유지시키기
$ sudo apt install iptables-persistent -y
$ sudo netfilter-persistent save
Spring Boot Yaml
prod 프로파일로 실행할 예정이니 prod 설정파일을 생성한다.

파일 업로드 경로는 /home/ubuntu 아래에 생성이 되도록 한다.
i.g. /home/ubuntu/upload
constants:
file:
upload-directory: /home/ubuntu/upload
spring:
datasource:
url: jdbc:mariadb://${DB인스턴스 퍼블릭IP}/${DB 이름}
username: ${생성한 유저명}
password: ${생성한 유저 비밀번호}
driver-class-name: org.mariadb.jdbc.Driver
FileZilla(FTP) jar파일 업로드

프로토콜: SFTP - SSH File Transfer Protocol
호스트: 퍼블릭IP
포트: (빈칸)
로그온 유형: 키 파일
사용자: ubuntu
키 파일: 해당 인스턴스 키파일 경로, [ 찾아보기... ] 버튼 클릭하여 파일 선택
![키 파일 [ 찾아보기... ] 버튼 클릭시 나타난 대화창에서 우측 아래 파일 형식을 "모든 파일(*.*)"로 변경](https://blog.kakaocdn.net/dna/JKqQW/dJMb9MbOVbY/AAAAAAAAAAAAAAAAAAAAAJy8f3oqBvAWaFpDA3-aWOZeuuNO8hTb3gNqdiYx7UAV/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1764514799&allow_ip=&allow_referer=&signature=VyNHyK8cq9h1TwmhE78W8eseA%2Bg%3D)

자바 실행
아래 명령어는 cmd창을 끄면 서버도 함께 꺼지게 된다. 그래서 백그라운드에서 실행되도록 하자.
i.g. java -jar -Duser.timezone=Asia/Seoul ${jar파일 경로} --spring.profiles.active=prod
$ java -jar -Duser.timezone=Asia/Seoul /home/greengram/lib/app.jar --spring.profiles.active=prod
백그라운드 실행 및 로그파일 생성
i.g. nohup java -jar -Duser.timezone=Asia/Seoul ${jar파일 경로} --spring.profiles.active=prod > ${로그 파일명.log} 2>&1 &
$ nohup java -jar -Duser.timezone=Asia/Seoul /home/greengram/build/lib/app.jar --spring.profiles.active=prod > app.log 2>&1 &
실시간 로그 확인
$ tail -f app.log
백그라운드 종료
jar파일을 변경하여 실행하려면 기존에 실행되는 jar 파일을 중단해야 한다.
// 실행중인 jar 프로세스 (pid) 확인
$ ps -ef | grep jar

$ kill -15 ${pid} // 정상종료
$ kill -9 ${pid} // 강제종료
'OS > Linux' 카테고리의 다른 글
| vim 쉽게 배우기 (0) | 2025.10.21 |
|---|---|
| #05 Oracle Cloud Free Tier - DB (0) | 2025.10.13 |
| #03 Oracle Cloud Free Tier - 인스턴스 고정 IP 설정, 수신 규칙 수정, SSH 접속 (0) | 2025.09.25 |
| #02 Oracle Cloud Free Tier - VCN, 인스턴스 생성 (0) | 2025.09.25 |
| #01 Oracle Cloud Free Tier - 가입/로그인 (0) | 2025.09.25 |