300만 줄의 코드로 배운 것들

300만 줄의 코드로 배운 것들

+270만, -240만, 290개

이건 내가 처음부터 끝까지 서비스 하나를 만들고 약 4년간 작성해본 코드 양이며, 모듈 숫자이다.

혼자 서비스를 하면서 선택한 아키텍처 덕분에 안정적인 서비스를 해볼 수 있었다. 정승욱님이 발표한 코드 제로 관련에 나온 코드를 기반하여 수정하고 개선한 프로젝트를 사용했다.

최근엔 iOS 개발도 약 10개월 진행하였는데 iOS TCA를 이해하면서 작성한 코드 역시 +46만 줄, -32만 줄 수정하였다.

안드로이드 개발자가 본 iOS TCA 살펴보기

이 글에서는

  • 4년간 서비스를 만들며 다듬어온 실용적인 모듈화 전략
  • 인터페이스 분리 원칙(ISP)을 적용해 빌드 속도를 개선한 경험을 소개
  • 시나리오 기반의 유닛 테스트 방법

Read More

클라이언트 아키텍처에 대한 단상 - '서버'가 진짜 '도메인' 아닐까?

클라이언트 아키텍처에 대한 단상 - '서버'가 진짜 '도메인' 아닐까?

개발에서 아키텍처(Architecture)는 무엇일까? AI는 이렇게 답한다.

소프트웨어 시스템의 기본적인 구조와 구성 요소들 간의 관계, 그리고 이를 통제하는 원칙과 지침. 미래의 변경과 확장에 어떻게 대응할지를 결정하는 청사진(Blueprint).

모두가 동의하겠지만, 미래의 변경과 확장에 유연하게 대응하는 것이 아키텍처의 핵심이다. 더 빠른 개발 속도와 안정성은 덤이다.

그렇다면 오늘날 우리가 클라이언트 개발에 적용하는 아키텍처는 이 목적에 정말 충실할까? 혹시 유행하는 패턴을 ‘좋은 코드’라는 명목 아래 무비판적으로 따르고 있지는 않을까? 이 글에서는 클린 아키텍처의 상징과도 같은 ‘UseCase’의 딜레마를 통해 클라이언트 아키텍처를 좀 더 넓은 시각으로 바라보고자 한다.

이 글에서는

  • 유행처럼 번지는 클라이언트 아키텍처, 특히 UseCase 패턴의 실효성에 대해 의문을 제기한다.
  • 단순히 데이터를 전달하는 역할에 그치는 UseCase의 딜레마를 실제 코드 예시와 함께 살펴본다.
  • 관점을 전환하여, ‘서버’를 중심으로 클라이언트 아키텍처를 바라보는 새로운 시각을 제안한다.
  • 궁극적으로 ‘좋은 아키텍처’란 무엇이며, 비즈니스 가치를 높이는 실용적인 설계는 어떤 것인지 함께 고민해 본다.

Read More

다시 2부 - Composable Architecture - 라우터 소개

다시 2부 - Composable Architecture - 라우터 소개

원래는 Action 시스템을 활용해서 Router를 쓰려고 설계했지만, 필자가 기존에 사용하던 방식 중 하나로 돌아가 거기서부터 다시 설계되었다.

이 라우터는 크게 두 가지 상황에 활용 가능하다.

  • Activity 간 화면 이동
  • Compose Navigation 간 화면 이동

만약 싱글 액티비티(Single Activity) 구조를 쓴다면 Compose Navigation 부분만 적용하면 되니 더 쉽게 사용 가능하다.

여기서는 어떻게 활용되었을까?

  • Activity는 Dagger의 IntoMap을 활용해서 Key/Value 매핑으로 ActivityRoute를 상속받아 구현한 객체를 정의해서 사용한다.
  • Compose Navigation은 NavigationRoute를 상속받아 구현한다.

이 글에서는

  • 새로운 Router의 설계 철학 및 동작 방식을 자세히 알아본다.
  • Activity 및 Compose Navigation에서 Router를 활용하는 구체적인 코드 예시를 살펴본다.

Read More

다시 - Composable Architecture 설계 변경

다시 - Composable Architecture 설계 변경

Composable Architecture에 대한 세 편의 글에 이어 이번 글을 작성하게 되었다. 이번에는 전반적인 설계가 변경되어 사실상 새로운 아키텍처라고 볼 수 있다.

가장 큰 변화는 무엇인가?

  • 싱글턴으로 활용하던 ActionViewModel에 한정하여 사용하도록 변경했다.
  • Router를 새로 추가했으며, Action과 독립적으로 동작하도록 개선했다.

이 글에서는

  • Action 활용법 개선 방안을 알아본다.
  • 이전 설계에서 발생했던 문제점들을 짚어본다.

Read More

3부 - Composable Architecture에서는 Alert/Toast는 어떻게 사용할 수 있는가?

3부 - Composable Architecture에서는 Alert/Toast는 어떻게 사용할 수 있는가?

이 글에서는 Composable Architecture에서 Alert(Dialog)/Toast(Snackbar) 활용법을 소개한다.

기본 형태는 1부/2부에서 소개한 Action을 활용하는 시스템을 적용했다.

이 글은 디자인 시스템이 있을 경우 Dialog/Toast를 공통화시키는 방식을 다루고 있다.

이 글에서는

  • Alert/Toast(Snackbar)를 공통화 시켜 다루는 내용
  • 앞에서 설명한 Action을 설명하지는 않는다.
  • 기본적인 내용을 담지 않고있어 앞선 글을 참고하면 좋다.

Read More