- 개발 환경
- 사용 라이브러리
- 기술 스택
- Front : SwiftUI, Swift UIkit
- 버전 및 이슈 관리 : Github, Github Issues
- 협업 툴 : Discord, Notion, Github Wiki
- Alamofire
- HTTP 네트워킹 작업을 간소화하고 효율적으로 처리할 수 있도록 하기 위함
- Moya에 네트워크 계층의 기본엔진으로 사용하며, 인터셉터 기능을 통해 요청/응답을 중간에 가로채어 로깅, 인증 토큰 자동 개신 작업을 수행하기 위함
- Moya
- API 요청의 구조화와 코드의 가독성을 높이기 위해 사용
- Combine과 함께 사용하여 반응형 프로그래밍 처리를 위함
- Moya에서 Combine을 활용하여 네트워크 호출을 Publisher로 처리 할 것이다.
- 데이터 스트림 기반으로 요청과 응답을 처리하고, 오류 처리 및 데이터 바인딩
- Alamofire의 인터셉터를 활용하여 네트워크 요청의 전/후처리 쉽게 추가할 수 있도록 한다
- Swift
- iOS 앱 개발을 위해 Swift 언어로 개발
- MVC(Model - View - Controller)
- UIKit 기반 화면에서는 MVC 패턴을 활용하여 데이터 로직과 UI 계층을 분리
- 사용자 프로필, 그룹 관리, 코스 관리에서 사용
- MVVM(Model-View-ViewModel)
- SwiftUI 기반 화면에서는 MVVM 패턴을 사용하여 데이터 상태 관리와 UI 분리
- 데이터 바인딩 기능을 활용하여 뷰와 상태 간의 간결한 데이터 흐름을 구현
- Dependency Injection
- DIContainer를 활용하여 SwiftUI와 UIKit 간 상태를 공유하고 데이터 흐름을 원활하게 유지
- Combine
- Moya와 결합하여 API 요청을 Combine의 Publisher로 처리하여 데이터 스트림 관리하기 위함
- 네트워크 요청, 데이터 스트림, 사용자 입력 등 다양한 비동기 작업을 선언적으로 관리하기 위함
- Keychain
- UserDefaults
- 유저의 입력 데이터를 빠르게 불러오기 위해 사용
- Swift Package Manager
- Xcode와 완벽히 통합되어 별도의 플러그인 없이도 의존성을 간편하게 관리 가능하기 떄문
main
- 제품 출시 브랜치
develop
- 출시를 위해 개발하는 브랜치
feat/xx
- 기능 단위로 독립적인 개발 환경을 위해 작성
refac/xx
- 개발된 기능을 리팩토링 하기 위해 작성
hotfix/xx
- 출시 버전에서 발생한 버그를 수정하는 브랜치
let actionSheet = UIActionSheet(
title: "정말 계정을 삭제하실 건가요?",
delegate: self,
cancelButtonTitle: "취소",
destructiveButtonTitle: "삭제해주세요"
)
if let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
user.gender == .female {
// ...
}
- 나중에 추가로 작업해야 할 부분에 대해서는
// TODO: - xxx 주석을 남기도록 한다.
- 코드의 섹션을 분리할 때는
// MARK: - xxx 주석을 남기도록 한다.
- 함수에 대해 전부 주석을 남기도록 하여 무슨 액션을 하는지 알 수 있도록 한다.
- 본인이 개발하고 있는 부분에 대해, 추후 다시 수정 작업이 필요하거나 어려움을 겪고 있는 부분에 대해서는 Github ISSUE 항목에 작성해두도록 한다.
- PR 시, 템플릿이 등장한다. 해당 템플릿에서 작성해야할 부분은 아래와 같다
PR 유형 작성
, 어떤 변경 사항이 있었는지 [] 괄호 사이에 x를 입력하여 체크할 수 있도록 한다.
작업 내용 작성
, 작업 내용에 대해 자세하게 작성을 한다.
추후 진행할 작업
, PR 이후 작업할 내용에 대해 작성한다.
리뷰 포인트
, 본인 PR에서 꼭 확인해야 할 부분을 작성한다.
아이콘 |
코드 |
설명 |
원문 |
🐛 |
bug |
버그 수정 |
Fix a bug |
✨ |
sparkles |
새 기능 |
Introduce new features. |
💄 |
lipstick: |
UI/스타일 파일 추가/수정 |
Add or update the UI and style files. |
♻️ |
recycle |
코드 리팩토링 |
Refactor code. |
➕ |
heavy_plus_sign |
의존성 추가 |
Add a dependency. |
🔀 |
twisted_rightwards_arrows |
브랜치 합병 |
Merge branches. |
💡 |
bulb |
주석 추가/수정 |
Add or update comments in source code |
🔥 |
fire |
코드 파일 삭제 |
Remove code or files. |
🚑 |
ambulance |
긴급 수정 |
Critical hotfix. |
🎉 |
tada |
프로젝트 시작 |
Begin a project. |
🔒 |
lock |
보안 이슈 |
🔒 |
📦Catchy
┣ 📂API
┃ ┣ 📂APITarget
┃ ┣ 📂Protocol
┃ ┣ 📂Repository
┃ ┣ 📂Service
┃ ┣ 📂UseCase
┃ ┗ 📂Util
┃ ┃ ┣ 📂TokenRefresher
┣ 📂APP
┣ 📂Common
┃ ┣ 📂Enum
┃ ┣ 📂Protocol
┃ ┗ 📂UIComponents
┣ 📂Core
┃ ┣ 📂DIContainer
┃ ┗ 📂Util
┃ ┃ ┗ 📂Navigation
┣ 📂Model
┃ ┣ 📂Request
┃ ┣ 📂Response
┣ 📂Modules
┣ 📂Preview Content
┃ ┗ 📂Preview Assets.xcassets
┣ 📂Resources
┃ ┣ 📂Assets.xcassets
┃ ┃ ┣ 📂AccentColor.colorset
┃ ┃ ┣ 📂AppIcon.appiconset
┃ ┣ 📂Color.xcassets
┃ ┣ 📂Fonts
┃ ┣ 📂Image
┃ ┣ 📂Keyboard
┃ ┣ 📂Keychain
┃ ┣ 📂Modifier
┃ ┗ 📂Shadow
┗ 📜ContentView.swift