프로젝트 개요

본 프로젝트는 대규모의 팀원들과의 협업을 통해 진행된 판매자가 직접 운영하는 쇼핑앱의 컨셉을 가진 MVP (Minimum Viable Product) 프로젝트입니다. 주요 목표는 관리자 앱과 소비자 앱을 분리하여 제작하되, 두 앱 모두 하나의 중앙 데이터베이스에 연동하여 효율적인 데이터 관리와 운영을 실현하는 것이었습니다.

이러한 구조는 다음과 같은 운영적, 개발적 이점을 제공합니다:

  • 효율적인 데이터 관리: 하나의 중앙 데이터베이스를 사용함으로써 데이터의 일관성을 유지하고, 중복된 데이터 관리 작업을 최소화할 수 있습니다.
  • 분업화된 앱 개발: 관리자 앱과 소비자 앱을 별도로 개발함으로써 각 앱의 특성에 맞는 최적화된 사용자 경험을 제공할 수 있습니다.
  • 확장성 있는 앱 구조: 미래에 추가적인 앱이나 서비스가 필요할 경우, 기존의 중앙 데이터베이스와의 연동을 통해 쉽게 확장할 수 있는 구조를 갖추고 있습니다.

이 프로젝트는 대규모 인원과의 협업에서 나타나는 도전과제를 극복하기 위한 다양한 전략을 적용한 경험이 특징입니다. 효율적인 업무 분담과 원활한 소통을 통해, 여러 프로세스와 기능들을 순차적으로 진행하는 대신 동시에 개발하는 방식을 채택하여 작업의 효율성을 극대화하였습니다. 또한, 서로 다른 앱을 효과적으로 연동시키는 과정에서 얻은 경험은 프로젝트의 복잡성을 관리하고, 다양한 요구 사항을 동시에 충족시키는 데 큰 이점을 가져다주었습니다. 복잡한 프로젝트 환경에서도 효과적인 협업과 통합 개발 능력을 경험해 볼 수 있었던 프로젝트 입니다.

주요 담당 업무

  • 상품 등록 기능 및 다중 이미지 업로드 기능
  • 로그인 기능
  • 상품 등록 페이지 구현
  • UI 디자인 가이드 제작
  • 소비자 앱 팀과 서버팀과의 기술적 소통을 담당 Development Team Liaison역할

주요기능

시스템 관리자용 iPad App

  • 이 앱은 판매 관리자가 원활하게 매출에 집중할 수 있도록 도움을 주는 관리자앱입니다.

    • 앱 주요 사용자 : APPLEMARKET의 제품 및 매출 관리자

    • 목적 : 판매자가 직접 제품을 등록 및 관리하고, 배송과 매출까지 확인할 수 있도록 도움을 주는 앱이다.

    • 판매상품 : Apple Inc.의 디바이스와 관련 악세서리 판매

로그인

  • 관리자용으로 발급된 아이디로 로그인

  • 입금 대기중인 주문 건수 표시
  • 재고가 적은 상품 건수 표시
  • 취소/교환/환불 주문 건수 표시
  • 최근 일주일의 일자별 매출 정보 그래프
  • 매출 별 상품 랭킹, 상품 별 매출 기여도 확인(상위 10개)
  • 로그아웃

제품관리

  • 카테고리 별 제품 리스트 및 세부정보 확인
    • 제품명, 제품 설명, 제품이미지, 판매가, 재고 등
  • 제품 등록 : 판매하고자 하는 제품을 상세정보와 함께 등록
  • 제품 수정 : 판매중인 제품의 이미지, 가격 등을 수정
  • 제품 삭제 : 판매중단 등의 경우 제품 삭제

판매관리

  • 입금대기 : 현재 입금 대기 중인 주문 정보
    • 소비자가 구매 요청을 보내고 입금대기에서 입금 확인이 되면 버튼으로 다음 단계(출고대기)로 넘어간다.
  • 출고대기 : 현재 출고 대기중인 주문 정보.
    • 관리자가 송장번호를 입력하고 출고확인 버튼을 누르면 다음 단계(출고진행)로 넘어간다.
  • 출고진행 : 현재 출고 진행중인 주문 정보
    • 출고확정 버튼을 눌러 다음 단계(확정대기)로 넘어간다.
  • 확정대기 : 출고가 완료되고 구매확정 대기 중인 주문 정보
    • 구매확정 버튼을 눌러 해당 주문 처리를 완료한다. 처리가 완료된 주문은 매출정보를 확인하는데 사용된다.
  • 반품/취소/교환 : 주문 취소된 정보
로그인
상품관리 판매관리

발생했던 이슈들

공통이슈

  • 마감 3시간 남기고 Firebase 무료용량 초과의 문제로 더미데이터가 날아감
    • 새로운 Firebase 프로젝트를 생성하고 데이터를 직접 다시 넣어줌
  • 관리자용 앱은 익숙하지 않아서 필요한 데이터를 생각하고 뷰를 구성하는데에 있어서 많은 시간을 사용함

Login

  • ViewModel과 Store를 분리해서 작업하다보니 참조객체를 동일하게 유지하는 것이 불가능
    • 로그인 성공 후 뷰 전환 방식을 currentUser확인이 아닌 Route방식으로 변경

