์คํ๋ผ์ธ ์ฐ์ ๋ชจ๋ฐ์ผ ์ฑ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ: ์ถฉ๋, ์ฌ์๋, UX
Kotlin ๋ฐ SwiftUI ๋ค์ดํฐ๋ธ ์ฑ์ ์ํ ๋ช ํํ ์ถฉ๋ ๊ท์น, ์ฌ์๋ ๋ก์ง, ๊ฐ๋จํ ๋๊ธฐ ๋ณ๊ฒฝ์ฌํญ UX๋ฅผ ํฌํจํ ์คํ๋ผ์ธ ์ฐ์ ๋ชจ๋ฐ์ผ ์ฑ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ ๊ณํ.

๋ฌธ์ : ์ฌ์ฉ์๋ ์คํ๋ผ์ธ์์ ํธ์งํ๊ณ , ํ์ค์ ๋ฐ๋๋ค
๋๊ตฐ๊ฐ๋ ์ฐ๊ฒฐ์ด ์ข์ ์ํ์์ ์์ ์ ์์ํ ๋ค ์๋ฆฌ๋ฒ ์ดํฐ, ์ฐฝ๊ณ ๊ตฌ์, ์งํ์ฒ ํฐ๋๋ก ๊ฑธ์ด ๋ค์ด๊ฐ๋๋ค. ์ฑ์ ๊ณ์ ์๋ํ๋ ์์ ์ ์ด์ด๊ฐ๋๋ค. ์ ์ฅ์ ํญํ๊ณ , ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ๊ณ , ์ํ๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์ ๋ ์ฝ๋๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค. ํ๋ฉด์ ์ฆ์ ์ ๋ฐ์ดํธ๋๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์ ๋ณด์ ๋๋ค.
๋์ค์ ์ฐ๊ฒฐ์ด ๋ณต๊ตฌ๋๋ฉด ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ๋ผ์ก์ผ๋ ค ํฉ๋๋ค. ๋ฐ๋ก ์ด ์๊ฐ์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ๊ฐ ์ฌ๋๋ค์ ๋๋ผ๊ฒ ํ๋ ์ง์ ์ ๋๋ค.
์ฑ์ด ์ฃผ์ํ์ง ์์ผ๋ฉด ๊ฐ์ ๋์์ด ๋ ๋ฒ ์ ์ก๋์ด(์ค๋ณต)๋ฒ๋ฆฌ๊ฑฐ๋, ์๋ฒ์ ์ต์ ๋ณ๊ฒฝ์ด ์ฌ์ฉ์๊ฐ ๋ง ํ ์์ ์ ๋ฎ์ด์จ์(ํธ์ง ๋ถ์ค) ์ผ์ด ์๊น๋๋ค. ๋๋ก๋ ์ฑ์ด "์ ์ฅ๋จ"๊ณผ "์ ์ฅ๋์ง ์์" ๊ฐ์ ํผ๋์ค๋ฌ์ด ์ํ๋ฅผ ๋์์ ๋ณด์ด๊ฑฐ๋, ๋ ์ฝ๋๊ฐ ๋๊ธฐํ ๊ณผ์ ์์ ๋ํ๋ฌ๋ค ์ฌ๋ผ์ก๋ค ๋ค์ ๋ํ๋๊ธฐ๋ ํฉ๋๋ค.
์ถฉ๋์ ๊ฐ๋จํฉ๋๋ค: ์ฑ์ด ์กฐ์ ํ ๊ธฐํ๋ฅผ ์ป๊ธฐ ์ ์ ๋์ผํ ํญ๋ชฉ์ ์๋ก ๋ค๋ฅธ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๊ฒฝ์ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์ง์ ๋ด๋น์๊ฐ ์คํ๋ผ์ธ ์ํ์์ ํฐ์ผ ์ฐ์ ์์๋ฅผ ๋์์ผ๋ก ๋ฐ๊ฟจ๋๋ฐ, ํ์์ด ์จ๋ผ์ธ์ผ๋ก ํฐ์ผ์ ๋ซ์๋ค๋ฉด ์คํ๋ผ์ธ ํฐ์ด ๋ค์ ์ฐ๊ฒฐ๋ ๋ ๋ ๋ณ๊ฒฝ์ ์๋ฌด ๊ท์น ์์ด ๋ชจ๋ ์ ์ฉํ ์๋ ์์ต๋๋ค.
๋ชฉํ๋ ์คํ๋ผ์ธ์ด ์๋ฒฝํ๊ฒ ๋๊ปด์ง๊ฒ ํ๋ ๊ฒ์ด ์๋๋๋ค. ๋ชฉํ๋ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค:
- ์ฌ์ฉ์๋ ์์ ์ ์์ ๊ฑฑ์ ์์ด ๊ณ์ ์์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
- ๋๊ธฐํ๋ ๋์ค์ ์ด๋ค์ง๋ ์์น ์๋ ์ค๋ณต ์์ด ์ด๋ค์ ธ์ผ ํฉ๋๋ค.
- ์ฃผ์๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฑ์ด ๋ฌด์จ ์ผ์ด ์์๊ณ ๋ค์์ ๋ฌด์์ ํด์ผ ํ๋์ง ๋ช ํํ ์๋ ค์ค์ผ ํฉ๋๋ค.
์ด๋ Kotlin/SwiftUI๋ก ์ง์ ๊ตฌํํ๋ AppMaster ๊ฐ์ ๋ ธ์ฝ๋ ํ๋ซํผ์ผ๋ก ๋ค์ดํฐ๋ธ ์ฑ์ ๋ง๋ค๋ ๋์ผํฉ๋๋ค. ์ด๋ ค์ด ๋ถ๋ถ์ UI ์์ ฏ์ด ์๋๋ผ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ธ ๋์ ์ธ์์ด ๋ฐ๋ ๋ ์ฑ์ด ์ด๋ป๊ฒ ๋์ํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ์คํ๋ผ์ธ ์ฐ์ ๋ชจ๋ธ(์ ๋ฌธ ์ฉ์ด ์์ด)
์คํ๋ผ์ธ ์ฐ์ ์ฑ์ ๊ธฐ๊ธฐ๊ฐ ๋คํธ์ํฌ๋ฅผ ์์ ์ ์๋ค๋ ์ ์ ์ ์ ๋ก ํ๋, ์ฑ์ด ๊ทธ๋๋ ์ฌ์ฉํ๊ธฐ ์ฌ์์ผ ํฉ๋๋ค. ํ๋ฉด์ ๋ก๋๋์ด์ผ ํ๊ณ , ์๋ฒ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์๋ ๋ฒํผ์ ๋์ํด์ผ ํฉ๋๋ค.
๋๋ถ๋ถ์ ํฌ๊ดํ๋ ๋ค ๊ฐ์ง ์ฉ์ด:
- ๋ก์ปฌ ์บ์: ์ฑ์ด ์ฆ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๊ธฐ๊ธฐ์ ์ ์ฅํ ๋ฐ์ดํฐ.
- ๋๊ธฐํ ํ: ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ(๋๋ ๋คํธ์ํฌ๊ฐ ๋ถ์์ )์ผ ๋ ์ํํ ์์ ๋ชฉ๋ก.
- ์๋ฒ ์ง์ค(์๋ฒ ๋ฒ์ ): ๊ฒฐ๊ตญ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๊ณต์ ํ๊ฒ ๋๋ ๋ฐฑ์๋์ ์ ์ฅ๋ ๋ฒ์ .
- ์ถฉ๋: ์ฌ์ฉ์์ ํ์ ์๋ ๋ณ๊ฒฝ์ด ๋ ์ด์ ๊น๋ํ๊ฒ ์ ์ฉ๋์ง ์์ ๋.
์ฝ๊ธฐ(read)์ ์ฐ๊ธฐ(write)๋ฅผ ๋ถ๋ฆฌํด ์๊ฐํ๋ฉด ์ ์ฉํฉ๋๋ค.
์ฝ๊ธฐ๋ ๋ณดํต ๊ฐ๋จํฉ๋๋ค: ๊ฐ๋ฅํ ์ต์ ์ ๋ฐ์ดํฐ๋ฅผ(๋๊ฐ ๋ก์ปฌ ์บ์์์) ๋ณด์ฌ์ฃผ๊ณ ๋คํธ์ํฌ๊ฐ ๋ณต๊ตฌ๋๋ฉด ์กฐ์ฉํ ์๋ก ๊ณ ์นฉ๋๋ค.
์ฐ๊ธฐ๋ ๋ค๋ฆ ๋๋ค. "๋ ์ฝ๋ ์ ์ฒด๋ฅผ ํ ๋ฒ์ ์ ์ฅ"์ ์์กดํ์ง ๋ง์ธ์. ์คํ๋ผ์ธ์ด๋ฉด ๊ทธ ๋ฐฉ์์ ๊นจ์ง๋๋ค.
๋์ ์ฌ์ฉ์๊ฐ ํ ์์ ์ ์์ ํญ๋ชฉ๋ค๋ก ๋ณ๊ฒฝ ๋ก๊ทธ์ ๊ธฐ๋กํ์ธ์. ์: "์ํ๋ฅผ ์น์ธ์ผ๋ก ์ค์ ", "๋๊ธ X ์ถ๊ฐ", "์๋ 2 โ 3์ผ๋ก ๋ณ๊ฒฝ". ๊ฐ ํญ๋ชฉ์ ํ์์คํฌํ์ ID์ ํจ๊ป ๋๊ธฐํ ํ์ ๋ค์ด๊ฐ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ๊ฐ ์ด๋ฅผ ์ ๋ฌํ๋ ค ์๋ํฉ๋๋ค.
์ฌ์ฉ์๋ ๋ณ๊ฒฝ์ด ๋ณด๋ฅ(pending)์์ ๋๊ธฐํ(synced)๋ก ์ด๋ํ๋ ๋์ ๊ณ์ ์์ ํ ์ ์์ต๋๋ค.
AppMaster ๊ฐ์ ๋ ธ์ฝ๋ ํ๋ซํผ์ ์ฌ์ฉํ๋๋ผ๋ ๋์ผํ ๊ตฌ์ฑ ์์๊ฐ ํ์ํฉ๋๋ค: ๋น ๋ฅธ ํ๋ฉด์ฉ ์บ์๋ ์ฝ๊ธฐ, ์ฌ์๋ยท๋ณํฉยท์ถฉ๋ ๋ฐ์ ์ ํ๋๊ทธ๊ฐ ๊ฐ๋ฅํ ์ฌ์ฉ์ ์์ ์ ๋ช ํํ ํ.
์ง์ง๋ก ์คํ๋ผ์ธ ์ง์์ด ํ์ํ ๊ฒ์ ๊ฒฐ์ ํ์ธ์
์คํ๋ผ์ธ ์ฐ์ ์ "๋ชจ๋ ๊ฒ์ด ์ฐ๊ฒฐ ์์ด ์๋"์ฒ๋ผ ๋ค๋ฆฌ์ง๋ง, ๊ทธ ์ฝ์ ๋๋ฌธ์ ๋ง์ ์ฑ์ด ๋ฌธ์ ์ ๋น ์ง๋๋ค. ์ค์ ๋ก ์คํ๋ผ์ธ ์ง์์ด ์ ์ฉํ ๋ถ๋ถ๋ง ์ ํํ๊ณ ๋๋จธ์ง๋ ๋ช ํํ ์จ๋ผ์ธ ์ ์ฉ์ผ๋ก ๋์ธ์.
์ฌ์ฉ์ ์๋ ๊ด์ ์์ ์๊ฐํ์ธ์: ์ฌ๋๋ค์ด ์งํ, ๋นํ๊ธฐ, ํน์ ๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ ์ฐฝ๊ณ ์์ ๋ฌด์์ ํด์ผ ํฉ๋๊น? ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ผ์ ์์ ์ ์์ฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ์ก์ ์ ์ง์ํ๊ณ , "์ต์ ์ง์ค"์ด ์ค์ํ ์์ ์ ์ฐจ๋จํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์คํ๋ผ์ธ ์นํ์ ์ก์ ์ ์ค์ฉ์ ์ธ ๋ชฉ๋ก์ ๋ณดํต ํต์ฌ ๋ ์ฝ๋(๋ฉ๋ชจ, ์์ , ์ ๊ฒ, ํฐ์ผ) ์์ฑยทํธ์ง, ๋๊ธ ์์ฑ ์ด์, ์ฌ์ง ์ฒจ๋ถ(๋ก์ปฌ์ ์ ์ฅ ํ ๋์ค ์ ๋ก๋) ๋ฑ์ ํฌํจํฉ๋๋ค. ์ญ์ ๋ ๊ฐ๋ฅํ์ง๋ง ์๋ฒ ํ์ธ ์ ์๋ ์คํ ์ทจ์ ๊ฐ๋ฅํ ์ํํธ ๋๋ฆฌํธ๋ก ์ฒ๋ฆฌํ๋ ํธ์ด ์์ ํฉ๋๋ค.
๋ฐ๋ฉด ์ค์๊ฐ์ด์ด์ผ ํ๋ ์์ ์ ๊ฒฐ์ ํ์ธ์. ๊ฒฐ์ , ๊ถํ ๋ณ๊ฒฝ, ์น์ธ, ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๊ด๋ จ ์์ ์ ๋ณดํต ์ฐ๊ฒฐ์ด ํ์ํฉ๋๋ค. ์๋ฒ ํ์ธ ์์ด๋ ์์ ์ ์ ํจ์ฑ์ ํ์ ํ ์ ์๋ค๋ฉด ์คํ๋ผ์ธ์ผ๋ก ํ์ฉํ์ง ๋ง์ธ์. ๋ชจํธํ ์ค๋ฅ ๋์ "์ฐ๊ฒฐ ํ์"์ ๊ฐ์ ๋ช ํํ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ์ญ์์ค.
์ ์ ๋(freshness)์ ๋ํ ๊ธฐ๋๋ฅผ ์ค์ ํ์ธ์. "์คํ๋ผ์ธ"์ ์ด์ง๊ฐ์ด ์๋๋๋ค. ์ผ๋ง๋ ์ค๋๋ ๋ฐ์ดํฐ๊น์ง ํ์ฉํ ์งโ๋ถ ๋จ์, ์๊ฐ ๋จ์, ํน์ "๋ค์ ์ฑ ์คํ ์" ๊ฐ์ ๊ท์น์ ์ ์ํ๊ณ UI์ ๊ฐ๋จํ ๋ฌธ๊ตฌ๋ก ํ์ํ์ธ์(์: "๋ง์ง๋ง ์ ๋ฐ์ดํธ 2์๊ฐ ์ ", "์จ๋ผ์ธ์ผ ๋ ๋๊ธฐํ ์ค").
์ถฉ๋์ด ๋ง์ด ๋ฐ์ํ๋ ๋ฐ์ดํฐ(์ฌ๊ณ ์๋, ๊ณต์ ์์ , ํ ๋ฉ์์ง)๋ ์ด๊ธฐ์ ํ๋๊ทธ๋ฅผ ๋ฌ์๋์ธ์. ์ด๋ฐ ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ์ฌ๋์ด ๋น ๋ฅด๊ฒ ํธ์งํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋์ด ์ฆ์ต๋๋ค. ํด๋น ํญ๋ชฉ์ ์คํ๋ผ์ธ์์ ์ด์๋ง ํ์ฉํ๊ฑฐ๋ ๋ณ๊ฒฝ์ ํ๋์ ๊ฐ์ ๋ฎ์ด์ฐ๋ ๋์ ๋ณ๋์ ์ด๋ฒคํธ๋ก ์บก์ฒํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
AppMaster๋ก ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ, ์ด ๊ฒฐ์ ๋จ๊ณ๋ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๊ท์น์ ๋ชจ๋ธ๋งํด ์ฑ์ด ์์ ํ ์ด์์ ์คํ๋ผ์ธ์ ์ ์ฅํ๊ณ ์ํํ ๋์์ ์จ๋ผ์ธ ์ ์ฉ์ผ๋ก ์ ์งํ๋๋ก ๋์ต๋๋ค.
๋๊ธฐํ ํ ์ค๊ณ: ๊ฐ ๋ณ๊ฒฝ๋ง๋ค ๋ฌด์์ ์ ์ฅํ ์ง
์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์์ ์์ ํ ๋ "๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด๋ฅผ ๋๊ธฐํ"ํ๋ ค๊ณ ํ์ง ๋ง์ธ์. ์ฌ์ฉ์์ ํ๋์ ๋๊ธฐํํ์ธ์. ๋ช ํํ ์์ ํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ์ ์ค์ฌ์ด๋ฉฐ, ๋ฌธ์ ๊ฐ ์๊ฒผ์ ๋ ์ดํดํ๊ธฐ ์ฌ์ด ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
์์ ์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํ ํ๋๊ณผ ์ผ์นํ๋ ์๊ณ ์ฌ๋์ด ์ดํดํ๊ธฐ ์ฌ์ด ํญ๋ชฉ์ผ๋ก ์ ์งํ์ธ์:
- ๋ ์ฝ๋ ์์ฑ
- ํน์ ํ๋ ์ ๋ฐ์ดํธ
- ์ํ ๋ณ๊ฒฝ(์ ์ถ, ์น์ธ, ๋ณด๊ด)
- ์ญ์ (๊ฐ๋ฅํ๋ฉด ์๋ฒ ํ์ธ ์ ์๋ ์ํํธ ๋๋ฆฌํธ)
์์ ์์ ์ผ์๋ก ๋๋ฒ๊ทธํ๊ธฐ ์ฝ์ต๋๋ค. ์ง์ํ์ด ๋์์ค์ผ ํ ๊ฒฝ์ฐ "์ํ Draft โ Submitted๋ก ๋ณ๊ฒฝ" ๊ฐ์ ๋ฌธ๊ตฌ๋ ํฐ JSON ๋ฉ์ด๋ฆฌ๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
ํ์ ๋ค์ด๊ฐ๋ ๊ฐ ์์ ์๋ ์์ ํ๊ฒ ์ฌ์ํ๊ณ ์ถฉ๋์ ๊ฐ์งํ ์ ์๋๋ก ์ถฉ๋ถํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ธ์:
- ๋ ์ฝ๋ ์๋ณ์(์ ๋ ์ฝ๋์ธ ๊ฒฝ์ฐ ์์ ๋ก์ปฌ ID)
- ์์ ํ์์คํฌํ์ ๊ธฐ๊ธฐ ์๋ณ์
- ๋ ์ฝ๋์ ๋ํ ์์ ๋ฒ์ (๋๋ ๋ง์ง๋ง์ผ๋ก ์์๋ ์ ๋ฐ์ดํธ ์๊ฐ)
- ํ์ด๋ก๋(๋ณ๊ฒฝ๋ ํน์ ํ๋์ ๊ฐ๋ฅํ๋ฉด ์ด์ ๊ฐ)
- ๋ฉฑ๋ฑ์ฑ ํค(์ฌ์๋๊ฐ ์ค๋ณต์ ๋ง๋ค์ง ์๋๋ก ํ๋ ๊ณ ์ ์์ ID)
์ด ์์ ๋ฒ์ (expected version)์ด ์ ์งํ ์ถฉ๋ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ํต์ฌ์ ๋๋ค. ์๋ฒ ๋ฒ์ ์ด ์ด๋ฏธ ๋ฐ๋์๋ค๋ฉด ์กฐ์ฉํ ๋ฎ์ด์ฐ๊ธฐ๋ณด๋ค๋ ์ผ์ ์ค์งํ๊ณ ๊ฒฐ์ ์ ์์ฒญํ ์ ์์ต๋๋ค.
์ด๋ค ์์ ๋ค์ ์ฌ์ฉ์๊ฐ ํ ๋จ๊ณ๋ก ์ธ์ํ๋ฏ๋ก ํจ๊ป ์ ์ฉ๋์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด "์ฃผ๋ฌธ ์์ฑ"๊ณผ "์ธ ๊ฐ์ ํ๋ชฉ ์ถ๊ฐ"๋ ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ๋ณด๋ฅ๋์ด์ผ ํฉ๋๋ค. ์ด๋ค์ ๊ทธ๋ฃน ID(๋๋ ํธ๋์ญ์ ID)๋ก ๋ฌถ์ด ๋๊ธฐํ ์์ง์ด ํจ๊ป ์ ์กํ๊ณ ๋ชจ๋ ์ปค๋ฐํ๊ฑฐ๋ ๋ชจ๋ ๋ณด๋ฅ ์ํ๋ก ์ ์งํ๋๋ก ํ์ธ์.
์ง์ ๊ตฌํํ๋ AppMaster์์ ๊ตฌ์ฑํ๋ ๋ชฉํ๋ ๋์ผํฉ๋๋ค: ๊ฐ ๋ณ๊ฒฝ์ ํ ๋ฒ ๊ธฐ๋ก๋๊ณ ์์ ํ๊ฒ ์ฌ์๋๋ฉฐ, ๋ฌด์ธ๊ฐ ๋ง์ง ์์ ๋ ์ค๋ช ํ ์ ์์ด์ผ ํฉ๋๋ค.
์ฌ์ฉ์์๊ฒ ์ค๋ช ํ ์ ์๋ ์ถฉ๋ ํด๊ฒฐ ๊ท์น
์ถฉ๋์ ์ ์์ ๋๋ค. ๋ชฉํ๋ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ๋๋ฌผ๊ณ ์์ ํ๋ฉฐ ๋ฐ์ํ์ ๋ ์ค๋ช ํ๊ธฐ ์ฌ์ด ์ํ๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ถฉ๋์ด ๋ฐ์ํ ์๊ฐ์ ๋ช ๋ช ํ์ธ์: ์ฑ์ด ๋ณ๊ฒฝ์ ๋ณด๋๊ณ ์๋ฒ๊ฐ "๋น์ ์ด ํธ์ง์ ์์ํ ๋์ ๋ฒ์ ์ด ์๋๋๋ค"๋ผ๊ณ ์๋ตํฉ๋๋ค. ๊ทธ๋์ ๋ฒ์ ๊ด๋ฆฌ๋ ์ค์ํฉ๋๋ค.
๊ฐ ๋ ์ฝ๋์ ๋ ๊ฐ์ง ๊ฐ์ ์ ์งํ์ธ์:
- ์๋ฒ ๋ฒ์ (์๋ฒ์ ํ์ฌ ๋ฒ์ )
- ์์ ๋ฒ์ (ํฐ์ด ํธ์ง์ ์์ํ ๋ ์๊ณ ์๋ ๋ฒ์ )
์์ ๋ฒ์ ์ด ์ผ์นํ๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์๋ค์ด๊ณ ์๋ฒ ๋ฒ์ ์ ์ฌ๋ฆฝ๋๋ค. ์ผ์นํ์ง ์์ผ๋ฉด ์ถฉ๋ ๊ท์น์ ์ ์ฉํ์ธ์.
๋ฐ์ดํฐ ์ ํ๋ณ๋ก ๊ท์น์ ์ ํํ์ธ์(๋ชจ๋ ๊ฒ์ ํ ๊ท์น์ ์ ์ฉํ์ง ๋ง์ธ์)
๋ค๋ฅธ ๋ฐ์ดํฐ๋ ๋ค๋ฅธ ๊ท์น์ด ํ์ํฉ๋๋ค. ์ํ ํ๋๋ ๊ธด ๋ฉ๋ชจ์ ๊ฐ์ง ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด ๊ท์น:
- ๋ง์ง๋ง ์ฐ๊ธฐ ์น๋ฆฌ(Last write wins): ๋ณด๊ธฐ ์ค์ ๊ฐ์ ์ํ์ด ๋ฎ์ ํ๋์ ์ ํฉ.
- ํ๋ ๋ณํฉ(Merge fields): ํ๋๊ฐ ๋ ๋ฆฝ์ ์ผ ๋(์ํ vs ๋ฉ๋ชจ) ์ ๋ฆฌ.
- ์ฌ์ฉ์์๊ฒ ๋ฌป๊ธฐ: ๊ฐ๊ฒฉ, ๊ถํ, ํฉ๊ณ ๊ฐ์ ์ํ์ด ํฐ ํธ์ง์ ์ ํฉ.
- ์๋ฒ ์ฐ์ + ์ฌ๋ณธ ๋ณด๊ด: ์๋ฒ ๊ฐ์ ์ ์งํ๋ ์ฌ์ฉ์์ ํธ์ง์ ์ด์์ผ๋ก ์ ์ฅํด ์ฌ์ ์ฉํ ์ ์๊ฒ ํจ.
AppMaster์์๋ ์ด ๊ท์น๋ค์ด ์๊ฐ์ ๋ก์ง์ผ๋ก ์ ๋งคํ๋ฉ๋๋ค: ๋ฒ์ ์ ๊ฒ์ฌํ๊ณ ํ๋๋ฅผ ๋น๊ตํ ๋ค ๊ฒฝ๋ก๋ฅผ ์ ํํ์ธ์.
์ญ์ ๋ ์ด๋ป๊ฒ ๋์ํ ์ง ๊ฒฐ์ ํ์ธ์(์๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ต๋๋ค)
์ญ์ ๋ ๊น๋ค๋ก์ด ๊ฒฝ์ฐ์ ๋๋ค. ๋ ์ฝ๋๋ฅผ ๋ฐ๋ก ์ ๊ฑฐํ์ง ๋ง๊ณ ํ ์์คํค(tombstone, "์ญ์ ๋จ" ํ์)์ ์ฌ์ฉํ์ธ์. ๊ทธ๋ฌ๊ณ ๋์ ๋ค๋ฅธ ๊ณณ์์ ์ญ์ ๋ ๋ ์ฝ๋๋ฅผ ๋๊ตฐ๊ฐ ํธ์งํ์ ๋ ์ด๋ป๊ฒ ํ ์ง ๊ฒฐ์ ํ์ธ์.
๋ช ํํ ๊ท์น์ ์: "์ญ์ ๊ฐ ์ฐ์ ์ด์ง๋ง ๋ณต์ํ ์ ์๋ค." ์: ์์ ๋ด๋น์๊ฐ ์คํ๋ผ์ธ์์ ๊ณ ๊ฐ ๋ฉ๋ชจ๋ฅผ ํธ์งํ๋๋ฐ ๊ด๋ฆฌ์์๊ฒ์ ๊ณ ๊ฐ์ด ์ญ์ ๋๋ค๋ฉด ๋๊ธฐํ ์ ์ฑ์ "๊ณ ๊ฐ์ด ์ญ์ ๋์์ต๋๋ค. ๋ณต์ํ๋ฉด ๋ฉ๋ชจ๋ฅผ ์ ์ฉํ์๊ฒ ์ต๋๊น?"๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฌด์ธ์ ์์ค์ ํผํ๊ณ ์ฌ์ฉ์๊ฐ ์ ์ด๊ถ์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ฌ์๋์ ์คํจ ์ํ: ์์ธก ๊ฐ๋ฅํ๊ฒ ์ ์งํ์ธ์
๋๊ธฐํ๊ฐ ์คํจํ๋ฉด ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ์ด์ ์ ๊ด์ฌ์ด ์์ต๋๋ค. ๊ทธ๋ค์ ์์ ์ ์์ ์ด ์์ ํ์ง, ๋ค์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ์ง ์๊ณ ์ถ์ดํฉ๋๋ค. ์์ธก ๊ฐ๋ฅํ ์ํ ๋ชจ๋ธ์ ๊ณตํฉ๊ณผ ์ง์ ์์ฒญ์ ์ค์ฌ์ค๋๋ค.
์๊ณ ๋์ ๋๋ ์ํ ๋ชจ๋ธ๋ก ์์ํด ํ๋ฉด ์ ๋ฐ์์ ์ผ๊ด๋๊ฒ ์ ์งํ์ธ์:
- ๋๊ธฐ(Queued): ๊ธฐ๊ธฐ์ ์ ์ฅ๋์ด ๋คํธ์ํฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- ๋๊ธฐํ ์ค(Syncing): ์ง๊ธ ์ ์ก ์ค
- ์ ์ก๋จ(Sent): ์๋ฒ๊ฐ ํ์ธํจ
- ์คํจ(Failed): ์ ์กํ ์ ์์ผ๋ฉฐ ์ฌ์๋ํ๊ฑฐ๋ ์ฃผ์๊ฐ ํ์ํจ
- ๊ฒํ ํ์(Needs review): ์ ์ก๋์์ผ๋ ์๋ฒ๊ฐ ๊ฑฐ๋ถํ๊ฑฐ๋ ํ๋๊ทธ๋ฅผ ๋ฌ์์
์ฌ์๋๋ ๋ฐฐํฐ๋ฆฌ์ ๋ฐ์ดํฐ์ ์น์ ํด์ผ ํฉ๋๋ค. ์ด๋ฐ์๋ ๋น ๋ฅด๊ฒ ์ฌ์๋ํ๋ค๊ฐ(์งง์ ์ ํธ ๋๊น ์ฒ๋ฆฌ), ์คํจ๊ฐ ๋ฐ๋ณต๋๋ฉด ์ ์ฐจ ๋๋ ค์ง๋ ๋ฐฉ์์ด ์ข์ต๋๋ค. 1๋ถ, 5๋ถ, 15๋ถ, ๊ทธ๋ค์ ์๊ฐ ๋จ์(backoff) ๊ฐ์ ๊ฐ๋จํ ๊ท์น์ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. ๋ํ ๋ฌด์์ ์ฌ์๋ํ์ง ๋ง์ธ์(์ ํจํ์ง ์์ ๋ณ๊ฒฝ์ ์ฌ์๋๊ฐ ๋ถํ์ํฉ๋๋ค).
์ค๋ฅ๋ ์ข ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ์ธ์. ๋ค์ ํ๋์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค:
- ์คํ๋ผ์ธ/๋คํธ์ํฌ ์์: ํ์ ๋จ๊ฒจ๋๊ณ ์จ๋ผ์ธ ์ ์ฌ์๋
- ํ์์์/์๋ฒ ์ฌ์ฉ ๋ถ๊ฐ: ์คํจ๋ก ํ์ํ๊ณ ๋ฐฑ์คํ๋ก ์๋ ์ฌ์๋
- ์ธ์ฆ ๋ง๋ฃ: ๋๊ธฐํ๋ฅผ ์ผ์์ค์งํ๊ณ ์ฌ์ฉ์์๊ฒ ์ฌ๋ก๊ทธ์ธ์ ์๊ตฌ
- ๊ฒ์ฆ ์คํจ(์๋ชป๋ ์ ๋ ฅ): ๊ฒํ ํ์๋ก ํ์ํ๊ณ ์์ ํ ํญ๋ชฉ์ ๋ณด์ฌ์ค
- ์ถฉ๋(๋ ์ฝ๋ ๋ณ๊ฒฝ๋จ): ๊ฒํ ํ์๋ก ํ์ํ๊ณ ์ถฉ๋ ๊ท์น์ผ๋ก ๋ผ์ฐํ
๋ฉฑ๋ฑ์ฑ(idempotency)์ ์ฌ์๋๋ฅผ ์์ ํ๊ฒ ๋ง๋ญ๋๋ค. ๋ชจ๋ ๋ณ๊ฒฝ์๋ ๊ณ ์ ์์ ID(๋๊ฐ UUID)๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค. ์ฑ์ด ๋์ผํ ๋ณ๊ฒฝ์ ๋ค์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ๊ทธ ID๋ฅผ ์ธ์ํด ์ค๋ณต ์์ฑ ๋์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค.
์: ๊ธฐ์ ์๊ฐ ์คํ๋ผ์ธ์์ ์๋ฃ๋ ์์ ์ ์ ์ฅํ ๋ค ์๋ฆฌ๋ฒ ์ดํฐ์ ๋ค์ด๊ฐ์ ์ฐ๊ฒฐ์ด ๋๊น๋๋ค. ์ฑ์ด ์ ๋ฐ์ดํธ๋ฅผ ๋ณด๋ด๊ณ ํ์์์์ด ๋ฐ์ํ ๋ค ๋์ค์ ์ฌ์๋ํฉ๋๋ค. ์์ ID๊ฐ ์์ผ๋ฉด ๋ ๋ฒ์งธ ์ ์ก์ ํด๊ฐ ์์ต๋๋ค. ์์ผ๋ฉด ์๋ฃ ์ด๋ฒคํธ๊ฐ ์ค๋ณต ์์ฑ๋ ์ ์์ต๋๋ค.
AppMaster์์๋ ์ด๋ฌํ ์ํ์ ๊ท์น์ ๋๊ธฐํ ํ๋ก์ธ์ค์ 1๊ธ ํ๋์ ๋ก์ง์ผ๋ก ์ทจ๊ธํด Kotlin๊ณผ SwiftUI ์ฑ ๋ชจ๋์์ ๋์ผํ๊ฒ ๋์ํ๊ฒ ํ์ธ์.
๋๊ธฐ ์ค ๋ณ๊ฒฝ์ฌํญ UX: ์ฌ์ฉ์๊ฐ ๋ณด๋ ๊ฒ๊ณผ ํ ์ ์๋ ๊ฒ
์ฌ๋๋ค์ ์คํ๋ผ์ธ ์ํ์์๋ ์ฑ์ ์์ ํ๊ฒ ๋๊ปด์ผ ํฉ๋๋ค. ์ข์ "๋๊ธฐ ๋ณ๊ฒฝ์ฌํญ" UX๋ ์ฐจ๋ถํ๊ณ ์์ธก ๊ฐ๋ฅํฉ๋๋ค: ์์ ์ด ๊ธฐ๊ธฐ์ ์ ์ฅ๋์๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๊ณ ๋ค์ ๋จ๊ณ๋ฅผ ๋ช ํํ ํฉ๋๋ค.
๊ต์ฅํ ๋์ ๋๋ ๋ฐฐ๋๋ณด๋ค ๋ฏธ๋ฌํ ํ์๊ฐ ๋ ์ข์ต๋๋ค. ์: ํค๋์ ์์ "๋๊ธฐํ ์ค" ์์ด์ฝ์ ํ์ํ๊ฑฐ๋, ํธ์ง์ด ๋ฐ์ํ ํ๋ฉด์ ์กฐ์ฉํ "3๊ฐ ๋๊ธฐ ์ค" ๋ ์ด๋ธ์ ๋ก๋๋ค. ์ง์ง ์ํ(์: "๋ก๊ทธ์ธ ํ์๋ก ์ ๋ก๋ ๋ถ๊ฐ")์๋ ๊ฐํ ์์ ์ฐ์ธ์.
์ฌ์ฉ์๊ฐ ์ํฉ์ ์ดํดํ ์ ์๋ ํ ๊ณณ์ ์ ๊ณตํ์ธ์. ๊ฐ๋จํ ๋ฐ์ ํจ(Outbox)์ด๋ ๋๊ธฐ ๋ณ๊ฒฝ์ฌํญ ํ๋ฉด์ด ํญ๋ชฉ์ "ํฐ์ผ 104์ ๋๊ธ ์ถ๊ฐ" ๋๋ "ํ๋กํ ์ฌ์ง ์ ๋ฐ์ดํธ" ๊ฐ์ ํ์ดํ ๋ฌธ๊ตฌ๋ก ๋์ดํ๋ฉด ํฌ๋ช ์ฑ์ด ๋์์ง๊ณ ์ง์ ์์ฒญ์ด ์ค์ด๋ญ๋๋ค.
์ฌ์ฉ์๊ฐ ํ ์ ์๋ ๊ฒ
๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ๋ช ๊ฐ์ง ํ๋๋ง ํ์ํ๋ฉฐ ์ฑ ์ ๋ฐ์ ์ผ๊ด๋์ด์ผ ํฉ๋๋ค:
- ์ง๊ธ ์ฌ์๋(Retry now)
- ๋ค์ ํธ์ง(Edit again, ์ ๋ณ๊ฒฝ ์์ฑ)
- ๋ก์ปฌ ๋ณ๊ฒฝ ์ญ์ (Discard local change)
- ์ธ๋ถ์ฌํญ ๋ณต์ฌ(Copy details, ์ด์ ๋ณด๊ณ ์ ์ ์ฉ)
์ํ ๋ ์ด๋ธ์ ๋จ์ํ๊ฒ ์ ์งํ์ธ์: Pending(๋๊ธฐ), Syncing(๋๊ธฐํ ์ค), Failed(์คํจ). ์คํจ ์์๋ ์ฌ๋ ๋งํฌ๋ก ์ค๋ช ํ์ธ์: "์ ๋ก๋ํ ์ ์์ต๋๋ค. ์ธํฐ๋ท ์์." ๋๋ "๋ค๋ฅธ ์ฌ๋์ด ์ด ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด ๊ฑฐ๋ถ๋์์ต๋๋ค." ์ค๋ฅ ์ฝ๋๋ฅผ ๋ณด์ฌ์ฃผ์ง ๋ง์ธ์.
์ฑ ์ ์ฒด๋ฅผ ์ฐจ๋จํ์ง ๋ง์ธ์
์ค์ ๋ก ์จ๋ผ์ธ์ด์ด์ผ๋ง ๊ฐ๋ฅํ ์์ (์: Stripe ๊ฒฐ์ , ์ ์ฌ์ฉ์ ์ด๋)์ ์ฐจ๋จํ์ธ์. ๊ทธ ์ธ๋ ๋ชจ๋ ์๋ํด์ผ ํฉ๋๋ค. ์ต๊ทผ ๋ฐ์ดํฐ ๋ณด๊ธฐ์ ์ ์ด์ ์์ฑ๋ ํฌํจ๋ฉ๋๋ค.
ํ์ค์ ์ธ ํ๋ฆ ์: ํ์ฅ ๊ธฐ์ ์๊ฐ ์งํ์์ ์์ ๋ณด๊ณ ์๋ฅผ ์์ ํฉ๋๋ค. ์ฑ์ "1๊ฐ ๋๊ธฐ ์ค"์ ํ์ํ๊ณ ์์ ์ ๊ณ์ํ๋๋ก ํ์ฉํฉ๋๋ค. ๋์ค์ "๋๊ธฐํ ์ค"์ผ๋ก ๋ฐ๋๊ณ ์๋์ผ๋ก ์ฌ๋ผ์ง๋๋ค. ์คํจํ๋ฉด ์์ ๋ณด๊ณ ์๋ ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ "์คํจ"๋ก ํ์๋๊ณ ๋จ์ผ "์ง๊ธ ์ฌ์๋" ๋ฒํผ์ด ์ ๊ณต๋ฉ๋๋ค.
AppMaster์์ ๊ตฌํํ๋ ๊ฒฝ์ฐ, ๊ฐ ๋ ์ฝ๋์ ์ผ๋ถ๋ก ์ด๋ฌํ ์ํ(๋๊ธฐ, ์คํจ, ๋๊ธฐํ๋จ)๋ฅผ ๋ชจ๋ธ๋งํด UI๊ฐ ํน์ ํ๋ฉด ์์ด๋ ๋ชจ๋ ๊ณณ์์ ์ด๋ฅผ ๋ฐ์ํ๊ฒ ํ์ธ์.
์ธ์ฆ, ๊ถํ, ์คํ๋ผ์ธ ์ํ์์์ ์์ ์ฑ
์คํ๋ผ์ธ ๋ชจ๋๋ ๋ณด์ ๋ชจ๋ธ์ ๋ฐ๊ฟ๋๋ค. ์ฌ์ฉ์๋ ์ฐ๊ฒฐ์ด ์์ ๋ ์์ ์ ์ํํ ์ ์์ง๋ง ์๋ฒ๊ฐ ์ฌ์ ํ ์ง์ค์ ๊ทผ์์ ๋๋ค. ํ์ ์๋ ๋ชจ๋ ๋ณ๊ฒฝ์ "์์ฒญ๋จ(requested)"์ด์ง "์น์ธ๋จ(approved)"์ด ์๋์ ๊ฐ์ฃผํ์ธ์.
์คํ๋ผ์ธ ์ํ์์ ๋ก๊ทธ์ธ ๋ง๋ฃ
ํ ํฐ์ ๋ง๋ฃ๋ฉ๋๋ค. ์คํ๋ผ์ธ ์ํ์์ ๋ง๋ฃ๋๋๋ผ๋ ์ฌ์ฉ์๊ฐ ํธ์ง์ ๊ณ์ํ๊ณ ์ด๋ฅผ ๋ณด๋ฅ ์ํ๋ก ์ ์ฅํ๋๋ก ํ์ฉํ์ธ์. ๊ฒฐ์ ๋ ๊ด๋ฆฌ์ ์น์ธ์ฒ๋ผ ์๋ฒ ํ์ธ์ด ํ์ํ ์์ ์ ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฅํ์ง ๋ง์ธ์. ์จ๋ผ์ธ์ผ๋ก ๋ค์ ์ธ์ฆ๋ ๋๊น์ง ๋ณด๋ฅ๋ก ์ ์งํ์ธ์.
์ฑ์ด ์จ๋ผ์ธ์ด ๋๋ฉด ์ฐ์ ์กฐ์ฉํ ํ ํฐ ๊ฐฑ์ ์ ์๋ํ์ธ์. ์ฌ์ฉ์๊ฐ ๋ค์ ๋ก๊ทธ์ธํด์ผ ํ๋ฉด ํ ๋ฒ๋ง ์์ฒญํ๊ณ ์๋์ผ๋ก ๋๊ธฐํ๋ฅผ ์ฌ๊ฐํ์ธ์.
์ฌ๋ก๊ทธ์ธ ํ์๋ ์ ์ก ์ ์ ํ์ ๊ฐ ํญ๋ชฉ์ ์ฌ๊ฒ์ฆํ์ธ์. ์ฌ์ฉ์ ์ ์์ด ๋ฐ๋์์ ์ ์๊ณ (๊ณต์ ๊ธฐ๊ธฐ ๋ฑ) ์ค๋๋ ํธ์ง์ด ์๋ชป๋ ๊ณ์ ์ผ๋ก ๋๊ธฐํ๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
๊ถํ ๋ณ๊ฒฝ๊ณผ ๊ธ์ง๋ ๋์
๊ถํ์ ์ฌ์ฉ์๊ฐ ์คํ๋ผ์ธ์ผ ๋ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ด์ ํ์ฉ๋๋ ํธ์ง์ด ์ค๋์ ๊ธ์ง๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ช ์์ ์ผ๋ก ์ฒ๋ฆฌํ์ธ์:
- ํ์ ๊ฐ ์์ ์ ๋ํด ์๋ฒ ์ธก์์ ๊ถํ์ ์ฌํ์ธ
- ๊ธ์ง๋ ๊ฒฝ์ฐ ํด๋น ํญ๋ชฉ์ ์ค์งํ๊ณ ์ด์ ๋ฅผ ๋ช ํํ ํ์
- ์ฌ์ฉ์์ ๋ก์ปฌ ํธ์ง์ ๋ณด๊ดํด ๋ณต์ฌํ๊ฑฐ๋ ์ ๊ทผ ์์ฒญ์ ํ ์ ์๊ฒ ์ ์ง
- "๊ธ์ง" ์ค๋ฅ์ ๋ํด ๋ฐ๋ณต ์ฌ์๋ํ์ง ์๊ธฐ
์: ์ง์ ๋ด๋น์๊ฐ ๋นํ ์ค์ ๊ณ ๊ฐ ๋ฉ๋ชจ๋ฅผ ์คํ๋ผ์ธ์์ ํธ์งํ๋๋ฐ, ๋ฐค ์ฌ์ด์ ์ญํ ์ด ์ ๊ฑฐ๋์๋ค๋ฉด ๋๊ธฐํ ์ ์๋ฒ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ์ฑ์ "์ ๋ก๋ ๋ถ๊ฐ: ๋ ์ด์ ์ ๊ทผ ๊ถํ์ด ์์ต๋๋ค"๋ฅผ ํ์ํ๊ณ ๋ฉ๋ชจ๋ฅผ ๋ก์ปฌ ์ด์์ผ๋ก ์ ์งํด์ผ ํฉ๋๋ค.
์คํ๋ผ์ธ์ ์ ์ฅ๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ
ํ๋ฉด ๋ ๋๋ง๊ณผ ํ ์ฌ์์ ์ํด ํ์ํ ์ต์ํ๋ง ์ ์ฅํ์ธ์. ์คํ๋ผ์ธ ์ ์ฅ์๋ฅผ ์ํธํํ๊ณ ๋น๋ฐ์ ๋ณด ์บ์ฑ์ ํผํ๋ฉฐ ๋ก๊ทธ์์ ๊ท์น(์: ๋ก์ปฌ ๋ฐ์ดํฐ ์ญ์ ๋๋ ์ฌ์ฉ์ ๋์ ํ ์ด์๋ง ๋ณด๊ด)์ ๋ช ํํ ํ์ธ์. AppMaster๋ก ๋น๋ํ ๊ฒฝ์ฐ ์ธ์ฆ ๋ชจ๋์ ์์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ํ๊ฐ ์ ํจํ ์ธ์ ์ ๊ธฐ๋ค๋ฆฐ ๋ค ๋ณ๊ฒฝ์ ์ ์กํ๋๋ก ์ค๊ณํ์ธ์.
์์ ์์ค์ด๋ ์ค๋ณต์ ์ผ์ผํค๋ ํํ ํจ์
๋๋ถ๋ถ์ ์คํ๋ผ์ธ ๋ฒ๊ทธ๋ ํ๋ คํ์ง ์์ต๋๋ค. ์๋ฒฝํ Wi-Fi์์ ํ ์คํธํ ๋๋ ๋ฌดํดํด ๋ณด์ด๋ ๋ช ๊ฐ์ง ์์ ๊ฒฐ์ ์์ ๋ฐ์ํด ์ค์ ์์ ์์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
ํํ ์คํจ ์ฌ๋ก๋ ์กฐ์ฉํ ๋ฎ์ด์ฐ๊ธฐ์ ๋๋ค. ์ฑ์ด ์ค๋๋ ๋ฒ์ ์ ์ ๋ก๋ํ๊ณ ์๋ฒ๊ฐ ๊ฒ์ฌ๋ฅผ ํ์ง ์์ ์ด๋ฅผ ๋ฐ์๋ค์ด๋ฉด ๋๊ตฐ๊ฐ์ ์ต์ ํธ์ง์ ์ง์ธ ์ ์์ต๋๋ค. ๋ฒ์ ๋ฒํธ(๋๋ "๋ง์ง๋ง ์ ๋ฐ์ดํธ" ํ์์คํฌํ)๋ก ๋๊ธฐํํ๊ณ ์๋ฒ๊ฐ ๋จผ์ ์ด๋ํ ๊ฒฝ์ฐ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ๊ฑฐ๋ถํด ์ฌ์ฉ์๊ฐ ๋ช ํํ ์ ํ์ ํ๊ฒ ํ์ธ์.
๋ ๋ค๋ฅธ ํจ์ ์ ์ฌ์๋ ํญ์ฃผ(retry storm)์ ๋๋ค. ๊ธฐ๊ธฐ๊ฐ ์ฝํ ์ฐ๊ฒฐ์ ๋์ฐพ์ผ๋ฉด ์ฑ์ด ๋ฐฑ์๋๋ฅผ ๋งค์ด ๋๋๋ ค ๋ฐฐํฐ๋ฆฌ๋ฅผ ์๋ชจํ๊ณ ์ค๋ณต ์ฐ๊ธฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ฌ์๋๋ ์ฐจ๋ถํด์ผ ํฉ๋๋ค: ์คํจ ํ ์๋๋ฅผ ๋ฆ์ถ๊ณ ๋ฌด์์์ฑ์ ์ถ๊ฐํด ์์ฒ ๋์ ๊ธฐ๊ธฐ๊ฐ ๋์์ ์ฌ์๋ํ์ง ์๊ฒ ํ์ธ์.
์์ ์์ค์ด๋ ์ค๋ณต์ ๊ฐ์ฅ ์์ฃผ ์ด๋ํ๋ ์ค์๋ค:
- ๋ชจ๋ ์คํจ๋ฅผ "๋คํธ์ํฌ"๋ก ์ทจ๊ธํ๊ธฐ: ์๊ตฌ ์ค๋ฅ(์๋ชป๋ ๋ฐ์ดํฐ, ๊ถํ ์์)์ ์ผ์์ ์ค๋ฅ(ํ์์์)๋ฅผ ๋ถ๋ฆฌํ์ธ์.
- ๋๊ธฐํ ์คํจ๋ฅผ ์จ๊ธฐ๊ธฐ: ์คํจํ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฉด ์ฌ์ฉ์๊ฐ ์์ ์ ๋ค์ ํ์ฌ ๋ ๊ฐ์ ๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ฒ ๋ฉ๋๋ค.
- ๋ณดํธ ์ฅ์น ์์ด ๊ฐ์ ๋ณ๊ฒฝ์ ๋ ๋ฒ ๋ณด๋ด๊ธฐ: ํญ์ ๊ณ ์ ์์ฒญ ID๋ฅผ ์ฒจ๋ถํด ์๋ฒ๊ฐ ์ค๋ณต์ ์ธ์ํ๊ฒ ํ์ธ์.
- ์ค์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ์๋ฆฌ์ง ์๊ณ ํ ์คํธ ํ๋๋ฅผ ์๋ ๋ณํฉํ๊ธฐ: ์๋ ๋ณํฉ์ ํ๋๋ผ๋ ์ค์ํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฒํ ํ๊ฒ ํ์ธ์.
- ์์ ๋ ID ์์ด ์คํ๋ผ์ธ์์ ๋ ์ฝ๋ ์์ฑํ๊ธฐ: ์์ ๋ก์ปฌ ID๋ฅผ ์ฌ์ฉํ๊ณ ์ ๋ก๋ ํ ์๋ฒ ID์ ๋งคํํด ์ดํ ํธ์ง์ด ๋ ๋ฒ์งธ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ง ์๋๋ก ํ์ธ์.
๊ฐ๋จํ ์: ํ์ฅ ๊ธฐ์ ์๊ฐ ์คํ๋ผ์ธ์์ ์ "ํ์ฅ ๋ฐฉ๋ฌธ(Site Visit)"์ ๋ง๋ค๊ณ ์ฌ์ฐ๋ฝํ๊ธฐ ์ ์ ๋ ๋ฒ ํธ์งํ์ต๋๋ค. ์์ฑ ํธ์ถ์ด ์ฌ์๋๋์ด ๋ ๊ฐ์ ์๋ฒ ๋ ์ฝ๋๊ฐ ๋ง๋ค์ด์ง๊ณ ๋์ค ๋ณ๊ฒฝ์ด ์๋ชป๋ ๋ ์ฝ๋์ ์ฐ๊ฒฐ๋ ์ ์์ต๋๋ค. ์์ ๋ ID์ ์๋ฒ ์ธก ์ค๋ณต ๋ฐฉ์ง๊ฐ ์ด๋ฅผ ๋ง์ต๋๋ค.
AppMaster๋ก ์ด ๊ธฐ๋ฅ์ ๋ง๋ค๋ ๊ท์น์ ๊ฐ์ต๋๋ค. ์ฐจ์ด๋ ๊ท์น์ ๊ตฌํํ๋ ์์น(๋๊ธฐํ ๋ก์ง, ๋ฐ์ดํฐ ๋ชจ๋ธ, ์คํจ/์ ์ก ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด)์ ์์ต๋๋ค.
์์ ์๋๋ฆฌ์ค: ๋ ์ฌ๋์ด ๊ฐ์ ๋ ์ฝ๋๋ฅผ ํธ์งํ์ ๋
ํ์ฅ ๊ธฐ์ ์ Maya๋ ์ ํธ๊ฐ ์๋ ์งํ์์ "์์ #1842" ํฐ์ผ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ทธ๋ ๋ ์ํ๋ฅผ "์งํ ์ค"์์ "์๋ฃ"๋ก ๋ฐ๊พธ๊ณ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํฉ๋๋ค: "๋ฐธ๋ธ ๊ต์ฒด ๋ฐ ํ ์คํธ ์๋ฃ." ์ฑ์ ์ฆ์ ์ ์ฅํ๊ณ ์ด๋ฅผ ๋๊ธฐ ์ํ๋ก ๋ณด์ฌ์ค๋๋ค.
์์ธต์์๋ ํ์ Leo๊ฐ ๊ฐ์ ์ผ์ ์จ๋ผ์ธ ์ํ์์ ํธ์งํ๊ณ ์์ต๋๋ค. ๊ทธ๋ ์์ ์๊ฐ์ ๋ฐ๊พธ๊ณ ๋ค๋ฅธ ๊ธฐ์ ์์๊ฒ ์์ ์ ํ ๋นํ์ต๋๋ค. ๊ณ ๊ฐ์ด ์ ํ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ค ์ํฉ์ ๋๋ค.
Maya๊ฐ ์ ํธ๋ฅผ ๋ฐ์ผ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ๊ฐ ์กฐ์ฉํ ์์๋ฉ๋๋ค. ์์ธก ๊ฐ๋ฅํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Maya์ ๋ณ๊ฒฝ์ ์ฌ์ ํ ๋๊ธฐํ ํ์ ๋จ์ ์์ต๋๋ค(์์ ID, ๋ณ๊ฒฝ๋ ํ๋, ํ์์คํฌํ, ๊ทธ๋ ๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ณธ ๋ ์ฝ๋ ๋ฒ์ ).
- ์ฑ์ด ์ ๋ก๋๋ฅผ ์๋ํฉ๋๋ค. ์๋ฒ๋ "์ด ์์ ์ ๋น์ ์ด ๋ณด๋ ๋ฒ์ ์ดํ์ ์ ๋ฐ์ดํธ๋์์ต๋๋ค"๋ผ๊ณ ๋ตํฉ๋๋ค(์ถฉ๋).
- ์ถฉ๋ ๊ท์น์ด ์คํ๋ฉ๋๋ค: ์ํ์ ๋ฉ๋ชจ๋ ๋ณํฉํ๋, ํ ๋น ๋ณ๊ฒฝ์ ์๋ฒ์์ ๋์ค์ ์ด๋ฃจ์ด์ก๋ค๋ฉด ์๋ฒ ์ชฝ ์ ํ์ ์ฐ์ ํฉ๋๋ค.
- ์๋ฒ๋ ๋ณํฉ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์๋ค์ ๋๋ค: ์ํ = "์๋ฃ"(Maya), ๋ฉ๋ชจ ์ถ๊ฐ(Maya), ํ ๋น๋ ๊ธฐ์ ์ = Leo์ ์ ํ(Leo).
- Maya์ ์ฑ์ ๋ช ํํ ๋ฐฐ๋์ ํจ๊ป ์์ ๋ ๋ด์ฉ์ ๋ณด์ฌ์ค๋๋ค: "๋๊ธฐํ ์๋ฃ: ํ ๋น์ด ์คํ๋ผ์ธ ์ํ์์ ๋ณ๊ฒฝ๋์์ต๋๋ค." ์์ "๊ฒํ " ๋์์ผ๋ก ๋ฌด์์ด ๋ฐ๋์๋์ง ํ์ธํ๊ฒ ํฉ๋๋ค.
์ฌ๊ธฐ์ ์คํจ ์ํฉ์ ์ถ๊ฐํด๋ณด๋ฉด: Maya์ ๋ก๊ทธ์ธ ํ ํฐ์ด ์คํ๋ผ์ธ ์ํ์์ ๋ง๋ฃ๋์์ต๋๋ค. ์ฒซ ๋๊ธฐํ ์๋๊ฐ "๋ก๊ทธ์ธ ํ์"๋ก ์คํจํ๋ฉด ์ฑ์ ํธ์ง์ ๋ณด๊ดํ๊ณ "์ผ์์ค์ง(Paused)"๋ก ํ์ํ ๋ค ๊ฐ๋จํ ํ๋กฌํํธ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ ๊ฐ ๋ก๊ทธ์ธํ๋ฉด ๋๊ธฐํ๋ ์๋ฌด๊ฒ๋ ๋ค์ ์ ๋ ฅํ ํ์ ์์ด ์๋์ผ๋ก ์ฌ๊ฐ๋ฉ๋๋ค.
๊ฒ์ฆ ๋ฌธ์ (์: "์๋ฃ" ์ํ์๋ ์ฌ์ง์ด ํ์ํจ)๊ฐ ์๋ค๋ฉด ์ฑ์ด ์์๋ก ํ๋จํด์ ์ ๋ฉ๋๋ค. ํญ๋ชฉ์ "์ฃผ์ ํ์(Needs attention)"๋ก ํ์ํ๊ณ ์ ํํ ๋ฌด์์ ์ถ๊ฐํด์ผ ํ๋์ง ์๋ ค์ค ๋ค ์ฌ์ ์กํ๊ฒ ํ์ธ์.
AppMaster ๊ฐ์ ํ๋ซํผ์ ํ, ์ถฉ๋ ๊ท์น, ๋๊ธฐ ์ํ UX๋ฅผ ์๊ฐ์ ์ผ๋ก ์ค๊ณํ ์ ์๊ฒ ๋์์ฃผ๋ฏ๋ก ๋ค์ดํฐ๋ธ Kotlin ๋ฐ SwiftUI ์ฑ์ ํจ๊ป ์ ๊ณตํ๋ฉด์ ์ด๋ฌํ ํ๋ฆ์ ๊ตฌ์ฑํ๊ธฐ ์ฌ์์ง๋๋ค.
๋น ๋ฅธ ์ฒดํฌ๋ฆฌ์คํธ์ ๋ค์ ๋จ๊ณ
์คํ๋ผ์ธ ๋๊ธฐํ๋ฅผ ์์ ๋ชจ์์ผ๋ก ๋ณด์ง ๋ง๊ณ ์๋ ํฌ ์๋ ๊ธฐ๋ฅ์ผ๋ก ๋ค๋ฃจ์ธ์. ๋ชฉํ๋ ๋จ์ํฉ๋๋ค: ์ฌ์ฉ์๊ฐ ์์ ์ ์์ ์ด ์ ์ฅ๋์๋์ง ์์ฌํ์ง ์๊ฒ ํ๊ณ ์ฑ์ด ๋๋ผ์ด ์ค๋ณต์ ๋ง๋ค์ง ์๊ฒ ํ๋ ๊ฒ.
ํ ๋๋ฅผ ํ์ธํ๋ ์งง์ ์ฒดํฌ๋ฆฌ์คํธ:
- ๋๊ธฐํ ํ๊ฐ ๊ธฐ๊ธฐ์ ์ ์ฅ๋๊ณ ๋ชจ๋ ๋ณ๊ฒฝ์ ์์ ๋ ๋ก์ปฌ ID์ ๊ฐ๋ฅํ๋ฉด ์๋ฒ ID๊ฐ ์๋๊ฐ?
- ๋ช ํํ ์ํ(queued, syncing, sent, failed, needs review)๊ฐ ์กด์ฌํ๊ณ ์ผ๊ด๋๊ฒ ์ฌ์ฉ๋๋๊ฐ?
- ์์ฒญ์ด ๋ฉฑ๋ฑํ๊ฐ(์ฌ์๋ํด๋ ์์ ), ๊ฐ ์์ ์ ๋ฉฑ๋ฑ์ฑ ํค๊ฐ ํฌํจ๋์ด ์๋๊ฐ?
- ๋ ์ฝ๋์ ๋ฒ์ ์ ๋ณด(updatedAt, revision ๋ฒํธ, ETag ๋ฑ)๊ฐ ์์ด ์ถฉ๋์ ๊ฐ์งํ ์ ์๋๊ฐ?
- ์ถฉ๋ ๊ท์น์ด ํ์ดํ ์ธ์ด๋ก ์์ฑ๋์ด ์๋๊ฐ(๋ฌด์์ด ์ฐ์ ํ๋์ง, ๋ฌด์์ ๋ณํฉํ๋์ง, ์ธ์ ์ฌ์ฉ์๋ฅผ ๋ฌป๋์ง)?
์ด๊ฒ๋ค์ด ๋ง๋ จ๋๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ฐ์ดํฐ ๋ชจ๋ธ๋งํผ ํํํ์ง ๊ฒ์ฆํ์ธ์. ์ฌ์ฉ์๊ฐ ๋๊ธฐ ์ค์ธ ํญ๋ชฉ์ ๋ณด๊ณ ์คํจํ ์ด์ ๋ฅผ ์ดํดํ๋ฉฐ ์กฐ์นํ ์ ์์ด์ผ ํฉ๋๋ค.
์ค์ ์ํฉ๊ณผ ์ผ์นํ๋ ์๋๋ฆฌ์ค๋ก ํ ์คํธํ์ธ์:
- ๋นํ๊ธฐ ๋ชจ๋ ํธ์ง: ์์ฑ, ์์ , ์ญ์ ํ ์ฌ์ฐ๊ฒฐ
- ๋ถ์์ ํ ๋คํธ์ํฌ: ๋๊ธฐํ ์ค ์ฐ๊ฒฐ์ด ๋๊ฒจ๋ ์ฌ์๋๊ฐ ์ค๋ณต์ ๋ง๋ค์ง ์๋์ง
- ์ฑ ๊ฐ์ ์ข ๋ฃ: ์ ์ก ์ค ๊ฐ์ ์ข ๋ฃ ํ ์ฌ์ด๊ธฐ ์ ํ๊ฐ ๋ณต๊ตฌ๋๋์ง
- ์ฅ์น ์๊ฐ ๋ถ์ผ์น: ๊ธฐ๊ธฐ ์๊ฐ์ด ์๋ชป๋์ด๋ ์ถฉ๋ ๊ฐ์ง ์๋ ์ฌ๋ถ
- ์ค๋ณต ํญ: ์ฌ์ฉ์๊ฐ ์ ์ฅ์ ๋ ๋ฒ ๋๋ฌ๋ ์๋ฒ์๋ ํ๋์ ๋ณ๊ฒฝ๋ง ๊ฐ๋์ง
UI๋ฅผ ๋ค๋ฌ๊ธฐ ์ ์ ์ ์ฒด ํ๋ฆ์ ํ๋กํ ํ์ ํ์ธ์. ํ ํ๋ฉด, ํ ๋ ์ฝ๋ ํ์ , ํ ์ถฉ๋ ์ผ์ด์ค(๊ฐ์ ํ๋๋ฅผ ๋ ๋ฒ ํธ์ง)๋ก ์์ํ์ธ์. ๊ฐ๋จํ ๋๊ธฐํ ์ํ ์์ญ, ์คํจ ์ ์ฌ์๋ ๋ฒํผ, ๋ช ํํ ์ถฉ๋ ํ๋ฉด์ ์ถ๊ฐํ์ธ์. ์ด๊ฒ์ด ์๋ํ๋ฉด ๋ค๋ฅธ ํ๋ฉด์ผ๋ก ํ์ฅํ์ธ์.
์ฝ๋ฉ ์์ด ๋น๋ํ๋ค๋ฉด AppMaster (appmaster.io)๋ ๋ฐฑ์๋์ ๋ค์ดํฐ๋ธ Kotlin ๋ฐ SwiftUI ์ฑ์ ์์ฑํด ์ฃผ๋ฏ๋ก ํ, ๋ฒ์ ๊ฒ์ฌ, ์ฌ์ฉ์ ํ์ ์ํ์ ์ง์คํ ์ ์๊ฒ ํด์ค๋๋ค.


