๐Ÿ“– ํ”„๋กœ์ ํŠธ ์š”์•ฝ

๋ฒ„์งˆยท2024๋…„ 12์›” 20์ผ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ QuickKick์€ ๋น ๋ฅด๊ฒŒ ํ‚ฅ๋ณด๋“œ๋ฅผ ์ฐพ๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์˜€์Šต๋‹ˆ๋‹ค. ํŒ€์› ๋ชจ๋‘๊ฐ€ ํ˜‘์—…ํ•˜๋ฉฐ ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ๋งก์•„ ํ•„์ˆ˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ๊ฐœ์„ ์— ํž˜์ผ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋Š” Core Data์™€ UserDefaults๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ํ‚ฅ๋ณด๋“œ ๋ฐ์ดํ„ฐ์™€ ์‚ฌ์šฉ์ž ์„ค์ • ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ง ์‚ฌ์šฉ ๊ธฐ์ˆ  ์Šคํƒ

iOS ๊ฐœ๋ฐœ ํ™˜๊ฒฝ:
Swift: ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— ์‚ฌ์šฉ๋œ ๋ฉ”์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
UIKit: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•
SnapKit: AutoLayout ๊ฐ„ํŽธํ™”

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ:
Core Data: ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ๊ด€๊ณ„ ์„ค์ •
UserDefaults: ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ์ž ์„ค์ •๊ณผ ๋กœ๊ทธ์ธ ์ƒํƒœ ์ €์žฅ

์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด:
MVC: ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

๋ฒ„์ „ ๊ด€๋ฆฌ:
Git/GitHub: Git Flow ์ „๋žต์„ ํ™œ์šฉํ•ด ํ˜‘์—… ๋ฐ ์ฝ”๋“œ ๊ด€๋ฆฌ

๐Ÿ“‚ ๊ตฌํ˜„ํ•œ ์ฃผ์š” ๊ธฐ๋Šฅ

Core Data ๊ด€๋ฆฌ:
ํ‚ฅ๋ณด๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ, ์กฐํšŒ.
ํŠน์ • ์กฐ๊ฑด(์˜ˆ: isOccupied == true)์œผ๋กœ ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€.

UserDefaults ๊ด€๋ฆฌ:
์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„๊ณผ ๋กœ๊ทธ์ธ ์ƒํƒœ ์ €์žฅ.
์ž๋™ ๋กœ๊ทธ์ธ ์˜ต์…˜ ๋ฐ ๋งˆ์ง€๋ง‰ ์ด๋ฉ”์ผ ์ €์žฅ ๊ธฐ๋Šฅ.

UI ๊ตฌํ˜„:
MyPageViewController: ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ํžˆ์Šคํ† ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œ.
KickboardSectionView: ๋“ฑ๋กํ•œ ํ‚ฅ๋ณด๋“œ ๊ด€๋ฆฌ ํ™”๋ฉด.
HistorySectionView: ํžˆ์Šคํ† ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋ฉฐ, Core Data์™€์˜ ๋™๊ธฐํ™” ๊ธฐ๋Šฅ.

๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ:
๊ฒฝ๊ณ ์ฐฝ(Alert)๊ณผ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด UX ๊ฐ•ํ™”.

๐Ÿ› ๏ธ ์–ด๋ ค์›€๊ณผ ํ•ด๊ฒฐ

Core Data Fetch ํ›„ UI ๊ฐฑ์‹  ๋ฌธ์ œ
๋ฌธ์ œ: Fetchํ•œ ๋ฐ์ดํ„ฐ๋ฅผ UI์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š์•„ ๋นˆ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ.
ํ•ด๊ฒฐ: configureSections() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ๋กœ์ง ์ถ”๊ฐ€.

UserDefaults ๋ฐ์ดํ„ฐ ๋ฐ˜์˜ ๋ฌธ์ œ
๋ฌธ์ œ: ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ ํ›„ ํ™”๋ฉด์— ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€ ์•Š์Œ.
ํ•ด๊ฒฐ: ๋‹‰๋„ค์ž„ ๋ณ€๊ฒฝ ์‹œ saveUser() ํ˜ธ์ถœ ๋ฐ ๋ทฐ๋ฅผ ๋ฆฌ๋กœ๋“œํ•˜๋„๋ก ์„ค์ •.

