์๊ฐ์ฅ์ ์ธ์ ์ํ ๋ง์ถคํ ์ ๋ณด ๊ตฌ๋ ์๋ฆผ ์๋น์ค์ iOS ์ฑ์ ๋๋ค. ๊ตฌ๋ ํ ์นํ์ด์ง์ ์ ๊ธ ์์ฝ์ ๋ฐ์ ์์ฑ์ผ๋ก ๋ค๋ ค์ค๋๋ค.
today-s-sound/
โโ .github/
โ โโ workflows/ci.yml
โโ today-s-sound.xcodeproj/ # Xcode ํ๋ก์ ํธ
โโ today-s-sound/ # ์ฑ ์์ค ๋ฃจํธ
โ โโ App/
โ โ โโ TodaySSoundApp.swift # ์ฑ ์ง์
์
โ โโ Core/ # ์ฑ ์ ์ญ ์ธํ๋ผ ๊ณ์ธต
โ โ โโ Network/ # APITargetType, Provider, Service, Targets
โ โ โโ Auth/ # UserSession, UserCredentialsProvider
โ โ โโ Security/ # Keychain
โ โ โโ AppState/ # SessionStore, AppThemeManager(๊ณ ๋๋น)
โ โ โโ Pagination/
โ โ โโ Error/
โ โโ Data/
โ โ โโ Models/ # User, Subscription, Feed, Alarm, Keyword โฆ
โ โโ Presentation/
โ โ โโ Base/Component/ # ๊ณตํต ์ปดํฌ๋ํธ
โ โ โโ Features/ # Main, Feed, NotificationList,
โ โ # SubscriptionList, AddSubscription,
โ โ # OnBoarding, Settings
โ โโ Services/
โ โ โโ SpeechService.swift # ์์ฑ(TTS) ์ฌ์
โ โโ Resources/
โ โ โโ Fonts.swift / Colors.swift
โ โ โโ KoddiUDOnGothic-*.otf
โ โโ Assets.xcassets/
โ โโ Info.plist
โโ .gitignore
โโ .swiftformat
โโ .swiftlint.yml
โโ Makefile
โโ README.md
ํ๋ฉด(Presentation/Features)์ View / ViewModel / Model๋ก ๋๋๊ณ , ๋คํธ์ํฌยท์ธ์ฆยท์ ์ฅ ๊ฐ์ ๊ณตํต ๊ด์ฌ์ฌ๋ Core์ ๋ก๋๋ค.
์ด ์ฑ์ ์ฃผ ์ฌ์ฉ์๋ ์คํฌ๋ฆฐ๋ฆฌ๋ ์ฌ์ฉ์์ ๋๋ค. ํ๋ฉด์ ๋ง๋ค ๋ ๋ค์์ ๊ธฐ๋ณธ์ผ๋ก ์งํต๋๋ค.
- VoiceOver ๋์ โ ๋ชจ๋ ์ธํฐ๋์
์์์
accessibilityLabel(71๊ณณ)๊ณผaccessibilityHint(42๊ณณ)๋ฅผ ๋ถ์ฌํ๊ณ , ์ฅ์์ฉ ์์๋accessibilityHidden์ผ๋ก ๊ฐ์ถฅ๋๋ค. ์นด๋์ฒ๋ผ ๋ฌถ์ด ์ฝ์ด์ผ ํ๋ ์์ญ์accessibilityElement(children:)๋ก ํ๋์ ์์๋ก ํฉ์นฉ๋๋ค. - ์์ฑ ์ฌ์ โ
Services/SpeechService.swift์์ ์์ฝ๋ฌธ์ TTS๋ก ์ฝ์ด ์ค๋๋ค. ํ์ ํฐ ์ฌ์ ๋ฒํผ ํ๋๋ก ์ค๋ ๋์ฐฉํ ์์ฝ์ ์ด์ด์ ๋ฃ์ต๋๋ค. - ๊ณ ๋๋น ๋ชจ๋ โ
Core/AppState/AppThemeManager.swift์Resources/Colors.swift๋ก ์์ ์ธํธ๋ฅผ ์ ํํฉ๋๋ค. ์ค์ ์์ ์ผ๊ณ ๋๋๋ค. - ์์ฒด โ ํ๊ตญ์ฅ์ ์ธ๊ฐ๋ฐ์ KoddiUD ์จ๊ณ ๋(Regular / Bold / ExtraBold)์ ์ฌ์ฉํฉ๋๋ค.
- ํฐ์น ์์ญ โ ์ฃผ์ ๋ฒํผ์ ํฌ๊ฒ, ํ๋ฉด๋น ์กฐ์ ์๋ ์ ๊ฒ ์ ์งํฉ๋๋ค.
์ ํ๋ฉด์ ์ถ๊ฐํ ๋๋ VoiceOver๋ฅผ ์ผ ์ํ์์ ํ ๋ฒ ํ์ด ๋ณด๊ณ PR์ ์ฌ๋ ค ์ฃผ์ธ์.
-
๊ธฐ๋ณธ ๋ธ๋์น:
main, ์์ ๋ธ๋์น ๋ถ๊ธฐ:dev -
์์ ํ๋ฆ
-
dev์์ ์ ๋ธ๋์น ์์ฑ- ๋ธ๋์น๋ช
:
ํ ํฝ/#์ด์๋ฒํธ(์:feature/#123)
- ๋ธ๋์น๋ช
:
-
์์ ํ PR ๋์์ ํญ์
dev -
์ฝ๋๋ฆฌ๋ทฐ/CI ํต๊ณผ ํ
dev์ ๋จธ์ง โ ์ดํ ์ด์ ์ ๋ต์ ๋ฐ๋ผmain๋ฐ์
-
-
์ด์ ์ ๋ชฉ / PR ์ ๋ชฉ / ์ปค๋ฐ ๋ฉ์์ง(Title) ํต์ผ
- ํฌ๋งท: ํ
ํ๋ฆฟ์ ๋ง์ถฐ ์ด์ ์์ฑ ํ, ์ปค๋ฐ ๋ฉ์์ง ์ ๋ชฉ ๋ฐ PR ์ ๋ชฉ์ **
[ํ ํฝ/#์ด์๋ฒํธ] ์ ๋ชฉ**์ผ๋ก ์์ฑ - ์:
[Feature/#123] ํ ํ๋ฉด ๋ น์ ๋ฒํผ ์ถ๊ฐ
- ํฌ๋งท: ํ
ํ๋ฆฟ์ ๋ง์ถฐ ์ด์ ์์ฑ ํ, ์ปค๋ฐ ๋ฉ์์ง ์ ๋ชฉ ๋ฐ PR ์ ๋ชฉ์ **
-
๋ณธ๋ฌธ(Description): ๋ณ๊ฒฝ ์ฌํญ์ ์ค๋ฐ๊ฟ ๋ฆฌ์คํธ๋ก ๊ฐ๋จํ
-
์ปค๋ฐ ๋ฉ์์ง ์:
[Feature/#123] ํ ํ๋ฉด ๋ น์ ๋ฒํผ ์ถ๊ฐ
- ๋ น์ ์์/์ ์ง ํ ๊ธ ์ถ๊ฐ
- ์ ๊ทผ์ฑ ๋ผ๋ฒจ ๋ณด๊ฐ
- ๋ฆฌ์์ค ๊ฒฝ๋ก ์ ๋ฆฌ
-
-
ํ ํฝ(ํ์ ) ๋ชฉ๋ก (๋ด์ฉ์ ๋ผ๋ฒจ์ ์ฐธ๊ณ )
Feature,Fix,Refactor,Chore,Setting,Deploy
์ปค๋ฐ/ํธ์ ์ ์ ์๋ ์์๋ก ์คํํด ์ฃผ์ธ์.
# 1) ์๋ ํฌ๋งท + ๋ฆฐํธ(๋์จ)
make fix
# 2) ์์ ์์ด ๊ฒ์ฌ(์๊ฒฉ)
make check
# 3) ์๋ฎฌ๋ ์ดํฐ ๋น๋
make build
# 4) CI์ ์ ์ฌํ๊ฒ ํ ๋ฒ์(์ฒดํฌ + ๋น๋)
make ciํ์ฌ ํ ์คํธ ํ๊น ๋ฏธ๊ตฌ์ฑ โ
make test๋build๋ฅผ ๋ํํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
- ์ํฌํ๋ก:
.github/workflows/ci.yml - ํธ๋ฆฌ๊ฑฐ:
pull_request(๋ชจ๋ PR์์ ์๋ ์คํ) - ์ํ: SwiftFormat ์ฒดํฌ โ SwiftLint ์๊ฒฉ ๋ชจ๋ โ iOS ์๋ฎฌ๋ ์ดํฐ ๋น๋
| ์ ์ฅ์ | ์ค๋ช |
|---|---|
| server | ๋ฐฑ์๋ API ยท ๋ฐฐํฌ/ํฌ๋กค๋ง ๋ฌธ์ |
| crawler | ๊ตฌ๋ ์ฌ์ดํธ ํฌ๋กค๋ฌ (Python) |
| terraform-infra | AWS ์ธํ๋ผ IaC (Terraform) |