서버
블로그 백엔드 서버 구축 및 보안 설정
2025년 04월 24일 10:46
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, 백업 전략, 모니터링 도구 등의 추가 세팅이 필요할 것이다.
