2023 신입 공채 Android 뉴크루들의 항해 일지 (직무 기술 온보딩 회고)

안녕하세요, 2023 신입 공채를 통해 카카오에 입사한 뉴크루 톡안드로이드 P셀 dante입니다. 지난 7주 동안 진행된 안드로이드(Android) 직무 기술 온보딩에서 어떤 경험을 했는지 공유해 보고자 합니다.

온보딩 소개

기술 온보딩 강의는 오준석 님(John)이 진행해 주셨고, 안드로이드 기술 온보딩은 아래와 같은 일정으로 진행되었습니다.

기술 온보딩 일정

신입들은 온보딩 기간 동안 1~2주 단위로 앱을 만드는 미션을 받게 됩니다.

오전에는 원격으로 만나, 전날 작성한 미션 코드의 코드 리뷰를 진행한 뒤, 안드로이드 강의를 통해 미션 수행에 필요한 지식을 익혔습니다. 이후, 오후 세션에는 신입 크루끼리 페어 프로그래밍을 진행하며 미션을 수행하였습니다.

기술 온보딩 기간 동안 총 4개의 앱을 개발하였습니다. 미션을 수행하면서 안드로이드 기초 내용들을 되짚을 수 있었고, 네트워크 통신, 안드로이드 클린 아키텍처, DI 및 테스트 코드 작성 방법을 학습할 수 있었습니다.

스톱워치 앱

 안드로이드 직무 기술 온보딩의 첫 번째 미션으로 스톱워치 앱을 만들었습니다.

시작과 정지 버튼을 눌러 시간을 잴 수 있으며, 기록 버튼을 눌러 시간을 기록하는 앱입니다.

앱 기능으로 시간을 기록하는 리스트를 구현하기 위해, 레거시한 방법인 ListView에 직접 기록한 시간 데이터를 추가(add)하는 방법부터 RecyclerViewListAdapter를 사용하는 방법까지 자세히 배웠습니다.

안드로이드는 화면 회전 등 화면의 구성이 변경되면, 애플리케이션의 생명 주기에 따라 액티비티의 레이아웃과 내부 변수가 초기화된다는 문제점이 있는데, 이를 해결하기 위해 SavedInstanceState 번들을 사용해, 뷰와 관련된 데이터를 백업 및 복구하거나, 데이터를 ViewModel에 저장하여 생명 주기에 구애받지 않도록 하는 방법을 배울 수 있었습니다.

앱이 완전히 종료된 후 다시 시작했을 때에도, 기록 중이던 시간 기록을 유지하기 위해서, 해당 데이터를 디바이스 로컬 저장소에 백업해야 했습니다. 이를 구현하는 방식에는 2가지 방법이 있는데, 기존 SQLite를 래핑(Wrapping)한 Room을 사용하는 방법과, 내부 파일에 키와 값 형태로 저장하는 SharedPreference 방법이 있었으며, 두 가지 방법을 모두 사용해 보고 관련 내용들을 배울 수 있었습니다.

4개의 미션 중 가장 처음으로 진행했던 미션이었던 만큼 배울 점이 정말 많았습니다. 신입 크루들 모두 페어 프로그래밍을 진행하며, 각자 지금까지 개발하던 방법이 달랐던 부분이 있었지만, 서로의 코드를 확인하고 리뷰하는 과정을 통해 많이 성장할 수 있었습니다.

안드로이드 스톱워치 애플리케이션을 만들면서, 레거시 스타일의 구현 방법부터, 최근에 많이 사용되는 핫한 방법들까지 훑어보면서, 신입 크루들의 안드로이드 개발 스타일을 통일하고 정제할 수 있었던 의미 있는 시간이었습니다.

네트워크 통신

안드로이드 직무 기술 온보딩의 두 번째 미션으로 네트워크 통신을 사용하는 마스크앱을 만들었습니다. 이 애플리케이션에는 기기의 위치를 기준으로 가까운 마스크 판매점 재고 현황을 보여주는 기능을 구현하였습니다.

해당 기능을 구현하기 위해서는, 네트워크 통신을 사용해야 했는데, 먼저 네트워크 통신을 구현하기 위해 애플리케이션에서 위치 권한을 요청하는 법을 학습했습니다. 이후, 구글에서 권장하는 권한 요청 워크플로를 참고하여 애플리케이션의 기능을 구현할 수 있었습니다.

구현 과정에서, 마스크 재고 데이터를 받기 위해 강사님이 제공한 API를 사용해야 했습니다. 이때 안드로이드는 메인 스레드에서 UI를 담당하기 때문에, 데이터를 받는 기능을 메인 스레드에 구현하고, 메인 스레드에서 네트워크와 통신할 경우 ANR이 발생할 수 있는 상황을 고려해야 했습니다. 이에 따라, 데이터 요청 시 비동기처리가 필요한데, 데이터를 안전하게 비동기적으로 받아오기 위해, Retrofit2과 코루틴(Coroutine)을 이용했습니다.

또한, 네트워크 기능 구현에서 응답받은 JSON 문자열을 다루는 법과, 통신 예외 처리에 대해서도 학습하였습니다. JSON을 처리하기 위해, Retrofit2에서 컨버터를 등록하였고, 서버에서 응답받은 JSON 문자열을 저희가 정의한 데이터 클래스에 쉽게 매핑할 수 있었습니다. 또한, 통신 과정에서 발생하기 쉬운, 잘못된 데이터를 응답받는 상황을 가정했는데, 이를 처리하기 위한 맵퍼를 작성하여, 도메인 클래스에 매핑하였습니다. 마찬가지로 통신이 원활하지 않을 때를 가정하고, 이를 처리하기 위해, Kotlin Result Pattern을 적용해 보았습니다. 이처럼, 안드로이드에서 네트워크 기능을 사용해 기능을 구현할 때, 마주할 수 있는 다양한 상황의 예외 처리를 학습하고, 구현해 볼 수 있는 좋은 시간이었습니다.

