Monday, September 1, 2025

PuTTY로 WordPress 서버를 점프호스트 삼아 프라이빗 네트워크에 있는 MySQL 접속하기

PuTTY로 WordPress 서버를 점프호스트 삼아 MySQL 접속하기

🚀 PuTTY로 WordPress 서버를
점프호스트 삼아 MySQL 접속하기

기존 WordPress 서버를 활용한 스마트한 데이터베이스 접근 방법

💡 이전 포스팅 recap: OCI에 WordPress 서버를 구축했었죠! 오늘은 이 서버를 점프호스트로 활용하여 프라이빗 서브넷의 MySQL에 접속하는 효율적인 방법을 알아보겠습니다.

🤔 왜 점프호스트를 사용하나요?

프라이빗 서브넷의 MySQL에 접근하는 방법은 여러 가지가 있습니다. 이전에 살펴본 Bastion 서비스도 좋은 방법이지만, 이미 퍼블릭 서브넷에 WordPress 서버가 있다면 이를 활용하는 것이 더 경제적이고 효율적입니다.

접근 방법 비용 설정 복잡도 세션 제한 추천도
WordPress 점프호스트 무료 (기존 서버 활용) 낮음 없음 ⭐⭐⭐⭐⭐
OCI Bastion 서비스 시간당 요금 중간 3시간 ⭐⭐⭐⭐
별도 Bastion 서버 추가 인스턴스 비용 높음 없음 ⭐⭐⭐

📋 필요한 준비물

  • PuTTY - SSH 클라이언트 (여기서 다운로드)
  • WordPress 서버 정보:
    • 공인 IP 주소
    • SSH 프라이빗 키 파일 (.pem 또는 .ppk)
  • MySQL 서버 정보:
    • 프라이빗 IP 주소
    • 데이터베이스 접속 계정 정보

⚙️ 단계별 설정 방법

1 PuTTY 세션 생성
  1. PuTTY 실행
  2. Session 설정:
    • Host Name: WordPress 서버의 공인 IP
    • Port: 22
    • Connection type: SSH
2 SSH 키 설정
  1. Connection → SSH → Auth → Credentials로 이동
  2. Private key file for authentication에서 WordPress 서버 접속용 프라이빗 키 선택
⚠️ 중요: .pem 파일이라면 PuTTYgen으로 .ppk 형식으로 변환이 필요합니다!
3 터널링 설정 (핵심!)
  1. Connection → SSH → Tunnels로 이동
  2. 다음 정보를 정확히 입력:
    • Source port: 3306 (로컬에서 사용할 포트)
    • Destination: MySQL_프라이빗_IP:3306
    • 예시: 10.0.2.162:3306
  3. Add 버튼 클릭
4 세션 저장
  1. Session 메뉴로 돌아가기
  2. Saved Sessions에 의미있는 이름 입력
    예: WordPress-MySQL-Tunnel
  3. Save 버튼 클릭
5 MySQL 연결

터널링된 세션이 열린 상태에서 MySQL 클라이언트로 접속:

MySQL 접속 명령어
mysql -h 127.0.0.1 -P 3306 -u admin -p # 또는 MySQL Workbench 사용 시 # 호스트: 127.0.0.1 # 포트: 3306 # 사용자명: admin
✅ 성공 확인: 터널링이 올바르게 설정되었다면 로컬 호스트(127.0.0.1)로 접속했는데도 실제로는 프라이빗 MySQL 서버에 연결됩니다!

🔒 보안 고려사항

🔑 SSH 키 관리

  • 프라이빗 키는 안전한 위치에 보관 (암호화된 폴더 권장)
  • 키 파일 권한 설정 확인 (Windows: 사용자만 읽기 권한)
  • 정기적인 키 로테이션 고려

🛡️ 방화벽 설정

OCI 보안그룹 설정 예시
# WordPress 서버 보안그룹 SSH (22): 관리자_IP/32 # 특정 IP만 허용 HTTP (80): 0.0.0.0/0 HTTPS (443): 0.0.0.0/0 # MySQL 서버 보안그룹 MySQL (3306): WordPress_프라이빗_IP/32 # WordPress 서버에서만 접근

