피드로 돌아가기
Dev.toDatabase
원문 읽기
데이터베이스가 CHECK 제약조건으로 음수 잔액을 차단하여 스키마 수준의 데이터 일관성 보장
Consistency
AI 요약
Context
응용 프로그램이 사용자의 충분한 잔액 확인 없이 출금 요청을 처리하거나, 제약조건 없이 데이터베이스에 쓰기 작업을 수행할 경우 음수 잔액 같은 비즈니스 규칙 위반 데이터가 저장될 수 있다.
Technical Solution
- CHECK 제약조건 도입: accounts 테이블에 balance ≥ 0 규칙을 스키마 수준에서 정의하여 모든 INSERT/UPDATE 작업이 이 규칙을 자동으로 검증
- 거부된 쿼리 처리: balance - 2000으로 음수가 될 UPDATE 및 balance = -500의 직접 설정 쿼리는 데이터베이스 오류로 거부되고 실행되지 않음
- 트랜잭션 원자성 보장: BEGIN과 COMMIT 사이의 제약조건 위반 시 트랜잭션 전체가 실패하고 롤백되어 부분 업데이트 방지
- 책임 분리: 데이터베이스는 스키마 제약으로 물리적 무결성 보호, 응용 프로그램은 충분한 잔액 확인 같은 비즈니스 로직 구현
Key Takeaway
데이터베이스 제약조건은 스키마 수준의 마지막 방어선으로 기술적으로 불가능한 상태 진입을 차단하며, 응용 프로그램 로직은 비즈니스 규칙 검증과 사용자 경험 향상에 집중해야 한다.
실천 포인트
금융 거래 시스템에서 balance >= 0 같은 도메인 불변식을 CHECK 제약조건으로 정의하면, 응용 프로그램의 검증 로직 누락이나 직접 데이터베이스 접근 시에도 데이터 무결성이 자동으로 보장되어 일관성 관련 버그를 근본적으로 방지할 수 있다.