kuman514
한모금 배너 이미지
최근 수정 일자: 20262 26

한모금 (Hanmogm)

프리뷰

한모금 홈 화면한모금 주류 상세 화면 상단한모금 주류 상세 화면 하단한모금 시음기록 작성 화면 1페이지한모금 시음기록 작성 화면 2페이지한모금 시음기록 상세 화면한모금 나의 전체 시음기록 화면한모금 내 주류 요청 현황 화면

개요

  • iOS + Android를 타겟으로 한, 각종 주류 정보를 열람하고 시음기록을 작성할 수 있는 테이스팅 노트 앱.
  • 팀 구성: PM 1명, 기획자 1명, 디자이너 1명, 마케팅 1명, 백엔드 2명, 프론트엔드 2명 (본인(원년)과 최근 합류 1명)
  • 담당한 작업 내용
    • Expo로 React Native 프로젝트를 세팅하여, iOS + Android 타겟이면서도 MacOS뿐만 아니라 Windows로도 개발할 수 있게 만듦.
    • React Navigation의 Native Stack Navigator를 사용하여 스크린 라우팅.
    • Axios를 이용하여 시음기록 등록/수정/삭제/열람, 주류 상세, 주류 요청, 이미지 업로드, 시음기록 모음집 등등 백엔드 API와 연계된 각종 기능 구현.
    • Amazon Cognito Identity JS를 이용하여 회원가입, 로그인, 회원탈퇴, 비밀번호 초기화, 이메일 인증 등의 유저 관련 기능 구현.
    • 각종 기능에 대해 로딩 여부, 에러 여부, 결과값을 담은 커스텀 훅을 구축.
    • expo-updates 패키지와 Expo Channel을 활용한 CI/CD를 구축하여, Expo 무료 플랜에서 월 30회(iOS 15회)까지만 할 수 있는 EAS Build를 절약함.
    • App Store Connect와 Google Play Console을 통해 iOS와 Android 앱 릴리즈.

앱 다운로드

[ iOS 다운로드 ] [ Android 다운로드 ]

이 프로젝트가 시작된 계기

친구가 초대해서 참석한 저녁 식사에 함께 참여한 PM님의 주도로 팀이 결성되었습니다.

요즘은 소주나 맥주보단 하이볼이나 와인같이 다양한 맛과 종류의 술을 즐기는 것이 트렌드입니다. 그러나 이 트렌드와는 맞지 않게, 찾고자 하는 주류의 정보는 여기저기 흩어져있어 찾기 힘들었으며, 기존에 있던 테이스팅 노트 앱들도 운영이 멈추었거나 기능이 부족하다는 문제점이 있었습니다. 이러한 문제를 해결하기 위해, 주류 검색 및 시음기록 작성/관리를 더욱 쉽고 편리하게 해주는 테이스팅 노트 앱을 만들고자 하는 사람들을, 직접 대면이나 렛플 등의 팀 프로젝트 플랫폼을 통해 모집하여 개발을 시작했습니다.

사용한 기술 스택

ExpoReact NativeTypeScriptAxiosZustand

React Native 프로젝트를 Expo로 만든 이유?

해당 앱은 iOS + Android를 타겟으로 하는 모바일 앱이지만, MacOS 뿐만 아니라 Windows로도 개발하기 때문에, Expo를 사용하는 것이 유일한 선택지였습니다. 실제 React Native 공식 문서에서도 CLI 등을 통해 직접 세팅할 때 Windows로 iOS 앱을 만드는건 지원되지 않는다고 하며, 대체 방안으로 Expo와 Expo Go를 사용할 것을 안내합니다. 그래서, Expo로 React Native 프로젝트를 세팅함으로써, iOS + Android 타겟인 이 앱을 MacOS뿐만 아니라 Windows로도 개발할 수 있게 만들었습니다.

협업 방법

저희 팀은 Slack, Figma, Jira를 활용하여 정기 회의, 디자인 반영, 태스크 브레이크다운, 개발 일정 산정, 진행상황 및 요청사항 보고 등등의 소통을 진행해왔습니다. 특히, 저는 프론트엔드 개발자로서 기획자분이랑 디자이너분과의 소통이 가장 활발했는데, 각종 컴포넌트나 스크린들이 어떤 화면에서 어떤 형태로 표시되어야 하며, 어떤 상호작용이 발생했을 때 또는 어떤 상태가 변할 때 어떤 변화가 있어야 하는지, 표시할 데이터가 비어있거나 에러가 발생할 경우 어떻게 표시해야 하는지 등등에 대한 논의가 주를 이뤘습니다. 이에 대한 논의가 결정되었을 때, 예상되는 개발 일정을 산정하고 구현을 시작합니다.

