MySQL에서 외부 서버와의 연동 방법

 

다양한 시스템이 존재하는 현대의 IT 환경에서는 MySQL을 외부 서버나 시스템과 연동하여 데이터를 주고받는 일이 자주 발생합니다.
MySQL을 외부 서버와 연동하는 대표적인 방법과 그 구현 방식, 주의사항까지 자세히 안내합니다.

 

REST API와 연동하여 데이터 주고받기

MySQL 자체는 API 호출 기능이 없지만, 서버 사이드 애플리케이션(PHP, Node.js, Python 등)을 통해 REST API와 연동할 수 있습니다.

예: Node.js + Axios + MySQL 연동

const axios = require('axios');
const mysql = require('mysql2/promise');

const connection = await mysql.createConnection({host: 'localhost', user: 'root', database: 'mydb'});

const response = await axios.get('https://api.example.com/data');

await connection.execute('INSERT INTO my_table (value) VALUES (?)', [response.data.value]);
  

이처럼 외부 API 데이터를 받아 DB에 저장하거나, DB 데이터를 가공해 외부 서버로 전송하는 로직을 구성할 수 있습니다.

 

FEDERATED 엔진으로 외부 MySQL 서버와 직접 연결

MySQL의 FEDERATED 스토리지 엔진을 이용하면 외부 MySQL 서버의 테이블을 로컬 테이블처럼 사용할 수 있습니다.

설정 예시

-- FEDERATED 엔진 활성화
INSTALL PLUGIN federated SONAME 'ha_federated.so';

-- 외부 테이블 생성
CREATE TABLE remote_table (
  id INT,
  name VARCHAR(100)
) ENGINE=FEDERATED
CONNECTION='mysql://user:password@192.168.0.100:3306/remotedb/remote_table';
  

단, 성능 이슈 및 장애 시 전파 가능성이 있어 읽기 전용 또는 백업 용도로 사용하는 것을 추천합니다.

 

외부 서버에서 MySQL로 직접 연결

애플리케이션 서버 또는 ETL 서버에서 MySQL에 직접 접속해 데이터를 주고받는 방법입니다. 일반적으로는 JDBC, ODBC, MySQL Connector 등을 사용합니다.

접속 예시 (Python + pymysql)

import pymysql

conn = pymysql.connect(
    host='db.example.com',
    user='user',
    password='password',
    database='mydb'
)

cursor = conn.cursor()
cursor.execute("SELECT * FROM table_name")
rows = cursor.fetchall()
  

이 방식은 내부 시스템 간 데이터 통합에 가장 일반적으로 사용되며, 접속 제어 및 인증 설정이 중요합니다.

 

보안 설정 및 권한 주의사항

  • MySQL 사용자에게 호스트 제한 (user@ip)을 설정하여 외부 접근을 통제
  • MySQL 포트(3306)는 방화벽에서 허용된 IP만 접근 가능하게 제한
  • SSL 연결을 통해 데이터 전송 중 암호화 적용
  • API 키나 DB 접속 정보는 환경 변수 또는 AWS Parameter Store로 관리

 

주의할 점

  • 외부 API 연동 시 실패 대비 재시도 및 예외 처리 로직 구현 필수
  • 네트워크 병목과 타임아웃에 유의 (특히 FEDERATED 사용 시)
  • 정기적인 동기화가 필요한 경우 Cron 또는 스케줄러 활용

 

MySQL은 다양한 방식으로 외부 서버나 시스템과 연동이 가능합니다. 상황에 따라 REST API, FEDERATED, 직접 연결 중 적합한 방식을 선택하고, 보안 및 성능 문제를 충분히 고려하는 것이 중요합니다.