목록 보기
크몽 모바일 데브옵스
기타

크몽 모바일 데브옵스

크몽
크몽
2021년 2월 4일

안녕하세요! 크몽 안드로이드 개발자 Vigli(비글리)입니다. 크몽에 입사한 지 1년 3개월 정도 지났는데요. 짧은 시간일지 모르나, 크몽 내, 외부적으로는 대격변 했던 시간이었습니다. 그중 현재 진행 중이고 앞으로도 계속 업그레이드를 할 크몽의 모바일 데브옵스에 대해 소개해 드릴까 합니다. 은근슬쩍 저희 문화를 자랑하는 글이기도해요! 데브옵스는 개발(Development)과 운영(Operation)의 합성어입니다. 다양한 해석이 있지만, 제가 생각하는 데브옵스는 사용자도, 개발자도, 관리자도, 모두가 서비스를 편하게 사용할 수 있도록 도와주는 도구라고 생각합니다. 그러기 위해 개발자가 개발에 몰두할 수 있도록 해야 하며, 지속적인 배포를 통해 사용자는 편하게 앱을 쓸 수 있어야 하고, 관리자는 서비스의 전반적인 부분을 명확하고 효화적으로 커뮤니케이션할 수 있는 환경을 제공하는 것이라고 생각합니다. 이 3가지를 어떻게 구성하느냐에 따라 좋은 개발 문화와 좋지 않은 개발 문화가 나눠진다고봐요. 제가 입사했을 때 크몽의 모바일 데브옵스는이랬어요. 극적인 변화를 소개하려고 다소 과격하게 표현했습니다 그래서 훈훈한 외모와 뛰어난 실력이 있는 크몽의 모바일 개발자들이 좋은 프로세스를 만들기 위해 많은 고민과 시도를 했고, 결국! 크몽만의 데브옵스가 탄생했습니다. (이 글과 실제 모습은 다를 수 있습니다. 더 좋은 환경을 위해 데브옵스가 바뀔수 있기때문이에요!) 총 5개의 단계인 계획 > 개발 > 테스트 > 배포 > 운영이 사이클을 돌고 있습니다. 각 단계에는 문화와 도구를 활용하여 앞서 말한 3개의 환경(개발 몰두, 사용자를 위한 앱, 원활한 커뮤니케이션)을 제공하기 위한 노력을 하고있습니다. Plan 2주 단위 스프린트 크몽은 2주 단위 스프린트를 갖습니다. 그에 따라 개발 스코프를 계획하고 진행합니다. 스프린트 동안 목표한 일감을 끝내기 위해 모두 열심히 일하고있어요! 스프린트 In/Out 회의 스프린트가 끝나는 마지막 워킹데이에 이번 스프린트에 진행한 일감과 다음 스프린트에 진행할 일감을 정리합니다. 그리고 서로 이번 스프린트에 좋았던 점, 아쉬웠던 점, 개선할 점을 공유하는 시간을 가져요. 예로, 좋았던 점에는 컨디션 난조에도 불구하고 계획했던 일감을 모두 처리했다는 얘기가 있었고, 아쉬운 점에는 모기 때문에 잠을 못 자 컨디션 관리가 힘든 스프린트였다는 얘기가있었어요. Dev Day (데브데이) 매달 1회 진행하는 개발팀 행사입니다. 챕터별 연초 계획했던 목표의 진행사항을 공유하고 트라이브 별 월간 진행사항을 공유합니다. 한 번씩 맥주와 음료수를 마시며 진행하기도 해요. 그만큼 무겁고 딱딱하지 않고 우리만의 파티 같은 분위기에요! Code 일일 스크럼 회의 매일 아침, 모두의 컨디션과 어제 한일, 오늘 할 일을 가볍게 공유하는 자리입니다. 각자 1~2분 정도 짧게 얘기하지만, 동료의 컨디션을 알 수 있고, 다 같이 얼굴 보며 인사하는시간입니다. 페어 프로그래밍 언제든 동료의 요청 시, 페어 프로그래밍을 합니다. 함께 코드를 보고 얘기하며 코딩하면 생각하는 시야가 커지고 실력도 덩달아 높아집니다. 시간과 인력을 투자세요. 먼저 중요한 코드만 해보세요. 가성비갑입니다! 오프라인 코드 리뷰 오프라인 코드 리뷰는 자리나 회의실, 라운지 등 어떤 장소든 상관없이 진행합니다. iOS 개발자분들은 시간을 정해서 규칙적으로 진행하고, Android 개발자분들의 경우 리뷰가 필요한 코드가 있거나, 동료가 리뷰를 요청하면진행합니다. 온라인 코드 리뷰 온라인 코드 리뷰는 Pull Request로 진행하고, 안드로이드 개발자들이 하고 있습니다. feature branch에서 각자 기능 개발이 끝나면 정해진 동료에게 Pull Request Review를 요청합니다. 댓글을 통해 서로가 열띤 토론을 펼칩니다. 온라인 코드 리뷰는 시작한 지 1달 정도 되었고 기존 Git 전략도 이 문화를 위해 변형했습니다. 모두 많은 도움을 얻고 있는 문화가 되고있습니다. 코드 머지 규칙 기능 개발 시 develop branch에서 feature branch를 생성하여 개발합니다. 그렇게 feature branch의 개발이 끝나면 develop branch에 바로 머지할 수 없고 앞서 말한 온라인 코드 리뷰 도구인 Pull Request가 통과해야 develop branch에 머지할 수 있습니다. 다른 개발자 한 명에게 꼭 리뷰를 받아야 하고, 그 외 리뷰자 요청은 선택사항입니다. 리뷰가 끝났다면 로켓 이모티콘을 달아 머지하라고알립니다. 공동 개발 문서화 서버에서 받는 데이터 모델을 통일하고, 개발 사양을 맞추기 위해 준비 중인 부분이에요. 이렇게 함으로써 예상치 못한 동작이나 시나리오의 실수를 줄이고, 사용자에게 Android, iOS 어디서든 동일한 경험을 주기 위한 작업이기도해요. Test 내부 QA 중요 기능을 테스트합니다.(결제, 로그인, 회원가입, 푸시 등) 테스트를 통과하지 못하면 수정될 때까지 이후 일정은 모두 정지입니다. 핵심 기능을 테스트 함으로써 크리티컬 한 버그가 배포되지 않게방지합니다. Unit 테스트 크몽 앱은 MVP 패턴을 사용하고 있습니다. Presenter와 Model의 기능은 Unit 테스트를 추가하여 테스트합니다. 아직 시작 단계이며, 일부 TDD(Test Driven Development)로 개발하고 있습니다. TDD를 하기 위해 대격변의 시기에 앱의 구조를 설계하고 그에 따라 리팩토링도진행했었습니다. UI 테스트 내부 QA 목록 중 일부분은 UI 테스트를 추가하고 있습니다. 내부 QA는 직접 하는 테스트인데 게으른 개발자로서 반복된 과정은 참 힘들고 지겨워요. 그래서 자동화를 구축 중에있습니다. 시나리오 테스트 모든 부분을 테스트할 수 없고, 개발과 머지 시 다른 기능에 영향을 줄 수 있습니다. 이렇게 되면 예상치 못하고, 앱은 죽지 않으나 비정상 동작하고, 사용자는 불편함을 느끼겠죠. 이런 부분을 파악하기 위해 테스트하면 좋지만, 항상 테스트가 어려운 부분이죠. 그래서 앞서 말한 플로우는 시나리오 테스트를 추가하고있습니다. Deploy 운영 테스트 크몽의 릴리즈는 내부 배포부터 시작합니다. 운영 서버에서 추가한 기능과 변경사항이 정상 동작하는지 한 번 더 확인하게됩니다. Sanity 테스트 대규모의 기능 개발 또는 변경 시에만 진행하는 테스트입니다. 모든 인원이 집중적으로 테스트하며 버그를 찾아냅니다. 이번에 맞춤견적을 릴리즈 할 때 진행했던테스트입니다. 릴리즈 관리 자동화 릴리즈에 대한 정보와 작업했던 commit 정보는 Github와 Jira를 연결하여 자동 등록되게 해 놨습니다. commit 메시지에 Jira 일감을 적어두면 자동으로 Jira 일감에 commit 정보가 등록됩니다. 배포 일감에 해당 작업 일감을 모두 연결함으로써 어떤 작업이 릴리즈 되었는지 관리할 수있습니다. 단계적 테스트 Android의 경우, 큰 규모의 업데이트는 Playstore의 단계적 출시 기능을 사용합니다. 20%, 50%, 100% 단계적 출시로 앱의 안정성을확보합니다. 빌드/배포 자동화 태그를 생성하면 빌드 > 테스트 > 플레이 스토어 내부 배포를수행합니다. 빌드/배포/테스트 알리미 빌드/배포/테스트 각 단계가 끝나면 Slack에 봇인 끄몽이가 결과를알려줍니다. 빌드, 배포, 테스트를 알려주는 우리끄몽이! Monitor 내 맘대로 코드랩 매주 약 1시간 자유롭게 코드랩을 진행합니다. 주제는 없습니다. 당일 리더가 어떤 주제든 상관없이 자기가 하고 싶었던 주제로 간단한 코드랩을 함께 진행합니다. 대체로 경험이 없거나 적은 기술을 하다 보니 서로 도와주며 진행하게 됩니다. 코드랩 이후 간단하게 크몽 앱에 도움이 될까?라는 이야기도합니다. 기술 세미나 소개하고 싶은 기술이 있다면 컨플루언스를 통해 공유하거나 사내 세미나를 진행합니다. 자유롭게 크몽 앱에 도입할지 이야기하고, 장/단점에 대해 이야기도합니다. 스토어 리뷰 알리미 매일 1회 알리미가 새로운 스토어 리뷰를 Slack에 알려줍니다. 좋은 리뷰는 항상 감사하며 보지만, 좋지 않은 리뷰는 어떻게 개선할지에 대한 이야기를 하고 해결하려고합니다. 모든 리뷰가 너무 감사하고 소중하지만, 이런 리뷰를 보면 저희도 힘이 팍팍!!나요. Crash 리포트 알리미 실시간으로 새로운 Crash가 발생한 경우, 알리미가 Slack에 알려줍니다. 알리미 덕에 오류를 긴급하게 처리하고 배포했던 경험이있습니다. 크몽의 모바일 데브옵스에 대해 간략하게나마 소개해봤습니다. 아직 미흡한 부분도 있지만, 하나씩 착실하게 진행하고 있어요. 정답이 없는 문제이고 시간이 지나면, 지금 소개해 드린 것과 전혀 달라질 수도 있어요! 그리고 모바일이라고 통칭했지만, Android/iOS 자율적으로 문화를 갖고 있어서 조금 다를 수 있어요. 하지만 결국 중요한 건 사용자도, 개발자도, 관리자도, 모두가 서비스를 편하게 사용할 수 있도록 환경을 잘 구성하는 것이라고 생각해요. 좋은 데브옵스를 만들기 위해 항상 변화하고 시도할 준비가 되어있습니다. 궁금한 부분이나 의견은 언제든지 댓글 남겨주세요. 긴 글 읽어주셔서감사합니다. Android Developer 크몽 모바일 데브옵스 was originally published in kmong on Medium, where people are continuing the conversation by highlighting and responding to this story.

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...