데이터의 중심 — 데이터베이스 구조 이해 | RDB와 NoSQL, MySQL·PostgreSQL 비교 및 Node.js 연결 실습(2)

데이터의 중심 — 데이터베이스 구조 이해 | RDB와 NoSQL, MySQL·PostgreSQL 비교 및 Node.js 연결 실습

데이터의 중심 — 데이터베이스 구조 이해

“백엔드의 심장은 데이터베이스다.”
서버가 아무리 빠르고 로직이 복잡해도, 데이터를 어떻게 저장하고 관리하느냐가 시스템의 품질을 결정합니다.
이번 글에서는 RDB와 NoSQL의 차이, MariaDB·MySQL·PostgreSQL 비교, 테이블 구조, 쿼리 기초, 그리고 Node.js + Sequelize를 이용한 DB 연결까지 실무 기반으로 다룹니다.

핵심 키워드: 데이터의 중심 — 데이터베이스 구조 이해, RDB, NoSQL, Sequelize, Node.js, MySQL, PostgreSQL

처음 데이터베이스를 다뤘을 때의 혼란

실무 초반, “users 테이블 만들어줘”라는 말을 들었을 때 막막했습니다.
컬럼이란 게 정확히 뭔지, PK/FK 관계가 어떻게 연결되는지, 쿼리를 어떻게 짜야 하는지 전혀 감이 없었죠.
하지만 데이터를 ‘표’로, 관계를 ‘연결선’으로, 쿼리를 ‘질문’으로 이해하기 시작하면서 DB가 비로소 명확해졌습니다.

데이터베이스(DB)의 역할과 종류

데이터베이스는 정보를 체계적으로 저장하고, 필요할 때 빠르고 안전하게 꺼내기 위한 시스템입니다.

RDB: 관계형 데이터베이스

  • 데이터를 테이블(표) 단위로 저장
  • 스키마로 구조(컬럼, 타입, 제약조건)를 정의
  • 관계(Relation)를 외래키(Foreign Key)로 표현
  • 트랜잭션ACID 보장으로 안정성 확보

NoSQL: 비관계형 데이터베이스

  • 스키마 유연, 비정형 데이터 저장
  • 문서형(MongoDB), 키-값형(Redis), 컬럼형(Cassandra) 등 다양한 형태
  • 수평 확장이 쉬워 대규모 트래픽에 적합

MariaDB, MySQL, PostgreSQL 비교

DBMS특징적합한 용도
MySQL가장 널리 사용되는 오픈소스 DB, 웹서비스 표준일반 웹 서비스, 스타트업 프로젝트
MariaDBMySQL의 오픈소스 포크, 완전한 GPL 라이선스오픈소스 순수 정책 지향 서비스
PostgreSQLACID 완벽 준수, JSONB·CTE·GIS 등 고급 기능복잡한 비즈니스 로직, 대규모 트랜잭션 시스템

테이블, 관계, 쿼리의 기본 구조

테이블 구조 이해

테이블은 컬럼(열)과 행(레코드)으로 구성됩니다.

id (INT, PK)
username (VARCHAR)
email (VARCHAR, UNIQUE)
created_at (DATETIME)

관계(Relationship)의 세 가지 형태

  • 1:1 — 한 사용자 ↔ 한 프로필
  • 1:N — 한 사용자 ↔ 여러 게시글
  • N:M — 사용자 ↔ 그룹 (중간 테이블 필요)

SQL 쿼리의 기본 문법

-- 데이터 조회
SELECT * FROM users WHERE id = 1;

-- 데이터 추가
INSERT INTO users (username, email) VALUES ('gpt', '[email protected]');

-- 데이터 수정
UPDATE users SET email = '[email protected]' WHERE id = 1;

-- 데이터 삭제
DELETE FROM users WHERE id = 1;

실습: users 테이블 설계

테이블 생성 SQL 예시

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE NOT NULL,
  password VARCHAR(255) NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

기본 CRUD 쿼리 예시

INSERT INTO users (username, email, password)
VALUES ('james', '[email protected]', 'hashed_pw');

SELECT * FROM users;

UPDATE users SET username = 'jay' WHERE id = 1;

DELETE FROM users WHERE id = 2;

백엔드와 DB 연결 (Node.js + Sequelize 예시)

Sequelize 설치 및 설정

npm install sequelize mysql2
// db.js
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize('mydb', 'root', 'password', {
  host: 'localhost',
  dialect: 'mysql',
});
module.exports = sequelize;

모델 정의 및 CRUD 예시

// models/User.js
const { DataTypes } = require('sequelize');
const sequelize = require('../db');

const User = sequelize.define('User', {
  username: { type: DataTypes.STRING, allowNull: false },
  email: { type: DataTypes.STRING, unique: true, allowNull: false },
  password: { type: DataTypes.STRING, allowNull: false },
});

module.exports = User;
// index.js
const sequelize = require('./db');
const User = require('./models/User');

(async () => {
  await sequelize.sync({ force: true });
  console.log('DB Connected & Synced!');

  const newUser = await User.create({
    username: 'gpt',
    email: '[email protected]',
    password: 'hashed_pw'
  });

  console.log('Inserted:', newUser.toJSON());
})();

FAQ: 데이터베이스 입문자들이 자주 묻는 질문

Q1. MySQL과 MariaDB는 완전히 같은 건가요?

MariaDB는 MySQL에서 분기된 오픈소스 포크입니다. 대부분의 쿼리와 커넥터가 호환되지만, 내부 엔진이나 기능은 점점 달라지고 있습니다.

Q2. PostgreSQL은 왜 “강력한 DB”라고 하나요?

트랜잭션, 확장성, JSONB, CTE 등 고급 SQL 기능을 모두 지원합니다. 복잡한 데이터 모델을 다루기에 탁월합니다.

Q3. ORM(Sequelize) 대신 직접 SQL을 써도 되나요?

네, 직접 SQL로도 충분히 가능합니다. 하지만 ORM은 유지보수성과 DB 독립성을 높여줍니다.

Q4. RDB 대신 NoSQL을 써야 하는 상황은?

스키마가 자주 바뀌거나, 수평 확장이 중요한 대규모 시스템이라면 MongoDB 같은 NoSQL이 유리합니다.

Q5. DB 설계 시 가장 중요한 원칙은?

정규화(Normalization)명확한 관계 정의입니다. 중복을 줄이고 데이터 무결성을 유지하세요.

Q6. Sequelize 연결이 실패할 때는?

DB 포트, 사용자명, 비밀번호, 호스트 주소, 방화벽 설정을 확인하세요. sequelize.authenticate()로 연결 테스트를 해보면 원인을 쉽게 찾을 수 있습니다.

마무리 — 데이터를 이해하는 개발자의 관점

데이터베이스는 단순한 저장소가 아니라 비즈니스의 언어를 구조화한 모델입니다.
프론트엔드와 백엔드를 잇는 핵심이며, 제대로 이해하면 서비스의 확장성과 안정성이 달라집니다.
다음 편에서는 ORM을 활용한 관계 설정과 고급 쿼리 최적화를 다뤄볼 예정입니다.


참고자료:
Sequelize 공식 문서 ·
PostgreSQL Docs ·
MariaDB Foundation


모드 전환 안내Article Mode, Blog Article + Image Mode, Custom Mode, Multilingual Mode 중 원하는 모드를 입력하면 전환할 수 있습니다.


Leave a Comment