💼 실무 운영 팁

💡 세션 관리 베스트 프랙티스
  • Auto-reconnect 설정: Connection → SSH → 'Enable TCP keepalives' 체크
  • 세션 타임아웃 방지: Seconds between keepalives를 30으로 설정
  • 보안: 사용하지 않는 세션은 즉시 종료

🔧 문제 해결 체크리스트

연결 실패 시 순서대로 확인:

문제 해결 명령어들
# 1. WordPress 서버 SSH 직접 접속 테스트 ssh -i your-key.pem opc@PUBLIC_IP # 2. MySQL 서버 리스닝 포트 확인 netstat -an | grep 3306 # 3. MySQL 서비스 상태 확인 sudo systemctl status mysqld # 4. 방화벽 상태 확인 sudo firewall-cmd --list-all

🚀 고급 설정 및 최적화

🔄 자동 재연결 스크립트

네트워크 불안정 시를 대비한 자동 재연결 배치 파일:

auto_reconnect.bat
@echo off :reconnect echo "MySQL 터널 연결 시도 중..." "C:\Program Files\PuTTY\putty.exe" -load "WordPress-MySQL-Tunnel" timeout /t 5 goto reconnect

📊 연결 모니터링

연결 상태 확인 명령어
# WordPress 서버에서 MySQL 연결 확인 telnet MYSQL_PRIVATE_IP 3306 # 현재 MySQL 연결 상태 확인 mysql -h 127.0.0.1 -u admin -p -e "SHOW PROCESSLIST;" # 네트워크 터널 상태 확인 (Windows) netstat -an | findstr 3306

🚨 자주 발생하는 문제와 해결책

❌ 가장 흔한 실수들

  1. "Connection refused" 오류
    • MySQL 서버가 실제로 실행 중인지 확인
    • 프라이빗 IP 주소가 정확한지 확인
    • 보안그룹에서 3306 포트가 WordPress IP로 열려있는지 확인
  2. "Permission denied" 오류
    • SSH 키 파일 경로가 올바른지 확인
    • 키 파일이 .ppk 형식인지 확인
    • 키 파일 권한 설정 확인
  3. "Tunnel connection failed" 오류
    • Destination 주소 형식 확인 (IP:PORT)
    • 로컬 포트 3306이 다른 프로그램에서 사용 중인지 확인

✅ 접속 성공 확인하기

접속 테스트 쿼리
# 기본 연결 테스트 mysql -h 127.0.0.1 -P 3306 -u admin -p # 연결 후 실행할 테스트 쿼리 SHOW DATABASES; SELECT @@hostname, @@version; SHOW VARIABLES LIKE 'bind_address';
🎉 성공 지표:
  • MySQL 프롬프트가 정상적으로 나타남
  • @@hostname 쿼리에서 MySQL 서버의 호스트명이 나타남
  • 데이터베이스 목록이 정상적으로 조회됨
🏆 27년 Oracle 경험자의 실무 조언

실제 운영 환경에서는 점프호스트를 통한 접근이 매우 일반적입니다. Oracle 환경에서도 OEM, OID 같은 관리 도구들이 유사한 방식으로 작동하죠. 핵심은 네트워크 세그멘테이션최소 권한 원칙입니다.

⚡ 성능 최적화 팁

🚀 연결 속도 향상

PuTTY 성능 최적화 설정
# Connection 설정 TCP keepalives: Enabled Seconds between keepalives: 30 # SSH 설정 Compression: Enable SSH protocol version: 2 only # Terminal 설정 Local echo: Auto Local line editing: Auto

💾 터널링을 활용한 자동 백업

점프호스트가 설정되었다면, 이를 활용한 자동 백업 스크립트를 만들 수 있습니다:

