SQL과 NoSQL의 차이와 선택 기준
21강. SQL과 NoSQL의 차이와 선택 기준
1. 이번 강의에서 해결할 문제
데이터가 많다는 이유만으로 NoSQL을 선택하거나 구조가 유연하다는 이유로 모든 데이터를 JSON 문서에 넣으면 무결성과 조회 요구를 뒤늦게 다시 구현하게 됩니다. 게임 랭킹 서비스의 실제 요구사항으로 저장소 선택을 평가합니다.
2. 학습 목표
3. 핵심 개념
SQL 데이터베이스는 선언적 스키마, 관계, JOIN, 제약, 다중 행 트랜잭션에 강합니다. NoSQL은 하나의 제품군이 아니라 문서, 키값, 열 지향, 그래프 등 서로 다른 모델을 묶어 부르는 말입니다. 선택은 “스키마 있음/없음”이 아니라 원자적 경계, 접근 패턴, 일관성 요구, 데이터 수명, 운영 경험으로 결정합니다.
게임 결과와 랭킹은 플레이어·경기·시즌 관계와 중복 방지, 트랜잭션이 중요하므로 PostgreSQL이 자연스러운 기준 시스템입니다. 짧은 수명의 캐시나 실시간 세션 상태는 키값 저장소가 보조 역할을 할 수 있지만 원본 데이터와 무효화 전략을 명확히 해야 합니다.
4. 단계별 예시
문서 경로: C:\dev\game-ranking-service\docs\database\21-storage-decision.md
| 데이터 | 관계·일관성 | 접근 패턴 | 선택 | 근거 |
|---|---|---|---|---|
| 경기 결과 | PK/FK/중복 방지/원자성 높음 | JOIN·기간 조회 | PostgreSQL | 기준 시스템 |
| 랭킹 스냅샷 | 시즌·플레이어 관계 | 정렬·집계·이력 | PostgreSQL | 분석과 복구 |
| 상위 100명 응답 캐시 | 원본에서 재생성 가능 | 키 단건 읽기 | 선택적 키값 저장소 | 짧은 TTL |
| 원본 이벤트 아카이브 | 추가 중심·대용량 | 기간 배치 처리 | 별도 객체 저장소 검토 | DB 핫 데이터와 분리 |
-- 유연한 부가 메타데이터는 jsonb, 관계 키는 정규 열로 둔다.
ALTER TABLE ranking.games
ADD COLUMN IF NOT EXISTS metadata jsonb NOT NULL DEFAULT '{}'::jsonb;
COMMENT ON COLUMN ranking.games.metadata IS
'검색·무결성의 핵심이 아닌 버전별 부가 게임 설정';
Get-Content .\docs\database\21-storage-decision.md
psql -d game_ranking_dev -f .\database\sql\21-json-boundary.sql
5. 동작 원리
기준 시스템은 최종 진실과 복구 근거를 소유합니다. 캐시는 원본에서 다시 만들 수 있어야 하며 TTL, 무효화, 장애 시 우회 동작이 필요합니다. PostgreSQL의 jsonb는 일부 유연성을 제공하지만 정규 관계와 제약이 필요한 필드를 무조건 문서로 바꾸는 근거는 아닙니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
SQL과 NoSQL의 차이와 선택 기준 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.