뒤로가기
1. 서버 세팅 개요
서버 제공자: Vultr (Ubuntu 24.04)
서비스 목적: 개인 블로그 백엔드 API
주요 기술 스택: Java 17, Spring Boot 3, MySQL 8
2. 초기 세팅 과정
Java 설치
sudo apt update
sudo apt install openjdk-17-jdk
java -version
MySQL 8 설치 및 설정
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation
유저 생성 및 권한 설정
CREATE USER 'username'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
FLUSH PRIVILEGES;
mysqld.cof
설정 수정
bind-address = 0.0.0.0
지정 포트 열기 위해 설정
sudo ufw allow [포트번호]
Spring Boot JAR 실행 테스트
기본 실행
java -jar target/blog-back-0.0.1-SNAPSHOT.jar
실행 오류 (JDBC 연결 안됨)
-
원인: 원인: Public Key Retrieval is not allowed
-
해결: application.yml에 allowPublicKeyRetrieval=true 추가
환경 변수 실행
export $(cat .env | xargs) && java -jar target/blog-back-0.0.1-SNAPSHOT.jar
nohup으로 백그라운드 실행
nohup java -jar target/blog-back-0.0.1-SNAPSHOT.jar > log.txt 2>&1 &
3. 문제 해결 히스토리
❌ JDBC 연결 안됨
문제
처음엔 Connection refused, 나중엔 Public Key Retrieval is not allowed
원인
MySQL 포트 바인딩 이슈 (bind-address 확인 필요)
환경 변수 미반영으로 yml에 ${} 인식 안됨
MySQL의 caching_sha2_password로 인해 Public Key Retrieval 문제 발생
해결
JDBC URL에 allowPublicKeyRetrieval=true 추가
application.yml에서 .env 없이 테스트할 땐 민감정보 직접 기입
❌ 서버는 켜졌지만 웹에서 접속 안됨
원인
ufw 설정에서 포트가 막혀 있었음
서버는 IPv6 기준으로 열려 있었지만 IPv4에서는 닫힘 상태
해결
sudo ufw allow 8080
sudo ufw allow [mysql 포트번호]
lsof, netstat, ps aux | grep java로 상태 확인 필수
❌ DBeaver 연결 안됨
원인
bind-address 문제 또는 유저 권한 미부여
해결
%로 열어주고, 포트 확인 (3340)
외부 IP에서 DBeaver 접근 허용 (방화벽 ufw + MySQL 설정)
❌ 캐시 문제로 연결 실패
문제
application.yml 수정 후에도 연결 안됨
원인
환경 변수 재적용 안됨, 이전 캐시 남아 있음
해결
pkill -f java
rm -rf target/
./mvnw clean package
export $(cat .env | xargs) && java -jar target/blog-back-0.0.1-SNAPSHOT.jar
4. 회고
단순히 Spring Boot 실행만 하면 되는 줄 알았는데, DB 연결과 보안 설정에서 예상보다 훨씬 많은 문제가 발생했다.
특히 .env
가 인식되지 않거나, JDBC URL 파라미터 문제(allowPublicKeyRetrieval)는 삽질이 반복된 부분이었다.
ufw 설정이 단방향이라는 점, IPv6/IPv4 분리된 포트 허용 설정 등은 서버 보안에 대한 새로운 인사이트였다.
지금은 정상 작동하지만, 운영 단계로 가기 위해선 logrotate, 백업 전략, 모니터링 도구 등의 추가 세팅이 필요할 것이다.
서버 카테고리와 관련된 최신 글
블로그 백엔드 서버 구축 및 보안 설정
[ubuntu] React 프로젝트 배포