Dooray 소개
Dooray!는 프로젝트 협업을 기반으로 메신저·메일·결제 등 기업 협업 서비스를 제공하는 올인원 툴이다. 발표자는 2019년부터 클린 아키텍처를 적용해 온 모바일 앱 개발 경험을 소개하겠다며, 발표 순서로 기존 문제점·클린 아키텍처 개념·구현·향후 계획을 예고한다.
클린 아키텍처 적용 전 구조는 프레젠테이션 로직과 비즈니스 로직이 뷰모델에 혼합돼 복잡했고, 뷰모델이 데이터 소스의 API 모델을 직접 참조해 서버 이슈로 모델이 바뀌면 로직도 함께 바뀌는 외부 취약성을 안고 있었다. 메일 읽기 화면을 예로 이를 구체적으로 짚는다.
아키텍처의 사전적 의미부터 짚고, 유연하고 견고한 구조를 위한 설계 철학인 클린 아키텍처를 다이어그램으로 설명한다. 중앙의 Entity(도메인 지식), UseCase, Repository·Presenter, 바깥의 데이터 소스·UI까지 각 구성요소의 역할을 정리한다.
클린 아키텍처의 두 원칙을 설명한다. 첫째는 변동성이 낮은 Entity를 안쪽, 높은 UI를 바깥쪽에 두는 계층 분리이고, 둘째는 의존성이 항상 바깥에서 안쪽으로 향해야 한다는 의존성 규칙이다. 구성요소를 프레젠테이션·도메인·데이터 세 레이어로 다시 나눈다.
메일 읽기 화면을 예로 구현 순서를 잡는다. 먼저 메일의 수신자 유형(직원·부서·외부)과 요금제(프리·베이직·비즈니스·엔터프라이즈)의 번역 가능 여부 같은 도메인 지식을 파악하고, 이를 담은 Entity에 도메인 로직까지 포함시켜야 함을 예시로 보여준다.
UseCase는 리포지터리 인터페이스로 Entity를 조회하고 여러 Entity 간 데이터 흐름을 조정하며 비즈니스 로직을 캡슐화한다. Repository는 데이터 소스의 API 모델을 Entity로 변환해 전달하며, 도메인 레이어에 인터페이스를 두어 데이터 레이어와의 의존성 역전을 구현한다.
뷰모델이 UseCase를 참조해 Entity로 뷰 상태를 만들도록 리팩토링하면 비즈니스 로직이 도메인 레이어로 이동해 코드가 단순해진다. 결과적으로 비즈니스 로직 분리로 가독성·재사용성이 오르고, 프레젠테이션 레이어가 데이터 레이어 의존을 벗어나 외부 변화에 견고해졌다고 정리한다.
서비스가 커지며 늘어난 코드를 서비스별·레이어별 모듈화로 관리하고, 캘린더를 제외한 모든 서비스에 클린 아키텍처를 적용한 현황을 공유한다. 순수 라이브러리인 도메인 레이어를 앞세워 2024년 코틀린 멀티플랫폼 도입으로 iOS·안드로이드 코드 공유를 계획한다고 밝힌다.