회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
AWS 이용 중이라면 최대 700만 원 지원받으세요
국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?
회원가입을 하면 원하는 문장을
저장할 수 있어요!
다음
회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!
확인
국내 IT 기업은 한국을 넘어 세계를 무대로 할 정도로 뛰어난 기술과 아이디어를 자랑합니다. 이들은 기업 블로그를 통해 이러한 정보를 공개하고 있습니다. 요즘IT는 각 기업의 특색 있고 유익한 콘텐츠를 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하고 있을까요?
이번 글에서는 글로벌 알람 앱 ‘알라미’를 서비스하는 딜라이트룸이 안드로이드 앱에 벨소리 기능을 추가하면서 클린 아키텍처를 적용한 과정을 소개합니다.
최근 딜라이트룸에서 제작한 광고 중 좋은 성과를 내고 있는 광고가 있습니다. 바로 알라미 앱의 벨소리 기능을 활용한 광고입니다. 광고 덕분에 벨소리 기능을 개발하면서 배운 클린 아키텍처의 중요성에 대해 다시 생각이나, 타운홀 미팅 시간에 이를 나누는 시간을 가졌습니다.
알라미는 유저들의 다양한 니즈를 충족할 수 있도록 알람 소리를 여러 방법으로 커스텀할 수 있는 기능들을 제공하고 있습니다. 알라미의 벨소리 기능에는 아래처럼 다양한 종류의 벨소리가 있습니다.
저는 최근 안드로이드 알라미 앱에 인플루언서 벨소리 기능을 추가했고, 이 과정에서 클린 아키텍처를 이해하고 적용할 수 있었습니다. 이때의 배움을 예시를 통해 공유해 보고자 합니다.
클린 아키텍처를 쉽게 이해하기 위해 알라미 앱에 있는 벨소리 기능을 공장에 비유하면 아래와 같이 생각해 볼 수 있습니다. 공장에서 제작 레시피에 따라 제품을 생산해 창고에 보관 후 포장하여 고객에게 전달할 수 있습니다.
각 구성요소는 실제 알라미의 벨소리 기능과 매칭하면 아래와 같습니다. 알라미는 서버에서 벨소리 파일을 다운받아 로컬 DB에 저장하고 UI를 통해 유저에게 보여줍니다.
*유즈케이스란? 사용자가 특정 기능을 사용할 수 있도록 시스템(서비스)이 동작하는 방식
여기서 만약 당신이 이 공장의 관리자이며, 제품 제작 레시피를 작성해야 한다면 아래 2가지 방식 중 어떤 레시피가 더 효율적일까요?
두 방식의 차이점은 굵은 글씨에 있습니다. B 방식이 더 세세하게 지시하고 있다는 차이점을 알 수 있습니다. 고르셨나요?
클린 아키텍처에 의하면, 정답은 A입니다.
그 이유는 공장, 창고, 포장지는 언제든지 변경될 가능성이 있기 때문입니다. 경기 인근 창고에서 서울의 창고를 이용하게 되거나, 포장지를 종이봉투에서 박스로 리뉴얼하게 될 수 있습니다.
그런데, 실제 공장이 아닌 기능 개발에서도 이 구성요소마다의 변경 가능성은 똑같이 적용됩니다. 마치 알라미에서 최근 인플루언서 벨소리 기능을 추가하며 서버 위치, 벨소리 저장 위치 등이 바뀌었듯이요.
즉, A 방식의 레시피로는 공장과 창고, 포장지가 변하더라도 변화에 대응할 수 있습니다. A 방식 레시피는 알라미 벨소리, 인플루언서 벨소리 공장에서도 벨소리를 생산할 수 있지만, B 레시피는 오직 알라미 벨소리 공장에서만 벨소리를 생산할 수 있습니다.
여기서 중요한 것은 유즈케이스와 벨소리 기능이라는 제품 자체는 다른 구성요소에 비해 자주 변하지 않는다는 것입니다. 알라미가 벨소리라는 기능을 제공한다는 것은 시간이 지나도 자주 바뀌지 않을 것입니다.
위에서 살펴본 구성요소를 자주 변경되는 것과 자주 변경되지 않는 것으로 나누면 아래와 같습니다.
클린 아키텍처의 핵심은 자주 변경되는 것과 변경되지 않는 것의 경계를 나눠 분리시키자는 것입니다. 이는 변화에 유연한 구조를 만드는 방법입니다.
여기까지 이야기를 통해서 어느 정도 자주 변경되는 것을 잘 분리시켜야겠다는 것에는 공감이 될 것 같습니다. 그리고 잘 분리시키기 위해 클린 아키텍처를 개발에 적용시키면 좋겠습니다.
그런데 처음 클린 아키텍처를 적용하려 할 때, 고민이 생길 수 있습니다. 바로 어떤 부분이 변경되는 부분인지, 변경되지 않는 부분일지 예측하기 어렵다는 것입니다. 알라미에 처음 벨소리 기능이 생길 때부터, 어떤 것이 변경되고 어떤 것이 변경되지 않는 것인지 예측할 수 있었을까요? 이 고민이 생길 때 우리는 이미 유명한 클린 아키텍처 다이어그램을 참고하면 좋습니다.
도표를 간단히 이해하고 넘어가면, 원의 바깥쪽 구성요소로 갈수록 자주 변경되는 구성요소이며, 원의 중앙에 가까워질수록 자주 변경되지 않는 구성요소입니다.
이해를 위해서 공장 예시의 구성요소를 도표와 매치해 보면 아래와 같습니다.
인플루언서 벨소리를 개발할 당시 변경되었던 것과 변경되지 않았던 것이 도표의 내용과 같은 것을 알 수 있습니다. 개발자는 이 구성요소의 경계를 팀의 상황, 비즈니스 요구사항 등 다양한 조건에 따라 잘 구분하여 DI 등의 방법을 활용해 느슨하게 연결해야 합니다.
알라미 안드로이드 프로젝트에서 기존의 벨소리 기능은 개발된 지 시간이 많이 지나있었고, 클린 아키텍처를 지향하지 않는 구조였습니다. 그 당시 저도 클린 아키텍처에 대한 확신이 없는 상태라 처음에는 다른 방향으로 코드 구조 개선을 했습니다. 인플루언서 벨소리 개발 시 위 제품 레시피 B의 예시에 있던 굵은 글씨를 분리해 내기 위해 많은 시간이 필요했습니다. 그래서 인플루언서 벨소리는 기존 기능에서 서버 주소와 음원 파일 저장 위치 등만 변경됨에도 불구하고 한 달가량의 개발 시간이 소요되었습니다.
그에 반해 클린 아키텍처 기반으로 개발되었던 iOS는 단 몇 시간 안에 인플루언서 벨소리를 추가할 수 있었습니다. 그래서 저는 다른 기능 개발보다 특히 벨소리 기능 개발에서 클린 아키텍처의 중요성에 대해 많이 깨달았는데요. 벨소리 개발은 어려웠지만 그만큼 많이 배워 감사한 경험으로 남았습니다.
<원문>
요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.