๊ด๋ฆฌ์ ๋๊ตฌ๋ฅผ ์ํ ๋๊ด์ ์ ๊ธ: ๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ ๋ฐฉ์ง
๋ฒ์ ์ปฌ๋ผ๊ณผ updated_at ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํด ๊ด๋ฆฌ์ ๋๊ตฌ์ ๋๊ด์ ์ ๊ธ์ ์ ์ฉํ๊ณ , ํธ์ง ์ถฉ๋์ ๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ ์์ด ์ฒ๋ฆฌํ๋ ๊ฐ๋จํ UI ํจํด์ ์์๋ด ๋๋ค.

๋ฌธ์ : ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ํธ์งํ ๋ ์๊ธฐ๋ ๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ
"๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ"๋ ๋ ์ฌ๋์ด ๊ฐ์ ๋ ์ฝ๋๋ฅผ ์ด์ด ๋ ๋ค ๋ณ๊ฒฝ์ ํ๊ณ ๋ง์ง๋ง์ ์ ์ฅํ ์ฌ๋์ด ์น์๊ฐ ๋๋ ์ํฉ์ ๋๋ค. ์ฒซ๋ฒ์งธ ์ฌ์ฉ์์ ์์ ์ ๊ฒฝ๊ณ ์์ด ์ฌ๋ผ์ง๊ณ , ๋ณต๊ตฌํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฐ์ ๊ด๋ฆฌ์ ํจ๋์์๋ ์ด๋ฐ ์ผ์ด ํ๋ฃจ ์ข ์ผ ์๋ฌด๋ ๋ชจ๋ฅด๊ฒ ์ผ์ด๋ฉ๋๋ค. ์ฌ๋๋ค์ ์ฌ๋ฌ ํญ์ ์ด์ด๋๊ณ ํฐ์ผ ์ฌ์ด๋ฅผ ์ค๊ฐ๋ฉฐ 20๋ถ ๋์ ํผ์ ๊ทธ๋๋ก ๋๊ธฐ๋ ํฉ๋๋ค. ๊ทธ๋ค์ด ๊ฒฐ๊ตญ ์ ์ฅํ ๋๋ ๋ ์ต์ ์ํ์ ๋ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ง ์์ต๋๋ค. ๋ฎ์ด์จ ๋ฒ๋ฆฌ๋ ๊ฑฐ์ฃ .
์ด ๋ฌธ์ ๋ ๊ณต์ฉ ์ฑ๋ณด๋ค ๋ด๋ถ ๋๊ตฌ์์ ๋ ์์ฃผ ๋ํ๋ฉ๋๋ค. ์์ ์ด ํ์ ์ ์ด๊ณ ๋ ์ฝ๋ ๋จ์๋ก ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ด๋ถ ํ์ ๊ฐ์ ๊ณ ๊ฐ, ์ฃผ๋ฌธ, ์ํ, ์์ฒญ์ ๋ฐ๋ณตํด์ ํธ์งํ๋ ์ผ์ด ๋ง์ต๋๋ค. ๊ณต์ฉ ์ฑ์ ๋ณดํต "์ฌ์ฉ์๊ฐ ์๊ธฐ ๊ฒ๋ง ํธ์ง"ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง, ๊ด๋ฆฌ์ ๋๊ตฌ๋ "์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ํธ์ง"ํฉ๋๋ค.
์ฆ๊ฐ์ ์ผ๋ก ํฐ ํผํด๊ฐ ์๊ธฐ์ง ์๋๋ผ๋ ์์ด๋ฉด ๋ฌธ์ ์ ๋๋ค:
- ํ๋ก๋ชจ์ ์ ๋ฐ์ดํธ ์งํ ๊ฐ๊ฒฉ์ด ์ด์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
- ์๋ด์ฌ์ ๋ด๋ถ ๋ฉ๋ชจ๊ฐ ์ฌ๋ผ์ ธ ๋ค์ ์๋ด์ฌ๊ฐ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ณตํ๋ค.
- ์ฃผ๋ฌธ ์ํ๊ฐ ๋ค๋ก ๋ฐ๋์ด ์๋ชป๋ ํ์ ์กฐ์น๊ฐ ๋ฐ์ํ๋ค(์: "Shipped"๊ฐ "Packed"๋ก ๋์๊ฐ).
- ๊ณ ๊ฐ์ ์ ํ๋ฒํธ๋ ์ฃผ์๊ฐ ์ค๋๋ ์ ๋ณด๋ก ๊ต์ฒด๋๋ค.
๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ๋ ์์คํ ์ด ์ ๋๋ก ์ ์ฅํ๋ค๊ณ ๋ชจ๋๊ฐ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ ๊ณจ์นฉ๋๋ค. "๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค"๋ ๋ช ํํ ์๊ฐ์ด ์๊ณ , ๋ณด๊ณ ์๊ฐ ์ด์ํ๊ฑฐ๋ ๋๋ฃ๊ฐ "์ด๊ฑฐ ๋๊ฐ ๋ฐ๊ฟจ์ง?"๋ผ๊ณ ๋ฌผ์ ๋ ํผ๋์ด ๋๋ฌ๋ฉ๋๋ค.
์ด๋ฐ ์ถฉ๋์ ์ ์์ ๋๋ค. ๋๊ตฌ๊ฐ ๊ณต์ ๋๊ณ ์ ์ฉํ๋ค๋ ์ ํธ์ง, ํ์ด ์๋ชปํ๊ณ ์๋ค๋ ์ ํธ๊ฐ ์๋๋๋ค. ๋ชฉํ๋ ๋ ์ฌ๋์ด ํธ์งํ์ง ๋ชปํ๊ฒ ๋ง๋ ๊ฒ์ด ์๋๋ผ, ๋๊ตฐ๊ฐ ํธ์งํ๋ ๋์ ๋ ์ฝ๋๊ฐ ๋ฐ๋์๋์ง ๊ฐ์งํ๊ณ ๊ทธ ์๊ฐ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
AppMaster ๊ฐ์ ๋ ธ์ฝ๋ ํ๋ซํผ์ผ๋ก ๋ด๋ถ ๋๊ตฌ๋ฅผ ๋ง๋ ๋ค๋ฉด ์ด๋ฐ ๋ฌธ์ ๋ฅผ ์ด๊ธฐ์ ๋๋นํด ๋๋ ๊ฒ ์ข์ต๋๋ค. ๊ด๋ฆฌ์ ๋๊ตฌ๋ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๊ณ ํ์ด ์์กดํ๊ฒ ๋๋ฉด ๊ฐ๋์ฉ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ๋ณต์ ์ธ ๋ถ์ ์ผ๋ก ์ด์ด์ง๋๋ค.
๋๊ด์ ์ ๊ธ(Optimistic locking)์ ์ฝ๊ฒ ์ค๋ช ํ๋ฉด
๋ ์ฌ๋์ด ๊ฐ์ ๋ ์ฝ๋๋ฅผ ์ด๊ณ ๋ ๋ค ์ ์ฅ์ ๋๋ฅด๋ฉด ๋์์ฑ์ด ๋ฐ์ํฉ๋๋ค. ๊ฐ์๋ ์ค๋๋ ์ค๋ ์ท์์ ์์ํ์ง๋ง ์ ์ฅ์ด ์ผ์ด๋ ๋ "์ต์ "์ ํ๋๋ฟ์ ๋๋ค.
๋ณดํธ ์ฅ์น๊ฐ ์์ผ๋ฉด ๋ง์ง๋ง ์ ์ฅ์ด ์ด๊น๋๋ค. ๊ทธ๊ฒ ๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋ฐ์ํ๋ ๋ฐฉ์์ ๋๋ค: ๋ ๋ฒ์งธ ์ ์ฅ์ด ์กฐ์ฉํ ์ฒซ ๋ฒ์งธ ์ฌ๋์ ๋ณ๊ฒฝ์ ๋์ฒดํฉ๋๋ค.
๋๊ด์ ์ ๊ธ์ ๊ฐ๋จํ ๊ท์น์ ๋๋ค: "๋ด๊ฐ ํธ์ง์ ์์ํ์ ๋ ๋ ์ฝ๋ ์ํ์ ๊ฐ์ ๋๋ง ๋ณ๊ฒฝ์ ์ ์ฅํ๊ฒ ๋ค." ๋ง์ฝ ๊ทธ ์ฌ์ด์ ๋ ์ฝ๋๊ฐ ๋ฐ๋์๋ค๋ฉด ์ ์ฅ์ ๊ฑฐ๋ถํ๊ณ ์ฌ์ฉ์์๊ฒ ์ถฉ๋์ ๋ณด์ฌ์ค๋๋ค.
๋น๊ด์ ์ ๊ธ์ ๋ฐ๋๋ก "๋ด๊ฐ ํธ์งํ๋ ๋์ ๋๊ตฌ๋ ๋ชปํ๊ฒ ํ๋ค"๋ ์ ๊ทผ์ ๋๋ค. ๋น๊ด์ ์ ๊ธ์ ๋ณดํต ๊ฐ์ ์ ๊ธ, ํ์์์, ์ฐจ๋จ์ ์๋ฏธํ๋ฉฐ, ๋ ์ด์ฒด ๊ฐ์ ๋๋ฌธ ๊ฒฝ์ฐ์๋ ์ ์ฉํ ์ ์์ง๋ง ๋ง์ ์๊ท๋ชจ ํธ์ง์ด ์ผ์ด๋๋ ๊ด๋ฆฌ์ ๋๊ตฌ์์๋ ๋ถํธํจ์ ์ด๋ํฉ๋๋ค.
๋๊ด์ ์ ๊ธ์ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ ์ ํ์ผ๋ก ๋ ๋ซ์ต๋๋ค. ์์ ํ๋ฆ์ ๋ฉ์ถ์ง ์๊ณ ์ฌ๋ฌ ์ฌ๋์ด ๋ณ๋ ฌ๋ก ํธ์งํ ์ ์๊ฒ ํ๋ฉฐ, ์ค์ ์ถฉ๋์ด ๋ฐ์ํ์ ๋๋ง ์์คํ ์ด ๊ฐ์ ํฉ๋๋ค.
์ ํฉํ ๊ฒฝ์ฐ:
- ์ถฉ๋์ด ๊ฐ๋ฅํ์ง๋ง ํญ์ ๋ฐ์ํ์ง๋ ์์ ๋
- ํธ์ง์ด ์งง๊ณ ๋น ๋ฅผ ๋(๋ช ๊ฐ ํ๋, ์งง์ ํผ)
- ๋ค๋ฅธ ์ฌ๋์ ์ฐจ๋จํ๋ฉด ํ์ด ๋๋ ค์ง ๋
- "๋๊ตฐ๊ฐ ์ด๊ฑธ ์ ๋ฐ์ดํธํ์ต๋๋ค"๋ผ๋ ๋ช ํํ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ค ์ ์์ ๋
- API๊ฐ ๋ชจ๋ ์ ๋ฐ์ดํธ์์ ๋ฒ์ (๋๋ ํ์์คํฌํ)์ ํ์ธํ ์ ์์ ๋
๋๊ด์ ์ ๊ธ์ "์กฐ์ฉํ ๋ฎ์ด์ฐ๊ธฐ" ๋ฌธ์ ๋ฅผ ๋ง์์ค๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ ๋์ "์ด ๋ ์ฝ๋๋ ๋น์ ์ด ์ด์์ ๋์ ๋ฌ๋ผ์ก์ต๋๋ค"๋ผ๋ ๊น๋ํ ์ค์ง ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ์ง๋ง ๋ชปํ๋ ๊ฒ๋ ์ค์ํฉ๋๋ค. ๊ฐ์ ์ค๋๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ ์ฌ๋์ด ์๋ก ๋ค๋ฅธ ์ ํจํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ๋ง์ง ๋ชปํ๊ณ , ์๋์ผ๋ก ๋ณ๊ฒฝ์ ๋ณํฉํด์ฃผ์ง๋ ์์ต๋๋ค. ์๋ฒ ์ธก์์ ๊ฒ์ฌ๋ฅผ ๊ฑด๋๋ฐ๋ฉด ์๋ฌด๊ฒ๋ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ํ๊ณ:
- ์ถฉ๋์ ์๋์ผ๋ก ํด๊ฒฐํ์ง๋ ์๋๋ค(์ฌ์ ํ ์ ํ์ด ํ์ํจ).
- ์คํ๋ผ์ธ ์ํ์์ ํธ์ง ํ ๊ฒ์ฌ ์์ด ๋๊ธฐํํ๋ฉด ๋์์ด ๋์ง ์๋๋ค.
- ๊ถํ ์ค์ ์ด ์๋ชป๋ ๊ฒฝ์ฐ(๊ถํ ์๋ ์ฌ์ฉ์๊ฐ ํธ์งํ๋ ๊ฒ)๋ ์ก์๋ด์ง ๋ชปํ๋ค.
- ํด๋ผ์ด์ธํธ์์๋ง ๊ฒ์ฌ๋ฅผ ํ๋ฉด ์ถฉ๋์ ์ก์ง ๋ชปํ๋ค.
์ค๋ฌด์์๋ ๋๊ด์ ์ ๊ธ์ ํธ์ง๊ณผ ํจ๊ป ์ ๋ฌ๋๋ ์ถ๊ฐ ๊ฐ ํ๋์ ์๋ฒ ์ธก์ "์ผ์นํ ๋๋ง ์ ๋ฐ์ดํธ" ๊ท์น์ผ ๋ฟ์ ๋๋ค. AppMaster๋ก ๊ด๋ฆฌ์ ํจ๋์ ๋ง๋ ๋ค๋ฉด ์ด ๊ฒ์ฌ๋ ๋ณดํต ์ ๋ฐ์ดํธ๊ฐ ์คํ๋๋ ๊ณณ์ ๋น์ฆ๋์ค ๋ก์ง์ ์์นํฉ๋๋ค.
๋ ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ ๊ทผ: version ์ปฌ๋ผ vs updated_at
์ฌ์ฉ์๊ฐ ํธ์งํ๋ ๋์ ๋ ์ฝ๋๊ฐ ๋ฐ๋์๋์ง ๊ฐ์งํ๋ ค๋ฉด ๋ณดํต ๋ ๊ฐ์ง ์ ํธ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค: ๋ฒ์ ๋ฒํธ ๋๋ updated_at ํ์์คํฌํ.
์ ๊ทผ๋ฒ 1: ๋ฒ์ ์ปฌ๋ผ(์ฆ๊ฐํ๋ ์ ์)
version ํ๋(๋ณดํต ์ ์)๋ฅผ ์ถ๊ฐํฉ๋๋ค. ํธ์ง ํผ์ ๋ถ๋ฌ์ฌ ๋ ํ์ฌ version๋ ํจ๊ป ์ฝ์ต๋๋ค. ์ ์ฅํ ๋ ๊ทธ ๊ฐ์ ๋ค์ ๋ณด๋
๋๋ค.
์ ์ฅ์ ์ ์ฅ ์์ ์ ์ ์ฅ๋ ๋ฒ์ ์ด ์ฌ์ฉ์๊ฐ ์์ํ์ ๋์ ๋ฒ์ ๊ณผ ์ผ์นํ ๋๋ง ์ฑ๊ณตํฉ๋๋ค. ์ผ์นํ๋ฉด ๋ ์ฝ๋๋ฅผ ์
๋ฐ์ดํธํ๊ณ version์ 1 ์ฆ๊ฐ์ํต๋๋ค. ์ผ์นํ์ง ์์ผ๋ฉด ๋ฎ์ด์ฐ๋ ๋์ ์ถฉ๋์ ๋ฐํํฉ๋๋ค.
์ด ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค: ๋ฒ์ 12๋ "์ด๊ฒ 12๋ฒ์งธ ๋ณ๊ฒฝ"์ด๋ผ๋ ์๋ฏธ์ ๋๋ค. ์๊ฐ๊ณผ ๊ด๋ จ๋ ์์ธ๋ ํผํ ์ ์์ต๋๋ค.
์ ๊ทผ๋ฒ 2: updated_at(ํ์์คํฌํ ๋น๊ต)
๋๋ถ๋ถ์ ํ
์ด๋ธ์๋ ์ด๋ฏธ updated_at ํ๋๊ฐ ์์ต๋๋ค. ์์ด๋์ด๋ ๊ฐ์ต๋๋ค: ํผ์ ์ด ๋ updated_at์ ์ฝ๊ณ ์ ์ฅ ์ ํฌํจํฉ๋๋ค. ์๋ฒ๋ updated_at์ด ๋ณ๊ฒฝ๋์ง ์์์ ๋๋ง ์
๋ฐ์ดํธํฉ๋๋ค.
์ ์๋ํ ์ ์์ง๋ง ํ์์คํฌํ์๋ ํจ์ ์ด ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ ๋ฐ๋๊ฐ ๋ค๋ฅด๊ณ ์ด ๋จ์๋ก ๋ฐ์ฌ๋ฆผ๋๋ ๊ฒฝ์ฐ ๋น ๋ฅธ ํธ์ง์ ๋์น ์ ์์ต๋๋ค. ์ฌ๋ฌ ์์คํ ์ด ๊ฐ์ DB์ ์ฐ๋ฉด ์๊ณ ์ฐจ์ด์ ์๊ฐ๋ ์ฒ๋ฆฌ๋ก ํผ๋์ด ์๊ธธ ์ ์์ต๋๋ค.
๊ฐ๋จํ ๋น๊ต ์์ฝ:
- ๋ฒ์ ์ปฌ๋ผ: ๋์์ด ๊ฐ์ฅ ๋ช ํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ ์ด์์ฑ์ด ์ข์ผ๋ฉฐ ์๊ณ ๋ฌธ์ ์์.
updated_at: ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋น์ฉ์ด ์ ์ง๋ง ์ ๋ฐ๋์ ์๊ณ ์ฒ๋ฆฌ ๋ฌธ์ ์ ์ฃผ์ํด์ผ ํจ.
๋๋ถ๋ถ ํ์๋ ๋ฒ์ ์ปฌ๋ผ์ด ๋ ์ข์ ๊ธฐ๋ณธ ์ ํธ์ ๋๋ค. ๋ช ์์ ์ด๊ณ ์์ธก ๊ฐ๋ฅํ๋ฉฐ ๋ก๊ทธ๋ ์ง์ ํฐ์ผ์์ ์ฐธ์กฐํ๊ธฐ ์ฝ์ต๋๋ค.
AppMaster๋ก ๋ง๋ค ๋๋ Data Designer์ ์ ์ํ version ํ๋๋ฅผ ์ถ๊ฐํ๊ณ ์
๋ฐ์ดํธ ๋ก์ง์ด ์ ์ฅ ์ ์ ์ด๋ฅผ ํ์ธํ๋๋ก ํ์ธ์. updated_at๋ ๊ฐ์ฌ์ฉ์ผ๋ก ๋จ๊ฒจ๋๋ ํธ์ง ์์ ์ฑ ํ๋จ์ ๋ฒ์ ๋ฒํธ์ ๋งก๊ธธ ์ ์์ต๋๋ค.
๊ฐ ํธ์ง์์ ๋ฌด์์ ์ ์ฅํ๊ณ ๋ณด๋ด์ผ ํ๋๊ฐ
๋๊ด์ ์ ๊ธ์ ์ฌ์ฉ์๊ฐ ํผ์ ์ด์์ ๋์ "๋ง์ง๋ง ๋ณธ" ํ์์๋ฅผ ํธ์ง๊ณผ ํจ๊ป ๋ณด๋ด์ผ๋ง ์๋ํฉ๋๋ค. ๊ทธ ํ์์๋ version ๋ฒํธ๋ updated_at ํ์์คํฌํ๊ฐ ๋ ์ ์์ต๋๋ค. ์์ผ๋ฉด ์๋ฒ๋ ์ฌ์ฉ์๊ฐ ํธ์งํ๋ ๋์ ๋ ์ฝ๋๊ฐ ๋ฐ๋์๋์ง ์ ์ ์์ต๋๋ค.
๋ ์ฝ๋์๋ ์ผ๋ฐ ๋น์ฆ๋์ค ํ๋์ ์๋ฒ๊ฐ ์ ์ดํ๋ ๋์์ฑ ํ๋ ํ๋๋ฅผ ๋์ธ์. ์ต์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
id(๊ณ ์ ์๋ณ์)- ๋น์ฆ๋์ค ํ๋(์ด๋ฆ, ์ํ, ๊ฐ๊ฒฉ, ๋ฉ๋ชจ ๋ฑ)
version(์ฑ๊ณต์ ์ธ ์ ๋ฐ์ดํธ๋ง๋ค ์ฆ๊ฐํ๋ ์ ์) ๋๋updated_at(์๋ฒ๊ฐ ์ฐ๋ ํ์์คํฌํ)
ํธ์ง ํ๋ฉด์ด ์ด๋ฆด ๋ ํผ์ ๊ทธ ๋์์ฑ ํ๋์ ๋ง์ง๋ง ๋ณธ ๊ฐ์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํธ์ง ์ค์ ์ด ๊ฐ์ ๋ฐ๊พธ๋ฉด ์ ๋๋ฏ๋ก ์จ๊น ํ๋๋ ํผ ์ํ์ ๋ณด๊ดํ์ธ์. ์: API๊ฐ version: 12๋ฅผ ๋ฐํํ๋ฉด ํผ์ ์ ์ฅ๋ ๋๊น์ง 12๋ฅผ ์ ์งํฉ๋๋ค.
์ ์ฅ ๋ฒํผ์ ๋๋ฅผ ๋ ํด๋ผ์ด์ธํธ๋ ๋ณ๊ฒฝ์ฌํญ๊ณผ ๋ง์ง๋ง ๋ณธ ํ์์๋ฅผ ํจ๊ป ๋ณด๋
๋๋ค. ๊ฐ์ฅ ๋จ์ํ ํํ๋ id, ๋ณ๊ฒฝ๋ ํ๋, ๊ทธ๋ฆฌ๊ณ expected_version(๋๋ expected_updated_at)์ ์
๋ฐ์ดํธ ์์ฒญ ๋ฐ๋์ ํฌํจํ๋ ๊ฒ์
๋๋ค. AppMaster์์ UI๋ฅผ ๋ง๋ ๋ค๋ฉด ์ด ๊ฐ์ ๋ ์ฝ๋์ ํจ๊ป ๋ก๋ํด ๋ฐ์ธ๋ฉํ๊ณ ์
๋ฐ์ดํธ ์ ์ ์ถํ๋ฉด ๋ฉ๋๋ค.
์๋ฒ์์๋ ์ ๋ฐ์ดํธ๋ฅผ ์กฐ๊ฑด๋ถ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ ๋ "์กฐ์ฉํ ๋ณํฉ"ํ์ง ๋ง์ธ์.
์ถฉ๋ ์๋ต์ ๋ช ํํ๊ณ UI์์ ์ฒ๋ฆฌํ๊ธฐ ์ฌ์์ผ ํฉ๋๋ค. ์ค์ฉ์ ์ธ ์ถฉ๋ ์๋ต์ ๋ค์์ ํฌํจํฉ๋๋ค:
- HTTP ์ํ
409 Conflict - "์ด ๋ ์ฝ๋๋ ๋ค๋ฅธ ์ฌ๋์ด ์ ๋ฐ์ดํธํ์ต๋๋ค." ๊ฐ์ ์งง์ ๋ฉ์์ง
- ํ์ฌ ์๋ฒ ๊ฐ(
current_version๋๋current_updated_at) - ์ ํ์ ์ผ๋ก ์ต์ ์๋ฒ ๋ ์ฝ๋(๋ฌด์์ด ๋ฐ๋์๋์ง UI๊ฐ ๋ณด์ฌ์ค ์ ์๊ฒ)
์์: Sam์ด ๊ณ ๊ฐ ๋ ์ฝ๋๋ฅผ ๋ฒ์ 12๋ก ์ด์์ต๋๋ค. Priya๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ์ฌ ๋ฒ์ ์ด 13์ด ๋์์ต๋๋ค. Sam์ด expected_version: 12๋ก ์ ์ฅํ๋ฉด ์๋ฒ๋ 409๊ณผ ํจ๊ป ๋ฒ์ 13์ ํ์ฌ ๋ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค. UI๋ Sam์๊ฒ Priya์ ๋ณ๊ฒฝ์ ๋ฎ์ด์ฐ๊ธฐ ์ ์ ๊ฒํ ํ๋ผ๊ณ ์๋ดํ ์ ์์ต๋๋ค.
๋จ๊ณ๋ณ: ๋๊ด์ ์ ๊ธ ์ ์ฒด ๊ตฌํ ํ๋ฆ
๋๊ด์ ์ ๊ธ์ ๋ณธ์ง์ ์ผ๋ก ํ ๊ท์น์ผ๋ก ๊ท๊ฒฐ๋ฉ๋๋ค: ๋ชจ๋ ํธ์ง์ ๋ ์ฝ๋์ ์ต์ ์ ์ฅ๋ ๋ฒ์ ์ ๊ธฐ๋ฐํ๋ค๋ ๊ฒ์ ์ฆ๋ช ํด์ผ ํฉ๋๋ค.
1) ๋์์ฑ ํ๋ ์ถ๊ฐ
๋ชจ๋ ์ฐ๊ธฐ์์ ๋ณ๊ฒฝ๋๋ ํ๋์ ํ๋๋ฅผ ์ ํํ์ธ์.
์ ์ฉ ์ ์ํ version์ด ๊ฐ์ฅ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค. 1๋ก ์์ํด ์
๋ฐ์ดํธ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ์ํต๋๋ค. ์ด๋ฏธ ๋ชจ๋ ์ฐ๊ธฐ์์ ์ ๋ขฐํ ์ ์๊ฒ ๋ฐ๋๋ updated_at ํ์์คํฌํ๊ฐ ์๋ค๋ฉด ๊ทธ๊ฒ์ ์ฌ์ฉํ ์ ์์ง๋ง(๋ฐฑ๊ทธ๋ผ์ด๋ ์์
๋ ํฌํจ), ๋งค ์ฐ๊ธฐ๋ง๋ค ์
๋ฐ์ดํธ๋๋์ง ํ์ธํ์ธ์.
2) ์ฝ๊ธฐ ์ ๊ทธ ๊ฐ์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ด๊ธฐ
ํธ์ง ํ๋ฉด์ ์ด ๋ ํ์ฌ version(๋๋ updated_at)์ ์๋ต์ ํฌํจ์์ผ ํผ ์ํ์ ๋ณด๊ดํ์ธ์.
์ด ๊ฐ์ "๋ด๊ฐ ๋ง์ง๋ง์ผ๋ก ์ฝ์ ๊ฒ"์ด๋ผ๋ ์์์ฆ์ฒ๋ผ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
3) ์ ๋ฐ์ดํธ ์ ๊ทธ ๊ฐ์ ํ์๋ก ์๊ตฌํ๊ธฐ
์ ์ฅํ ๋ ํด๋ผ์ด์ธํธ๋ ํธ์ง๋ ํ๋์ ๋ง์ง๋ง ๋ณธ ๋์์ฑ ๊ฐ์ ํจ๊ป ๋ณด๋ ๋๋ค.
์๋ฒ์์๋ ์ ๋ฐ์ดํธ๋ฅผ ์กฐ๊ฑด๋ถ๋ก ๋ง๋์ธ์. SQL ๊ด์ ์์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
UPDATE tickets
SET status = $1,
version = version + 1
WHERE id = $2
AND version = $3;
์ ๋ฐ์ดํธ๊ฐ 1ํ์ ๊ฑด๋๋ ธ๋ค๋ฉด ์ ์ฅ ์ฑ๊ณต์ ๋๋ค. 0ํ์ด๋ฉด ๋๊ตฐ๊ฐ๊ฐ ์ด๋ฏธ ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค.
4) ์ฑ๊ณต ์ ์ ๊ฐ ๋ฐํ
์ฑ๊ณต์ ์ผ๋ก ์ ์ฅ๋๋ฉด ์ version(๋๋ ์ updated_at)์ด ํฌํจ๋ ์
๋ฐ์ดํธ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํ์ธ์. ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ๋ฐํํ ๊ฐ์ผ๋ก ํผ ์ํ๋ฅผ ๊ต์ฒดํด์ผ ํฉ๋๋ค. ๊ทธ๋์ผ ์ค๋๋ ๋ฒ์ ์ผ๋ก ์ด์ค ์ ์ฅํ๋ ์ผ์ ๋ง์ ์ ์์ต๋๋ค.
5) ์ถฉ๋์ ์ ์์ ์ธ ๊ฒฐ๊ณผ๋ก ์ทจ๊ธํ๊ธฐ
์กฐ๊ฑด๋ถ ์ ๋ฐ์ดํธ๊ฐ ์คํจํ๋ฉด ๋ช ํํ ์ถฉ๋ ์๋ต(๋ณดํต HTTP 409)์ ๋ณด๋ด๊ณ ๋ค์์ ํฌํจํ์ธ์:
- ํ์ฌ ์กด์ฌํ๋ ์ต์ ์๋ฒ ๋ ์ฝ๋
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ํ ๋ณ๊ฒฝ(๋๋ ์ฌ๊ตฌ์ฑ์ ์ถฉ๋ถํ ์ ๋ณด)
- ๊ฐ๋ฅํ๋ฉด ์ด๋ค ํ๋๊ฐ ๋ค๋ฅธ์ง ํ์
AppMaster์์๋ ์ด ํ๋ฆ์ด PostgreSQL ๋ชจ๋ธ ํ๋, ์ฝ๊ธฐ ์๋ํฌ์ธํธ์์ ๋ฒ์ ์ ๋ฐํํ๋ ๋จ๊ณ, ๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด๋ถ ์ ๋ฐ์ดํธ๋ฅผ ์ํํด ์ฑ๊ณต ๋๋ ์ถฉ๋ ๋ถ๊ธฐ๋ก ๋๋๋ Business Process์ ๊น๋ํ๊ฒ ๋ง์ต๋๋ค.
์ถฉ๋์ ์ฌ์ฉ์์๊ฒ ์ฑ๊ฐ์์ง ์๊ฒ ์ฒ๋ฆฌํ๋ UI ํจํด
๋๊ด์ ์ ๊ธ์ ์ ๋ฐ์ ์ผ์ผ ๋ฟ์ ๋๋ค. ๋๋จธ์ง ์ ๋ฐ์ ์ฌ์ฉ์๊ฐ ์ ์ฅ์ด ๊ฑฐ๋ถ๋์์ ๋ ๋ณด๊ฒ ๋๋ ํ๋ฉด์ ๋๋ค.
์ข์ ์ถฉ๋ UI์ ๋ชฉํ๋ ๋ ๊ฐ์ง์ ๋๋ค: ๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ๋ง๊ณ ์ฌ์ฉ์๊ฐ ์์ ์ ๋น ๋ฅด๊ฒ ๋ง์น ์ ์๊ฒ ๋๋ ๊ฒ. ์ํ๋ฉด ๋ฐฉ์ด์ ๊ฐ์ง ์๊ณ ๋์์ด ๋๋ ๊ฐ๋๋ ์ผ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
ํจํด 1: ๋จ์ ์ฐจ๋จ ๋ํ์์(๊ฐ์ฅ ๋น ๋ฆ)
ํธ์ง์ด ์๊ณ ์ฌ์ฉ์๊ฐ ๋ค์ ์ ์ฉํ๊ธฐ ์ฌ์ธ ๋ ์๋๋ค.
๋ฉ์์ง๋ ์งง๊ณ ๊ตฌ์ฒด์ ์ผ๋ก: "ํธ์ง ์ค์ ์ด ๋ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ต์ ๋ฒ์ ์ ๋ณด๋ ค๋ฉด ๋ค์ ๋ถ๋ฌ์ค์ธ์." ๊ทธ๋ฐ ๋ค์ ๋ ๊ฐ์ง ๋ช ํํ ๋์์ ์ ๊ณตํฉ๋๋ค:
- ๋ค์ ๋ถ๋ฌ์์ ๊ณ์ํ๊ธฐ(์ฃผ ๋ฒํผ)
- ๋ด ๋ณ๊ฒฝ์ฌํญ ๋ณต์ฌ(์ ํ์ ์ด์ง๋ง ์ ์ฉ)
"๋ด ๋ณ๊ฒฝ์ฌํญ ๋ณต์ฌ"๋ ๋ฏธ์ ์ฅ ๊ฐ์ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌํ๊ฑฐ๋ ์ฌ๋ก๋ ํ์๋ ํผ์ ๋ณด๊ดํด ์ฌ์ ๋ ฅ ๋ถ๋ด์ ์ค์ฌ์ค๋๋ค.
๋จ์ผ ํ๋ ์ ๋ฐ์ดํธ, ํ ๊ธ, ์ํ ๋ณ๊ฒฝ, ์งง์ ๋ฉ๋ชจ ๋ฑ์ ์ ๋ง๊ณ ๊ตฌํ๋ ์ฝ์ต๋๋ค(์: AppMaster ๊ธฐ๋ฐ ๊ด๋ฆฌ์ ํ๋ฉด).
ํจํด 2: "๋ณ๊ฒฝ์ฌํญ ๊ฒํ "(๊ฐ์น๊ฐ ํฐ ๋ ์ฝ๋์ ์ต์ )
๋ ์ฝ๋๊ฐ ์ค์ํ๊ฑฐ๋ ํผ์ด ๊ธธ ๋ ์ฌ์ฉํฉ๋๋ค(๊ฐ๊ฒฉ, ๊ถํ, ์ ์ฐ ๋ฑ). ๋จ์ํ ์๋ฌ ํ๋ฉด ๋์ ์ถฉ๋ ํ๋ฉด์ผ๋ก ๋ณด๋ด ์ฌ์ฉ์์๊ฒ ๋น๊ต๋ฅผ ๋ณด์ฌ์ค๋๋ค:
- "๋น์ ์ ํธ์ง"(์๋ํ ๋ณ๊ฒฝ)
- "ํ์ฌ ๊ฐ"(๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ต์ ๊ฐ)
- "์ด์์ ๋์ ๋ฌ๋ผ์ง ํญ๋ชฉ"(์ถฉ๋ํ ํ๋)
ํต์ฌ๋ง ๋ณด์ฌ ์ฃผ์ธ์. ์ธ ํ๋๋ง ์ถฉ๋ํ๋ค๋ฉด ๋ชจ๋ ํ๋๋ฅผ ๋ณด์ฌ์ค ํ์๋ ์์ต๋๋ค.
์ถฉ๋ํ ๊ฐ ํ๋์ ๋ํด ๊ฐ๋จํ ์ ํ์ ์ ๊ณตํ์ธ์:
- ๋ด ๊ฒ ์ ์ง
- ์๋์ ๊ฒ ์ฑํ
- ๋ณํฉ(ํ๊ทธ๋ ๋ฉ๋ชจ์ฒ๋ผ ์๋ฏธ๊ฐ ์์ ๋๋ง)
๋ณํฉ์ ์ง์ํ๋ฉด ๋ฆฌ์น ํ ์คํธ๋ ๊ธด ๋ฉ๋ชจ์ ๊ฒฝ์ฐ ์์ diff ๋ทฐ(์ถ๊ฐ/์ญ์ ํ์)๋ฅผ ๋ณด์ฌ์ค ๋น ๋ฅด๊ฒ ํ๋จํ ์ ์๊ฒ ํฉ๋๋ค. ์ถฉ๋์ ํด๊ฒฐํ ๋ค ์ต์ ๋ฒ์ ๊ฐ์ผ๋ก ๋ค์ ์ ์ฅํ์ธ์.
๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ๋ฅผ ํ์ฉํ ๋(๊ทธ๋ฆฌ๊ณ ๋๊ตฌ์๊ฒ ํ์ฉํ ์ง)
๊ฐ๋์ ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ํ์ํ์ง๋ง ๋๋ฌผ๊ณ ํต์ ๋์ด์ผ ํฉ๋๋ค. ํ์ฉํ๋ค๋ฉด ์๋์ ์ด์ด์ผ ํฉ๋๋ค: ๊ฐ๋จํ ์ด์ ๋ฅผ ์๊ตฌํ๊ณ ๋ณ๊ฒฝ์ ๊ธฐ๋กํ๋ฉฐ ๊ด๋ฆฌ์๋ ๊ฐ๋ ์ ๊ฐ์ ์ญํ ๋ก ์ ํํ์ธ์.
์ผ๋ฐ ์ฌ์ฉ์์๊ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก "๋ณ๊ฒฝ ๊ฒํ "๋ฅผ ๊ถํฉ๋๋ค. ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ๋ ์ฌ์ฉ์๊ฐ ๋ ์ฝ๋ ์์ ์์ด๊ฑฐ๋ ์ํ์ด ๋ฎ๊ฑฐ๋ ์์คํ ์ด ๊ฐ๋ ํ์ ์๋ชป๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์น๋ ๊ฒฝ์ฐ์ ๋ฐฉ์ด ๊ฐ๋ฅํ ์ ํ์ ๋๋ค.
์์ ์๋๋ฆฌ์ค: ๋ ๋๋ฃ๊ฐ ๊ฐ์ ๋ ์ฝ๋๋ฅผ ํธ์งํ ๋
๋ ์๋ด์ Maya์ Jordan์ด ๊ฐ์ ๊ณ ๊ฐ ํ๋กํ์ ์ด์ด ๊ฐ๊ฐ ํตํ ํ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๋ฉ๋ชจ๋ฅผ ๋จ๊ธฐ๋ ค ํฉ๋๋ค.
ํ์๋ผ์ธ(๋๊ด์ ์ ๊ธ์ด version ํ๋ ๋๋ updated_at ๊ฒ์ฌ๋ก ํ์ฑํ๋ ๊ฒฝ์ฐ):
- 10:02 - Maya๊ฐ ๊ณ ๊ฐ #4821์ ์ฝ๋๋ค. ํผ์๋ Status = "Needs follow-up", Notes = "Called yesterday", Version = 7์ด ๋ก๋๋ฉ๋๋ค.
- 10:03 - Jordan๋ ๊ฐ์ ๊ณ ๊ฐ์ ์ด์ด ๋์ผํ ๊ฐ๊ณผ Version = 7์ ๋ด ๋๋ค.
- 10:05 - Maya๊ฐ Status๋ฅผ "Resolved"๋ก ๋ฐ๊พธ๊ณ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ ๋ค ์ ์ฅํฉ๋๋ค.
- 10:05 - ์๋ฒ๋ ๋ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๊ณ Version์ 8๋ก ์ฆ๊ฐ์ํค๋ฉฐ ๊ฐ์ฌ ๋ก๊ทธ์ ๋๊ฐ ์ธ์ ๋ฌด์์ ๋ฐ๊ฟจ๋์ง ๊ธฐ๋กํฉ๋๋ค.
- 10:09 - Jordan์ด ๋ค๋ฅธ ๋ฉ๋ชจ("Customer asked for a receipt")๋ฅผ ์ ๋ ฅํ๊ณ ์ ์ฅ์ ๋๋ฆ ๋๋ค.
์ถฉ๋ ๊ฒ์ฌ๊ฐ ์๋ค๋ฉด Jordan์ ์ ์ฅ์ Maya์ ์ํ์ ๋ฉ๋ชจ๋ฅผ ์กฐ์ฉํ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ๋๊ด์ ์ ๊ธ์ด ์์ผ๋ฉด Jordan์ ์ ๋ฐ์ดํธ๋ Version = 7์ ์๋ํ๊ธฐ ๋๋ฌธ์ ๊ฑฐ๋ถ๋๊ณ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
Jordan์ ๋ช ํํ ์ถฉ๋ ๋ฉ์์ง๋ฅผ ๋ด ๋๋ค. UI๋ ๋ฐ์ํ ์ผ์ ๋ณด์ฌ์ฃผ๊ณ ์์ ํ ๋ค์ ๋จ๊ณ๋ฅผ ์ ์ํฉ๋๋ค:
- ์ต์ ๋ ์ฝ๋๋ก ๋ค์ ๋ถ๋ฌ์ค๊ธฐ(๋ด ํธ์ง ๋ฒ๋ฆฌ๊ธฐ)
- ๋ด ๋ณ๊ฒฝ์ ์ต์ ๋ ์ฝ๋ ์์ ์ ์ฉํ๊ธฐ(๊ฐ๋ฅํ๋ฉด ๊ถ์ฅ)
- ์ฐจ์ด ๊ฒํ ("๋ด ๊ฒ" vs "์ต์ ") ํ ์ ์งํ ๊ฒ ์ ํํ๊ธฐ
๊ฐ๋จํ ํ๋ฉด์ ๋ค์์ ํ์ํ ์ ์์ต๋๋ค:
- "์ด ๊ณ ๊ฐ์ 10:05์ Maya๊ฐ ์ ๋ฐ์ดํธํ์ต๋๋ค"
- ๋ณ๊ฒฝ๋ ํ๋(Status์ Notes)
- Jordan์ด ์ ๋ ฅํ ๋ฏธ์ ์ฅ ๋ฉ๋ชจ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
Jordan์ "์ฐจ์ด ๊ฒํ "๋ฅผ ์ ํํด Maya์ Status = "Resolved"๋ฅผ ์ ์งํ๊ณ ์์ ์ ๋ฉ๋ชจ๋ฅผ ๊ธฐ์กด ๋ฉ๋ชจ์ ๋ง๋ถ์ ๋๋ค. ์ด๋ฒ์๋ Version = 8๋ก ์ ์ฅํด ์ฑ๊ณตํ๊ณ (ํ์ฌ Version = 9) ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
์ต์ข ์ํ: ๋ฐ์ดํฐ ์์ค ์์, ๋๊ฐ ๋ฎ์ด์ผ๋์ง ์ถ์ธกํ ํ์ ์์, Maya์ ์ํ ๋ณ๊ฒฝ๊ณผ ๊ฐ ๋ฉ๋ชจ๊ฐ ๋ณ๊ฐ์ ์ถ์ ๊ฐ๋ฅํ ํธ์ง์ผ๋ก ๊ฐ์ฌ ๋ก๊ทธ์ ๋จ์. AppMaster๋ก ๋ง๋ ๋๊ตฌ๋ผ๋ฉด ์ด๋ ์ ๋ฐ์ดํธ ์์ ์ ํ ๋ฒ์ ๊ฒ์ฌ์ ๊ฐ๋จํ ์ถฉ๋ ํด๊ฒฐ ๋ํ์์๋ก ๊น๋ํ๊ฒ ๊ตฌํ๋ฉ๋๋ค.
๋ฐ์ดํฐ ์์ค์ ์ฌ์ ํ ์ด๋ํ๋ ํํ ์ค์
๋๋ถ๋ถ์ "๋๊ด์ ์ ๊ธ" ๋ฒ๊ทธ๋ ์์ด๋์ด ์์ฒด์ ๋ฌธ์ ๊ฐ ์๋๋๋ค. UI, API, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ์ธ์์ธ๊ณ ๊ณผ์ ์์ ๋ฐ์ํฉ๋๋ค. ์ด๋ ํ ๋ ์ด์ด๊ฐ ๊ท์น์ ์์ผ๋ฉด ์ฌ์ ํ ๋ฌด์ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ณ ์ ์ ์ธ ์ค์๋ ํธ์ง ํ๋ฉด์ ์ด ๋ ๋ฒ์ (๋๋ ํ์์คํฌํ)์ ์์งํ์ง๋ง ์ ์ฅ ์ ๊ทธ๊ฒ์ ๋ณด๋ด์ง ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ํผ์ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ์จ๊น ํ๋๊ฐ ๋น ์ง๊ฑฐ๋ API ํด๋ผ์ด์ธํธ๊ฐ ๋ณ๊ฒฝ๋ ํ๋๋ง ๋ณด๋ด๋๋ก ์ค๊ณ๋ ๊ฒฝ์ฐ ์์ฃผ ๋ฐ์ํฉ๋๋ค.
๋ ๋ค๋ฅธ ํจ์ ์ ๋ธ๋ผ์ฐ์ ์์๋ง ์ถฉ๋ ๊ฒ์ฌ๋ฅผ ํ๋ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด์ง๋ง ์๋ฒ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์๋ค์ด๋ฉด ๋ค๋ฅธ ํด๋ผ์ด์ธํธ(๋๋ ์ฌ์๋)๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์ธ ์ ์์ต๋๋ค. ์๋ฒ๊ฐ ์ต์ข ๊ด๋ฌธ์ด์ด์ผ ํฉ๋๋ค.
๊ฐ์ฅ ๋ง์ ๋ฐ์ดํฐ ์์ค์ ์ผ์ผํค๋ ํจํด:
- ์ ์ฅ ์์ฒญ์ ๋์์ฑ ํ ํฐ(
version,updated_at๋๋ ETag)์ด ๋น ์ง id๋ง์ผ๋ก ์ ๋ฐ์ดํธํ๊ณid + version๊ฐ์ ์์์ ์กฐ๊ฑด์ ์ฌ์ฉํ์ง ์์- ์ ๋ฐ๋๊ฐ ๋ฎ์
updated_at์ฌ์ฉ(์: ์ด ๋จ์). ๊ฐ์ ์ด์ ๋ ๋ฒ์ ํธ์ง์ด ๋ฐ์ํ๋ฉด ๋์ผํ๊ฒ ๋ณด์ผ ์ ์์ - ํฐ ํ๋(๋ ธํธ, ์ค๋ช )๋ ๋ฐฐ์ด(ํ๊ทธ, ๋ผ์ธ ์์ดํ )์ ํต์งธ๋ก ๊ต์ฒดํด ๋ฌด์์ด ๋ฐ๋์๋์ง ๋ณด์ฌ์ฃผ์ง ์์
- ๋ชจ๋ ์ถฉ๋์ "์ฌ์๋"๋ก ์ฒ๋ฆฌํด ์ค๋๋ ๊ฐ์ ์ต์ ๊ฐ ์์ ๋ค์ ์ ์ฉํ๋ ์ค์
๊ตฌ์ฒด์ ์: ๋ ์๋ด ํ์ฅ์ด ๊ฐ์ ๊ณ ๊ฐ ๋ ์ฝ๋๋ฅผ ์ด์ด ํ ๋ช ์ ๊ธด ๋ด๋ถ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํ๊ณ ๋ค๋ฅธ ํ ๋ช ์ ์ํ๋ฅผ ๋ณ๊ฒฝํด ์ ์ฅํฉ๋๋ค. ์ ์ฅ ๋ก์ง์ด ์ ์ฒด ํ์ด๋ก๋๋ฅผ ๋ฎ์ด์ฐ๋ฉด ์ํ ๋ณ๊ฒฝ์ด ๋ฉ๋ชจ๋ฅผ ์ง์ธ ์ ์์ต๋๋ค.
์ถฉ๋์ด ๋ฐ์ํ์ ๋ API ์๋ต์ด ๋๋ฌด ๋น์ฝํ๋ฉด ํ์ ์ฌ์ ํ ๋ฐ์ดํฐ๋ฅผ ์์ต๋๋ค. ๋จ์ํ "409 Conflict"๋ง ๋ฐํํ์ง ๋ง์ธ์. ์ฌ๋์ด ๋ณต๊ตฌํ ์ ์๊ฒ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ฃผ์ธ์:
- ํ์ฌ ์๋ฒ ๋ฒ์ (๋๋
updated_at) - ๊ด๋ จ ํ๋์ ์ต์ ์๋ฒ ๊ฐ
- ์ฐจ์ด ๋๋ ํ๋ ๋ชฉ๋ก(๊ฐ๋จํ ํ๋๋ช ์ด๋ผ๋)
- ๋๊ฐ ์ธ์ ๋ณ๊ฒฝํ๋์ง(์ถ์ ํ๊ณ ์๋ค๋ฉด)
AppMaster์์ ๊ตฌํํ๋ค๋ฉด ๊ฐ์ ๊ท์จ์ ์ ์ฉํ์ธ์: UI ์ํ์ ๋ฒ์ ์ ๋ณด๊ดํ๊ณ , ์ ๋ฐ์ดํธ ์ ๊ทธ๊ฒ์ ์ ์กํ๋ฉฐ, PostgreSQL์ ์ฐ๊ธฐ ์ ์ ๋ฐฑ์๋ ๋ก์ง ์์์ ์ฒดํฌ๋ฅผ ๊ฐ์ ํ์ธ์.
๋ฐฐํฌ ์ ๋น ๋ฅธ ์ ๊ฒ ๋ชฉ๋ก
์ถ์ ์ ์ "์ ์ฅ์ ์ ์์ด๋ผ ๋์ค๋๋ฐ ๋๊ตฐ๊ฐ์ ์์ ์ ์กฐ์ฉํ ๋ฎ์ด์ฐ๋" ์คํจ ๋ชจ๋๋ฅผ ์ ๊ฒํ์ธ์.
๋ฐ์ดํฐ ๋ฐ API ์ ๊ฒ
๋ ์ฝ๋๊ฐ ์์๋ถํฐ ๋๊น์ง ๋์์ฑ ํ ํฐ์ ์ง๋๋์ง ํ์ธํ์ธ์. ํ ํฐ์ version ์ ์๋ updated_at ํ์์คํฌํ์ผ ์ ์์ง๋ง ๋ ์ฝ๋์ ์ผ๋ถ๋ก ์ทจ๊ธ๋์ด์ผ ํฉ๋๋ค.
- ์ฝ๊ธฐ ์๋ต์ ํ ํฐ์ด ํฌํจ๋์ด ์๊ณ UI๋ ํผ ์ํ์ ์ ์ฅํ๋ค.
- ๋ชจ๋ ์ ๋ฐ์ดํธ๋ ๋ง์ง๋ง ๋ณธ ํ ํฐ์ ๋ค์ ๋ณด๋ด๊ณ ์๋ฒ๋ ์ฐ๊ธฐ ์ ์ ์ด๋ฅผ ๊ฒ์ฆํ๋ค.
- ์ฑ๊ณต ์ ์๋ฒ๋ ์ ํ ํฐ์ ๋ฐํํด UI๊ฐ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํ๋ค.
- ๋ฒํฌ ํธ์ง์ด๋ ์ธ๋ผ์ธ ํธ์ง๋ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅด๊ณ ํน๋จ์ ์์ธ๋ฅผ ๋์ง ์๋๋ค.
- ๊ฐ์ ํ์ ํธ์งํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ๋ ํ ํฐ์ ํ์ธํ๋ค(ํ์ธํ์ง ์์ผ๋ฉด ๋ฌด์์์ฒ๋ผ ๋ณด์ด๋ ์ถฉ๋์ ๋ง๋ ๋ค).
AppMaster๋ก ๋ง๋ ๋ค๋ฉด Data Designer์ ํ๋(version ๋๋ updated_at)๊ฐ ์๋์ง, Business Process์ ์
๋ฐ์ดํธ ํ๋ฆ์ด ์ ์ฅ ์ ์ ๋น๊ตํ๋์ง ๋ค์ ํ์ธํ์ธ์.
UI ์ ๊ฒ
์๋ฒ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ฑฐ๋ถํ์ ๋ ๋ค์ ๋จ๊ณ๊ฐ ๋ช ํํด์ผ ์ถฉ๋์ด "์์ "ํฉ๋๋ค.
์๋ฒ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ฑฐ๋ถํ๋ฉด "์ด ๋ ์ฝ๋๋ ๋น์ ์ด ์ด์์ ๋์ ๋ฌ๋ผ์ก์ต๋๋ค" ๊ฐ์ ๋ช ํํ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ ํ ๊ธฐ๋ณธ ๋์(์ต์ ๋ฐ์ดํฐ ์ฌ๋ถ๋ฌ์ค๊ธฐ)์ ์ ์ํ์ธ์. ๊ฐ๋ฅํ๋ฉด ์ฌ์ฉ์์ ๋ฏธ์ ์ฅ ์ ๋ ฅ์ ๋ณด์กดํด ์๋ก๊ณ ์นจ ํ ์ฌ์ ์ฉํ ์ ์๊ฒ ํ์ฌ ์์ ์์ ์ด ๋ค์ ํ์ดํํด์ผ ํ๋ ์ผ์ด ๋์ง ์๊ฒ ํ์ธ์.
ํ์ํ๋ค๋ฉด ํต์ ๋ "๊ฐ์ ์ ์ฅ" ์ต์ ์ ์ถ๊ฐํ์ธ์. ์ญํ ๋ก ๊ฒ์ดํธํ๊ณ ํ์ธ์ ์๊ตฌํ๋ฉฐ ๋๊ฐ ๊ฐ์ ์ ์ฅํ๋์ง ๊ธฐ๋กํ๋ฉด ๋น์ ์ํฉ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉด์ ๋ฐ์ดํฐ ์์ค์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ง๋ค์ง ์์ ์ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ: ํ๋์ ์ํฌํ๋ก๋ถํฐ ์ ๊ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ํ์ฅํ์ธ์
์๊ฒ ์์ํ์ธ์. ์ฌ๋๋ค์ด ์์ฃผ ์ถฉ๋ํ๋ ๊ด๋ฆฌ์ ํ๋ฉด ํ๋๋ฅผ ๊ณจ๋ผ ์ฐ์ ๋๊ด์ ์ ๊ธ์ ์ ์ฉํ์ธ์. ์ถฉ๋์ด ์ฆ์ ์์ญ์ ๋ณดํต ํฐ์ผ, ์ฃผ๋ฌธ, ๊ฐ๊ฒฉ, ์ฌ๊ณ ์ ๋๋ค. ํ ๋ฒ ๋ฐ์ ํ๋ฉด์์ ์ถฉ๋์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ฉด ๋ค๋ฅธ ๊ณณ์๋ ๊ฐ์ ํจํด์ ๋ฐ๋ณตํ๊ธฐ ์ฝ์ต๋๋ค.
๊ธฐ๋ณธ ์ถฉ๋ ๋์์ ๋ฏธ๋ฆฌ ๊ฒฐ์ ํ์ธ์. ๋ฐฑ์๋ ๋ก์ง๊ณผ UI๋ฅผ ๋ชจ๋ ๊ท์ ํ๋ฏ๋ก ์ค์ํฉ๋๋ค:
- ์ฐจ๋จ ํ ์ฌ๋ก๋(Block-and-reload): ์ ์ฅ์ ์ค๋จํ๊ณ ์ต์ ๋ ์ฝ๋๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉ์๊ฐ ๋ณ๊ฒฝ์ ๋ค์ ์ ์ฉํ๊ฒ ํจ.
- ๊ฒํ ๋ฐ ๋ณํฉ(Review-and-merge): "๋ด ๋ณ๊ฒฝ"๊ณผ "์ต์ "์ ๋ณด์ฌ์ฃผ๊ณ ์ฌ์ฉ์๊ฐ ๋ฌด์์ ์ ์งํ ์ง ๊ฒฐ์ ํ๊ฒ ํจ.
์ฐจ๋จ ํ ์ฌ๋ก๋๋ ๋น๋๊ฐ ๋น ๋ฅด๊ณ ์ํ ๋ณ๊ฒฝ์ด๋ ์์ ๋ ธํธ ๊ฐ์ ์งง์ ํธ์ง์ ์ ๋ง์ต๋๋ค. ๊ฒํ ๋ฐ ๋ณํฉ์ ๋ ์ฝ๋๊ฐ ๊ธธ๊ฑฐ๋ ์ค์ํ ๋(๊ฐ๊ฒฉํ, ๋ค์ค ํ๋ ์ฃผ๋ฌธ ํธ์ง) ๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๊ทธ๋ค์ ํ ํ๋ฆ ์ ์ฒด๋ฅผ ๊ตฌํํ๊ณ ํ ์คํธํ ๋ค ํ์ฅํ์ธ์:
- ํ๋์ ํ๋ฉด์ ๊ณจ๋ผ ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ์์ฃผ ํธ์งํ๋ ํ๋๋ฅผ ๋์ดํฉ๋๋ค.
- ํผ ํ์ด๋ก๋์ ๋ฒ์ (๋๋
updated_at) ๊ฐ์ ์ถ๊ฐํ๊ณ ์ ์ฅ ์ ํ์๋ก ํ์ธ์. - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ธฐ๋ฅผ ์กฐ๊ฑด๋ถ๋ก ๋ง๋์ธ์(๋ฒ์ ์ด ์ผ์นํ ๋๋ง ์ ๋ฐ์ดํธ).
- ์ถฉ๋ ๋ฉ์์ง์ ๋ค์ ํ๋(์ฌ๋ก๋, ํ ์คํธ ๋ณต์ฌ, ๋น๊ต ๋ทฐ ์ด๊ธฐ)์ ์ค๊ณํ์ธ์.
- ๋ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ก ํ ์คํธ: ํญ A์์ ์ ์ฅํ ๋ค ํญ B์์ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด ๋ณด์ธ์.
์ถฉ๋ ๋ก๊ทธ๋ฅผ ๊ฐ๋ณ๊ฒ ๋จ๊ธฐ์ธ์. ๊ฐ๋จํ "์ถฉ๋ ๋ฐ์" ์ด๋ฒคํธ(๋ ์ฝ๋ ์ ํ, ํ๋ฉด ์ด๋ฆ, ์ฌ์ฉ์ ์ญํ ํฌํจ)๋ง ์์ด๋ ํซ์คํ์ ํ์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
AppMaster๋ก ๊ด๋ฆฌ์ ๋๊ตฌ๋ฅผ ๋ง๋ ๋ค๋ฉด ์ฃผ์ ์์๋ค์ด ์ ๋ง์ต๋๋ค: Data Designer์ version ํ๋๋ฅผ ๋ชจ๋ธ๋งํ๊ณ , Business Processes์์ ์กฐ๊ฑด๋ถ ์
๋ฐ์ดํธ๋ฅผ ์ ์ฉํ๋ฉฐ, UI ๋น๋์ ์์ ์ถฉ๋ ๋ํ์์๋ฅผ ์ถ๊ฐํ์ธ์. ์ฒซ ๋ฒ์งธ ์ํฌํ๋ก๊ฐ ์์ ํ๋๋ฉด ๊ฐ์ ํจํด์ ํ๋ฉด๋ง๋ค ๋ฐ๋ณตํ๊ณ ์ถฉ๋ UI๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํด ์ฌ์ฉ์๊ฐ ํ ๋ฒ ๋ฐฐ์ฐ๋ฉด ์ด๋์๋ ์ ๋ขฐํ๊ฒ ๋ง๋์ธ์.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
๋ ์ฌ๋์ด ์๋ก ๋ค๋ฅธ ํญ์ด๋ ์ธ์ ์์ ๊ฐ์ ๋ ์ฝ๋๋ฅผ ํธ์งํ๊ณ , ๋ง์ง๋ง ์ ์ฅ์ด ์์ ๋ณ๊ฒฝ์ ์๋ฌด ๊ฒฝ๊ณ ์์ด ๋ฎ์ด์จ์ ์์ ํธ์ง์ด ์ฌ๋ผ์ง๋ ์ํฉ์ ๋งํฉ๋๋ค. ๋ฌธ์ ๋ ๋ ์ฌ์ฉ์ ๋ชจ๋ "์ ์ฅ ์ฑ๊ณต"์ ๋ณด๊ฒ ๋์ด ๋๋ฝ๋ ๋ณ๊ฒฝ์ด ๋์ค์์ผ ๋ฐ๊ฒฌ๋๋ค๋ ์ ์ ๋๋ค.
๋๊ด์ ์ ๊ธ์ ์ฌ์ฉ์๊ฐ ์ด์์ ๋์ ์ํ์ ๋ ์ฝ๋๊ฐ ๋์ผํ ๋๋ง ๋ณ๊ฒฝ์ ์ ์ฅํ๋ค๋ ๋ป์ ๋๋ค. ๋๊ตฐ๊ฐ ๋จผ์ ์ ์ฅํ๋ค๋ฉด ์ ์ฅ์ด ์ถฉ๋๋ก ๊ฑฐ๋ถ๋๊ณ ์ฌ์ฉ์๋ ๋ฎ์ด์ฐ๊ธฐ ๋์ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฒํ ํ ์ ์์ต๋๋ค.
๋น๊ด์ ์ ๊ธ์ ๋ค๋ฅธ ์ฌ๋์ด ํธ์งํ์ง ๋ชปํ๊ฒ ์ฐจ๋จํ๋ ๋ฐฉ์์ด์ด์ ๋๊ธฐ, ํ์์์, "๋๊ฐ ์ ๊ถ์ง?" ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊น๋๋ค. ๋๊ด์ ์ ๊ธ์ ์ฌ๋ฌ ์ฌ๋์ด ๋ณ๋ ฌ๋ก ์์ ํ๊ฒ ํ๋ ์ถฉ๋์ด ์ค์ ๋ก ๋ฐ์ํ์ ๋๋ง ๊ฐ์ ํ๋ฏ๋ก ๊ด๋ฆฌ์ ํจ๋์ ๋ ์ ํฉํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ version ์ ์ ์ปฌ๋ผ์ด ๊ฐ์ฅ ๋จ์ํ๊ณ ์์ธก ๊ฐ๋ฅํฉ๋๋ค. ํ์์คํฌํ์ธ updated_at๋ ์ธ ์๋ ์์ง๋ง, ์ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์๊ฑฐ๋ ์์คํ
๊ฐ ์๊ณ ์ฐจ์ด๋ก ๋น ๋ฅธ ํธ์ง์ ๋์น ์ ์์ต๋๋ค.
์๋ฒ๊ฐ ์ ์ดํ๋ ๋์์ฑ ํ ํฐ์ด ํ์ํฉ๋๋ค. ๋ณดํต version(์ ์)์ด๋ updated_at(ํ์์คํฌํ)์
๋๋ค. ํด๋ผ์ด์ธํธ๋ ํผ์ ์ด ๋ ์ด ๊ฐ์ ์ฝ์ด ํธ์ง ๋์ ๊ทธ๋๋ก ๋ณด๊ดํ๊ณ , ์ ์ฅ ์ "๊ธฐ๋๊ฐ"์ผ๋ก ํจ๊ป ๋ณด๋ด์ผ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ง์ผ๋ก๋ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ ์ ์์ต๋๋ค. ์๋ฒ๋ id์ version์ ํจ๊ป ๊ฒ์ฌํ๋ ์กฐ๊ฑด๋ถ ์
๋ฐ์ดํธ(์: "id + version"์ผ๋ก WHERE)๋ฅผ ๊ฐ์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ด ์ฌ์ ํ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๋์์ "์ด ๋ ์ฝ๋๋ ์ด์์ ๋์ ๋ฌ๋ผ์ก์ต๋๋ค"๋ผ๋ ์ฐจ๋จ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ฐ์ ์์ ํ ํ ๊ฐ์ง ๋์(์: ์ต์ ๋ฐ์ดํฐ๋ก ๋ค์ ๋ถ๋ฌ์ค๊ธฐ)์ ์ ์ํ๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ์ ๋ณด์กดํด์ ๋ค์ ์ ์ฉํ ์ ์๊ฒ ํ๋ฉด ์ฌํ์ดํ์ ์ค์ฌ์ค๋๋ค.
์ถฉ๋ ์๋ต์ผ๋ก๋ ๋ณดํต 409 ์ํ์ ํจ๊ป ํ์ฌ ์๋ฒ์ ๋ฒ์ ๋ฐ ์ต์ ๊ฐ๋ค์ ์ ๊ณตํ์ธ์. ๋๊ฐ ์ธ์ ๋ณ๊ฒฝํ๋์ง ์ ๋ณด๋ฅผ ํฌํจํ๋ฉด ์ ๊ฑฐ๋ถ๋์๋์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ ์ฅ ์ ํ ํฐ์ด ๋น ์ก๊ฑฐ๋ id๋ง์ผ๋ก ์
๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ, ํน์ ์ด ๋จ์์ฒ๋ผ ์ ๋ฐ๋๊ฐ ๋ฎ์ ํ์์คํฌํ๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฐ์ํฉ๋๋ค. ๋ํ ์ ์ฒด ํ์ด๋ก๋(๊ธด ๋
ธํธ๋ ๋ฐฐ์ด)๋ฅผ ํต์งธ๋ก ๊ต์ฒดํ๋ฉด ๋ค๋ฅธ ์ฌ๋์ ์์ ์ด ์ง์์ง ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋๋ค.
AppMaster์์๋ Data Designer์ version ํ๋๋ฅผ ์ถ๊ฐํด ํผ ์ํ๋ก ์ฝ์ด ๋ค์ด๊ณ , Business Process์์ ์กฐ๊ฑด๋ถ ์
๋ฐ์ดํธ๋ฅผ ๊ฐ์ ํ ๋ค UI์์ ์ถฉ๋ ๋ถ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋๋ค. ์ฝ๋ ์์ด๋ ๊ฐ์ ํจํด์ ์ ์ฉํ ์ ์์ต๋๋ค.


