Skip to content

A1: dong_code 8자리 application layer 검증 강화 (DB 무영향)#197

Merged
bat1120 merged 1 commit into
devfrom
IM3-dong-code-validation
May 5, 2026
Merged

A1: dong_code 8자리 application layer 검증 강화 (DB 무영향)#197
bat1120 merged 1 commit into
devfrom
IM3-dong-code-validation

Conversation

@bat1120

@bat1120 bat1120 commented May 5, 2026

Copy link
Copy Markdown
Contributor

Summary

DB 컬럼 길이 통일 (E1) 은 다운타임 + 팀 합의 필요로 별 PR 보류. 대신 application layer 검증 강화로 silent drift 1단계 차단.

배경

행정동 dong_code 컬럼 정의: String(8/10/15/text) 혼재 (28개 테이블 — DB 실측). 실 데이터는 모두 8자리. 단 새 ETL/사용자가 10자리 (법정동) 입력 시 일부 컬럼 통과 → silent drift.

Fix

A. services/dong_resolver.pyvalidate_dong_code() helper

def validate_dong_code(code, *, strict=True) -> str | None:
    """행정동 8자리 숫자 검증."""
  • 8자리 숫자 → 통과 (trim)
  • 10자리 (법정동) / non-digit → ValueError (strict) / None (non-strict)
  • None / "" → None graceful

B. schemas/simulation_input.py — Pydantic validator

target_district / target_districts 입력 시:

  • 숫자 입력 → 8자리 강제 (10자리 거부)
  • 한글 동명 → 통과 (dong_resolver 후속 매핑)
  • list 도 검증

검증

시나리오 결과
validate("11440660") ✓ 8자 통과
validate(" 11440660 ") ✓ trim 통과
validate("1144066000") (10자) ✓ ValueError
validate("abc") ✓ ValueError
validate("1144066000", strict=False) ✓ None + warning
SimulationInput target_district='서교동' ✓ 한글 통과
target_district='11440660' ✓ 8자 통과
target_district='1144066000' ValidationError
target_districts=['서교동','11440690','망원동'] ✓ list 통과
target_districts=['1144066000'] ✓ list 거부

DB 변경

없음. alembic 마이그레이션 0, ALTER COLUMN 0.

보류 (별 PR)

  • E1 dong_code String(8) DB 컬럼 통일 — alembic ALTER COLUMN + ORM 일괄 변경. 다운타임 + 팀 합의 + 다른 팀원 작업 영향 → 별 PR IM3-dong-code-string-unify 거리.

🤖 Generated with Claude Code

DB 컬럼 길이 통일 (E1) 은 ALTER COLUMN 다운타임 위험으로 별 PR 보류 — 대신
application layer 입력 검증 강화로 silent inconsistency 차단.

위험:
- 행정동 dong_code 컬럼 정의 String(8/10/15/text) 혼재
- 실 데이터는 모두 8자리 (현재 검증됨)
- 단 새 ETL/사용자가 10자리 (법정동) 입력 시 일부 컬럼 통과 → silent drift

Fix (application layer, DB 무영향):

A. services/dong_resolver.py: validate_dong_code(code, strict=True) helper 신설
   - 8자리 숫자 검증 (행정동 형식)
   - strict=True (default): 형식 위반 ValueError
   - strict=False: None 반환 + warning 로그 (silent skip)
   - trim 처리 + None/빈 문자 graceful

B. schemas/simulation_input.py:
   - target_district / target_districts 입력 시 dong_code 형식 검증
   - 숫자 입력 (dong_code 직접 입력 케이스): 8자리 강제 → 10자리 거부
   - 한글 동명 입력: 통과 (dong_resolver 후속 매핑)
   - list 도 동일 검증 적용

검증:
- validate_dong_code: 8자/trim 통과, 10자/non-digit 거부
- SimulationInput: 한글 통과, 8자 통과, 10자 ValidationError 거부
- list 입력 검증

DB 변경: 0 (alembic 마이그레이션 없음, ALTER COLUMN 0)

별 PR 권장 (보류):
- E1 dong_code String(8) DB 컬럼 통일 — 다운타임 + 팀 합의 필요
  (대신 application 측 검증으로 미래 silent drift 1단계 차단)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@bat1120 bat1120 merged commit eb3e800 into dev May 5, 2026
@bat1120 bat1120 deleted the IM3-dong-code-validation branch May 5, 2026 03:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant