/big-project-a-customer-ios

프로젝트A - 소비자용 iOS 앱 개발

Primary LanguageSwiftMIT LicenseMIT

🍎 찌릿샵

  • 찌릿샵은 전자기기를 타겟으로 한 오픈마켓 쇼핑몰 플랫폼입니다.

( 가전을 제외한 전자기기(PC, 모바일, 주변기기)가 주요 대상입니다. )

앱 로고

주요기능

  • 각 카테고리별 상품들 클릭 시 DB에서 제품을 올린 상품 보여주기
  • 상품 상세 뷰 상품 문의란 기능
  • 상품 리스트에서 클릭 시 제품 상세 뷰로 데이터 넘기기
  • 주문내역 뷰 로그인 성공 시 주문내역 확인 가능
  • 장바구니 뷰 로그인 성공 시 장바구니 데이터 확인 가능
  • 마이페이지 뷰 로그인 성공 시 마이페이지 기능 사용 가능
  • 회원 정보 비밀번호, 주소, 폰 넘버 수정 가능
  • 회원가입, 로그인 기능
  • 주문한 상품 목록의( 상품 더미 데이터 ) 아이템 중 한 가지를 골라 문의하는 기능

동작 구현

📎 회원가입 📎 로그인 아웃 📎 홈 - 카테고리
📎 구매하기 📎 문의하기 📎 리뷰작성
📎 장바구니 담기 📎 장바구니 📎 장바구니 결제
📎 마이페이지 📎 비밀번호 수정 📎 정보 수정

문서

