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

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

개발에서 아키텍처(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

2부 - Composable Architecture는 만들었는데 문제가 있었네? 개선해보자.

2부 - Composable Architecture는 만들었는데 문제가 있었네? 개선해보자.

이전 글에서 Composable Architecutre를 소개하는 내용을 담아보았는데, 몇 가지 문제점을 발견하여 이를 개선한 내용을 다시 정리하는 글이다.

크게 2가지 문제점을 확인하였다.

  • ViewModel 내 Reducer 처리 후 자동 next
  • Action 스트림 처리를 위한 싱글턴 활용 시 Lifecycle 문제

이 2가지 문제점을 해결하기 위해 코드를 어떻게 수정했는지, 그리고 더 나은 방법은 없을지 고민한 과정을 정리해본다.

이 글에서는

  • 기존 아키텍처의 구조적 문제점을 파악한다.
  • 문제 해결 과정과 더 나은 구조에 대한 고민을 공유한다.
  • 기본적인 내용을 담지 않고있어 앞선 글을 참고하면 좋다.

Read More