mysql_backup.sh
#!/bin/bash # 백업 설정 BACKUP_DIR="/home/opc/mysql_backups/$(date +%Y%m%d_%H%M%S)" MYSQL_HOST="127.0.0.1" MYSQL_PORT="3306" MYSQL_USER="admin" # 백업 디렉토리 생성 mkdir -p $BACKUP_DIR # 데이터베이스 목록 가져오기 DATABASES=$(mysql -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | tail -n +2) # 각 데이터베이스 백업 for db in $DATABASES; do if [[ $db != "information_schema" ]] && [[ $db != "performance_schema" ]]; then mysqldump -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER -p$MYSQL_PASSWORD $db > $BACKUP_DIR/$db.sql echo "✅ $db 백업 완료" fi done echo "🎉 모든 백업이 완료되었습니다: $BACKUP_DIR"

🖥️ MySQL Workbench로 GUI 접속

명령줄보다 GUI를 선호한다면 MySQL Workbench를 사용할 수 있습니다:

  1. PuTTY 터널 세션을 먼저 연결
  2. MySQL Workbench 실행
  3. 새 연결 생성:
    • Connection Name: WordPress-MySQL-Tunnel
    • Hostname: 127.0.0.1
    • Port: 3306
    • Username: admin
  4. Test Connection으로 확인

📊 다른 접근 방법과의 비교

항목 WordPress 점프호스트 OCI Bastion 별도 Bastion 서버
초기 설정 시간 5분 15분 30분+
월 비용 (예상) $0 $10-20 $30-50
세션 제한 없음 3시간 없음
확장성 중간 높음 높음
관리 복잡도 낮음 중간 높음

💡 코드 표현 개선 포인트

🎨 기존 코드 블록의 문제점과 개선사항

기존 문제점:

  • cp /etc/php.ini 부분이 주석과 비슷한 색상으로 가독성 저하
  • 다크 배경에서 명령어와 경로 구분이 어려움
  • 문법 하이라이팅이 부족함

개선된 스타일 적용:

  • 명령어는 주황색으로 강조
  • 경로는 초록색으로 구분
  • 변수는 진한 주황색
  • 주석은 회색으로 명확히 구분

🏢 실무 적용 시나리오

📈 개발팀 워크플로우

실제 개발 환경에서 이 방법을 어떻게 활용할 수 있는지 살펴보겠습니다:

  1. 개발자 DB 접근: 각 개발자가 개별 터널을 통해 안전하게 접근
  2. DB 마이그레이션: 스테이징 → 프로덕션 데이터 동기화
  3. 모니터링: 실시간 쿼리 성능 분석
  4. 백업 검증: 백업 파일의 무결성 확인

🔐 보안 체크리스트

🛡️ 필수 보안 점검 항목

  • ✅ SSH 키는 암호로 보호되어 있나요?
  • ✅ WordPress 서버 SSH 접근이 특정 IP로 제한되어 있나요?
  • ✅ MySQL 서버는 WordPress 서버에서만 접근 가능한가요?
  • ✅ MySQL 계정에 적절한 권한만 부여되어 있나요?
  • ✅ 접속 로그를 정기적으로 검토하고 있나요?
  • ✅ 비상시 접근 차단 절차가 마련되어 있나요?

🎯 핵심 정리

기존 WordPress 서버를 점프호스트로 활용하면 추가 비용 없이 안전하고 효율적인 데이터베이스 관리가 가능합니다. 특히 개발 환경에서 데이터베이스를 자주 관리해야 하는 경우, Bastion 서비스와 달리 세션 시간 제한이 없어 장시간 작업에 매우 적합합니다.

다음 포스팅에서는 이 터널링을 활용한 데이터베이스 백업 자동화모니터링 솔루션 구축에 대해 다뤄보도록 하겠습니다!

#MySQL #PuTTY #SSH터널링 #점프호스트 #OCI #WordPress #데이터베이스관리 #오라클클라우드

💬 궁금한 점이 있으시다면?

MySQL 터널링 설정 중 막히는 부분이나 추가로 궁금한 사항이 있으시면 댓글로 남겨주세요!
Oracle 미들웨어 경험을 바탕으로 실무적인 조언을 드리겠습니다. 😊

No comments:

Post a Comment