ToDo
  • 1227

    로그인 / 회원가입 뷰

    • 인원 ( 건형, 민주 )
    • 로그인 뷰
    • 이용약관 뷰 ( 회원가입 Step1 )

    홈 메뉴 뷰

    • 인원 ( 진형, 원형 )
    • 홈 메뉴 전체적으로 완성
    • searchable() 모양만 완성

    상품 상세 뷰

    • 인원 ( 도현, 제균, 희경 )
    • 제품 썸네일 이미지 좌우 Swipe
    • 제품 이름, 별점, 리뷰 개수 텍스트
    • 더보기 클릭 시 제품 상세 이미지 확인

    마이페이지 뷰 1팀

    • 인원 ( 현준, 태형 )
    • 마이페이지뷰 , 내정보 뷰, 비밀번호 확인뷰, 회원정보 수정 뷰 구성 완료 (디자인x)
    • 더미데이터를 가지고 로직 구성(흐름 확인 가능)

    마이페이지 뷰 2팀

    • 인원 ( 도희, 민경 )
    • 좋아요 한 제품 아이템 셀 생성 후 메인페이지 팀과 공유함
    • 구매 item cell 생성

    마이페이지 뷰 3팀

    • 인원 ( 태욱, 태성 )
    • 공통적으로 재사용 되는 뷰
    • 내가 작성한 리뷰 View
    • 내가 작성한 문의 View
    • 최근 본 상품 View

    장바구니 뷰

    • 인원 ( 근섭, 학진 )
    • 아이템 선택 체크 박스 구현
    • 아이템 선택, 삭제
    • 총 금액, 수량 계산
    • 결제 view로 이동
    • 개별 상품 수량 picker완성
  • 1228

    • 로그인 및 회원 가입 (FolderLoginSignUp)
      • 이메일, 비밀번호 설정 뷰
      • 닉네임 설정 뷰
      • 회원가입 서버 연동 코드 구현
      • 회원가입 프로그래스바 - 민주
      • 이용약관 상세 페이지 - 시트(사파리뷰) - 건형 다음 단계가 아니라 잠깐 보여주고 빠질 정보이므로 !! (다른 앱 꺼 갖다붙이기)
      • 이메일, 닉네임 중복 확인 - ViewModel 함수 필요
      • 수정자 분리 및 주석 정리
      • 장바구니, 마이페이지, 배송 이력 탭바 눌렀을 시 로그인 확인 → 로그인 없이 쇼핑 가능 (대기)
      • 로그인 서버 연동 코드 구현
    • 홈메뉴
      • searchable() 모양만 완성. ← 데이터가 생기면 그 후에 기능 구현
      • 컨벤션 준수
      • 제품 디테일 목업 구현
      • 상품이 엄청 많아지면 렉 안 걸리는 스크롤 뷰 구현 ( 금요일 강사님이 얘기해 주셨던 구현 과제 느낌) ← 페이지네이션 해야함
    • 제품 상세 페이지
      • 구매하기 클릭 시 ModalView 보이기
      • ModalView에서 장바구니 클릭 시 어디로 이동할 건지?!
      • ModalView에서 구매하기 클릭 시 장바구니 뷰쪽으로 이동
    • 마이페이지
      • 환경 설정, 고객센터 목업 구성하기
      • 주석 달기
      • 뷰 모디파이어 정리
      • 뷰 연결 후 로그아웃 기능 구현
      • 혜택 뷰 쪽에서 스크롤 뷰로 만들어 가짜 혜택 광고 넣기 ( 이미지 크기는. resizable() .aspectRatio()
      • UI디자인
      • 데이터 연결 후에
        • 뷰 연결 후 로그아웃 기능 구현
        • 로그인 기능이 백엔드 쪽이랑 연결이 되고 있다면 마이페이지 이름 란 바꾸기
    • 마이페이지
      • 서버 연결하기
      • 구매 내역 상세 페이지 UI 구성
      • 배송 상태(Delivery State)에 따라 버튼 전환
      • 배송 상태가 배송 중인 경우, 배송 조회 버튼으로 나타냄
      • 배송 상태가 배송 완료인 경우, 구매 확정 버튼으로 나타내고, 구매 확정 버튼을 누르면 리뷰 작성 버튼으로 변경하여 나타냄
      • 리뷰 작성 버튼 누를시 리뷰 작성하는 뷰로 이동하기 ( 진형님, 원형님이 만드신 리뷰 뷰 연결 )
      • 좋아요 페이지에서 좋아요 상품 삭제 버튼 기능 구현 ( 좋아요 상품이 없다면 배민 쿠폰 함처럼 텅 비었다는 뷰 )
    • 마이페이지
      • 내 리뷰 / 내 문의 / 최근 상품 → 데이터 input/output 비교&정리
      • 데이터 연결, 동작 확인
      • 전체적인 UI 및 피드백 반영 가다듬기
      • 내가 작성한 문의 View
      • 최근 본 상품 View
      • 최근 본 상품 클릭 시 상품 상세 정보 페이지로 이동할 수 있게끔 로직 생각해 보기
      • 우측 x 버튼 누를시 최근 본 상품 목록에서 지우기
    • 장바구니
      • 바로 구매 버튼 클릭 시 무통장 입금 뷰로 이동
      • 상품 옵션 뷰 구현
    • 리뷰짜기
      • modifier코드 컨벤션 준수
      • 리뷰 등록하기 클릭 시 store? server 쪽으로 보내주는 로직 짜보기
  • 0102

    • 로그인 및 회원 가입
      • 이메일, 닉네임 중복 확인
      • 수정자 분리 및 주석 정리
      • 장바구니, 배송 이력 탭바 눌렀을 시 로그인 확인
      • 마이페이지 로그인 연결
      • 로그인 서버 연동 코드 구현 → 서버팀에서 구현
      • 회원가입 정보 입력 시 안내 텍스트 보여주기
      • 회원가입 시 최상위 뷰(로그인 뷰)로 이동
      • 로그인 실패에 안내 텍스트
    • 홈메뉴, 작성한 문의 글**,** 나의 리뷰, 장바구니
      • GridView section 가로,세로 간격 일치하게 하기 - 홈메뉴
      • 두번째 여백 간격 줄이기 (게시물 안에서 동떨어져 있는 느낌 없에기) - 작성한 문의 글
      • 텍스트 정렬 맞추기 (텍스트 왼쪽 끝 라인 맟추기 + 위/아래도) - 나의 리뷰
      • 모두 선택 디폴트로 false - 장바구니
      • 회색 부분 사이즈 조정: 텍스트 크기를 줄인다 ,높이 자체를 줄인다, 체크하면 비용 등 상세 내용이 보이게 한다 - 장바구니
    • 제품 상세 페이지
      • 문의, 리뷰 관련 뷰
    • 마이페이지
      • MyPageCustomerServiceView - 주문한 상품 선택 후 모달에서 선택한 상품을 뷰에 반영하기
      • 로그인이 되지 않은 상태에서 뷰 짜기
      • MyPageInfoView - ( 버튼 디자인, 버튼과 리스트 겹치는 내용 있음 )
      • MyPageInfoDetailView - ( 상단 고정, 글자자간 조정, 프로필 사진 기능 삭제, 주소 수정 기능 삭제)
      • MyPageInfoEditView - (다양한 정보 수정 기능 디자인하기)
      • MyPageUserModel - ( 로그인 팀과 소통하여 유저 모델을 수정, 배송지 기능 추가위한 수정)
    • 구매내역, 배송지
      • 구매 확정 누르면 alert 창 띄워주기- 구매내역
      • 구매한 물건 바로 장바구니에 넣기 버튼 없애기(정확한 목적이 보이지 않음) - 구매내역
      • 기본 배송지만 보여주고 다른 배송지는 배송지 직접 입력하기로 입력받기- 배송지
      • 기본 배송지 수정은 마이페이지에서 가능하게 하기- 배송지
  • 0103

    • 제균, 도현, 희경
      • 옵션 선택 기능 구현
      • 옵션 미선택시 토스트 알림 기능
      • 제품 문의 데이터를 firestore 서버와 연결
      • 가이드 기반으로 버튼 Modifier 수정
    • 원형, 태욱, 태성 ,진형
      • ‘작성한 리뷰’ 간소화
      • MyReview 뷰 간소화, NavigationLink적용
      • ItemInfo 모델 ItemInfoViewModel 뷰모델 생성 후 → 파이어베이스에서 스토어에 올라간 상품들 패치 완료
      • ItemInfo 모델 ItemInfoViewModel 뷰모델 생성 후
      • HomeMenuView 이미지 수정 + 카테고리 아이템 항목 6개 추가
      • 앱 로고 제작
      • 마이페이지 부분의 디자인 수정
      • 리뷰 작성 페이지 뷰( 위로 정렬, 상품 품질 평가' 폰트 키우기 )
      • 작성한 리뷰 뷰 ( 내비게이션 타이틀 일괄 적용 )
    • 건형, 도희, 태형, 민주
      • 로그인 분기처리
      • gridView에서 로그인이 안되어 있을때(fullscreen)을 해야하는 기능
      • (MyPageInfoEditView 디자인 수정
      • 로그아웃
      • 회원정보 수정 시 비밀번호 일치하는지 확인
      • 회원정보 수정 데이터 연결
      • 회원정보 데이터 연결
      • 고객센터-주문상품 문의뷰 구성 및 , 데이터 연결 (후순위: 디자인)
    • 학진, 근섭
      • 장바구니 HIG 가이드라인에 맞춰 리팩토링
      • shoppingBag view ui 업데이트
      • ShoppingBag Stores 구현중
      • shoppingBag Model 구현
  • 0104

    • 학진, 근섭
      • 서버 리드해서 뷰에 적용
      • ShoppingBag Stores Remove 함수 구현
      • ShoppingBag Stores와 View연결
    • 제균, 도현, 희경
      • 나머지 서버 데이터와 연동
      • noteBookView에서 selected Item을 전달받도록 productDetailView에 property 정의
      • 문의 작성 연결하기
      • 리뷰 데이터 연동
    • 건형, 도희, 태형, 민주
      • 고객센터 주문 상품 문의 View design quality 높이기
      • MyPageInfoEditView 디자인 컨벤션에 따라 수정
      • 회원정보 update 조건 넣기
      • 주석달기
    • 원형, 태성
      • NotebookView → DetailView로 수정하여 한 View에서 각각 해당하는 categoryTitle에 맞는 상품들 fetch 및 정렬
      • HIG 수정
      • 상품 Image asyncImage OR 회의한 토대로 gridView 반영
    • 진형, 태욱
      • 고객 센터에서 상품 선택 & 문의 작성 & 데이터 준비 작업
      • 주문 상품 선택했을 때
        1. 다중 선택 guard
        2. 상위 뷰로 전달
        3. 데이터 작성 및 전달 준비
      • 고객 센터 주문 상품 문의 -> 레이아웃 정리, 요소 버튼 적용
    • 🖐️  저요저요 ← 시간 여유 되시는 분들이 해결해 주시면 감사합니다.
      • 로그인 모달에서 x 버튼 지우기! → 로그인되지 않았을 때 뷰 구성 및 분기 처리로 변경
      • 카테고리 검색창 지우기!
    • 현준,민경
      • 파견으로 판매자용 iOS에서 FireStore에서 데이터를 받아오고 Table에서 보여주는 역할을 함.
      • Review Model에서 필요없는 OrderedItem 배열 속성을 사용하지 않고, 이 곳에 itemName을 추가적으로 선언하여 리뷰 할 아이템의 이름을 보여줌. 정리하면, 두개의 배열을 동시에 순환할 수 없는 상황이어서, 필요한 데이터를 추가적으로 수집하여 보여줌.
회고
1. 버전 관리가 생각보다 힘들었다. 진행사항을 머지 한 후에 확인했을 때 갑자기 새로 생긴 부분도 있고 없어지는 부분도 있었다. 진행 상황에 대한 공유가 잘되지 않았던 것 같고 규모가 크다 보니까 방치되는 기능도 있었다. 새로 프로젝트를 시작한다면 좀 더 컨벤션을 다듬어서 통일시킨 후 진행해야 할 것 같다.

2. 많은 인원이 하나의 프로젝트에 참여하다 보니 시행착오도 많았고, 데이터 구조를 파악하거나 합치는 과정에서 어려움이 있었지만, 어떻게 하면 최대한 협업 과정에서 수월할 수 있을지 고민해 보는 계기가 되었던 것 같다. 서버가 완성이 안된 상태에서 개발을 하려다 보니 좀 힘들었던 것 같다.

3. 최적의 UX를 구현하는 과정에서 시행착오가 많았다. 간단해 보이는 기능 하나에서 발생할 수 있는 모든 예외 처리를 생각해 보는 계기가 되었다. 많은 인원이 참여한 프로젝트가 처음이었는데 그만큼 코드 컨벤션의 중요성을 깨달았고 서버와의 연동을 위한 사전 작업이 보다 탄탄하게 설계되어야 함을 알게 되었다.

4. 하나의 프로젝트에서 300개가 넘는 커밋을 달성한 적은 처음이다. 모든 팀원분들이 열심히 참여해 주셔서 나온 결과라고 생각한다. 브랜치는 물론이고 깃 이슈 템플릿을 작성해서 이에 맞춰 작업을 진행하니 차곡차곡 쌓여가는 느낌이었다. 아쉬운 점은 개발 전, 주고받을 모델에 대해서 명확하게 정의를 하고 개발을 시작했어야 했는데, 이 부분이 제대로 이뤄지지 않아 개발 과정에서 어려움이 많았다. 그래도 되게 재밌었다.

5. 퍼즐 조각 맞추기 같았다. 초반에는 각각 기능들이 떨어져 형태를 잘 알아볼 수 없었지만, 시간이 갈수록 통합되고 연결되는 과정 속에서 힘들지만 즐거움을 느꼈다.

6. 대형플젝 첨이라 기획이 잘 안됐다. 그래서 즉석에서 기획하고 뷰 만들고 하다 보니 초반에는 결정에 대한 부담이 있었다. 두 명이서 다 결정해도 되나 싶은 생각이 있었다.

7. 많은 인원 간의 소통이 어려웠다. 기획 측면에서 바뀌는 부분이 많았는데, 상황 공유가 잘 안됐던 것 같다. 또 맡은 일을 하는데 겹치는 일을 다루기도 하고 아무도 안 다루는 일도 있었다.

8. 많은 사람들과 함께 작업해 서버 데이터 구조를 읽기 조금 힘들었다. 하지만 많은 사람들의 도움으로 해결할 수 있어 좋은 경험을 한 것 같다. 파이어 베이스와 데이터를 더 잘 다뤘다면 수월했을 것 같다. 공부는 끝이 없다…

9. 서버, 고객, 스토어, 백오피스의 많은 사람들이 참여하는 프로젝트이고 서로 연동이 되어야 하다 보니 의견을 맞추고 함께 지켜야 할 룰을 더 디테일하게 했어야 했나?라는 생각이 든다. 각 파트에서 함께 사용하는 모델에 대해서 이야기를 나누지 못한 것도 아쉽다. 하지만 많은 사람들과 커밋, 브랜치 컨벤션을 맞춰가며 하나의 프로덕트를 만들어보는 경험은 소중했던 것 같다.

10. 데이터를 계속 연동해 줘야 하는 부분이 쉽지 않았았지만 많은 분들과 협업을 통해 컨벤션도 맞춰보고 하는 경험이 너무 값지고 소중했다.

11. 이것저것 합류하는 팀이 해보고 싶어 참여해 보았는데, 해당 팀의 로직과 코드를 이해하고 코드를 작성하는 게 쉽지 않았다. 많은 걸 알 수 있었다.

12. 한 app의 고객, 판매자용, 서버를 따로 작업하여 한곳으로 합치는 작업이 고된 작업이며 처음 겪어본 경험으로 git으로 conflict도 겪으며 해결하는 유익한 시간을 가지며 완성은 하지 못했지만 재밌고 득이 있는 과정이었다.

고객 A 팀 참여자

지정훈[팀장] - @jeonghoonji
고도현 - @k906506
기태욱 - @KiTaeUk
김건형 - @GeonHyeongKim
김도희 - @ehvkddl
김태성 - @KTS224
김태형 - @yahoth
박민주 - @rirupark
박제균 - @jekyun-park
박진형 - @JINHYUNGP
박희경 - @kyungeee
신현준 - @greenthings
이민경 - @mxnkng
이원형 - @whl0526
이학진 - @LEEHAKJIN-VV
전근섭 - @JKSeub

Libraries