AutoLayout ์ถฉ๋Œ
๋ฌธ์ œ: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ UI ์š”์†Œ๊ฐ€ ๊ฒน์น˜๊ฑฐ๋‚˜ ์œ„์น˜๊ฐ€ ์–ด๊ธ‹๋‚จ.
ํ•ด๊ฒฐ: ๋ชจ๋“  UI ์š”์†Œ์˜ ๋งˆ์ง„๊ณผ ๊ฐ„๊ฒฉ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ˆ˜์ •.

Delegate ํŒจํ„ด ๊ตฌํ˜„ ๋ˆ„๋ฝ
๋ฌธ์ œ: Delegate ํŒจํ„ด ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ๋ฅผ ๋ˆ„๋ฝํ•˜์—ฌ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ.
ํ•ด๊ฒฐ: ๋ชจ๋“  ๊ด€๋ จ ํ”„๋กœํ† ์ฝœ ๋ฉ”์„œ๋“œ๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ๊ตฌํ˜„.

# ๐Ÿ’ก ๋ฐฐ์šด ์ 
Core Data์™€ UserDefaults์˜ ํ™œ์šฉ:

๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ์™€ ๊ฐ„๋‹จํ•œ ์„ค์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌ.
Core Data์˜ NSFetchRequest์™€ NSPredicate๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง.

UI์™€ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์˜ ์ค‘์š”์„ฑ:
๋ฐ์ดํ„ฐ๋ฅผ Fetchํ•œ ํ›„ UI๋ฅผ ์ฆ‰๊ฐ์ ์œผ๋กœ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ €ํ•˜๋œ๋‹ค๋Š” ์ ์„ ์‹ค๊ฐ.
ViewController์™€ Custom View ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋ฐฐ.

ํŒ€์›Œํฌ์™€ Git Flow์˜ ํšจ์œจ์„ฑ:
Git Flow๋ฅผ ํ†ตํ•ด ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ์™€ ํ˜‘์—… ํ’ˆ์งˆ์„ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Œ.
PR ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ๊ฐœ์„ ๊ณผ ํŒ€์› ๊ฐ„์˜ ์ƒํ˜ธ ํ”ผ๋“œ๋ฐฑ.

๐Ÿ“‹ ํ›„๊ธฐ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” iOS ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ์ธ Core Data, UserDefaults, UI ๊ตฌ์„ฑ์„ ์‹ค๋ฌด์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํŒ€์›๋“ค๊ณผ์˜ ์›ํ™œํ•œ ์†Œํ†ต๊ณผ ํ˜‘์—…์„ ํ†ตํ•ด ์˜ˆ์ƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Git Flow์™€ PR ๋ฆฌ๋ทฐ ๋•๋ถ„์— ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž๋กœ์„œ ํ•œ ๋‹จ๊ณ„ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ์˜ ๋‹ค์ง

์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ: ์•ž์œผ๋กœ๋Š” ๋” ๊ฐ€๋…์„ฑ ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ ๊ฒฝ ์“ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
UX ํ–ฅ์ƒ: ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ณ ๋ คํ•œ UI/UX ์„ค๊ณ„์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์ž.
๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ธฐ์ˆ : Core Data์™€ UserDefaults ์™ธ์—๋„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ธฐ์ˆ (AWS, Firebase ๋“ฑ)์„ ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
QuickKick ํ”„๋กœ์ ํŠธ๋Š” ๋๋‚ฌ์ง€๋งŒ, ๋ฐฐ์šด ์ ์€ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

profile
iOS Developer ยท SwiftUI & UIKit '๊ฐ€๋” ๋˜๊ณ  ๊ฐ€๋” ์•ˆ ๋˜๋Š”' ๋ฌธ์ œ๋ฅผ ๋ฟŒ๋ฆฌ๋ถ€ํ„ฐ ์žก์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€