pile·
모바일·CJ온스타일CJ온스타일·

Android 온스타일 레거시 코드에 클린아키텍처 도입기

CJ온스타일 Android 개발자가 홈 탭 개편 프로젝트에서 레거시 코드에 클린아키텍처를 도입하면서 Mapper 패턴을 핵심 해결책으로 활용한 경험을 다룬다. 다양한 상품 유형 파싱 로직 분리, 목 데이터 테스트 환경, 디버깅 효율화까지 구체적 사례를 공유한다.

핵심 포인트
  • 상품 유형별 파싱 로직을 Adapter/Fragment에서 분리해 타입별 Mapper 클래스로 캡슐화
  • 타입별 Mapper(ItemTypeAMapper, ItemTypeBMapper 등) 구조로 프레젠테이션·도메인 레이어 분리 명확화
  • Mapper 구조가 특정 상품 유형을 선택적으로 주석 처리하거나 디버그 버전으로 교체 가능한 목 데이터 환경 제공
  • 기존 코드와의 호환성은 상속 기반 오버라이드로 유지하면서 신기능에만 새 패턴 적용
  • 특정 상품 유형만 토글해 집중 테스트 가능, 팀 개발 속도 향상
상세 정리
  • 홈 탭 개편 시 다양한 상품 유형이 각기 다른 파싱 로직을 필요로 해 Adapter 코드가 복잡해지는 문제
  • 클린아키텍처 도입 핵심: 데이터 변환(Mapping) 책임을 비즈니스 로직에서 분리
  • ItemTypeAMapper, ItemTypeBMapper 등 타입별 Mapper 클래스가 각 상품 유형의 파싱을 단독 책임
  • 목 데이터 환경: 특정 Mapper를 주석 처리하거나 디버그 버전으로 교체해 JSON 파일 전체를 수정하지 않고 부분 테스트 가능
  • 기존 레거시 코드는 삭제하지 않고 상속으로 유지하면서 신규 개편 영역에만 새 패턴 적용해 리스크 최소화
  • Mapper 패턴 도입 후 특정 상품 유형 버그 재현 시 해당 Mapper만 격리해 빠른 디버깅 가능
  • 레거시 코드베이스에서 클린아키텍처를 전면 재작성 없이 점진적으로 도입하는 실용적 접근 제시
왜 읽나레거시 Android 코드에 클린아키텍처를 한 번에 재작성하지 않고 Mapper 패턴 중심으로 점진적으로 도입하려는 Android 개발자에게 실용적 시작점을 제공한다.
CJ온스타일
CJ온스타일 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 모바일·당근당근 테크블로그·

    웹뷰 다음의 레일을 깔다: 당근이 Lynx를 선택한 이유

    당근 프론트엔드코어팀이 WebView 기반 화면의 첫 프레임 렌더링 문제를 해결하기 위해 Lynx를 도입한 기록이다. 레퍼런스가 거의 없는 기술을 코드베이스 직접 분석으로 검증한 뒤 프로덕션에 적용했고, 1.9백만 사용자 A/B에서 Android 18%, iOS 37%의 첫 프레임 단축을 달성했다.

    요약 이어보기
    #cross-platform#webview#mobile-performance+2
  2. 모바일·토스 SLASH토스 SLASH·

    토스의 디바이스 팜 만들기

    토스가 각 팀이 각자 운영하던 작은 디바이스 팜을 하나의 중앙 플랫폼 '네뷸라(Nebula)'로 통합한 과정을 다룬다. Appium 대신 자체 드라이버를 개발해 클릭 13.5배, 텍스트 입력 10배의 성능을 달성했고, Android와 iOS 미러링도 직접 내재화해 실기기 원격 조작과 화면 실시간 공유를 동시에 가능하게 만들었다. 현재 100대를 넘어 수백 대를 향해 24시간 가동 중이다.

    요약 이어보기
    #android#ios#appium+2