- ํ๋ก์ ํธ์ ํด๋์์ pod install
- Target์์, Signing & Capabilities์์ Team ์์
- ๋น๋
- xcode : Version 13.4.1 (13F100)
- deployment Target : 15.0
Downey | JMin | Oyat |
---|---|---|
๊ฐ๋ฐ ๋ฐ ํ ๋ฆฌ๋ฉ, ๊ธฐ์ ์๊ฐ | ๊ฐ๋ฐ ๋ฐ ์ฑ Bug ํ์ | ๊ฐ๋ฐ ๋ฐ ์คํฐ๋ ๋ด์ฉ ์๋ฃ ์ ์ |
ํ์ | ๊ธฐ์ฌํ ๋ด์ฉ |
---|---|
Downey | - ํ ์ผ์ ๋ฐ ์์
๊ณต์ ์กฐ์ - ์ฑ์ ํจํด ๋ฐ ์ํคํ ์ณ ๊ฐ์ฒด ๊ตฌํ ๋ฐฉ๋ฒ ๋ฆฌ๋ฉ - ์ฝ๋ ๋ฆฌํฉํ ๋ง ๋ฆฌ๋ - AudioManager ๊ฐ์ฒด ์ญํ ๋ถ๋ฆฌ - ์์กด ๊ฐ์ฒด ์ ๋ฌ container ๊ตฌํ - ์์กด๊ด๊ณ์ dependency injection ๊ตฌํ - pathfinder ๊ฐ์ฒด ๊ตฌํ - DefaultAudioPlayer ๊ธฐ๋ฅ ๊ตฌํ - VoiceMemoPlayerView ๊ธฐ๋ฅ ๊ตฌํ - VoiceMemoRecoderView UI ๊ตฌํ |
JMin | - ๋ก์ง ๋ฒ๊ทธ ํฝ์ค ๋ฐ ๋ฆฌํฉํ ๋ง - FirebaseManager ๋ค์ด๋ก๋, ์ ๋ก๋, ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ - DefaultAudioRecorder ๊ธฐ๋ฅ ๊ตฌํ - VoiceMemoPlayerView UI๊ตฌํ - VoiceMemoRecoderView ๊ธฐ๋ฅ ๊ตฌํ - waveFormView ๊ตฌํ (Pair Programming) |
Oyat | - VoiceMemoListView UI ๊ตฌํ - VoiceMemoListView์ tableView dataSource, delegate ๊ตฌํ - Coordinator Pattern ๊ตฌํ - DefaultAudioPlayer์ Volume์กฐ์ ๊ธฐ๋ฅ ๊ตฌํ - FirebaseStorageManager์ MetaData ์ฃผ์ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ - ๋ น์ ์๋ฃ ํ ํ ์ด๋ธ๋ทฐ ๋ฆฌ๋ก๋ notification ์ ์ฉ - ์ ์ค์์ดํํด์ ์ญ์ ์ firebaseStorage, ๋ก์ปฌ์์ ํ์ผ ์ญ์ ๊ธฐ๋ฅ ๊ตฌํ - waveFormView ๊ตฌํ (Pair Programming) - FirebaseStorageManager์ Singleton Pattern ์ ๊ฑฐ - FirebaseStorage์ ๋ น์ ํ์ผ์ ์ฌ์ ์๊ฐ ๋ฉํ๋ฐ์ดํฐ ์ฃผ์ ๊ธฐ๋ฅ ๊ตฌํ |
firebaseStorage์ ์ฐ๋ํ๋ฉฐ, ์ฌ์ ๋ฐ ๋ น์ ๊ธฐ๋ฅ๊ณผ ๋ค์์ ๊ด๋ จ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ App
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ : FirebaseStorage Only!
Coordinator Pattern
Observer Pattern
Delegate Pattern
Code-based UI
MVC
Dependency inversion
- all Flow
- ListView Flow
- RecordView Flow
- PlayView Flow
- ์ฒซ ํ๋ฉด
- RecordView, ๋ ์ฝ๋ ๊ธฐ๋ฅ
- RecordView, ์ฌ์ ๊ธฐ๋ฅ
- PlayView, ์ฌ์๊ธฐ๋ฅ
MVC์ Coordinatorํจํด์ ์ ์ฉํจ์ผ๋ก Massive VC๋ฅผ ๋์ด๋ด๊ธฐ ์ํด ์ฌ์ฉํ์์ต๋๋ค.
Coordinator๊ฐ ํ๋ฉด ์ ํ ์ญํ ์ ํด์ฃผ๋ ๊ฐ์ฒด๊ฐ ๋์ด ์ข ๋ VC๋ฅผ ๊ฐ๋ณ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ํ๋ฉด ์ ํ์ ๋ํ ์ฝ๋๊ฐ ๋ชจ์ฌ ์์ด ํ์ , ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ฉ์ดํ๊ณ ๊ฒ๋ค๊ฐ ์ฑ ์๊ณผ ๊ตฌ๋ถ(์ญํ )์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ Coordinator๋ฅผ ์ฌ์ฉํ ์ ์์ด ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๊ตฌํํ๊ธฐ ๋ ์ํจํฉ๋๋ค.
์ต์ ๋ฒ ํจํด์ ํ์ฉํ๋ฉด ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒจ๋ ๋ฌด๋ํ ์ฒ๋ฆฌํ ์ ์๋ ์ ์ฐํ ๊ฐ์ฒด ์งํฅ ์์คํ ์ ๊ตฌ์ถํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ ๊ฐ์ฒด ์ฌ์ด์ ์ํธ ์์กด์ฑ์ ์ต์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.(๋์จํ๊ฒ ๊ฒฐํฉ๋์ด ์๊ธฐ ๋๋ฌธ)
- Delegate Design Pattern ์ 1:1 ๊ด๊ณ์์ ์ฌ์ฉํ๋ ๋ฐ๋ฉด, Observer & Notification Pattern ์ 1:๋ค ๊ด๊ณ ์ฑ๋ฆฝ ๊ฐ๋ฅ ( ex. ์ ํฌ์ ๊ฒฝ์ฐ ๋ ์ฝ๋๋ทฐ, ํ๋ ์ด๋ทฐ 2๊ณณ์ ์ต์ ๋ฒ๋ฅผ ์์ฑํด AudioPlayable ๊ฐ์ฒด์ 1๊ฐ์ Notification ์ ๊ธฐ๋ค๋ฆด ์ ์๊ฒ ํ์์ต๋๋ค)
- ์ค์๊ฐ์ผ๋ก ํ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ ํํ ์ ์์ต๋๋ค.
- ๋์จํ ๊ฒฐํฉ(Loose Coupling)์ผ๋ก ์์คํ ์ด ์ ์ฐํ๊ณ ๊ฐ์ฒด๊ฐ์ ์์กด์ฑ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค
- Open / Close ์์น(๊ฐ๋ฐฉ ํ์ ์์น)์ ์งํฌ ์ ์์ต๋๋ค. (๊ฐ๋ฐฉ ํ์ ์์น: ํ์ฅ์๋ ์ด๋ ค์๊ณ , ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผ ํ๋ค.)
- Delegate์ ์ฌ์ฉํ์ฌ ์ค๊ณํ์ง ์๊ณ Notification๋ง ๊ฐ์ง๊ณ ์ค๊ณ๋ฅผ ํ๋ค๋ฉด ๋ค๋ฅธ ์ฌ๋์ด ์ฝ๋๋ฅผ ์ ์ง๋ณด์ํ ๋ ์ด Notification์ ๋๊ฐ Subscribeํ๊ณ ์๋์ง ์๊ธฐ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ 1:1 ๊ด๊ณ๋ผ๋ฉด Delegate์ ์ฌ์ฉํ์ฌ ํด๋น Delegate์ ์ด๋ฆ, ํ๋กํ ์ฝ์ ๋ฉ์๋ ๋ฑ์ ํตํด ์ด๋ค ๊ณผ์ ์ ์ํด ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ก์ง์ด ๋์๊ฐ๋์ง ํ์ ํ๊ณ ์ถ์ ํ๊ธฐ๊ฐ ํ๊ฒฐ ์์ํ๊ธฐ์ Delegate ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ์ต๋๋ค.
- ๋งค์ฐ ์๊ฒฉํ Syntax๋ก ์ธํด ํ๋กํ ์ฝ์ ํ์ํ ๋ฉ์๋๋ค์ด ๋ช ํํ๊ฒ ๋ช ์๋จ.
- ์ปดํ์ผ ์ ๊ฒฝ๊ณ ๋ ์๋ฌ๊ฐ ๋ ์ ํ๋กํ ์ฝ์ ๊ตฌํ๋์ง ์์ ๋ฉ์๋๋ฅผ ์๋ ค์ค.
- ๋ก์ง์ ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ธฐ ์ฌ์.
- ํ๋กํ ์ฝ ๋ฉ์๋๋ก ์๋ ค์ฃผ๋ ๊ฒ๋ฟ๋ง์ด ์๋๋ผ ์ ๋ณด๋ฅผ ๋ฐ์ ์ ์์.
- ์ปค๋ฎค๋์ผ์ด์ ๊ณผ์ ์ ์ ์งํ๊ณ ๋ชจ๋ํฐ๋งํ๋ ์ 3์ ๊ฐ์ฒด(ex: NotificationCenter ๊ฐ์ ์ธ๋ถ ๊ฐ์ฒด)๊ฐ ํ์์์.
- ํ๋กํ ์ฝ์ด ์ปจํธ๋กค๋ฌ์ ๋ฒ์ ์์์ ์ ์๋จ.
class / struct | ์ญํ |
---|---|
SceneDelegate |
- ์ฑ์ ์ด๊ธฐ ๊ถํ ์์ฒญ, Coordinator ๋ฐ ๋น์ฆ๋์ค ๋ก์ง ๊ฐ์ฒด๋ฅผ ์์ฑํจ. |
AppCoordinator |
- ์ฑ์ ํ๋ฉด ์ ํ์ ๋ด๋นํ๋ ๊ฐ์ฒด. SceneDelegate๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ ViewController์ ํ์์ ๋ง๊ฒ ์ ๋ฌํ๋ค. |
VoiceMemoListView |
- FirebaseStorageManager๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ์์ ๋
น์ ํ์ผ ๋ชฉ๋ก์ ๊ฐ์ ธ์จ๋ค. - ํ์ผ๋ช ์ ๋ฐ๋ฅธ metaData๋ฅผ ์ป์ด์ View์ ํ๊ธฐํ๋ค. - ์ ์ ์ฌ๋ผ์ด๋ํ์ฌ, ๋ก์ปฌ๊ณผ FirebaseStorage๋ด์ ๋ น์ ํ์ผ์ ์ญ์ ํ ์ ์๋ค. |
VoiceMemoRecordView |
- ๋
น์์ ํ ์ ์๋ค. - ๋ น์ ์ ํน์ ์ฃผํ์ ์ดํ๋ง ํต๊ณผ ํ ์ ์๋๋ก ํ๋ค. - ๋ น์ ์ ๋ณผ๋ฅจ ํํ์ ๋ณผ ์ ์๋ค. - ๋ น์์ ์ฌ์ ํ ์ ์์ผ๋ฉฐ, ์ฌ์ ์์น๋ฅผ 5์ด ์ ํ๋ก ์ด๋ ํ ์ ์๋ค. - ๋ น์ ์๋ฃ ์, ๋ น์ ํ์ผ์ FirebaseStorage์ ์ ๋ก๋ํ๋ค. |
VoiceMemoPlayView |
- ๋
น์์ ์ฌ์ ํ ์ ์์ผ๋ฉฐ, ์ฌ์ ์์น๋ฅผ 5์ด ์ ํ๋ก ์ด๋ ํ ์ ์๋ค. - ๋ น์์ pitch๋ฅผ ๋ฐ๊ฟ ๋ชฉ์๋ฆฌ๋ฅผ ๋ณ์กฐ ํ ์ ์๋ค. - ์ฌ์ ์์น๋ฅผ View์ ์ ๋ณํ๋ฅผ ํตํด ์ ์ ์๋ค. - ๋ น์ ํ์ผ์ ๋ณผ๋ฅจ ํํ์ ๋ณผ ์ ์๋ค. - ์ฌ๋ผ์ด๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ์กฐ์ ํ ์ ์๋ค. |
WaveFormView |
- ์ ๋ฌ๋ฐ์ ๋ณผ๋ฅจ ํํ Data๋ฅผ ์ฌ์ฉํ์ฌ User๊ฐ ๋ณผ๋ฅจ ํํ์ ์ฝ๊ฒ ์ ์ ์๋๋ก ํ๋ค. |
class / struct | ์ญํ |
---|---|
FirebaseStorageManager |
- FirebaseStorage์ Networking ํ๋ ๊ฐ์ฒด. - ํ์ผ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ, ํ์ผ์ metaData๊ฐ์ ธ์ค๊ธฐ, ํ์ผ์ ๋ค์ด, ์ ๋ก๋, ์ญ์ ๊ธฐ๋ฅ |
PathFinder |
- Class FileManager๋ฅผ ๊ฐ์ผ ๊ฐ์ฒด. - ์ฑ์์ ํ์ํ Local File System์ ์ ๊ทผํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต. - ํ์ฌ ์๊ฐ์ ํ์ผ ๊ฒฝ๋ก๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ ์ ๊ณต |
AudioManager |
- Protocol AudioRecordable๊ณผ AudioPlayable ์ฑํ์, ์์ํด์ผ ํ๋ Class. -๋ Procotol์ ๊ตฌํ class์ ํ์ํ ๊ณตํต Property, Method๋ฅผ ์ ๊ณตํ๋ค. |
AudioRecodable |
- ๋ น์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Recorder์ ๊ธฐ๋ฅ์ ๋ช ์ํ๋ Protocol |
DefalutAudioRecoder |
- AudioRecodable์ ์ฑํํ Recoder๊ธฐ๋ฅ์ View์ ์ ๊ณตํ๋ Class |
AudioPlayable |
- ๋ น์ ํ์ผ์ ์ฌ์ํ๋ Player์ ๊ธฐ๋ฅ์ ๋ช ์ํ๋ Protocol |
DefalutAudioPlayer |
- AudioPlayable์ ์ฑํํ Player๊ธฐ๋ฅ์ View์ ์ ๊ณตํ๋ Class |
ํด๋น ํ๋ก์ ํธ์์๋ Manager ํด๋ ๋ด์ ์๋ class๋ค์ด ๋ก์ง์ ๋ด๋นํ์ต๋๋ค. ๊ฐ class๋ ์์ํจ์์ ๊ฐ๊น๊ฒ ๊ตฌํํ๋ ค ๋ ธ๋ ฅํ์์ต๋๋ค. ์ด ๋, ๊ฐ์ฅ ์ด๋ ค์ ๋ class๋ ์ฑ ์์ ๋ถ๋ฆฌํ๊ธฐ ์ ์ AudioManager์์ต๋๋ค. ์ด ๋์๋, ์ค๋์ค ํ์ผ์ local fileSystem ๊ฒฝ๋ก์ธ filePath: URL๋ฅผ Property๋ก ๊ฐ๊ณ ์๋ ํํ์ด๋ฉฐ, filePath๋ init์์ ํ ๋นํ์์ต๋๋ค. ์ด๋ ๋น์ด class๋ฅผ ์์ํจ์์ ๊ฐ๊น๊ฒ ๊ตฌํํ๋ ค๋ ๋ฐฉ์์ ์ ๋ฉด์ผ๋ก ๋ถ๋ชํ๋ ๋ฐฉํฅ์ด์๊ณ , ๊ฐ method๋ filePath๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ๊ฒ ๋์์ต๋๋ค. ํ์ง๋ง, filePath๋ฅผ ๊ผญ, property๋ก ๊ฐ๊ณ ์์ผ๋ฉด ์๋๋๊ฐ์ ๋ํด์ ๊ตฌํ ํ์๋ ๋ช๋ฒ์ด๊ณ ๋ค์ ๊ณ ๋ฏผํ๋ ์ ์, class ๋ด๋ถ์์ method๋ฅผ ์ฌ์ฉ ํ ๋์๋ filePath๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ ์ด ๋ถํธํ๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค. ์ด๋, ์์ผ๋ก๋ ๊ณ์ํด์ ๊ณ ๋ฏผํด์ผํ๋ trade-off ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
AudioManager๋ ๋ณธ๋ Play, Record์ ๊ด๋ จ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ง๋ผํ๋ class์์ต๋๋ค. ๋๋ฌด ๋ง์ ์ฑ ์์ ๊ฐ๋ class ์ด๋ฏ๋ก Play๊ธฐ๋ฅ๊ณผ Record ๊ธฐ๋ฅ์ ๋๋์์ผ๋, ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ Property์ method๊ฐ ์กด์ฌํ์์ต๋๋ค. ๋๋ฌธ์, ์ค์ play, record์ ๊ธฐ๋ฅ์ ํ๋ class๋ ๊ณตํต๋ method๋ฅผ ๊ฐ๊ณ ์๋ AudioManager๋ฅผ ์์ํ๊ณ , ๊ฐ๊ฐ์ ๊ธฐ๋ฅ๋ง ์ํํ๋๋ก ๊ตฌํํ์์ต๋๋ค. ์ด๋ฅผ ํตํ์ฌ, ๊ฐ class๊ฐ ๋จ์ผ ์ฑ ์์ ๊ฐ๋๋ก ํ์์ต๋๋ค.
Protocol AudioPlayable, AudioRecordable์ ์ ์ํ์์ต๋๋ค. ์ด๋ฅผ ํตํ์ฌ, ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ์ ๋์จํ๊ฒํ๋ฉฐ, mocking test๋ฅผ ์งํํจ์ ์์ด์๋ ํธ๋ฆฌ์ฑ์ ์ป์ ์ ์์ต๋๋ค.
๊ฐ ViewController์์ ํ์ํ ๋ก์ง๊ฐ์ฒด๋ฅผ ์ต์์ ๋ชจ๋๋ก ๋ณผ ์ ์๋ SceneDelegate์์ ์์ฑ ํ ๋ค, struct Dependencies๋ฅผ ๋งค๊ฐ๋ณ์๋ก ํ์ฌ ์ ๋ฌํ์ต๋๋ค. ์ด๋ฅผ ํตํ์ฌ, ์ฑ ์ ๋ฐ์ ์ฌ์ฉ๋ ๋ก์ง๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ํตํฉ์ ์ผ๋ก ๊ด๋ฆฌ ํ ์ ์์ต๋๋ค. ๋ถํ์ํ interface์ ์ ๋ฌ์ ๋ง๊ธฐ ์ํด์, Dependencies์ ์ ๋ฌ์ AppCoordinator์์ ๋ฉ์ถฅ๋๋ค. ์ด๋, VoiceMemoPlayView์์ AudioRecordable์ ๊ตฌํ์ฒด class๋ฅผ ์ฐธ์กฐ ํ ํ์๊ฐ ์์ผ๋ฏ๋ก, Dependencies์ ์ ๋ฌ์ ์๋์ ์ผ๋ก ํ์ง ์์ ๊ฒ์ ๋๋ค.
AVAudioPlayerNode.scheduleFile, .scheduleSegment method๋ trailing Closure๋ฅผ ์ ๋ฌํ๋ฉด, ํ์ผ์ ์ข ๋ฃ์ ํด๋น method๊ฐ ์คํ๋ฉ๋๋ค. ๋๋ฌธ์, skip method๋ฅผ ์คํํ๋ฉฐ scheduleFile์ trailing Closure๊ฐ ์คํ๋์ด bug๊ฐ ๋ฐ์ํ์์ต๋๋ค. ๋๋ฌธ์, trailing Closure๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , playerNode.installTab์์ ํ์ฌ ์ฌ์์ค์ธ Frame๊ณผ ์ ์ฒด Frame์ ๋น์จ์ธ ratio๋ฅผ ๊ฒ์ฌํ๊ณ , ์คํต๊ธฐ๋ฅ์ ์ํ ๊ฒ์ธ์ง ํ์ธํ์ฌ ๋ น์ ํ์ผ์ ์ข ๋ฃ์ ํธ๋ฅผ ๋ณด๋ ๋๋ค. ์ด๋ฅผ ํตํ์ฌ ๋ ๋ถ๋ถ์์ ํ์ผ ์ฌ์ ์ ์ง์ ๊ดํ ๋ด์ฉ์ ๋ช ์ํ์ง ์๊ณ , ํ ๊ณณ์์ ๊ด๋ฆฌ ๊ฐ๋ฅํด์ก์ต๋๋ค.
ํ์ฌ App์ FirebaseStorage์ ํ์ผ ๋ชฉ๋ก์ cell๋ก ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ๋๋ฌธ์, ๋คํธ์ํฌ์ success ๋ฆฌ์คํฐ์ค๋ฅผ ๋ฐ์์ ๋, local์ ํ์ผ์ ์ญ์ ํ๋ ๊ฒ์ dummy data๋ฅผ ๋จ๊ธธ ์ํ์ ๋ดํฌํ๋ค ์๊ฐํ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ญ์ ๊ธฐ๋ฅ์ด ์๋ํ๋ฉด, local fileSystem์ ํด๋น ๋ น์ํ์ผ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ , ์กด์ฌํ๋ค๋ฉด ์ญ์ ํฉ๋๋ค. ๊ทธ ํ firebaseStorage์ ํ์ผ remove์ response๋ก success๋ฅผ ๋ฐ์์ ๋, TableView์ Cell์ ์ ๊ฑฐํ๋๋ก ๊ตฌํํ์์ต๋๋ค.
- ๋ฌธ์ ์
- ๋ค์ด๋ง ๋ดค๋ ์ฝ๋๋ค์ดํฐ ํจํด ์ง์ ์ฌ์ฉ์ ํด๋ณด์๊ณ ์ฐ๋ฆฌ ์ฑ์๋ ์ด๋ค ์์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ด ์ข์๊น์ ๋ํ ๊ณ ๋ฏผ
- ๊ณ ๋ฏผํ๋ ์
- ๋ณดํต ์ฝ๋๋ค์ดํฐ์ ๊ฒฝ์ฐ ํ์ฅ์ฑ์ ๊ณ ๋ คํด ๋ถ๋ชจ ์ฝ๋๋ค์ดํฐ์ ์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ํ์ฉํด 2๊ฐ ์ด์์ ์ฝ๋๋ค์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅํ๋ ๊ฒฝ์ฐ childCoordinator๋ฅผ ๋ง๋๋ ์ฐ๋ฆฌ ์ฑ์ ๊ฒฝ์ฐ๋ main Coordinator๋ง์ ํ์ฉ ์ ์ฉํ๋ ๊ฑด ์ด๋จ์ง ๊ณ ๋ฏผํด๋ด.
- ํด๊ฒฐ๋ฒ
- child Coordinator๋ฅผ ์๋ตํ๊ณ main AppCooridinator๋ฅผ ์ค์ฌ์ผ๋ก ์ฝ๋๋ค์ดํฐ ํจํด์ ์ค๊ณํ์๋ค. ๋ค์ ํ๋ก์ ํธ์์ 2๊ฐ ์ด์์ Coordinator๋ก ํ์ฅ์ฑ์ ๊ณ ๋ คํ child๋ฅผ ํฌํจํด์ ๋ง๋ค์ด๋ด๋ ์ข์ ๊ฒ ๊ฐ๋ค.
- ์ฐธ๊ณ ๋งํฌ
2. ํ์ผ ์ ๋ก๋ ์๋ฃ๋ ํ ์ด๋ป๊ฒ ๋ฆฌ์คํธ๋ทฐ๋ฅผ ๋ฆฌ๋ก๋ํ ๊ฒ์ธ๊ฐ(์ต์ ๋ฒ ํจํด์ ์ฌ์ฉ)
- ๋ฌธ์ ์
- ์ฌ์ฉ์ ํด๋ดค์ง๋ง ๋ช ํํ๊ฒ ์ดํดํ์ง ๋ชปํ ์ฑ ์ฌ์ฉํ๋ ์ต์ ๋ฒ ํจํด์ ์ด๋ค์์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ด ์ข์๊น์ ๋ํ ๊ณ ๋ฏผ
- ๊ณ ๋ฏผํ๋ ์
- ์ต์ ๋ฒ ํจํด์ผ๋ก NotificationCenter์ ์ฌ์ฉํ๋๋ฐ ๋ ์ฝ๋๋ทฐ๋ ๋ น์์ ์คํํ๋ฉด ๊ณง๋ฐ๋ก FirebaseStorage์ ์ ๋ก๋ ๋๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ด ์๋ฃ๋๊ณ ๋ฆฌ์คํธ๋ทฐ๊ฐ ๋ค์ ์คํ ๋ฆฌ์ง์์ ๋ฐ์ดํฐ๋ฅผ fetchํด์ ํ ์ด๋ธ๋ทฐ๋ฅผ ๋ฆฌ๋ก๋ ํด์ผํ๋ค. ๋ ํ๋ ์ด๋ทฐ์ ๊ฒฝ์ฐ์๋ ํ๋ ์ด๊ฐ ๋ค ๋์์ ๊ฒฝ์ฐ์ ๋ฒํผ์ด ์ฌ์ ์ pause๋ก ๋์ด์๋ ๋ฒํผ์ play๋ฒํผ์ผ๋ก ๋ณ๊ฒฝ์ ํด์ฃผ๊ณ ๋ ๋ค์ play๋ฒํผ์ ๋๋ฅด๋ฉด ์งํ์ด ๋์ด์ผ ํ๋ค. ์ด๋ฐ ๋ถ๋ถ์ ์ด๋ค ํจํด์ ํ์ฉํ ์ง์ ๋ํ ๊ณ ๋ฏผ์ ํ๋ค.
- ํด๊ฒฐ๋ฒ
- 1:N์ ๊ฒฝ์ฐ notificationCenter๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ๊ฑฐ๋ผ๋ ํ๋จํ์ obeserver ํจํด์ ์ ์ฉํ์๋ค. ์ถ๊ฐ์ ์ผ๋ก ์คํ ๋ฆฌ์ง์ ์ ๋ก๋๋ฅผ notificationํ๋ ๋ถ๋ถ์ 1:1๊ด๊ณ์ด๊ธฐ์ ์ถํ ๋ฆฌํฉํ ๋ง์ผ๋ก ๋๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ ์ฉํด ์ฝ๋์ ํ๋ฆ์ ์ถ์ ํ๊ธฐ ์ฝ๊ฒ ๋ณ๊ฒฝํด์ผ๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค.
- ์ฐธ๊ณ ๋งํฌ
3. ํํ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ ธ์ ๊ฐ ํํ๋ทฐ์ ์ ๋ฌํ ๊ฒ์ธ๊ฐ(๋๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฌ์ฉ)
- ๋ฌธ์ ์
- ๋๋ฆฌ๊ฒ์ดํธ์ ํจํด์ ๋ํ ๊ฐ๋ ๋ถ์กฑ๊ณผ ํ๋กํ ์ฝ ํ์ฉ ๊ฒฝํ์ ๋ถ์ฌ
- ๊ณ ๋ฏผํ๋ ์
- ์ปค์คํ ๋๋ฆฌ๊ฒ์ดํธ ํจํด์ ํ์ฉํ ๊ฑด ์ฐ๋ฆฌ ์ฑ์ ๊ฒฝ์ฐ ๋ ๊ณณ์์ ์ฌ์ฉ๋์๋๋ฐ ์ค๋์ค ๋ฒํผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๊ฐ ํํ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค์ผํ๋ ๊ฒฝ์ฐ์ ์ฌ์์๊ฐ์ ํ์ฌ ์ฌ์์๊ฐ๊ณผ ์ ์ฒด ์ฌ์์๊ฐ์ ๋น์จ๋ก ์ก์ ์ถ์ ํ๋ ๊ณณ์ ์ฌ์ฉ๋์๋ค. ๊ทธ ์ค์ ๋๋ ๋ฒํผ ๋ฐ์ดํฐ๋ฅผ ํํ๋ทฐ์ ์ ๋ฌํ ๋์ ๋ํด ์ด๋ค์์ผ๋ก ์ ๋ฌํ ์ง์ ๋ํด ๊ณ ๋ฏผ์ ํ๋ค.
- ํด๊ฒฐ๋ฒ
- ๋๋ฆฌ๊ฒ์ดํธ ํจํด์ ํ์ฉํด AudioBufferLiveDataDelegate๋ฅผ ์ฑํํด AudioRecordable์ด ๋ณธ ์ฑ ์์๋ก ์ผ์ ์ง์ํ๊ณ ์ผ์ ๋๊ธฐ๋ ๋ทฐ๋ก RecordView๋ ์์์๋ก ์ผ์ ๋์ ํด์ฃผ๋ ๊ฒ์ด๊ธฐ์ ํจ์ communicationBufferData๋ฅผ ๊ตฌํํด ์ผ์ ํ๊ฒ ๋ง๋ค์๋ค. ์์ง ๋จธ๋ฆฌ๊ฐ ๋ณต์กํด ์ข ๋ ์ ๋ฆฌํด์ ๋ธ๋ก๊ทธ์ ํฌ์คํ ํด ๋ณผ ์์ ์ด๋ค.
- ์ฐธ๊ณ ๋งํฌ
- ๋ฌธ์ ์
- AVAudioPlayer ๋ฐ AVAudioRecorder๋ฅผ ์ฌ์ฉํ ๋ ค ํ์ผ๋ pitch ๊ธฐ๋ฅ์ด๋ cutoffFrequency๊ธฐ๋ฅ์ด ํด๋น ๊ฐ์ฒด์์๋ ๋ถ๊ฐ๋ฅํ๋ค
- ํด๊ฒฐ๋ฒ
- AVAudioEngine ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค
- ๋ฌธ์ ์
- cutoff frequency์ ์๋๋ฐฉ์์ ์๋ชป์ดํดํ๊ณ ์์๋ค
- ๊ณ ๋ฏผํ๋์
- ๋์ดํด์คํธ ์ด๋ก ์ ๋ฐ๋ฅด๋ฉด sampleRate๋ ์ ํธ์ ๋๋ฐฐ๊ฐ ๋์ด์ผ ํ๋ค๋๊ฑธ ์๊ณ sampleRate๋ฅผ ์กฐ์ ํ๋ฉด ์ฃผํ์ ์ฐจ๋จ์ ํ ์ ์๊ฒ ๋ค๊ณ ์๊ฐํ๋ค
- ์์ผ๋ฆฌ์ฑ ํ์์ ์ํด ๋์ดํด์คํธ ์ฃผํ์๋ณด๋ค ์ ํธ๋ ๋ น์์ด ์๋๋๊ฒ ์๋ ์๊ณก์ด ๋ผ์ ๋ น์์ด ๋๋ค
- ํด๊ฒฐ๋ฒ
- ์์ผ๋ฆฌ์ด์ฑ ํ์์ ํด๊ฒฐํ ๋ ค๋ฉด Low Pass Filter๋ฅผ ์ ์ฉ์์ผ์ค์ผํ๋ค
- AVAudioUnitEQ๋ฅผ audioEngine์ ์ฐ๊ฒฐํด์ค๋ค์ Low Pass Filter๋ฅผ ์ ์ฉ์์ผ์ค์ ํด๊ฒฐํ๋ค
- ์ฐธ๊ณ ๋งํฌ
- ๋ฌธ์ ์
- ๊ธฐ๊ธฐ์ ๋ง์ดํฌ SampleRate๋ audioEngine์ SampleRate๋ ๋ง์ง ์์ ์ฑ์ด ์ฃฝ๋ ํ์์ด ์๋ค
- ๊ณ ๋ฏผํ๋์
- ํด๋น ๊ธฐ๊ธฐ์ SampleRate๋ฅผ audioEngine์ SampleRate๋ก ๋ง์ถฐ์ฃผ๋ฉด ํด๊ฒฐ๋ ๊ฑฐ๋ผ ์๊ฐํ๋ค
- ํด๊ฒฐ๋ฒ
- audioEngine์ outFormat์ format๊ฐ ๋ น์ํ๋ ๊ธฐ๊ธฐ์ format์ด๋ผ๋๊ฒ์ ์๊ณ ํด๋น ํฌ๋งท์ SampleRate๋ก audioEngine์ SampleRate๋ฅผ ์ค์ ํด์ ํด๊ฒฐํ๋ค
4. ๋ น์ํ์ผ ์ฌ์์ ํ์ผ์ ์ด ์ฌ์์๊ฐ์ด ๋๋์ง๋ ์์๋๋ฐ ์ฌ์์ด ์ค์ง๋๋ ๋ฌธ์
- ๋ฌธ์ ์
- ๋ น์ํ์ผ์ SampleRate๋ audioEngine์ SampleRate๋ ๋ง์ง์์ ๋ฐ์ํ๋ ๋ฌธ์ ์๋ค
- ๊ณ ๋ฏผํ๋์
- ํ์ฌ ์ฌ์ ๊ตฌ๊ฐ์ ๋ น์ํ์ผ์ ์ ์ฒด SampleRate๋ ํ์ฌ ํ๋ ์ด๋ ํ์๊น์ง์ SampleRate๋ฅผ ๋น๊ตํ๋๋ฐ ๊ธฐ์ค์ด ๋๋ SampleRate๊ฐ ๋ฌ๋ผ์ ์๊ธฐ๋ ๋ฌธ์ ์๋ค
- ํด๊ฒฐ๋ฒ
- AVAudioPlayerNode์ SampleRate๋ก audioEngine SampleRate๋ก ์ค์ ํด์ ํด๊ฒฐํ๋ค
- ๋ฌธ์ ์
- ๋ น์์ ์ฐ๊ฒฐํ๋ ๋ ธ๋๋ค์ด ํ๋ ์ด์์๋ ๊ทธ๋๋ก ๋จ์์์ด ํ๋ ์ด์ ๋์์ ๋ น์์ด ์งํ๋์ด ๋ฐ์ํ๋ ๋ฌธ์ ์๋ค
- ํด๊ฒฐ๋ฒ
- ๋ น์ ๋ฐ ํ๋ ์ด๋ฅผ ์ ์งํ์๋ audioEngine์ ๋ ธ๋๋ค์ ์ํํ๋ฉฐ ํญ์์ ์ฐ๊ฒฐ์ ๋์ด์ค์ ํด๊ฒฐํ๋ค
์ด๋ฒ ํ๋ก์ ํธ๋ ํ์์ผ๋ก ์ฐธ์ฌํ๊ฑฐ๋, ํผ์ํ๋ ํ๋ก์ ํธ์๋ ๋ค๋ฅด๊ฒ, ํ์์ ๋ฆฌ๋ํ๋ ์์น์์ ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค. ๋ด๊ฒ ์ฃผ์ด์ง ์ผ๋ง ์ ํ๊ฑฐ๋, ํน๋ณํ ์ผ์ ์์ด ํผ์ ์งํํ๋ ํ๋ก์ ํธ์๋ ๋ฌ๋๋ค. ํ์์ ์งํ ์ฌํญ, ์ํ ๋ฅ๋ ฅ, ํ์ต ์๋์ ๋ฐ๋ผ์, ์ ๋ฌด๋ฅผ ๋๋๊ณ ํ๋ก์ ํธ์ ์ผ์ ์ ๊ด๋ฆฌํ๋ ์ผ์ ์ฝ์ง ์์๋ค. ๋๋ฌธ์, 21์๋ฅผ ๋์ด์๋, ์ด๋ป๊ฒ ํด์ผํ ๊น ๊ณ ๋ฏผํ๊ณ , ํ ์ผ์ ์ ์ผ๋ฉฐ ๋ฆ๊ฒ๊น์ง ์๊ฐ์ ๋ณด๋ด ์๋์ง๋ฅผ ๋๋ฌด ๋ง์ด ์ผ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๊ฐ๋ฅํ๋ค๋ฉด, ์ด์๊ฐ์ ๊ณํ๋, ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ์๊ฐ์ ํด์ผํ๋ฉฐ, ์ถฉ๋ถํ ํด์์ ์ทจํด์ผ ์ง์ ํ ์ ์๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ด๊ธฐ ํ๋ก์ ํธ์ ๊ณํ์์๋, ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ค, MVVM์ผ๋ก ์ ํ์ ๋ชฉํ๋ก ํ์๋ค. ์ด ๋, ๋ฆฌ์คํฌ๋ฅผ ์ค์ด๊ธฐ ์ํด์ MVC๋ก ์์ ํ ๊ตฌํ์ ๋ง์น๋ค์, ์ถฉ๋ถํ ์ผ์ ์ด ํ๋ณด ๋๋ค๋ฉด ์งํํ๊ธฐ๋ก ๊ณํํ๊ธฐ ๋๋ฌธ์ ๊ณํ์ ๋ณ๊ฒฝ์ด ์ ์ฐํ๊ฒ ์งํ ๋ ์ ์์๋ ๊ฒ ๊ฐ๋ค. ํ๋ก์ ํธ๋ฅผ ์งํํ๊ฑฐ๋, ์ด๋ ํ ์ผ์ ์งํ ํ ๋, ์ด์ ๊ฐ์ด ์ฐฉ์ง์ ์ ํ๋ณดํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ๋ค์ ํ ๋ฒ ๊นจ๋ฌ์๋ค.
ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ, ์ฒ์๋ณด๋ ๊ฒ์ ๊ณต๋ถํ๊ณ , ์ดํดํ๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๋ฉฐ, ํ์์๊ฒ ์๋ก์ด ํจํด์ด๋ ๊ธฐ๋ฒ์ ์๊ฐํ๊ณ ์ ๋ณด๋ฅผ ๋๋๋ ์๊ฐ๊ณผ, ํ์ ๊ณํ ๋ฑ์ ์ค๋ช ํ๊ณ , ์ด๋ฅผ ์ํํ๋ ๊ณผ์ ์ ์ถฉ๋ถํ ์ฆ๊ฒ๊ณ ๋ณด๋์ฐฌ ์๊ฐ์ด์๋ค. ํ์๋ค ๋ชจ๋์๊ฒ ๊ณ ์ํ๊ณ , ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์งํํด์ ์ฆ๊ฑฐ์ ๋ค๋ ์๊ธฐ๋ฅผ ์ ํ๊ณ ์ถ๋ค.
๋๋ gitDesktop์ ์ฌ์ฉํ๋ค. ์ฝ๊ฐ ์ฌํ๊ฐ์ ๋๋์ธ๋ฐ, ๊ทธ๋๋ git์ ์ฌ์ฉ๋ฒ์ ์๊ณ ์ฐ๋๊น ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง, GUI๋ฅผ ์ฐ๊ธฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ชจ๋ฅด๋ ๋๋, ํฐ๋ฏธ๋๋ง์ ์ด์ฉํ์ฌ ์งํํ๋ ํ์์๊ฒ ์๋ก์ด branch๋ฅผ checkout, pull ํ ๋ค, ์์ ์ฌํญ์ commit, pushํ๋ ๊ณผ์ ์ ์๋ ค์ฃผ๋ ๊ฒ์ ์ฝ์ง ์์๋ค. ํฐ๋ฏธ๋์ ๊ผญ ์ฌ์ฉํ์ง ์๋๋ผ๋, ๊ฐ๋ ๋ช ๋ น์ด๋ฅผ ์ฅ ํ๋ฒ ์ฝ๋ ๋ฃจํด์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
- ์ด๋ฒ ํ๋ก์ ํธ๋ ์ฑ์ ๊ธฐ๋ฅ์ด ๋ณต์กํ๊ฑฐ๋ ํ์ง ์์์, MVC๋ก ๊ตฌํํ๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง, ์ ์ ์์ด ํ๋ก์ ํธ๋ฅผ ์๋ฃํ ๋ค, ๊ฒฐ๊ณผ๋ฌผ์ ๋ณด๋, Model์ด ์๋จ ๊ฒ์ ๊นจ๋ฌ์๋ค. ๊ทธ๋ ๋ค, View์ Controller๋ง ์๋ ๊ฒ์ด๋ค.
Model๊ฐ์ฒด๋ ๋ก์ง์ ๋ด๊ณ ์์ ์๋ ์์ง๋ง, ๋ณดํต ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค๊ณ ์๊ฐํ๋ค. ๋ก์ง์ด ์ข ํฌ์ง๋ง, ์ค๋์ค๋ฅผ ์ฌ์, ๋ นํํ๋ DefaultAudioRecorder, Player๋ฅผ ๋ชจ๋ธ๋ก ๋ณผ ์ ์์ง ์์๊น? ๋ผ๊ณ ์๊ฐ๋ ํด๋ดค์ง๋ง, ๋ class๋ audioEngine์ ์ค์ ๊ณผ ๊ธฐ๋ฅ์ ๋ํ ๋ด์ฉ์ ๊ฐ๊ณ ์์ผ๋ฉฐ, ๋ น์ ํ์ผ์ data๋ฅผ ์ ์ฅํ์ง ์๋๋ค. ๋๋ฌธ์, Model๋ก ๋ณผ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
๋ฌผ๋ก architecture์ ๊ผญ ์ง์ฐฉํ์ง ์์๋ ๋๋ค. ํ์ง๋ง audioFile์ด๋ผ๋ model์ ํ ๋๋ก ์ฑ์ ์ค๊ณํ๋ค๋ฉด ์ด๋จ๊น? ํ๋ ์์ฌ์์ด ์๋ค.
- audioFile์ bufferData๋ฅผ ์ฝ์ด ํํ์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ์ถฉ๋ถํ ์ด๋ ค์ ๋ค. audioFile์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ง์ ์์ด ์ฝ๋๋ฅผ ์ฝ์ผ๋, ์ฉ์ด์ ์์์ด ์ ํ ์ดํด๋์ง ์์๋ค. ์ด๋ฌํ ์ํฉ์์ ํ์ํ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๊ฒ์ ์ง๋ํ๊ณ , ์ด๋ ต๊ณ , ์ ์ ์ ์ผ๋ก ๊ณ ํต์ค๋ฌ์ด ์ผ์ด์๋ค.
์ฐจํ ์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ด์ฐฉํ์ ๋์๋, ์ต๋ํ ๊ธฐ๋ณธ์ง์์ ๋ํ ์คํฐ๋๋ฅผ ์งํํ๋ ๊ฒ์ด ์คํ๋ ค ์๊ฐ์ ๋จ์ถํ๊ณ , ๋ ๋์ ๊ฐ๋ฐ์ ํ๋ ๊ฒ์ด๋ ์๊ฐ์ด ๋ค์๋ค.
-
ํ์ ์ ์งํ ์ , ์ฌ๋ฌ ์ปจ๋ฒค์ ๊ณผ ๋ช ์นญ์ ๋ํ ๊ท์น์ ์ ํ๊ณ ์์ํ๋ ๊ฒ์ ์ ๊ณ ์์๋ค. ํ์ง๋ง, ์๊ท๋ชจ ํ๋ก์ ํธ๋๊น ๊ด์ฐฎ๊ฒ ์ง ํ๋ ์์ผํ ๋ง์์ผ๋ก ์ค๋ฆฌ์ฌ์ฉ ์์ํ๋ค.
์ด ํ๋์ ๋๋ฉ์ด๊ฐ ๊ตด๋ฌ ์ปค์ง๋ฏ ๋ถ์ด๋, ๋ง์ง๋ง์ ์์ ๋ค์์ ๋ฆฌํฉํ ๋ง ํญ๋ชฉ์ ๋ง๋ค์ด์ฃผ์๋ค. ํ ๋ฒ ์ผํ ๊ฒ์ ๋ ๋ฒ ์ผํ๊ฒ ๋ ๊ฒ์ด๋ค. ์ถํ์๋ ์ด์ ๊ฐ์ ์์ผํ ํ๋์ ์ง์ํด์ผ๊ฒ ๋ค๋ ๋ค์ง์ ํ๋ค. -
๋ธ๋์น ์ ๋ต์ด ์์ฌ์ ๋ค. main - dev - featureBranch ๋ก ๋๋์ด ์งํ ํ ๊ฒ์ ์ข์์ผ๋, dev์ mergeํ๋ ๊ณผ์ ์ ๋ํด์ ๋ฏธํกํ๋ค. ์ด๋ก ์ธํ์ฌ, ๊ฐ๋จํ ์ ์ ์๋ ์คํ, ์๋ชป๋ ๋ก์ง, ๋ชจํธํ ๋ช ์นญ ๋ฑ์ ์ฌ์ ์ ๊ฑธ๋ฌ ๋ผ ์ ์์๋ค. ๋ฌผ๋ก dev branch์ ์ญํ ์์ฒด๋ฅผ main์ mergeํ๊ธฐ ์ ๊ฑฐ๋ฆ๋ง์ผ๋ก ์ค์ ํ์์ผ๋ฏ๋ก, ํฐ ๋ฌธ์ ๋ ์๋๋ผ๊ณ ์๊ฐํ์ง๋ง, PR์ ํตํ์ฌ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋ ๊ฒ๋ ์ข์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค.
์ ์ฒด์ ๊ฐ๋
์์ง๊ฐ ๋ง์ด ๋ถ์กฑํ ์ํ์์ ์งํํ ํํ๋ก์ ํธ๋ผ ๋ชจ๋ ๊ฒ ์ด๋ ต๊ณ ๊ตฌํํด๋ด๋ ๊ฒ์ ๋ํ ์คํธ๋ ์ค๊ฐ ์ฌํ๋ ๊ฒ ๊ฐ๋ค. ๋ฌผ๋ก ์ด๋ฐ ๋์ ๋ฉํ์ ์ธ ๊นจ์ง๋ค์ด ๋ง์ด ํ๋ค์์ง๋ง ์ด๋ก ์ธํด ์ข ๋ ์ง๊ธ ๋ด ์ํฉ์์ ๋ฌด์์ ํ ์ ์์์ง ๊ณ ๋ฏผํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ ์ค์๋ ํจํด๋ค์ ๋ํด ์ง์คํด๋ณด๊ณ ์ถ์๊ณ ์ฝ๋๋ค์ดํฐ์ ์ต์ ๋ฒ, ๋๋ฆฌ๊ฒ์ดํธ ํจํด์ ์๋ฒฝํ์ง๋ง ์์ง๋ง ์ ๋ฆฌํด๋ณด๋ ์๊ฐ์ ๊ฐ์ง ์ ์์ด์ ๊ทธ๋๋ง ๋คํ์ด์๋ ๊ฒ ๊ฐ๋ค. ํ์๋ค์๊ฒ ๋ง์ด ๋ฐฐ์ฐ๊ณ ๋ ์ค์ค๋ก ๋๋์๋ณด๊ณ ๋ฐ์ฑํ๋ 2์ฃผ๊ฐ ๋์๋ ๊ฒ ๊ฐ๋ค.
GUI๋ก ์ฌ์ฉํ๋ค SSH๊ด๋ จ์ผ๋ก ๊ณ์ ์ ๊ฐ๋ณ ๊ด๋ฆฌํ๋ ค๋ค๋ณด๋ ํฐ๋ฏธ๋์ ๋ค์ ์ฌ์ฉํ๊ฒ ๋์๋๋ฐ ๋ง์ด ์ต์ํด์ง๋ ๊ณ๊ธฐ๊ฐ ๋์๋ ๊ฒ ๊ฐ๋ค. ๋ค๋ง ๋ชจ๋ ์ํฉ์ ๋ํ ๋์ฒ๊ฐ ๋ง์ด ๋ฏธํกํ์ง๋ผ ์ด ๋ถ๋ถ๋ ํฌ์คํ
ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ๋ค.
-
๊ฐ์ฒด ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ํตํ ๋ฆฌํฉํ ๋ง๊ณผ ๊ธฐ์ ๊ด๋ จ ๊ฐ๋ฐ์ ๋ํ ์ ๋ฐ์ ์ธ ๋ถ๋ถ์ ํ์๋ถ๋ค์ ๊ฒ๋ค์ ๋ณด๋ ๊ฒ๋ง์ผ๋ก ๋ง์ ๊ณต๋ถ๊ฐ ๋ ๊ฒ ๊ฐ๋ค. ๊ฐ์ฒด ์งํฅ์ ์ธ ์ค๊ณ๊ฐ ๋ฌด์์ธ์ง ๋ช ํํ์ง ์์์๋๋ฐ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ์ด๋ ดํ์ด ์ ๊ทธ๋ ๊ฒ ํด์ผํ๊ณ ์ด๋ค ์์ผ๋ก ์งํ์ด ๋๋์ง ๋ชธ์ ์ฒดํ์ ํ ์ ์๊ฒ ๋์๋ค. ๋ฌผ๋ก ํด๋ณด๋ผ๊ณ ํ๋ฉด ์์ง์ ์ด๋ ต๊ฒ ์ง๋ง ์จ๋ณด๋ฉ์ด ๋ง๋ฌด๋ฆฌ ๋๋ฉด ์์ฌ ๋ถ๋ฆฌ์ง ๋ง๊ณ ๊ธฐ์ด๋ถํฐ ๋ค์ ์ฐจ๊ทผ์ฐจ๊ทผ ํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.
-
์ฝ๋๋ค์ดํฐ ํจํด๊ณผ ์ต์ ๋ฒ ํจํด ๊ทธ๋ฆฌ๊ณ ๋๋ฆฌ๊ฒ์ดํธ ํจํด์ ๊ฐ๋ ์ ์ดํดํ๋ ค๊ณ ํ๋ฉด์ ์ด๋ ๊ฒ ๋ค ํ ๋ฒ์ฉ ์ฌ์ฉํด๋ณธ ๊ฑด ์ด๋ฒ์ด ์ฒ์์ธ ๊ฒ ๊ฐ๋ค. ๋ฌผ๋ก ์์ฉํด์ ์กฐ๊ธ๋ง ๋น๊ผฌ์๋ ๋จธ๋ฆฌ๊ฐ ์ด์ง์ด์งํ์ง๋ง ๋๋ต์ ์ผ๋ก ๋ฆฌ๋๋ฏธ ๊ด๋ จ ์๋ฃ๋ฅผ ์ค๋นํ๋ฉด์ ์ด๋ ์ ๋ ์ ๋ฆฌ๊ฐ ๋ ๊ฒ ๊ฐ์ ๊ทธ๋๋ง ์์ฌ์ด ๋๋ค. ์ฌ์ค ํ๋ก์ ํธ์์ ๊ทธ๋๋ง ๋ด๊ฐ ๊ฐ์ ธ๊ฐ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ์ด ํจํด์ด์๋ ๊ฐ๋ค. ๊ธฐ์ ๊ด๋ จํด์๋ ํ์๋ค์๊ฒ ๋ง์ด ์์กดํ ๋ถ๋ถ์ด ์์๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ด ๊ฐ์ฅ ๊ณ ๋ฏผ์ด ๋๋ ๊ฒ ๊ฐ๋ค. ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ๋ ํ์ง๋ง ์๊ฐ์๋ ์ฝ๋๋ค๊ณผ ์ดํดํ์ง ๋ชปํ ์ฝ๋๋ค์ ์์ฑํ๋ ๋ ์ค์ค๋ก๋ ๋งค์ฐ ํ๋ค์๋ค. ๋ง์์ด ๋๋ฌด๋๋ ๋ถํธํ์ง๋ง ์์ผ๋ก ์ฑ์ฅํ ์ ์๋๋ก ๋ค์ ํ ๋ฒ ๊ฐ๋ค๋ฌ๊ณ ๊ฐ๋ฐ ๊ธฐ์ ์ ํค์ธ ์ ์๋๋ก ๊ทธ๋ฅ ๋ ํผ๋ฐ์ค์์ ์ฝ๋๋ง ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋ ์ดํดํ๊ณ ๊ธฐ์ด๋ฅผ ๋ค์ ธ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
-
ํํ๋ก์ ํธ ์ค ๊ฑด๊ฐ ๊ด๋ จํด์๋ ์ ๊ฒฝ์ ์จ์ผํ๋ ๊ฒ ์ค์ํ ๊ฑธ ํ๋ฆฌ์จ๋ณด๋ฉ ๋ค์ด์ค๊ธฐ ๋ฐ๋ก ์ ํ๋ก์ ํธ์์ ๋๋ ์ ์ด ์๋ค. ์คํธ๋ ์ค๋ ๋ง์ด ๋ฐ๊ณ ์๋ฐ๊ฐ์ด ์ค๊ณ ๋ฉด์ญ๋ ฅ์ด ์ฝํด์ ธ์ ๊ทธ๋ฐ๊ฑด์ง ๋์ ํฌ์ง์ด ์๊ฒจ ๊ฒฐ๊ตญ ํ์ฐจํ ์ ๋ฐ์ ์์๋ ์ ์ด ์๋ค. ๋คํ ์ด๋ฒ 2์ฃผ ํ๋ก์ ํธ๋ ์ ๋ง๋ฌด๋ฆฌํ ์ ์์๋ ๊ฒ ๊ฐ์๋ฐ ์๊ธฐ ๊ด๋ฆฌ๋ ํ์ ์์๋ ํ์๋ผ๊ณ ์๊ฐํ๋ค. ๋ ํ์๋ค๊ณผ ์ํตํ๋ ๋ถ๋ถ์ด ์๋์ง ์๋ชจ๊ฐ ์๋ ํฌ๋ค๋ ๊ฑธ ์๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ๋ ์ค์ค๋ก ์กฐ์ ํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ์ปจ๋ฒค์ ๊ท์น์ ์ด์ ํ๋ก์ ํธ์์ ๊ทธ๋๋ ๊ฒฝํ์ ํ์๊ธฐ ๋๋ฌธ์ ๋คํํ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋๋ฆ ์ปจ๋ฒค์ ์ ํ์๋ค๊ณผ ์ํตํ๊ณ ํผ๋๋ฐฑ ๋ฐ์ ๋ถ๋ถ์ ์์ ํด ๋๊ฐ ์ ์์๋ค. ๋ฌผ๋ก ๊ฐ๋ฐ ๊ธฐ์ ์ค๋ ฅ์ด ์ข์ ๊ฑด ๋น์ฐํ ๊ฑฐ๊ฒ ์ง๋ง ๊ณ์ ํ์๋ค๊ณผ ์ํตํด์ผํ๋ ๋ถ๋ถ์ด ์๋ค๋ณด๋ ํธ๋ฌ๋ธ์ด ์๊ธด๋ค๋ฉด ์ธ์ฑ ๋ํ ํ์ ์์ ์ค์ํ๊ฒ ๋ค๊ณ ์๊ฐ๋์๋ค.
-
๋์ผ๋ก PR์ด ์์ด ์งํํ๋ ๋ถ๋ถ์ด ๋ค๋ฆ๊ฒ ์์ฌ์ด ๋ถ๋ถ์ด์๋ค. ์๋ํ๋ฉด ์ ๋ฒ ํ๋ก์ ํธ์์๋ PR์ ํตํด ๋ง์ด ๋ถ์กฑํ์ง๋ง ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์ฌ๋ฌ๊ฐ์ง ๋ฐฐ์ฐ๊ณ ๊ธฐ์ ๋ ์๋ ค์ฃผ๋ ค๋ ๋ถ๋ถ์ด ๊ธฐ๋ก๋์ด ๋ฏธ์ฐ์ ๋ฒ๊ทธ๋ฅผ ์ก๊ฑฐ๋ ์งํ์ํฉ์ ์์ฐ์ค๋ฝ๊ฒ ์ ์ ์์๋๋ฐ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๊ทธ๋ฐ ๋ถ๋ถ์ด ์์ด ์คํ๋ ์ด๋ฐ ๋ถ๋ถ์ ๋ค๋ฆ๊ฒ ์๊ฒ ๋๋ ๊ฒฝ์ฐ๋ ๊ฐํน ์์๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ ์ค๋ ฅ์ด ์ข์ ๋๋ฃ๋ค๊ณผ ํจ๊ปํด ๋ค๋ฆ ํ๋ค์ ๋นํด ์กฐ๊ธฐ์ ๋ง๋ฌด๋ฆฌํ๊ณ ์ข ๋ ์ ๋ฆฌํ๋ ๊ฒ์ ๋ํด ์ง์คํ ์ ์์ด ํ์๋ค์๊ฒ ๋ง์ด ๋ฐฐ์ ๊ณ ๋ ๋๋ฌธ์ ์ข ์คํธ๋ ์ค๋ฅผ ๋ฐ์ผ์ จ์ํ ๋ฐ ๊ณ ๋ง๊ณ ๊ฐ์ฌํ๋ค๋ ๋ง์ ์ ํด์ฃผ๊ณ ์ถ๋คใ ใ
์ฒ์์ผ๋ก ์งํํ ํ ํ๋ก์ ํธ์ด๋๋งํผ ๋ง์๊ฒ ์ํด๊ณ ์ด๋ ค์ ๋ค ํ์ง๋ง ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด ์งํํ ์๋ก ํ๋จ์๋ก ์ผํ๋๊ฒ ์ต์ํด์ก๋ค ๋ณดํต ๊ฐ๋ฐ์ ํ ๋จ์๋ก ์งํ๋๊ธฐ๋๋ฌธ์ ํ์ ์ ํ์ฌ ๊ฐ๋ฐํด๋ณธ ๊ฒฝํ์ ์์ผ๋ก ํฐ ๋์์ด ๋ ๊ฑฐ๋ผ ์๊ฐํ๋ค
์ง๊ธ๊น์ง๋ ํผ์์ ๊ฐ๋ฐ์ ํด์๊ธฐ๋๋ฌธ์ fork, pr์ ๊ฐ๋
์ ๋ชฐ๋๋ค
๋ํ ๊น์ ๋จ์ํ github์ ์ ์ฅํ๊ธฐ๋ง์ ์ํค ์ฌ์ฉํด์์ด์ branch, merge๋ฑ์ ๊ฐ๋
๋ ๋ชจํธํ๋ค
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ ๊ฐ๋
๋ค์ ์์งํ์๊ณ ํฐ๋ฏธ๋์ ์ฌ์ฉํด์ git์ ์ฌ์ฉํ๋๋ฐ ๊ฝค ์ต์ํด์ก๋ค
ํด๋น ๊ฒฝํ์ ์์ผ๋ก๋ git์ ํตํด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ๋๋ฐ ํฐ ๋์์ด ๋ ๊ฑฐ๋ผ ์๊ฐํ๋ค
- ๋ฆฌํฉํ ๋ง ๋๋ ์ง๊ธ๊น์ง ๋ฆฌํฉํ ๋ง์ ์ง์งํ๊ฒ ํด๋ณธ์ ์ด ์๊ธฐ๋๋ฌธ์ ์ฌ์ค์ ์ด๋ฒ ํ๋ก์ ํธ์์ ๋ด๊ฐ ๋ฆฌํฉํ ๋ง์ ๊ตฌํํ ๋ถ๋ถ์ ๊ฑฐ์ ์๊ณ ์งํ๊ณผ์ ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ๋ง ํ๋ค ๋ฆฌํฉํ ๋ง ์ ์ด๋ ํ๋ ๋น๊ตํด๋ดค์๋ ๋ฉ์๋๋ฐ ๊ฐ์ฒด์ ์ญํ ์ด ๋ถ๋ฆฌ๋๊ณ ๊ฐ๋ ์ฑ์ด ์ข์์ง๊ฒ์ ๋ณด๊ณ ๋ฆฌํฉํ ๋ง์ ๊ดํด์๋ ํ๋ฒ ์ง์งํ๊ฒ ์๊ฐํด๋ด์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค
- ์์กด์ฑ ์ฃผ์
์์กด์ฑ ์ฃผ์
์ ์ด๋ฒ์ ์ฒ์ ๋ค์ด๋ดค๋ค
์์กด์ฑ ์ฃผ์
์ SOLID๋ฐฉ์์ค D์ ํด๋นํ๋ ๋ฐฉ์์ด๋ฉฐ ์ด ๋ฐฉ๋ฒ์ ์ฑํํ ๊ฒฝ์ฐ ํ
์คํธ ๋ฐ ์ ์ง๋ณด์, ๊ธฐ๋ฅ์ ์ถ๊ฐ / ๋ณ๊ฒฝ์ด ์ฉ์ดํด์ง๋ค๋ ์ฅ์ ์ด ์๋ค
์ค์ ๋ก ์์กด์ฑ ์ฃผ์
๋ฐฉ์์ผ๋ก ๋ผ์๋ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ณผ์ ์ ๋ดค๋๋ฐ ๊ฐ์ฒด๊ฐ ์ง์ ์ธ์คํด์ค๋ฅผ ์ก๊ณ ์๋ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ์ฝ๊ฒ ๋ฆฌํฉํ ๋ง๋๋๊ฒ์ ๋ณด๊ณ ๋๋๋ค
์์ง ์์กด์ฑ ์ฃผ์ ์ ๊ดํด์ ์ ํํ ๊ฐ๋ ์ ์์ง ๋ชปํ๋ค ์ด๋ ํ๋ฃจ์์นจ์ ๊ป๋๋๊ฒ์ด๋ผ ์๊ฐํ์ง ์์ผ๋ฉฐ ์์ผ๋ก SOLID์์น๊ณผ ํจ๊ป ๊พธ์คํ ๊ณต๋ถํ ๊ณํ์ด๋ค
์ง๊ธ๊น์ง๋ ํผ์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ๋๋ฌธ์ ์ปจ๋ฒค์ ์ ๋ํด์ ์ ๊ฒฝ์ ์์จ์๋ค ํ์ง๋ง ํ์ ์์๋ ๋ด ์ฝ๋๋ฅผ ๋๋ง๋ณด๋๊ฒ ์๋ ํ ๋ชจ๋๊ฐ ๋ณด๊ธฐ๋๋ฌธ์ ๊ฐ๋ ์ฑ์ ์ํด ๊ณตํต๋ ์ปจ๋ฒค์ ์ด ํ์ํ๋ค