서버

블로그 백엔드 서버 구축 및 보안 설정

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, 백업 전략, 모니터링 도구 등의 추가 세팅이 필요할 것이다.