T
TechInsights
목록으로
BackEnd•2026. 01. 15.

코드 품질 개선 기법 29편: 고르디우스 변수

라인
라인 Engineering Team
코드 품질 개선 기법 29편: 고르디우스 변수

핵심요약

원문 보기

데이터 동기화 시 복잡한 ID 의존성 문제를 해결하기 위해, 이상적인 중간 데이터 구조를 정의하고 이를 바탕으로 함수 설계를 역으로 진행하여 코드의 명확성과 효율성을 개선하는 방법에 대해 설명합니다.

고르디우스 변수: 복잡한 데이터 의존성 해결

문제점: 복잡한 데이터 흐름 및 의존성

  • FooSynchronizer 클래스는 로컬과 원격의 FooData를 동기화합니다.
  • synchronizeWithRemoteEntries 함수는 ID 목록 비교를 통해 추가, 업데이트, 삭제를 결정합니다.
  • List.associateBy와 subtract 함수를 사용하여 ID를 기반으로 데이터를 처리하지만, 중간 데이터 구조가 명확하지 않아 이해하기 어렵습니다.
  • ID 목록을 얻기 위해 remoteEntries 및 localEntries를 여러 번 순회하며, 이는 코드의 가독성과 유지보수성을 저해합니다.
  • localEntryMap에 대한 의존성은 런타임 에러를 발생시킬 수 있으며, 업데이트 및 삭제 로직은 추가 로직과 일관성이 부족합니다.

해결 방안: 이상적인 중간 데이터 구조 설계

  • 목표: 데이터 추가, 업데이트, 삭제를 명확히 구분하는 중간 데이터 구조를 생성합니다.
  • 핵심 아이디어: createdEntries, updatedEntries, deletedEntries라는 세 쌍의 데이터를 생성하여 데이터 흐름을 단순화합니다.
  • 구현 단계:
    • 로컬 및 원격의 모든 ID를 포함하는 allEntryIds 집합을 생성합니다.
    • 각 ID에 대해 Pair<FooData?, FooData?> 형태의 데이터 쌍을 생성합니다.
    • partitionByNullity 함수를 사용하여 이 쌍들을 createdEntries, updatedEntries, deletedEntries로 분리합니다.

개선된 구현

  • remoteEntryMap과 localEntryMap을 한 번씩만 생성하여 ID 기반 데이터 접근 효율성을 높입니다.
  • partitionByNullity 함수를 활용하여 createdEntries, updatedEntries, deletedEntries를 명확하게 분리합니다.
  • 각 데이터 쌍에 대해 추가, 업데이트, 삭제 작업을 각각 수행하여 함수의 의도를 명확히 하고 코드 복잡성을 줄입니다.
  • forEach 루프를 사용하여 각 작업(생성, 업데이트, 삭제)을 명확하게 분리하여 가독성을 높입니다.

결론

복잡하게 얽힌 데이터 의존성을 해결하기 위해 이상적인 중간 데이터 구조를 설계하고, 이를 바탕으로 함수를 역으로 구성하는 접근 방식은 코드의 명확성, 효율성, 유지보수성을 크게 향상시킵니다.

#BackEnd
라인
라인

라인 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기