안드로이드의 테스트~빌드~배포 사이클

JiYoung Kim
Oct 26 · 8 min read

원티드 앱이 만들어지는 과정

원티드랩에 앱팀 안드로이드 소속으로 들어온지 7개월 된 개발자 김지영이라고 합니다🙂 합류한 이후로 3~4개의 프로젝트를 수행해왔는데요. 원티드 앱이 “어떻게 만들어지고 어떤 배포 과정을 거치는지”에 대한 질문을 여러번 받았었고, 하나의 글로 정리해보면 좋을 것 같아서 작성하게 되었습니다.

새로운 피쳐 개발

앱에 새로운 기능을 추가하게 되었습니다. 원티드는 유저들의 구인 구직활동을 도울 뿐만 아니라, 개인의 커리어 성장을 위한 기고 컨텐츠를 제공하고자 합니다. 그래서 앱에서 ‘토픽’이라는 컨텐츠를 볼 수 있도록 리스트 페이지를 새로 추가하기로 하였습니다.

“이런거 만들어 주세요.”

테스트 작성

기획서를 기반으로 요구사항을 정리하면서 테스트 케이스를 정의합니다. (현재 원티드는 구글에서 권장하고 있는 앱 아키텍처 가이드라인(with AAC)을 따르고 있습니다. 뷰와 비즈니스 로직을 분리하여 테스트 작성이 용이하도록 하기 위해 차용하였으며, 의존성 주입을 위한 koin 라이브러리를 사용하고 있습니다.) 가장 작은 단위의 Unit Test를 작성하여 뷰모델 클래스를 기준으로 테스트 커버리지가 100%에 최대한 수렴하는 것을 목표로 작성해봅니다.

현실과 이상의 거리, 29%

Unit Test를 작성하게 되면 해당 로직은 무엇을 위한 로직인지 알아보기 쉬워지고, 하나의 메소드는 하나의 기능만을 위해 만들어지게 되는 장점이 있습니다. 나중에 요구사항이 변경되었을 때 관련된 해당 메소드만 수정하면 되니 유지보수에도 용이합니다.

테스트 코드를 작성할 때에는 Given~When~Then 패턴을 기준으로 합니다.

어떤 특정 행동이 일어나기 위한 조건과 그것의 예상되는 결과를 명시하므로서, 코드의 의도를 파악하기 쉬워지고 불필요한 코드 작성을 줄이게 됩니다. 개인적인 경험으로는 기능 개발 전에 유닛 테스트를 먼저 작성하면 기획서를 보다 꼼꼼하게 살펴보고 요구사항을 명확하게 이해한 상태로 개발을 할 수 있어서 미리 실수를 방지하게 된다는 장점도 있었습니다.

기능 개발

Unit Test를 기반으로 뷰모델 클래스부터 개발을 하기 시작합니다. 비즈니스 로직 선개발이 이루어지고나면 UI 개발을 진행합니다. 개발 도중에 테스트를 작성할 때는 미처 생각하지 못했던 로직이 생겨나기도 합니다. 이럴 경우에는 테스트 코드를 추가로 작성, 수정하는 작업을 함께 진행합니다. 테스트 코드를 작성하는 것은 어쩌면 당연하게도 테스트 없이 개발하는 시간보다 1.5~2배 이상의 시간 투자가 필요한 작업입니다. 하지만 서비스를 지속적으로 안정적이게 운영해야 하고 유지 보수하는 것도 우리 개발자들의 몫이기에, 미래에 코드 수정을 하고 있을 나(또는 누군가)를 위해 이 정도의 시간 투자는 필요하다고 생각합니다.

미래의 나 화이팅…

PR

기능 개발이 완료되면 코드 리뷰를 위해 PR을 생성합니다. 현재 원티드의 안드로이드 개발 인원은 총 5명이고 코드관리는 git을 통해서 하는데, 브랜치 전략은 git-flow에서 develop 브랜치는 과감하게 제외한 형태로 진행하고 있습니다. 모든 작업 브랜치는 release를 기준으로 머지되고 생성되기 때문에 develop 브랜치의 필요성을 느끼지 못해서 사용하기 않기로 하였고, 대신에 각 작업자들은 feature브랜치를 좀더 활발히 활용하는 방식으로 작업을 진행합니다. (feature브랜치는 Jira 작업 티켓과 1:1로 생성합니다.) feature/hotfix → release → master 순으로 코드 반영이 이루어지며, 보통 feature → release브랜치로 merge를 시도할 때 PR을 생성하게 됩니다.

아무튼, PR을 생성하면 동시에 gitAction이 자동으로 발동하여 유닛 테스트를 run합니다. 테스트 결과가 success 되고 두 명 이상의 리뷰어에게 approve를 받으면 release브랜치로 작업분이 반영됩니다.

✅test 통과!
테스트가 돌기 시작하면 평균 6~7분 정도의 시간이 소요된다

빌드&배포

