Skip to content

yuzzin0121/SweetLog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

달콤로그

달콤로그는 빵, 케이크 등 빵을 좋아하는 사람들이 후기를 공유하고 소통할 수 있는 베이커리 커뮤니티 앱입니다.


프로젝트 개발 및 환경

  • 개발 인원: iOS 1인 개발
  • 개발 기간: 3주 (2024.04.11 ~ 2024.05.05)
  • 개발 환경: 최소 버전 iOS 16.0 / 세로 모드 / 아이폰용

핵심 기능

  • 인증 | 회원가입, 이메일 중복 확인, 로그인, 로그아웃, 탈퇴
  • 후기, 판매 게시물 | 작성, 조회, 수정, 삭제, 결제, 좋아요, 댓글 작성
  • 태그 조회
  • 지도 | 베이커리 탐색, 상세 정보 조회, 리뷰 조회, 전화걸기
  • 프로필 | 프로필 조회, 게시물, 좋아요한 게시물 조회, 팔로우, 팔로잉, 결제 내역
  • 채팅
  • 설정 | 결제 내역 조회

스크린샷

👩🏻‍💻 회원가입 • 로그인

이메일 중복 체크 유효성 검사 회원가입 로그인

😃 프로필

프로필 수정 게시물•좋아요 팔로우•팔로우취소 팔로우•팔로잉 화면

🔍 후기 • 판매글

커뮤니티(무한스크롤) 태그 검색 결제 장소 검색 무한 스크롤
후기 작성 새로고침 후기 수정 후기 삭제 좋아요
댓글 작성 댓글 삭제 위치 상세 화면

🗺️ 지도

장소 검색 현재 지도에서 탐색 클러스터링 베이커리 상세화면
리뷰 전화걸기

💬 채팅

채팅방 리스트 채팅

주요 기술

Framework - UIKit Pattern - Router / Delegate / Singleton / MVVM
Network - Alamofire / Codable / Socket.iO
ReactiveProgramming - RxSwift / RxDataSources
Code-Based UI - SnapKit / CompositionalLayout / MapKit
OpenSource - TabMan, FloatingPanel, Kingfisher, Toast
Etc - iamport-iOS

핵심 구현

MVVM

  • MVVM 디자인 패턴을 적용하여 뷰와 비즈니스 로직을 분리
  • Input / Output 패턴을 활용해 뷰모델의 입력과 출력을 명확하게 분리
  • protocol을 통해 ViewModel에서 사용되는 기본 구현을 제공

Alamofire

  • Alamofire에 Router 패턴과 Generic을 통해 네트워크 통신의 구조화 및 확장성 있는 네트워킹 구현
  • Alamofire RequestInterceptor를 활용한 accessToken 갱신 구현 JWT
  • multipart-form을 활용해 이미지를 서버에 전송

RxSwift

  • RxSwift을 활용하여 반응적인 비동기 처리 구현
  • 네트워크 요청에 대한 응답을 Single<Result<>> 타입으로 반환함으로써 명시적이고 간결하게 상태 처리

RxDataSource

  • RxDataSource를 활용하여 유연하고 확장 가능한 데이터 관리 구성

Etc

  • ClusterAnnotationView를 구현하여 검색된 장소 클러스터링 구현
  • CompositionalLayout을 통해 Self-Sizing Cell 구현
  • url에 대한 메타데이터를 추출하여 LinkPresentation으로 표현
  • 후기 조회, 태그 검색에서 커서 기반 페이지네이션을 적용하여 뷰에 보여지는 만큼의 리소스만 요청
  • 공통적인 디자인의 뷰를 재사용하기 위해 커스텀 뷰로 구성
  • 이미지 및 컬러 등 반복적으로 사용되는 에셋을 enum을 통해 네임스페이스화하여 관리
  • NotificationCenter를 활용해 다른 계층에 있는 뷰에 데이터 갱신
  • viewModelType protocol을 구현하여 셀에 공통적으로 사용되는 identifier, ViewModel에 Input-Output 패턴을 를 사용하도록 구성
  • NetworkMonitor를 통해 네트워크 단절 상황 대응

결제

  • PG 결제 시스템 연동영수증 검증 로직 구현



트러블 슈팅

  1. 셀 재사용 시 이미지가 다른 포스트의 이미지로 나오는 문제 원인
  • prepareForReuse 메서드에서 StackView의 인스턴스를 생성하고 있지만, 이 때 StackView의 하위 뷰들이 제거되지 않고 남아있어 꼬이는 상황 해결
  • imageStackView = UIStackView가 아닌 서브뷰를 제거하여 해결
 override func prepareForReuse() {
	super.prepareForReuse()
	imageStackView.arrangedSubviews.forEach {
	  $0.removeFromSuperview()
	}
}



  1. Sever와 통신하면서 발생하는 공통적인 에러에 대한 처리
  • enum에 LocalizedError 프로토콜을 채택하여 각 상태 코드에 errorDescription을 정의 → print(”에러 메시지”) 가 아닌 print(error.localizedDescription)으로 에러 문구를 출력

About

베이커리 커뮤니티 앱

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages