본문 바로가기

gyu__b

(90)
🔥 Android SDUI 도입기(with. GraphQL, Apollo) 개요 우리 앱의 홈화면이 다채롭게 동적으로 변경되어야 하는 상황에서 SDUI(Server-Driven User Interface) 방식을 도입하게 되었습니다. 이에 따라 궁합이 좋은 Graph QL을 사용하게 되었습니다. 프론트 개발자 입장에서 디자인 요소 등을 변경할 때마다 작업을 해야하고, 사용자 입장에서는 변경된 버전을 보려면 매번 업데이트를 해야 합니다. 이 경우, 두 개의 플랫폼(Android, IOS 기준)에서 작업을 해야하며, 사용자들은 업데이트를 기다려야 합니다. 하지만 SDUI 방식을 사용하면, 앱, 디자인, 백엔드가 프로토콜과 컨벤션만 맞추면 서버의 배포만으로도 Android와 IOS의 업데이트 없이 사용자가 새로운 UI를 경험할 수 있습니다. SDUI와 GraphQL 그럼 Graph ..
💡 UI Layer을 위한 새로운 코딩 컨벤션을 구축했던 이유 개요 UI Model을 도입한 후 제안을 하였고 팀원들과 상의하여 우리의 코딩 컨벤션에 항목을 추가했다. 그것은 Data Layer에서의 Model과 Domain Layer의 Entity는 nullable하게, UI Model에 대해서는 non-null 형태로 관리하자는 것이였고 이에 대한 이유와 관리하기 위해 만든 간단한 확장함수를 소개해보고자 한다. 레이어의 책임과 null 타입 관리에 대한 내 생각 Data Layer의 Model /** data source **/ @GET(ApiVersion.VERSION + "/store/{memberIdx}") suspend fun getStoreProfileInfo(@Path("memberIdx") memberIdx: String): StoreProfileI..
MVC-> 클린아키텍처 + MVVM 리팩토링을 했던 나의 생각 - 2 개요 지난 1편에서는 클린아키텍처에 대한 내 생각과 고민점 그리고 리팩토링 하는 과정을 적어봤었다. 이번에는 MVVM 패턴에 대한 내 생각에 대해서 적어보고자 한다. 레거시였던 MVC MVC는 예전에 아주 많이 사용하였던 전통적인 Android의 디자인 패턴이다. Model-View-Controller로 구성되어 있으며 각각은 아래와 같은 역할을 한다. Model 도메인 논리(실제 비즈니스 규칙)를 처리 데이터베이스 및 네트워크 계층과의 통신 담당 View 화면에 보이는 컴포넌트를 담고 있는 UI Layer Model에 저장된 데이터의 시작화 사용자와의 상호 작용 제공 일반적으로 XML이 해당 역할을 수행(컴포즈 이전) Controller 뷰와 모델간의 관계를 설정 애플리케이션 핵심 로직 포함 사용자의 ..
MVC-> 클린아키텍처 + MVVM 리팩토링을 했던 나의 생각 - 1 개요 프로젝트 중 MVC로 되어있던 레거시 코드들을 클린아키텍처와 MVVM 디자인 패턴을 도입하여 리팩토링 했었던 것에 대해 나의 의도와 생각을 말해보고자 한다.(클린 아키텍처에 대해서는 다소 간략하게 소개를 하고 리팩토링 과정에 대해 포커싱을 둘 것이다.) 이번 편에서는 클린아키텍처로의 리팩토링에 대한 나의 생각을 적을 것이고 이후에 2편에서 MVVM에 대한 생각도 적어볼 예정이다. 클린아키텍처에 대하여. . . 안드로이드 진영에서 이제는 정석이 되었다고 해도 무방한 클린아키텍처에 대해 말해보고자 한다. 아키텍처란? 아키텍처는 소프트웨어의 구성 요소들의 유기적 관계를 표현하고 요구사항을 해결하려는 계획 과정등의 원칙을 말한다. 안드로이드의 정책이 바뀌고, 요구사항이 변경되어 지속적인 유지보수가 필요한 ..
1년동안 스프린트 18개를 완수한 뒤의 내 심정은? 🎉🤔 (feat.OKR) 프롤로그 1년동안 쉼없이 달려온 후 뒤를 돌아보니 정말 많은 것들을 해온 나를 볼 수 있었다. 2023년의 마지막 스프린트인 Sprint 18을 끝낸 뒤 나름의 뿌듯함과 약간의 아쉬움 등 많은 감정을 느끼게 되었다. 그런 김에 우리가 왜 애자일 방식을 도입했고 어떤 식으로 진행해왔는지, 그 과정에서는 아쉬움들이 있었는지를 말해보고자 한다. 우리가 애자일 방식을 도입한 이유 기존의 진행해오던 중고거래 서비스에서 중고 패션에 집중하고자 리브랜딩을 거치고 OKR이라는 방식도 도입을 하기로 했다. OKR에(Objectives and Key Results) 대해 간단하게 설명하자면 조직의 목표와 그 목표를 달성하는 데 필요한 단계의 역할을 하는 결과물을 의미한다. 목표는 달성하고자 하는 대상이고, 핵심 결과는 목..
중첩 RecyclerView에서 상태 변화에 따른 스크롤 유지 개요 중첩 구조의 RecyclerView를 개선하다 생겼던 이슈 및 해결법에 대해 설명해보고자 한다. 스크롤 유지에 대한 내용만을 보려면 이 글의 아래쪽으로 내려가면 된다. 여기서 말하는 중첩 구조의 RecyclerView란 위의 스크린샷처럼 부모 RecyclerView(빨간색 영역)와 자식 RecyclerView(파란색 영역)로 중첩된 구조를 의미한다. 부모 RecyclerView: 세로 스크롤 자식 RecyclerView: 가로 스크롤 기존 코드는 찜 이벤트 등 인터렉션이 발생 하였을 때 UI 업데이트를 포지션 값을 통해 notifyItemChanged로 상태를 업데이트 하였다. 그래서 스크롤 유지가 되지 않는 등과 같은 별 문제는 없었지만, 이런식으로 할 시 단점이 있기 때문에 개선하려고 리팩토링을..
RecyclerView Adapter에서의 이벤트 처리 방식 개선 개요 컴포즈를 도입하지 않은 상태에서 리스트형 UI를 개발하다보면 RecyclerView를 사용하게 됩니다. 리스트 UI를 업데이트할 때는 Adapter를 통해 요청하고, Adapter 내의 각 항목에서 이벤트가 발생하면 ViewHolder - Adapter - Activity/Fragment - ViewModel 순으로 전달하는 것이 일반적인 방법이죠. 이 때 클릭 이벤트를 처리하는 과정에서 문제가 생길 수 있습니다. 저희 팀에서는 기존에 클릭 이벤트를 처리할 때 리스너를 전달하여 처리하거나, 람다를 전달하여 사용해 왔습니다. 그러나 문제점이 존재했습니다. 문제점 with 코드 class ItemAdapter( followingClickListener: FollowingClickListener, wis..
APK -> App Bundle 적용기 개요 우리팀에서는 앱을 apk로 제공해왔지만, 구글의 정책에 따라 AppBundle로 변경하게 되었다. 다소 늦은 감이 있지만 그래도 구글 정책에 의해 플레이스토어에서 삭제되는 것은 막았다.. 사실 그전부터 AppBundle 방식으로 변경해야 한다는 생각은 모두가 갖고 있었지만 다들 업무 과부하로 인해 신경을 못쓰고 있었다. 그래서 날을 잡고 AppBundle 방식으로 변경했던 이야기를 조금 해보고자 한다. AppBundle이란? App Bundle은 여러 개의 분할된 apk가 각 기기에 따라 혹은 필요에 따라 구성되어 하나의 앱으로 동작을 한다고 보면 된다. App Bundle 이점 APK: 74MB → App Bundle: 68MB = 약 13% 감소 (기기 내 설치된 앱 기준) 리소스 분할로 인한 ..