활성 계좌 단일 선택 강제 방식 결정
상태
승인
후보군
| 방안 | 설명 |
|---|---|
| 애플리케이션 레벨 + 단일 트랜잭션 | accounts.selected TINYINT(1) 플래그. 선택 변경 시 단일 트랜잭션에서 기존 selected=0, 신규 selected=1 처리 |
| DB partial unique index | selected=1 행에 partial unique index를 걸어 DB 레벨에서 강제 |
| 별도 selected_account 테이블 | 선택 계좌를 별도 테이블로 관리 |
결정
accounts.selected TINYINT(1) 플래그로 선택 상태를 관리한다. 선택 변경은 단일 트랜잭션에서 기존 selected=0, 신규 selected=1로 처리한다. Account.select() / Account.deselect() Entity 메서드로 캡슐화한다.
결정 이유
- 주문·보유종목 조회에 계좌 컨텍스트가 필요하므로 활성 계좌는 반드시 1개여야 한다.
- 여러 계좌를 동시에 선택하면 의도치 않은 계좌로 주문이 접수될 수 있다.
- Entity 메서드로 캡슐화해 비즈니스 규칙이 한 곳에 정의된다.
검토 대안
| 방안 | 기각 이유 |
|---|---|
| DB partial unique index | MySQL 버전별 지원 범위 확인 필요. 현재 단계에서 애플리케이션 레벨로 충분 |
| 별도 selected_account 테이블 | 스키마 복잡도 증가 대비 이점 없음 |
트레이드 오프
- 득: 항상 0개 또는 1개의 선택 계좌 보장. Entity 메서드로 전이 규칙 캡슐화. 구현 단순.
- 실: DB 레벨 unique 제약 없이 애플리케이션 + 트랜잭션으로만 강제. 향후 DB partial index 추가로 보강 가능.