Spring Boot 애플리케이션을 리눅스 서버에서 운영하는 가이드
Spring Boot는 스프링 프레임워크를 기반으로 한 자바 웹 애플리케이션 개발을 쉽고 빠르게 할 수 있도록 도와주는 도구입니다. Spring Boot 애플리케이션은 내장 톰캣(Tomcat) 서버를 사용하여 로컬에서 실행할 수 있습니다. 하지만, 실제 서비스를 제공하기 위해서는 로컬에서 실행하는 것이 아니라, 인터넷에 연결된 리눅스 서버에 애플리케이션을 이전하고 실행해야 합니다.
이 포스트에서는 Spring Boot 애플리케이션을 로컬에서 리눅스 서버로 이전하는 방법을 알려드립니다. 다음과 같은 과정을 단계별로 설명합니다.
- 리눅스 서버의 준비
- 애플리케이션의 빌드와 배포
- 서비스 등록과 실행
- 포트 포워딩과 도메인 연결
이 글을 따라하면, Spring Boot 애플리케이션을 쉽고 빠르게 리눅스 서버로 이전할 수 있습니다.
리눅스 서버의 준비
첫 번째 단계는 리눅스 서버를 준비하는 것입니다. 여기서는 CentOS 7을 기준으로 설명합니다. 다른 배포판을 사용하시는 경우에는 적절히 참고하시기 바랍니다.
리눅스 서버를 준비하기 위해서는 다음과 같은 작업들을 해야 합니다.
- 서버에 SSH로 접속합니다.
- 서버의 시간대(timezone)를 설정합니다.
- 필요한 패키지들을 설치합니다.
- JDK를 설치하고 환경 변수를 설정합니다.
- 방화벽(firewall)을 설정합니다.
다음은 각 작업별로 실행할 명령어들입니다.
# 1. 서버에 SSH로 접속
ssh root@서버_아이피_주소
# 2. 서버의 시간대(timezone)를 설정
timedatectl set-timezone Asia/Seoul
# 3. 필요한 패키지들을 설치
yum update -y
yum install -y wget curl git vim
# 4. JDK를 설치하고 환경 변수를 설정
wget https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
tar xvf openjdk-11.0.2_linux-x64_bin.tar.gz
mv jdk-11.0.2 /usr/local/
echo "export JAVA_HOME=/usr/local/jdk-11.0.2" >> /etc/profile
echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
source /etc/profile
# 5. 방화벽(firewall)을 설정
firewall-cmd --permanent --zone=public --add-port=8080/tcp # 애플리케이션 포트 허용
firewall-cmd --permanent --zone=public --add-port=80/tcp # HTTP 포트 허용
firewall-cmd --reload # 방화벽 재시작
이렇게 하면, 리눅스 서버의 준비가 완료됩니다.
애플리케이션의 빌드와 배포
두 번째 단계는 애플리케이션의 빌드와 배포입니다. 여기서는 로컬에서 애플리케이션을 빌드하고, 생성된 jar 파일을 서버로 전송하고, 실행하는 방법을 설명합니다.
애플리케이션의 빌드와 배포를 위해서는 다음과 같은 작업들을 해야 합니다.
- 로컬에서 애플리케이션을 빌드합니다.
- SCP를 이용하여 jar 파일을 서버로 전송합니다.
- 서버에서 jar 파일을 실행합니다.
다음은 각 작업별로 실행할 명령어들입니다.
# 1. 로컬에서 애플리케이션을 빌드
./gradlew bootJar # Gradle을 사용하는 경우
./mvnw package # Maven을 사용하는 경우
# 2. SCP를 이용하여 jar 파일을 서버로 전송
scp build/libs/애플리케이션_이름.jar root@서버_아이피_주소:/root # Gradle을 사용하는 경우
scp target/애플리케이션_이름.jar root@서버_아이피_주소:/root # Maven을 사용하는 경우
# 3. 서버에서 jar 파일을 실행
java -jar 애플리케이션_이름.jar
이렇게 하면, 애플리케이션의 빌드와 배포가 완료됩니다.
서비스 등록과 실행
세 번째 단계는 서비스 등록과 실행입니다. 여기서는 애플리케이션을 리눅스 서비스로 등록하고, 자동으로 시작하고, 중지하고, 재시작하는 방법을 설명합니다.
서비스 등록과 실행을 위해서는 다음과 같은 작업들을 해야 합니다.
- 서비스 파일을 생성합니다.
- 서비스 파일에 애플리케이션 정보를 입력합니다.
- 서비스를 등록하고 실행합니다.
- 서비스를 중지하고 재시작합니다.
다음은 각 작업별로 실행할 명령어들입니다.
# 1. 서비스 파일을 생성
sudo vi /etc/systemd/system/애플리케이션_이름.service
# 2. 서비스 파일에 애플리케이션 정보를 입력
[Unit]
Description=애플리케이션_설명
After=syslog.target
[Service]
User=root
ExecStart=/usr/local/jdk-11.0.2/bin/java -jar /root/애플리케이션_이름.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
# 3. 서비스를 등록하고 실행
sudo systemctl daemon-reload # 서비스 파일을 읽어들임
sudo systemctl enable 애플리케이션_이름 # 서비스를 등록
sudo systemctl start 애플리케이션_이름 # 서비스를 실행
# 4. 서비스를 중지하고 재시작
sudo systemctl stop 애플리케이션_이름 # 서비스를 중지
sudo systemctl restart 애플리케이션_이름 # 서비스를 재시작
이렇게 하면, 서비스 등록과 실행이 완료됩니다.
포트 포워딩과 도메인 연결
네 번째 단계는 포트 포워딩과 도메인 연결입니다. 여기서는 애플리케이션의 포트 번호를 80번으로 변경하고, 도메인 이름을 연결하는 방법을 설명합니다.
포트 포워딩과 도메인 연결을 위해서는 다음과 같은 작업들을 해야 합니다.
- iptables를 이용하여 포트 포워딩을 설정합니다.
- 도메인 제공자의 사이트에서 도메인 이름을 구매하고, DNS 레코드를 설정합니다.
- 애플리케이션의 설정 파일에 도메인 이름을 추가합니다.
- 애플리케이션을 재시작합니다.
다음은 각 작업별로 실행할 명령어들입니다.
# 1. iptables를 이용하여 포트 포워딩을 설정
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 # 80번 포트로 들어오는 요청을 8080번 포트로 리다이렉트
# 2. 도메인 제공자의 사이트에서 도메인 이름을 구매하고, DNS 레코드를 설정
# 이 부분은 도메인 제공자마다 다르므로, 적절히 참고하시기 바랍니다.
# 예를 들어, example.com 이라는 도메인 이름을 구매했다면, 다음과 같은 DNS 레코드를 설정할 수 있습니다.
# A 레코드: example.com -> 서버_아이피_주소
# CNAME 레코드: www.example.com -> example.com
# 3. 애플리케이션의 설정 파일에 도메인 이름을 추가
vi src/main/resources/application.properties # 애플리케이션의 설정 파일 열기
server.address=example.com # 도메인 이름 추가
# 4. 애플리케이션을 재시작
sudo systemctl restart 애플리케이션_이름
이렇게 하면, 포트 포워딩과 도메인 연결이 완료됩니다.
마치며
Spring Boot 애플리케이션을 로컬에서 리눅스 서버로 이전하는 방법을 알아보았습니다. 리눅스 서버의 준비, 애플리케이션의 빌드와 배포, 서비스 등록과 실행, 포트 포워딩과 도메인 연결 등의 과정을 단계별로 설명하였습니다. 이 글을 순서대로 따라하면, Spring Boot 애플리케이션을 쉽고 빠르게 리눅스 서버로 이전할 수 있습니다.
- 블로그 : www.infracody.com
이 글이 유익했나요? 댓글로 소중한 의견을 남겨주시거나 커피 한 잔의 선물은 큰 힘이 됩니다.