덕후들이 사랑하는 거래 공간 - 납작마켓
납작한 것만 취급하는 오타쿠 전용 중고거래 서비스
조혜린 | 김한열 | 박어진 | 조호근 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
|
|
|
|
1️⃣ 덕후 취향 반영 온보딩
- 관심 장르를 직접 설정하고 취향에 딱 맞는 아이템들을 한눈에 확인해요
- 개인 맞춤 상품 추천으로 취향 저격 아이템을 발견해보세요
2️⃣ 500여개 장르로 세분화된 상세 탐색
- 불편한 검색은 이제 그만! 애니메이션, 게임 등 세분화된 장르로 더욱 편리하고 정확하게 상품을 찾아봐요
- 검색, 필터 기능을 통해 원하는 장르 및 아이템을 쉽고 정확하게 탐색해보세요
3️⃣ 원하는 상품은 '구해요'에서 쉽게 찾고, 팔고 싶은 굿즈는 '팔아요'에서 빠르게 거래해요
- (‘팔아요’와 ‘구해요’ 카테고리를 통해) 거래 목적에 맞게, 보다 편리하고 확실하게 거래해보세요
4️⃣ 덕후들의 거래 방식에 딱 맞는 등록 시스템!
- 원하는 아이템을 구하기 위해 매일 검색하거나 찾아다니지 않아도 돼요!
- 장르 설정부터 상품 상태 설정까지, 빠르고 간편한 거래가 가능해요
- 가격 제시 버튼과 원하는 가격대 설정 기능으로 위시템을 구할 수 있어요
5️⃣ 나만의 덕질 마켓
- 자신만의 독특한 스타일로 마켓의 개성을 드러낼 수 있어요
- 관심 장르, 소개글, 프로필 이미지로 직접 커스텀하여 나만의 마켓을 꾸며보세요

SwiftUI의 선언형 UI 특성과 자연스럽게 맞물리는 MVVM(Model-View-ViewModel) 아키텍처를 채택하여 뷰와 비즈니스 로직을 명확히 분리했습니다.
이로 인해 코드의 재사용성과 테스트 용이성이 높아졌고, 뷰 상태 관리를 더욱 체계적으로 수행할 수 있었습니다.
또한, ViewModel을 통해 데이터 흐름을 일관되게 유지함으로써 유지보수성과 확장성을 고려한 구조를 구현하였습니다.
![]() |
![]() |
---|
Naming:
- 타입: UpperCamelCase
- 변수/상수: lowerCamelCase
- 약어(URL/ID/API): 대문자
Structure:
- Protocol → extension으로 분리
- import: 내장 먼저, 서드파티는 한 줄 띄움
- 90자 초과시 줄바꿈
Image:
- icn_/btn_/img_ 접두어
- snake_case
- SVG 우선
self/강제 언래핑 지양, 긴 View는 extension으로 분리
📁 Project
├── 📁 Applacation
│ ├── 📁 Preview Content
│ ├── Napzakmarket_iOSApp.swift
├── 📁 Global
│ ├── 📁 Core
│ ├── 📁 Modifier
│ ├── 📁 Extensions
│ ├── 📁 Components
│ ├── 📁 Models
│ ├── 📁 Enums
│ ├── 📁 Literals
│ │ ├── StringLiterals.swift
│ │ ├── FonrLiterals.swift
│ │ └── ColorLiterals.swift
│ └── 📁 Resources
│ ├── 📁 Animation
│ ├── 📁 Fonts
│ └── Assets.xcassets
├── 📁 Network
│ ├── 📁 Base
│ ├── 📁 Auth
│ │ ├── 📁 DTO
│ │ │ ├── 📁 Request
│ │ │ └── 📁 Response
│ │ ├── AuthAPI.swift
│ │ └── AuthService.swift
│ ├── 📁 Genre
│ │ ├── 📁 DTO
│ │ │ ├── 📁 Request
│ │ │ └── 📁 Response
│ │ ├── GenreAPI.swift
│ │ └── GenreService.swift
│ ├── 📁 Interest
│ │ ├── 📁 DTO
│ │ │ ├── 📁 Request
│ │ │ └── 📁 Response
│ │ ├── InterestAPI.swift
│ │ └── InterestService.swift
│ ├── 📁 Store
│ │ ├── 📁 DTO
│ │ │ ├── 📁 Request
│ │ │ └── 📁 Response
│ │ ├── StoretAPI.swift
│ │ └── StoreService.swift
│ ├── 📁 Product
│ │ ├── 📁 DTO
│ │ │ ├── 📁 Request
│ │ │ └── 📁 Response
│ │ ├── ProductAPI.swift
│ │ └── ProductService.swift
│ ├── 📁 Report
│ │ ├── 📁 DTO
│ │ │ ├── 📁 Request
│ │ │ └── 📁 Response
│ │ ├── ReportAPI.swift
│ │ └── ReportService.swift
└── 📁 Presentation
├── 📁 Splash
│ ├── 📁 Model
│ └── 📁 View
│ └── SplashView.swift
├── 📁 Onboarding
│ ├── 📁 Model
│ ├── 📁 View
│ │ └── OnboardingView.swift
│ └── 📁 ViewModel
│ └── OnboardingViewModel.swift
├── 📁 Home
│ ├── 📁 Model
│ ├── 📁 View
│ │ └── HomeView.swift
│ └── 📁 ViewModel
│ └── HomeViewModel.swift
├── 📁 Search
│ ├── 📁 Model
│ ├── 📁 View
│ │ └── SearchView.swift
│ └── 📁 ViewModel
│ └── SearchViewModel.swift
├── 📁 Register
│ ├── 📁 Model
│ ├── 📁 View
│ │ └── RegisterView.swift
│ └── 📁 ViewModel
│ └── RegisterViewModel.swift
├── 📁 Detail
│ ├── 📁 Model
│ ├── 📁 View
│ │ └── DetailView.swift
│ └── 📁 ViewModel
│ └── DetailViewModel.swift
├── 📁 Mypage
│ ├── 📁 Model
│ ├── 📁 View
│ │ └── MypageView.swift
│ └── 📁 ViewModel
│ └── MypageViewModel.swift
├── 📁 Report
│ ├── 📁 Model
│ ├── 📁 View
│ │ └── ReportView.swift
│ └── 📁 ViewModel
│ └── ReportViewModel.swift
└── 📁 Tabbar
├── 📁 Model
└── 📁 View
└── TabbarView.swift