피드로 돌아가기
Dev.toBackend
원문 읽기
Compile-time 타입 강제로 런타임 데이터 오류 원천 차단
Domain Primitives in Go: One Type Per Real-World Concept
AI 요약
Context
기본 타입(string, float64)을 범용적으로 사용하는 Primitive Obsession으로 인한 데이터 오염 발생. 인자 순서 바뀜이나 중복 검증 로직의 분산으로 인해 런타임 버그 발생 가능성이 높은 구조적 한계 존재.
Technical Solution
- 개별 도메인 개념을 독립적인 Named Type으로 정의하여 타입 수준의 격리 구현
- Struct 내부 필드를 Unexported로 설정하여 외부에서 임의의 값 할당을 차단하는 캡슐화 적용
- 유효성 검증 로직을 포함한 Constructor를 유일한 생성 경로로 강제하여 도메인 불변성(Invariants) 확보
- 타입 전용 Method를 구현하여 비즈니스 로직을 데이터와 결합하고 중복 검증 코드 제거
- Compile-time Type Checking을 통해 서로 다른 도메인 ID(UserID, OrderID) 간의 교차 사용을 원천 차단
실천 포인트
- 동일 개념에 대한 유효성 검사(`if x == ""`)가 2회 이상 반복되는지 확인 - 서로 다른 의미의 변수가 동일한 기본 타입(string, int)을 공유하여 Swap 위험이 있는지 검토 - 특정 값에 대해 여러 파일에서 정규식이나 Split 함수를 반복 호출하는지 체크 - 도메인 레이어의 객체가 스스로의 유효성을 증명하는 Constructor 구조인지 검증