Logo
Droid Lab by Bonny

클린 아키텍쳐를 지향해야하는 이유

2024년 1월

최근 인플루언서 벨소리 기능을 개발하며 클린 아키텍쳐의 중요성에 대해 배워 이를 글로 남겨놓습니다.

예시로 이해하는 클린 아키텍쳐

클린 아키텍쳐를 쉽게 이해하기 위해 벨소리 기능을 공장에 비유하면 아래와 같이 생각해 볼 수 있습니다. 공장에서 제작 레시피에 따라 제품을 생산해 창고에 보관 후 포장하여 고객에게 전달할 수 있습니다.

clean architecture1

각 구성요소는 실제 제품의 벨소리 기능과 매칭하면 아래와 같습니다. 서버에서 벨소리 파일을 다운받아 로컬 DB에 저장하고 UI를 통해 유저에게 보여줍니다.

clean architecture2

만약 당신이 공장의 관리자라면?

여기서 만약 당신이 이 공장의 관리자이며, 제품 제작 레시피를 작성해야 한다면 아래 2가지 방식 중 어떤 레시피가 더 효율적일까요?

clean architecture3

두 방식의 차이점은 굵은 글씨에 있습니다. B 방식이 더 세세하게 지시하고 있다는 차이점을 알 수 있습니다.

고르셨나요?

clean architecture4

클린 아키텍쳐에 의하면, 정답은 A 입니다.

clean architecture5

왜 A가 더 좋을까요?

그 이유는 공장, 창고, 포장지는 언제든지 변경될 가능성이 있기 때문입니다. 경기 인근 창고에서 서울의 창고를 이용하게 되거나, 포장지를 종이 봉투에서 박스로 리뉴얼하게 될 수 있습니다.

그런데, 실제 공장이 아닌 기능 개발에서도 이 구성요소 마다의 변경 가능성은 비슷하게 적용됩니다. 기존에 제공하던 벨소리 기능이 확장되어 서버 위치, 벨소리 저장 위치 등이 바뀌는 케이스들이 생길 수 있습니다.

clean architecture6

즉, A 방식의 레시피로는 공장과 창고, 포장지가 변하더라도 변화에 대응할 수 있습니다. A 방식 레시피는 서울 벨소리, 제주 벨소리 공장에서도 벨소리를 생산할 수 있지만, B 레시피는 오직 서울 벨소리 공장에서만 벨소리를 생산할 수 있습니다.

여기서 중요한 것은 유즈케이스와 벨소리 기능 자체는 다른 구성요소에 비해 자주 변하지 않는다는 것입니다. 제품이 벨소리라는 기능을 제공한다는 것은 시간이 지나도 자주 바뀌지 않을 것입니다.

클린 아키텍쳐로 돌아오기

위에서 살펴본 구성요소를 자주 변경되는 것과 자주 변경되지 않는 것으로 나누면 아래와 같습니다.

clean architecture7

클린 아키텍쳐의 핵심은 자주 변경되는 것과 변경되지 않는 것의 경계를 나눠 분리시키자는 것입니다. 이는 변화에 유연한 구조를 만드는 방법입니다.


여기까지 이야기를 통해서 어느 정도 자주 변경되는 것을 잘 분리시켜야겠다는 것에는 공감이 될 것 같습니다. 잘 분리시키기 위해 클린 아키텍쳐를 개발에 적용시키면 좋겠네요!

그런데 처음 클린 아키텍쳐를 적용하려 할 때, 고민이 생길 수 있습니다. 바로 어떤 부분이 변경되는 부분인지, 변경되지 않는 부분일지 예측하기 어렵다는 것입니다. 제품에 처음 벨소리 기능이 생길 때 부터, 어떤 것이 변경되고 어떤 것이 변경되지 않는 것인지 예측할 수 있었을까요? 이 고민이 생길 때 우리는 이미 유명한 클린 아키텍쳐 다이어그램을 참고하면 좋습니다.

clean architecture8

도표를 간단히만 이해하고 넘어가자면, 원의 바깥 쪽 구성요소로 갈수록 자주 변경되는 구성요소이며, 원의 중앙에 가까워질수록 자주 변경되지 않는 구성요소 입니다.

이해를 위해서 공장 예시의 구성요소를 도표와 매치해보면 아래와 같습니다.

clean architecture9

벨소리를 개발할 당시 변경되었던 것과 변경되지 않았던 것이 도표의 내용과 같은 것을 알 수 있습니다. 개발자는 이 구성요소들의 경계를 팀의 상황, 비즈니스 요구사항 등 다양한 조건에 따라 잘 구분하여 DI 등의 방법을 활용해 느슨하게 연결하여 합니다.

벨소리 기능 개발 경험이 특별했던 이유

기존 프로젝트에서 벨소리 기능은 개발된 지 시간이 많이 지나있었고, 클린 아키텍쳐를 지향하지 않는 구조였습니다. 그 당시 저도 클린 아키에 대한 확신이 없는 상태라 처음에는 다른 방향으로 코드 구조 개선을 했었습니다. 인플루언서 벨소리 개발시 위 제품 레시피 B의 예시에 있던 굵은 글씨를 분리해내기 위해 많은 시간이 필요했습니다. 그래서 인플루언서 벨소리는 기존 기능에서 서버 주소와, 음원 파일 저장 위치 등만 변경됨에도 불구하고 한 달 가량의 개발 시간이 소요되었습니다.

그에 반해 클린 아키텍쳐 기반으로 개발되었던 iOS는 단 몇 시간안에 인플루언서 벨소리를 추가할 수 있었습니다. 때문에 다른 기능 개발보다 특히 벨소리 기능 개발에서 클린 아키텍쳐의 중요성에 대해 많이 깨달았습니다.

추천
MVC, MVP, MVVM, MVI 아키텍쳐 안드로이드 코드로 알아보기 - 1
MVC, MVP, MVVM, MVI 아키텍쳐 안드로이드 코드로 알아보기 - 1
2023년 11월
Compose Side Effect에서 내가 잘 못 이해한 것들 🙅‍♀️
Compose Side Effect에서 내가 잘 못 이해한 것들 🙅‍♀️
2023년 4월
안드로이드에서 graphql 시작하기🛫
안드로이드에서 graphql 시작하기🛫
2023년 2월
Android에서 Open API Generator 사용해보기 ⚙️
Android에서 Open API Generator 사용해보기 ⚙️
2022년 12월
목록으로 돌아가기
Loading script...
Designed by Tony / Written by Bonny