#100DaysOfCode 31일차 — SQL + NoSQL 기본

발행: (2026년 3월 5일 오전 09:09 GMT+9)
7 분 소요
원문: Dev.to

I’m unable to access external websites, so I can’t retrieve the article from the link you provided. If you paste the text you’d like translated here, I’ll be happy to translate it into Korean while preserving the formatting and code blocks.

구조화된 방식 (테이블 및 행)

이는 관계형 데이터베이스라고 불리는 방식이며, 데이터를 테이블로 구성합니다. 여기서:

  • Table → 하나의 엔터티를 나타냅니다 (예: Users, Orders)
  • Row → 해당 테이블의 한 레코드/항목 (예: 한 명의 사용자)
  • Column → 속성/필드 (예: name, email, age)
  • Cell → 행과 열이 교차하는 실제 값

스프레드시트와 정확히 같은 형태입니다:

idnameemail
1Johnjohn@gmail.com
2Saadsaad@gmail.com

🔑 핵심 개념

  • Schema – 모든 테이블의 전체 구조/청사진
  • Primary Key – 각 행을 고유하게 식별하는 키
  • Foreign Key – 한 테이블을 다른 테이블에 연결하는 열
  • Relationship – 테이블 간 연결 방식

🟦 SQL 기본 구문

Create a table

CREATE TABLE users (
  id    INT PRIMARY KEY AUTO_INCREMENT,
  name  VARCHAR(100) NOT NULL,
  email VARCHAR(255) UNIQUE,
  age   INT
);

Insert rows

INSERT INTO users (name, email, age)
VALUES ('Alice', 'alice@email.com', 28);

Read data

SELECT name, email
FROM users
WHERE age > 25
ORDER BY name ASC
LIMIT 10;

Update a row

UPDATE users
SET age = 29
WHERE email = 'alice@email.com';

Delete a row

DELETE FROM users
WHERE age `, `<`, `IN`, `LIKE`.*

Update a document

db.users.updateOne(
  { email: "alice@email.com" },
  { $set: { age: 29 } }
);

Delete documents

db.users.deleteMany({ age: { $lt: 18 } });

Join collections (aggregation with $lookup)

db.orders.aggregate([
  {
    $lookup: {
      from: "users",
      localField: "user_id",
      foreignField: "_id",
      as: "user"
    }
  },
  { $unwind: "$user" }
]);

Aggregation pipeline example

db.users.aggregate([
  { $match: { age: { $gt: 20 } } },
  { $group: { _id: "$age", count: { $sum: 1 } } },
  { $sort: { count: -1 } }
]);

🔵 NoSQL / 문서 데이터베이스 사용 사례

문서 데이터베이스와 NoSQL은 데이터가 유동적이고, 규모가 크며, 속도가 중요하거나 각 레코드의 구조가 실제로 다양할 때 뛰어납니다. 전형적인 실제 시나리오에는 다음이 포함됩니다:

  • 콘텐츠 관리 및 블로그 플랫폼
  • 소셜 미디어 피드 및 사용자 프로필
  • 실시간 채팅 및 메신저
  • 제품 카탈로그
  • 모바일 및 게임 앱
  • 사용자 활동 및 행동 분석
  • IoT 및 센서 데이터
  • 추천 엔진
  • 물류 및 배송 추적
  • 빠른 프로토타이핑 및 스타트업

🔵 SQL vs 🟠 NoSQL: 언제 사용해야 할까?

시나리오SQL이 유리한 이유
구조화된 관계형 데이터명확한 관계를 가진 테이블 (사용자 → 주문 → 제품)
데이터 무결성이 중요한 경우ACID 트랜잭션, 외래 키, 제약 조건
복잡한 쿼리JOIN, 집계, 보고, 분석
스키마가 안정적인 경우데이터 형태가 자주 변하지 않음
시나리오NoSQL이 유리한 이유
매우 가변적이거나 진화하는 스키마스키마가 없는 컬렉션으로 문서마다 필드가 다를 수 있음
대규모 수평 확장샤딩 및 분산 아키텍처가 기본 제공
단순 쿼리의 빠른 읽기/쓰기정규화되지 않은 데이터가 비용이 많이 드는 JOIN을 없앰
비정형 또는 반정형 데이터JSON과 같은 문서가 현대 데이터 포맷에 자연스럽게 매핑

두 패러다임 모두 장점이 있으며, 올바른 선택은 애플리케이션의 구체적인 요구 사항에 따라 달라집니다.

재무/거래 시스템
은행, ERP, 전자상거래 백엔드

NoSQL을 언제 사용해야 할까

시나리오NoSQL이 승리하는 이유
유연하고 진화하는 스키마레코드마다 필드가 다르고 스키마가 자주 변경됩니다
대규모 확장 및 속도다수의 서버에 걸친 수평 확장
비정형/반정형 데이터JSON 문서, 로그, 센서 데이터
높은 쓰기 처리량초당 수백만 이벤트 (Cassandra, DynamoDB)
계층형 또는 그래프 데이터중첩 문서 (MongoDB), 관계 (Neo4j)
캐싱Redis와 같은 키‑값 저장소

🧭 빠른 결정 가이드

Is the data relational with a stable schema?      → SQL
Need ACID compliance (finance, healthcare)?       → SQL
Unknown/flexible data structure?                  → NoSQL (Document)
Massive scale, simple lookups?                    → NoSQL (Key‑Value)
Graph relationships (social networks)?            → NoSQL (Graph)
Time‑series or IoT data?                          → NoSQL (Wide‑Column)

✅ Conclusion

Day 31은 SQL과 NoSQL이 어떻게 다른지, 단순히 구문적인 차이뿐 아니라 철학적인 차이까지 명확히 보여주었습니다.

  • SQL은 구조, 규칙, 일관성에 중점을 둡니다.
  • NoSQL은 유연성, 속도, 확장성을 우선시합니다.

각각을 언제 선택해야 하는지를 이해하는 것은 백엔드 개발자에게 핵심 역량이며, 이번 비교를 통해 그 이해가 확고해졌습니다.

내일은 이 기반 위에 #100DaysOfCode 여정을 이어가겠습니다.

읽어 주셔서 감사합니다. 의견을 자유롭게 공유해주세요!

0 조회
Back to Blog

관련 글

더 보기 »