Page ▾
[ Cafe24 서버 호스팅 ] #7: MariaDB 연동 (기본 DB 생성 및 연결 테스트)

✨ 목표

Node.js 서버에서 MariaDB(MySQL 호환)와 기본 연동을 해보며, users 테이블을 만들고 데이터를 넣고 조회하는 실습을 진행합니다.

 

📦 주요 작업 요약

  1. MariaDB용 데이터베이스 생성 (HeidiSQL 사용)
  2. MySQL 클라이언트 모듈 설치 (mysql)
  3. 서버에서 MariaDB에 연결하고 users 테이블 생성
  4. 샘플 데이터 삽입 및 조회
  5. 연결 종료

✔️ 1. HeidiSQL로 MariaDB 데이터베이스 생성

  • 서버에서 사용할 데이터베이스는 미리 만들어져 있어야 합니다.

 

1️⃣ HeidiSQL 실행

HeidiSQL 실행

💡 자세한 사항은 아래 링크 게시글 참고
"[ Cafe24 서버 호스팅 ] #2: 개발환경 준비하기" ➡ "✔️ 9. HeidiSQL"

 

 

2️⃣ 좌측에서 연결된 서버를 오른쪽 클릭 → [새로 생성] → 데이터베이스

데이터베이스 새로 생성

 

3️⃣ 데이터베이스 생성 완료

데이터베이스 생성 완료


✔️ 2. mysql2 설치

  • 서버 프로젝트 폴더(server)에서 아래 명령어 입력: (로컬 및 서버에서 전부 입력)
npm install mysql2
mysql모듈은 Node.js에서 MySQL 또는 MariaDB 서버에 연결할 수 있도록 도와줍니다.

✔️ 3. DB 연결 및 테스트 코드 작성

server.js에 아래 코드 작성:

const mysql = require('mysql2');
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');

const app = express();
const PORT = 3000;

// DB 연결 설정
const connection = mysql.createConnection({
  host: '123.123.123.123', // 또는 db.example.com (서버의 IP 또는 도메인)
  user: 'root',         // DB 사용자 이름
  password: '비밀번호!', // DB 비밀번호
  database: 'testdb'    // 사용할 DB명
});

// CORS 설정 (Angular 앱에서 API 호출 허용)
app.use(cors());

// JSON 요청 바디 파싱
app.use(bodyParser.json());

// DB 연결 시도
connection.connect((err) => {
  if (err) {
    console.error('DB 연결 실패:', err);
    return;
  }
  console.log('MySQL 데이터베이스에 연결되었습니다.');
  
  // 테이블 생성 (존재하지 않는 경우)
  const createTableQuery = `
    CREATE TABLE IF NOT EXISTS users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(100) NOT NULL,
      email VARCHAR(100) NOT NULL,
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )
  `;
  
  connection.query(createTableQuery, (err, results) => {
    if (err) {
      console.error('❌ 테이블 생성 오류:', err);
      return;
    }
    console.log('✅ users 테이블이 준비되었습니다.');
    
    // 샘플 데이터 삽입
    const insertQuery = `INSERT INTO users (name, email) VALUES (?, ?)`;
    const userData = ['홍길동', 'hong@example.com'];
    
    connection.query(insertQuery, userData, (err, results) => {
      if (err) {
        console.error('❌ 데이터 삽입 오류:', err);
        return;
      }
      console.log('✅ 사용자 추가 완료 (ID:', results.insertId, ')');
      
      // 전체 데이터 조회
      connection.query('SELECT * FROM users', (err, rows) => {
        if (err) {
          console.error('❌ 데이터 조회 오류:', err);
          return;
        }
        
        console.log('📋 사용자 목록:');
        rows.forEach(user => {
          console.log(`ID: ${user.id}, 이름: ${user.name}, 이메일: ${user.email}, 생성: ${user.created_at}`);
        });
      });
    });
  });
});

// 서버 시작
app.listen(PORT, () => {
  console.log(`서버가 http://localhost:${PORT} 에서 실행 중입니다.`);
});

 

📌 주의사항

이 코드는 연습용이며, 실제 운영 시에는 환경변수로 분리해야 합니다.
👉 이건 다음 편 #8에서 진행합니다.

 

 

⭐️ 서버 안에서 실행하는 경우

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '비밀번호',
  database: 'testdb'
});

 

⭐️ 로컬 PC(VSCode 등)에서 원격 DB에 접속할 경우

const connection = mysql.createConnection({
  host: '123.123.123.123', // 또는 db.example.com (서버의 IP 또는 도메인)
  user: 'root',
  password: '비밀번호',
  database: 'testdb'
});
이 경우 서버의 MariaDB가 외부 접속 허용 상태이어야 하며, 포트 3306이 방화벽/보안 그룹에서 열려 있어야 접속이 가능합니다.

 

🔐 추가 체크포인트

 

1️⃣ MariaDB의 사용자 권한 확인

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '비밀번호';
FLUSH PRIVILEGES;

 

2️⃣ **MariaDB 설정파일(/etc/my.cnf 또는 /etc/mysql/my.cnf 등)**에 아래 내용이 있어야 외부 접속 허용됨:

[mysqld]
bind-address=0.0.0.0

 

3️⃣ 3306 포트 개방

 

## 데이터베이스 권한 확인법
SELECT * FROM mysql.user

✔️ 4. 테스트 결과 예시 확인 (node, nodemon, pm2)

🔍 테스트 결과 예시 (터미널 출력)

서버가 http://localhost:3000 에서 실행 중입니다.
MySQL 데이터베이스에 연결되었습니다.
✅ users 테이블이 준비되었습니다.
✅ 사용자 추가 완료 (ID: 1 )
📋 사용자 목록:
ID: 1, 이름: 홍길동, 이메일: hong@example.com, 생성: Mon May 12 2025 11:17:14 GMT+0900 (대한민국 표준시)
✅ MySQL 연결이 종료되었습니다.