이제 모든 기능이 개발 완료되었고, QA를 진행하기 위한 빌드를 해야합니다. 원티드 안드로이드 앱은 크게 네가지 버전으로 빌드할 수 있도록 설계되어있습니다. dev / nextweek / wwwtest / production

테스트를 위한 앱 빌드와 배포는 fastlane의 도움을 받고 있습니다. 앱 빌드와 배포하는 과정은 상당히 귀찮고 번거로운 작업들을 동반하는데, 빌드하기 전에 클라이언트가 바라보고 있는 api 주소를 체크하고~facebook, kakao, firebase 등 sdk 설정을 세팅하고~앱 빌드 버전에 따라 키스토어로 앱 서명을 해준 후~apk 파일로 추출합니다. 추출한 apk파일은 테스터들에게 배포하기 위해 firebase app distribution에 업로드합니다. 이러한 과정들을 fastlane을 통해서 자동화 시킬 수 있습니다! fastlane 명령어를 입력하면 미리 세팅된 서버와 빌드 타입에 맞게 사이닝이 이루어지고 lokalise 리소스를 자동으로 업데이트 시킨 후 빌드가 완료되면 자동으로 firebase app distribution으로 테스터 배포가 이루어지며, 동시에 슬랙과 메일로 메시지가 발송되는 프로세스를 거칩니다. (app distribution은 출시 전 베타 테스트 배포를 위해 firebase에서 제공하는 기능입니다.)

배포는 사드세요……제발(?)

QA가 진행되는 기간에는 매일 하루에 한번 이상 빌드&배포를 하게 되는데, fastlane은 반복 작업을 줄여주어 유용하게 사용하고 있습니다.

프로덕션 출시

QA가 완료되고 드디어 실배포를 할 때가 되었습니다. 실제 유저들에게 앱이 배포될 때에는 수동으로 빌드하여 직접 PlayStore Console에 업로드합니다. 사이닝이 완료된 앱이 빌드되면 (구글 플레이 스토어에 앱을 올리기 위해서는 이전에 등록했던 인증된 업로드 키로 서명해야만 업로드가 가능합니다.) 알파 테스트 채널에 먼저 업로드 합니다. 원티드는 한국🇰🇷 이외에도 일본🇯🇵, 홍콩🇭🇰, 싱가포르🇸🇬, 대만🇹🇼 국가를 대상으로 서비스하고 있기 때문에 각 국가에 맞는 언어로 앱 업데이트 사항을 게시하는 것도 잊지 않습니다. Google Play Console에서 알파 또는 베타 채널에 앱을 게시하면 자동으로 다양한 기기에서 통합 테스트가 진행됩니다. 테스트가 완료되면 사전 출시 보고서로 결과를 알려주는데 이를 통해 비정상 종료, 디스플레이 문제, 보안 취약점을 미리 파악할 수 있습니다. 크리티컬한 이슈가 발견되지 않으면 프로덕션 채널로 앱을 업로드 합니다.(알파→프로덕션 채널로 올리기까지 과정에 거진 하루의 시간이 소모됩니다. 구글의 앱 검토는 불가피한 과정입니다.) 원티드는 새로운 버전의 앱이 출시되는 경우에는 처음에 5%~10% 타겟팅 대상으로 배포를 진행합니다. 업데이트가 이루어진 후에 반나절 정도 경과를 지켜보고 이 역시 특별한 이슈가 없으면 100% 대상으로 배포를 합니다.

최근들어 PlayStore측에서 앱 검토에 걸리는 시간이 눈에 띄게 길어졌는데, 강한 정신력과 인내심이 필요할 수 있습니다. 어느새 새 기능이 추가된 버전이 배포되었습니다.

주문하신 ‘이런거’ 나왔습니다.

새로운 피쳐가 개발되고 그것이 유저에게 닿기까지의 과정을 작성해 보았습니다. 원티드 내 안드로이드 개발자가 2명에서 5명으로 갑자기 인원이 늘어나게 되면서 서로 작업 스타일을 맞추어 나가는 과정이 필요했고, 하나의 서비스를 만들어가는 입장에서 최대한 한 몸처럼 움직이기 위해 개발 프로세스를 확립하려는 노력이 있었습니다. 아무래도 작업자가 많아질수록 어떤 코드를 누가 어떻게 수정했는지 추적하기가 더더욱 어려워지는 경우가 있는데, 혼란을 미연에 방지하기 위한 장치로 테스트 코드를 작성했던 것이 도움이 되었던 것 같습니다. 물론 작업 기간이 촉박하여 어쩔 수 없이 기능 개발이 우선시 되는 경우에는 테스트 코드가 없는 채로 개발이 진행될 때도 있었습니다. 앞으로 개선되어야 할 부분으로 인지하고 있으며, 점차적으로 안정적이고 개선된 앱 서비스 경험을 제공하기 위해 테스트와 배포 자동화에 대한 고민을 계속 할 것입니다.

원티드 제품 팀블로그

원티드 제품 팀블로그

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store