home

  • 주문정보, 문의사항, 재고부족 List 출력시 정렬이 잘 되지 않는 상황 발생
    • GemetryReader로 Text의 frame을 조정해주어 화면에 맞는 상대 크기를 지정해 주어해결함
  • 확인하지 않은 주문정보, 문의사항, 재고부족 물품등 초기 기획했던 사항들을 모두 없애고 새로 리뉴얼하게 되었다.
  • Chart에서 날짜별 데이터를 불러오기 위한 작업 중에 발생한 이슈
    • firebase에서 orderedAt 과 orderAt 두 개의 이름을 사용하여 주문한 오더의 날짜를 사용하고 있는 상황 발생
      • 이후 orderedAt으로 이름을 통일하고 코드내에서 잘못 작성된 부분을 수정함
    • viewModel의 함수명과 store의 함수명을 혼돈하여 store 내에서 잘못된 위치에서 개발하면서 orderedAt의 Date를 확인할 수 없는 상황 발생
      • 이후 store의 fetch 함수로 이동하여 orderedAt에 대한 데이터를 받아옴
    • date타입을 처음 쓰게되어 오늘을 기준으로 지난 7일의 데이터를 어떻게 분류하여 저장할때 어려움을 겪음
      • Calendar, DateFormatter를 사용하여 날짜별 Date타입을 가져와서 해결함

productmanagement

  • 카테고리 별 제품 리스트 셀에서 리스트의 $0번째가 자동으로 NavigationLink를 타고 로딩되는 상황 발생
    • Clean Build Folder 사용 시 해결, 하지만 빌드를 여러차례 진행하면 다시 오류 발생
  • 제품을 삭제할 때 alert창을 통해 삭제하면 해당 제품이 아닌 다른 제품이 삭제되는 상황 발생
    • alert을 ForEeah 안에 작성하면 삭제할 요소의 경로를 제대로 찾지 못한다는 것을 알고 ForEeah 밖에 작성하여 해결
  • List 내 모델, 제품명, 가격 등 각각의 문자열 길이에 따라 일렬로 정렬되지 않는 상황 발생
    • 아이패드 가로, 세로모드 또한 지원해야하므로 GeometryReader 사용하여 해결

salesmanagement

  • 데이터를 업데이트 했을 때 실시간으로 뷰에 적용되지 않았음
    • StateObject에서 EnvironmentObject로 프로퍼티래퍼 변경
  • 초기 기획에서는 취소 / 교환 / 반품 데이터를 보여주고자 했으나 소통 과정에서 교환, 반품 정보가 만들어지지 않아 ‘취소’에 한해서 뷰에 보여주기로 기획 변경
  • 화살표 버튼(주문 상세보기 기능)을 눌렀을 때 발생하도록 한 애니메이션이 geometryReader를 사용했을 때 적용이 안되는 경우가 있었음
    • 애니메이션 코드 위치를 상세정보 전체를 묶고 있는 vStack에 붙이니 애니메이션이 잘 작동하였음.
    • 확장되었을 때, 아닐 때를 구분하여 적절한 높이 값을 부여해줌.

적용 고려 사항

빠른 개발을 위해 두개의 프로젝트를 분리하고 통합하는 방식으로 개발되었지만 하나의 프로젝트 관리자 앱과 소비자앱을 Target을 이용해서 하나의 파일로 묶어서 개발하는 방식 적용

특징

  • 재사용성: 동일한 코드베이스를 사용하여 여러 버전의 앱을 생성할 수 있습니다. 독립성: 각 Target은 독립적인 설정, 빌드 옵션, 그리고 런타임 환경을 가질 수 있습니다. 이유:

  • 효율성: 중복 코드를 최소화하고, 여러 버전의 앱을 동시에 유지 및 관리할 수 있습니다. 맞춤 설정: 특정 Target에 대한 설정, 리소스, 그리고 기능을 개별적으로 조정할 수 있습니다.

장점

  • 유연성: 다양한 앱 버전 또는 변형을 쉽게 관리하고 배포할 수 있습니다. 코드 관리: 중복 코드 없이 여러 앱 버전을 유지할 수 있어 코드 관리가 용이합니다. 단점:

단점

  • 복잡성: 여러 Target을 관리하면 프로젝트의 복잡성이 증가할 수 있습니다. 테스트: 각 Target별로 테스트를 수행해야 하므로 테스트 작업이 복잡해질 수 있습니다.

Target의 사용을 최적화하기 위해 각 Target별로 필요한 리소스와 설정을 정확하게 분리하고, 자동화된 테스트를 통해 각 Target의 품질을 지속적으로 관리하는 것을 고려해볼 수 있습니다.

참여자(31)

Product Manager (1)

최현종

소비자 iOS App (11)

이석준 (팀장) 김영서 이지연 봉혜미 신미지 이소영 염성필 한승수 장종환 홍수만 한주희 허혜민

관리자 iPad App (11)

강창현 (팀장), 조형구, 김미주, 윤예린, 김예원, 윤소희, 이재희, 진준호, 이영우, 조석진, 이진아

서버 (8)

진태영 (팀장), 고정민 (팀장), 정예슬, 전혜성, 홍진표, 백수민, 윤현기, 허혜민

관련 링크