데이터베이스 시스템과 DBMS의 역할
1강. 데이터베이스 시스템과 DBMS의 역할
1. 이번 강의에서 해결할 문제
FastAPI가 데이터를 직접 파일에 쓰면 동시 요청, 일부 저장, 검색 성능, 권한 통제를 모두 애플리케이션이 책임져야 합니다. 게임 랭킹 서비스에서 DBMS가 해결해야 할 문제와 백엔드에 남겨야 할 규칙을 구분합니다.
2. 학습 목표
3. 핵심 개념
데이터베이스는 조직된 데이터 자체이고 DBMS는 그 데이터를 정의하고 읽고 바꾸며 보호하는 소프트웨어입니다. PostgreSQL 서버 프로세스는 여러 클라이언트 연결을 받아 SQL을 계획·실행하고, 트랜잭션 로그와 데이터 파일을 관리합니다. FastAPI는 인증된 사용자와 비즈니스 규칙을 판단하고, DBMS는 제약 조건과 트랜잭션으로 저장 상태를 지킵니다.
초보자가 가장 먼저 구분해야 할 것은 데이터, 관리 프로그램, 서비스 코드입니다. 경기 결과 한 건은 데이터이고, PostgreSQL은 그 데이터를 안전하게 저장하는 DBMS이며, FastAPI는 사용자의 요청이 허용되는지 판단하는 애플리케이션입니다. 세 가지를 모두 "DB"라고 부르면 장애가 났을 때 어느 계층을 확인해야 하는지 알기 어렵습니다.
용어 정리
| 용어 | 무엇인가 | 이 과정의 예 |
|---|---|---|
| 데이터베이스 | 관련 데이터와 구조의 논리적 모음 | game_ranking_dev |
| DBMS | 저장·조회·무결성·동시성·복구를 담당하는 소프트웨어 | PostgreSQL |
| 데이터베이스 서버 | DBMS 프로세스가 연결을 기다리는 실행 환경 | 로컬 PostgreSQL 서비스 |
| 클라이언트 | DBMS에 연결해 SQL을 요청하는 프로그램 | psql, FastAPI/SQLAlchemy |
| 트랜잭션 | 함께 성공하거나 함께 취소할 작업 묶음 | 경기 결과와 점수 갱신 |
| 제약 조건 | 저장 가능한 상태를 제한하는 DB 규칙 | 점수 CHECK, 플레이어 FOREIGN KEY |
같은 규칙을 어디에 둘까
| 규칙 | 주 책임 | 이유 |
|---|---|---|
| 요청 사용자가 해당 플레이어인가 | FastAPI | 인증 정보와 요청 문맥이 필요함 |
| 점수는 음수가 될 수 없다 | PostgreSQL 제약 + API 사전 검증 | 어떤 쓰기 경로에서도 지켜야 함 |
| 승리하면 알림을 보낸다 | FastAPI/작업 큐 | 외부 동작과 실패 정책이 필요함 |
| 경기 결과와 점수는 함께 저장된다 | PostgreSQL 트랜잭션 | 일부 저장을 막아야 함 |
API 검증과 DB 제약은 경쟁 관계가 아닙니다. API는 사용자에게 빠르고 이해하기 쉬운 오류를 주고, DB 제약은 배치·관리 도구처럼 다른 쓰기 경로도 같은 불변식을 지키게 합니다.
4. 단계별 예시
문서 경로: C:\dev\game-ranking-service\docs\database\01-responsibility-map.md
아래 지도는 코드를 실행하는 예제가 아니라 요청이 이동하는 경로를 먼저 그리는 설계 실습입니다. 화살표 하나를 지날 때마다 어떤 정보가 전달되고 어느 계층이 판단하는지 표시합니다.
게임 클라이언트 → FastAPI → SQLAlchemy → PostgreSQL → 디스크
FastAPI: 인증, 요청 검증, 승리 보상 계산
PostgreSQL: FK/CHECK 검증, 동시 변경 조정, 원자적 저장, 복구
운영자: 역할·권한, 백업, 모니터링, 용량 계획
한 요청을 단계별로 따라가기
플레이어가 경기 종료 결과를 보낸다고 가정합니다.
- 게임 클라이언트가 경기 ID와 결과를 HTTP 요청으로 보냅니다. 클라이언트가 계산한 점수를 그대로 신뢰하지 않습니다.
- FastAPI가 로그인 정보, 입력 형식, 해당 경기 참가 여부를 확인하고 서버 규칙으로 점수 변화를 계산합니다.
- SQLAlchemy가 애플리케이션의 저장 의도를 SQL과 매개변수로 바꿉니다. 문자열을 이어 붙여 SQL을 만들지 않습니다.
- PostgreSQL이 FK·CHECK를 검사하고 경기 결과 추가와 점수 갱신을 한 트랜잭션으로 처리합니다.
- 저장 계층이 커밋된 변경을 복구 가능한 형태로 기록합니다.
- 성공한 경우에만 FastAPI가 클라이언트에 성공 응답을 보냅니다.
중간에 점수 갱신이 실패하면 경기 결과만 남겨서는 안 됩니다. 트랜잭션을 롤백해 요청 전 상태로 돌아가는 것이 DBMS가 제공하는 핵심 안전 장치입니다.
New-Item -ItemType Directory -Force C:\dev\game-ranking-service\docs\database
Set-Location C:\dev\game-ranking-service
psql --version
psql --version은 서버 데이터에 접근하거나 변경하지 않습니다. 설치된 PostgreSQL 클라이언트 버전이 출력되면 준비가 된 것입니다.
psql (PostgreSQL) 17.x
실제 숫자는 설치한 버전에 따라 다릅니다. 명령을 찾지 못한다면 SQL을 고치기 전에 PostgreSQL의 bin 폴더가 PATH에 포함됐는지 확인합니다.
5. 동작 원리
클라이언트는 DB 파일이 아니라 PostgreSQL 프로토콜을 통해 서버에 요청합니다. DBMS는 파서, 플래너, 실행기, 저장 계층을 거쳐 결과를 만들고 트랜잭션 경계를 적용합니다. 책임을 나누면 API 프로세스가 중단되어도 커밋된 데이터의 일관성을 DBMS가 유지할 수 있습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
다음 강의 연결
DBMS의 책임을 정했으므로 다음에는 무엇을 정상 데이터로 인정할지 관계형 모델과 제약으로 표현합니다. 2강. 관계형 모델과 데이터 무결성로 이어갑니다.
데이터베이스 시스템과 DBMS의 역할 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.