-
도메인 정책 레이어로 비즈니스 규칙 산포 방지
문제 역할,시점,필드별 수정 권한이 달라 조건 분기가 UseCase 전반에 산포될 위험.
- Policy 클래스(Vacancy/Building/Snapshot) 로 규칙을 모아 단일 파일 수정으로 변경 범위 한정
- PolicyCtx 타입을 진입 시 1회 구성해 재사용함으로써 반복 DB 조회 제거
- 인프라 의존 없는 순수 함수라 DI 없이 단위 테스트 가능
-
스트리밍 기반 대용량 엑셀 Export로 메모리 리스크 차단
문제 수천 건을 전체 적재 방식으로 Export하면 동시 요청 시 메모리 급증 위험.
- ExcelJS 스트리밍 Writer로 임시 파일에 즉시 기록 후 HTTP 스트림 응답
- 처리 루프에 setImmediate 삽입을 통한 이벤트 루프 블로킹 방지
- 완료/오류/연결 끊김 모두에서 임시 파일 정리로 안전한 생명주기 관리
-
레거시 데이터 정제와 스키마 재설계로 DB 용량 및 조회 성능 동시 개선
문제 신규 서비스에 불필요한 레거시 데이터와 비효율적 스키마(낮은 정규화 수준, 과도한 인덱스, Hot/Cold 데이터 미분리)가 누적되어 DB 용량과 조회 성능이 모두 저하된 상태.
- 신규 서비스 요구사항을 기준으로 불필요한 레거시 데이터를 폐기하고 필요한 데이터만 정제 및 이관, 정규화 수준을 높여 데이터 일관성 확보
- 실제 조회 패턴을 분석해 불필요한 인덱스를 최소화함으로써 쓰기 비용과 저장 공간 절감
- 시계열 데이터를 Hot/Cold 파티션으로 분리해 자주 조회되는 최신 데이터 접근 효율을 높이고 과거 데이터는 별도 관리
- 레거시 대비 DB 용량 65% 이상 절감, 주요 조회 쿼리 평균 응답속도 약 70% 이상 개선 달성
-
시스템 컨텍스트 기반의 의도적 동시성 제어 선택
문제 마감 중 동시 변경 시 불일치 가능하나, 행 단위 락은 관리 복잡도가 큼.
- 사용 패턴(동시 수십 명)을 근거로 단일 Revision 행으로 변경 신호를 관리하도록 의도적 선택
- raw(version + 1) 아토믹 증분으로 다중 인스턴스에서도 충돌 감지
- 선택의 한계(고트래픽 락 경합)를 명시하고 확장 경로까지 검토 후 채택
-
재실행 안전성부터 사후 정합성 검증까지 이관 전 과정의 신뢰성을 직접 책임
문제 일회성 작업이 아닌 회사 핵심 자산(운영 데이터) 이관이었기 때문에, 중간 실패 시 재실행해도 데이터가 중복 및 유실되지 않아야 했고, 이관이 끝난 뒤에도 '정말 빠짐없이, 정확하게 옮겨졌는가'를 스스로 증명할 수 있어야 했음.
- 테이블 이름과 구조가 비슷해도 그 데이터가 '현재 상태(언제든 새로고침 가능)' / '변경 이력(과거분 보존 필수)' / '특정 시점 스냅샷' 중 무엇을 표현하는지에 따라 삭제 범위와 트랜잭션 경계를 다르게 설계 — 일괄 적용이 아닌 데이터 의미 기반의 차별화된 멱등 전략으로 몇 번을 재실행해도 동일한 결과를 보장
- 이관 중 만난 이상 데이터를 '변환 자체가 불가능해 건너뛴 것'과 '변환은 됐지만 값이 비정상적이라 후속 검토가 필요한 것'으로 분리 추적해, 실행 성공 여부와 데이터 품질 이슈를 별개 축으로 관리
- 이관 완료를 '스크립트가 에러 없이 끝났다'가 아니라 '레거시 데이터와 결과가 일치한다'로 정의하고, 별도의 정합성 검증 과정을 통해 테이블별 건수 비교, 동일 기준 정렬 후 행 단위 비교(diff)를 수행 — 코드 리뷰나 로그만으로는 드러나지 않는 누락 및 중복을 직접 잡아내는 이관 검증 체계 구축