노트 앱

안드로이드 직무 기술 온보딩의 세 번째 미션으로 노트를 작성, 수정, 삭제할 수 있는 노트앱을 만들었습니다. 애플리케이션 화면의 리스트에 나열된 노트 중 하나를 클릭했을 때, 프래그먼트(화면 단위) 전환을 사용해 노트 화면을 전환해야 합니다. 이때, 안드로이드에서 프래그먼트 전환을 구현하는 기능인 내비게이션 컴포넌트에 대해서 심도 있게 학습을 할 수 있었습니다.

또한, 안드로이드 화면비뿐만 아니라, 다양한 상황의 화면 비율을 대응하기 위해, 너비 한정자를 학습하고 적용해 보았습니다. 다양한 화면들 중에서도 태블릿과 같은 넓은 화면에서의 화면 UI를 구성하는 방법을 중점으로 구현했고, 이 과정을 통해, 안드로이드 애플리케이션을 구현할 때 다양한 화면의 크기를 지원할 수 있도록 구현하는 방법을 알 수 있었습니다.

노트 애플리케이션을 만드는 과정에서, 앱 전체 구성에 클린 아키텍처를 적용하려고 노력하였습니다. 안드로이드에서 클린 아키텍처를 적용한다는 것은, 프로젝트를 Presentation, Domain, Data 계층으로 나누어 결과적으로 비즈니스 로직, 네트워크와 데이터베이스 로직, UI 로직의 의존성을 낮추고 각 레이어 교체를 용이하게 하는 구조로 구현하는 것입니다.

클린 아키텍처를 적용하여 패키지를 분리함

클린 아키텍처에 익숙하지 않아 개인 프로젝트를 진행할 때와 달리 계층 간 데이터 전달을 위한 객체와 코드가 생기는 것에 의문을 갖는 신입 크루도 있었습니다. 하지만 실무에서 개발자가 서로 다른 레이어(UI와 비즈니스 로직)를 개발하는 것이 흔하고, 해당 레이어를 구현하던 담당자도 바뀔 수 있기 때문에 유지보수가 용이한 코드를 작성하는 것이 무엇보다 중요함을 알게 되었습니다. 또 hilt와 같은 의존성 라이브러리를 사용하여, 레이어 간 결합을 느슨하게 구현하는 과정을 배울 수 있었습니다.

if (kakao) 2022

신입 크루들의 대망의 마지막 미션은 if(kakao)dev2022 웹사이트를 애플리케이션으로 구현하는 것이었습니다.

if Kakao에서 진행된 세션 정보를 네트워크로 받아오고, 즐겨찾기 기능을 구현하여 유저가 즐겨찾기 한 세션 정보를 Room에 저장하고, 클릭할 때 내비게이션을 하는 기능을 구현하는 등, 그동안 배웠던 지식들을 전부 종합하여 애플리케이션을 작성해 보며 한 단계 성장한 것을 느낄 수 있었습니다.

구현한 기능 중에는, 웹과 유사하게 우측 상단에 햄버거 버튼을 누르면 나오는 메뉴 버튼도 있었습니다. 이를 구현하기 위해 DrawerLayout을 사용하고 리스트 레이아웃과 리사이클러 뷰가 중첩되었을 때 스크롤이 잘 되도록 NestedScrollView를 사용해 보며, 사용자의 앱 사용 만족도를 높이기 위해 노력했습니다.

또 위에서 언급한 최소 너비 한정자를 애플리케이션에 적용하여, 태블릿 화면으로 애플리케이션을 사용하는 이용자들을 대응해보기도 하였습니다. 이처럼, if Kakao 웹에 구현된 UI를 안드로이드 UI에 적용하며, 많은 것을 배우고, 복습할 수 있었습니다.

마치며

오프라인으로 진행된 온보딩 첫 만남

7주라는 기간이 빠르게 지나갔습니다. 대부분의 과정이 비대면으로 진행되어, 뉴크루들이 다 같이 만날 기회가 적어 아쉬운 점도 있었습니다. 하지만 같이 고민하고 페어 프로그래밍을 하며 생긴 서로 간의 유대와 신뢰는 대면과정 못지않다고 생각합니다. 각자의 부서에 합류한 후에도, 서로가 배운 경험과 개발 관련 정보를 공유하며, 좋은 인연을 이어갔으면 좋겠습니다.

온보딩 여정을 함께한 Jjoo, Noah, Bard, Allen 안드로이드 뉴크루들 모두 앞으로의 성장을 기원합니다. 또 훌륭한 강의를 해주신 오준석 강사님과 온보딩 TF 크루분들, 중간중간 챙겨주신 셀과 파트분들께도 아울러 감사드리며 이 글을 마치도록 하겠습니다.

감사합니다.

카카오톡 공유 보내기 버튼

Latest Posts

제5회 Kakao Tech Meet에 초대합니다!

Kakao Tech Meet #5 트렌드와 경험 및 노하우를 자주, 지속적으로 공유하며 개발자 여러분과 함께 성장을 도모하고 긴밀한 네트워크를 형성하고자 합니다.  다섯 번째

테크밋 다시 달릴 준비!

(TMI: 이 글의 썸네일 이미지는 ChatGPT와 DALL・E로 제작했습니다. 🙂) 안녕하세요, Kakao Tech Meet(이하 테크밋)을 함께 만들어가는 슈크림입니다. 작년 5월에 테크밋을 처음 시작하고,