시음기록 폼의 향 태그 입력 화면

혹시나 기획자분과 디자이너분이 미처 명세하지 못한 부분이 있다면, 제가 직접 가장 사용성이 높을 것이라 생각되는 방향으로 초안을 구현해오기도 합니다. 예를 들어, 한모금 앱의 시음기록 폼 중 향 태그를 입력할 때 추천 향을 키보드 위에 표시하는 기능을 구현해야 했을 당시, 이 추천 향들을 표시하는 방법이 명세되지 않았습니다. 그래서 저는, 한 줄에 모든 추천 향 태그를 보여주는 스크롤뷰 방식, 고정 뷰에 추천 향 태그를 10개까지만 보여주는 방식, 이 두 가지를 생각했는데, 그 중 후자가 스크롤뷰 터치로 인한 키보드 블러 이벤트를 복잡하게 통제할 필요도 없었으며 사용자에게도 한 눈에 들어오고 조작 횟수가 최소화된 방식이었기에 실제 프로덕션으로 배포될 수 있었습니다.

진행 상황 공유 방법

빌드 구축 전에는 Expo Go를 활용하였습니다. Expo Go는 개발 중인 앱을 따로 빌드하여 설치하지 않고도 QR 코드를 스캔하거나 exp://로 시작하는 URL에 접속하여 앱의 프리뷰를 볼 수 있게 해주는 앱입니다. 이 앱을 통해, 빌드를 따로 만들지 않고도 팀원들에게 신속하게 프리뷰를 제공할 수 있었습니다.

expo-updates 패키지와 Expo Channel을 활용하여, CI/CD가 가능한 빌드를 구축하였습니다. eas.jsonbuild.(프로파일명).channel에 원하는 채널을 할당시키면, 그 빌드는 프로파일에 해당되는 채널의 업데이트를 따라갑니다. (참고) 이를 통해 코드만 푸시해도 업데이트가 되는 빌드를 구축함으로써, 무료 플랜에서 iOS와 Android로 각각 15회까지밖에 안 되는 eas build의 사용 횟수를 획기적으로 줄일 수 있었습니다.

이 프로젝트를 통해 배운 점

React Native는 React의 지식만 가지고 모바일 앱을 제작할 수 있다는 장점이 있지만, 실제로 React Native 프로젝트를 진행할수록 플랫폼별로 필요한 의존성과 실제 수행하는 동작에 차이가 있어, 동일한 경험을 위해 플랫폼별로 로직을 달리해야 할 수도 있다는 점을 느꼈습니다. 대표적으로, 동일한 패키지더라도 iOS에서와 Android에서의 UI 렌더링 방식이나 권한 처리 방식이 다르게 동작한다는 점, 빌드 후 App Store Connect와 Play Store Console에 앱을 제출하는 과정에서도 플랫폼별로 서로 다른 과정이나 대응이 필요하다는 점 등등이 있습니다.

사이드 프로젝트는 소규모 팀으로 진행되기 때문에, 각자의 외부 일정이 프로젝트에 큰 영향을 줄 수 있습니다. 특히 야근, 급한 일정, 기술적 난관 등에 직면했을 때, 최대한 신속 정확하게 팀원에게 상황을 공유해야 팀 전체에 미치는 영향을 줄일 수 있고, 문제 해결을 위한 시간적 여유도 확보된다는 점을 배웠습니다.

어떤 업무를 진행할 땐, "할 것""하지 말아야 할 것"을 명확히 구분하고 진행해야 함을 배웠습니다. 완벽하게 진행하려고 하면, 결국 완벽은 커녕 핵심까지 놓치게 됩니다. 따라서, 핵심과 거리가 먼 것은 일단 백로그로 두어 여유가 있거나 다음 기회를 잡았을 때 진행하는 것이 좋습니다.

외부 패키지를 사용할 때는 단순히 이용하면서 문서만 보는 것이 아니라, GitHub 이슈, 체인지로그, 소스코드 등을 통해 패키지의 동작 방식과 잠재적인 문제를 주기적으로 확인해야 한다는 점도 배웠습니다.