피드로 돌아가기
Dev.toDatabase
원문 읽기
PostgreSQL의 CHECK 제약조건으로 계좌 잔액 음수화를 원천 차단하는 데이터 무결성 구현
Consistency
AI 요약
Context
SQL 데이터베이스에서 데이터의 유효성을 보장해야 할 필요가 있다. 계좌 잔액처럼 특정 조건을 만족해야 하는 컬럼의 경우, 유효하지 않은 상태(음수 값)로 변경되는 것을 방지해야 한다.
Technical Solution
- 계좌 테이블 설계: id(기본키), name(텍스트), balance(정수), last_updated(타임스탬프 기본값) 네 개 컬럼 정의
- CHECK 제약조건 적용: balance >= 0 조건을 테이블 생성 시점에 선언하여 음수 값 입력 원천 차단
- 제약조건 위반 감지: UPDATE 쿼리로 잔액(1000)보다 큰 금액(1200)을 차감하려 시도할 때 PostgreSQL이 제약조건 검증을 수행하고 에러 발생
Key Takeaway
PostgreSQL의 CHECK 제약조건은 애플리케이션 로직에 의존하지 않고 데이터베이스 수준에서 비즈니스 규칙을 강제한다. 이를 통해 어떤 경로의 쿼리든 유효하지 않은 데이터 상태로 변경되는 것을 차단할 수 있다.
실천 포인트
금융, 결제, 재고 관리 등 음수가 허용되지 않는 도메인에서 CHECK 제약조건을 사용하면 애플리케이션 코드 검증 없이도 데이터베이스 자체가 부정확한 상태 변경을 거부한다.