๋ชจ๋ฐ์ผ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ์ํ API ์ค๊ณ: ํต์ ๋น๋ ์ค์ด๊ธฐ
๋ชจ๋ฐ์ผ ๋ฐฐํฐ๋ฆฌ ์๋ช ๊ด์ ์ API ์ค๊ณ: ๋ฐฐ์นญ, ์บ์ฑ ํค๋, ํ์ด๋ก๋ ์ถ์๋ก ๋ผ๋์ค ๊นจ์ด๋จ์ ์ค์ด๊ณ ํ๋ฉด ๋ก๋ฉ ์๋์ ๋ฐฐํฐ๋ฆฌ ์๋ชจ๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.

์ ์ฆ์ API ํต์ ์ด ๋ชจ๋ฐ์ผ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์๋ชจํ๋๊ฐ
โ์ฑํฐ(chatty)โํ API๋ ํ๋์ ํ๋ฉด์ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ง์ ์์ ์์ฒญ์ ์ฑ์ด ์ฐ์์ผ๋ก ๋ณด๋ด๊ฒ ๋ง๋ญ๋๋ค. ๊ฐ ์์ฒญ์ ํ๋ฉด์์ผ๋ก๋ ๊ฐ๋ฒผ์ ๋ณด์ด์ง๋ง, ํด๋ํฐ์์๋ ๋น ๋ฅด๊ฒ ๋์ ๋ฉ๋๋ค.
๊ฐ์ฅ ํฐ ๋ฐฐํฐ๋ฆฌ ๋น์ฉ์ ์ข ์ข ๋คํธ์ํฌ ๋ผ๋์ค์์ ๋์ต๋๋ค. ์ ๋ฃฐ๋ฌ์ WiโFi ์นฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ๋ฐ์ ๋ ๊ณ ์ ๋ ฅ ์ํ๋ก ์ ํํฉ๋๋ค. ์ฑ์ด ์ฌ๋ฌ ์์ฒญ์ ์ฐ๋ฌ์ ๋ณด๋ผ ๋ ๋ผ๋์ค๋ ๊ณ์ ๊นจ์ด์๊ฑฐ๋ ์์ฃผ ๊นจ์ด๋๊ฒ ๋ฉ๋๋ค. ์๋ต์ด ์๋๋ผ๋ ๋ฐ๋ณต์ ์ธ ๊นจ์ด๋จ์ ์ค์ ์๋์ง๋ฅผ ์๋นํฉ๋๋ค.
CPU ์์ ๋ ์์ต๋๋ค. ๊ฐ ์์ฒญ์ ํค๋ ๊ตฌ์ฑ, TLS ์ฒ๋ฆฌ, JSON ํ์ฑ, ์บ์ ์ ๋ฐ์ดํธ, ๊ฒฐ๊ณผ ๋ณํฉ์ ์ํ ์ฑ ์ฝ๋ ์คํ์ ์๋ฏธํฉ๋๋ค. ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์ด ์ค์ ์์ ์ด ๋ฐ๋ณต๋ฉ๋๋ค.
๋ํ ์ฑํฐํ API๋ UI๋ฅผ ๋๋ฆฌ๊ฒ ๋๊ปด์ง๊ฒ ํฉ๋๋ค. ์์ธก ๊ฐ๋ฅํ ํ ๋ฒ์ ๋ก๋ ๋์ ์ฌ๋ฌ ํธ์ถ ์ฒด์ธ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋์ด ์คํผ๋๊ฐ ๊ธธ์ด์ง๊ณ ๋ถ๋ถ ๋ ๋๊ฐ ๊น๋นก์ด๋ฉฐ, ๋คํธ์ํฌ๊ฐ ์ฝํ๋ฉด ํ์์์์ด ๋์ด๋ฉ๋๋ค. ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ก๊ณ ์นจ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ํ๋์ด ์ฌ์๋์ ๊นจ์ด๋จ์ด ๋๊ณ ๋ฐฐํฐ๋ฆฌ๋ฅผ ๋ ์๋ชจํฉ๋๋ค.
๋ชจ๋ฐ์ผ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ์ํ API ์ค๊ณ๋ฅผ ์ค์ฉ์ ์ผ๋ก ์๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋จ์ํฉ๋๋ค: ๊ฐ์ UI๋ฅผ ๋ ์ ์ ์๋ณต, ๋ ์ ์ ๋ฐ์ดํธ, ๋ ์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ผ๋ก ๋ณด์ฌ์ฃผ์.
๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฒด์ ๋ณํ๋ฅผ ์ถ์ ํ๋ฉด ์ฑ๊ณต์ ์ ์ ์์ต๋๋ค:
- ํ๋ฉด ๋ก๋๋น API ํธ์ถ ์ ๊ฐ์
- ํ๋ฉด๋น ๋ค์ด๋ก๋ ๋ฐ์ดํธ ๊ฐ์
- ์ ๋ฃฐ๋ฌ ํ๊ฒฝ์์์ ์ค์๊ฐ ๋ฐ ์ต์ ์ฌ๋ก์ ์ํธ์์ฉ ๊ฐ๋ฅ ์๊ฐ ๊ฐ์
- ๋์ผ ๊ฒฐ๊ณผ๋ฅผ ์ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ์น์ ์ฌ์๋ ๊ฐ์
์ด ์์น๋ค์ด ์ข์์ง๋ฉด ๋ฐ์์ฑ๊ณผ ๋ฐฐํฐ๋ฆฌ ์๋ช ๋ ํจ๊ป ๊ฐ์ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฐ๊พธ๊ธฐ ์ ์ ๋ฌด์์ ์ธก์ ํ ๊ฒ์ธ๊ฐ
์์ฒญ์ ๋ฐฐ์นํ๊ฑฐ๋ ์บ์ฑ์ ์กฐ์ ํ๊ธฐ ์ ์ ์ฑ์ด ํ์ฌ ๋ฌด์์ ํ๋์ง ๋ช ํํ ํ์ ํ์ธ์. ๋น ๋ฅธ ์ฑ๊ณผ๋ ๋ณดํต ๋ฐ๋ณต์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์์์ ๋ถ๋ถ์ ๊ณ ์น๋ฉด์ ๋์ค๋๋ฐ, ์ค์ ํ๋ฉด๊ณผ ํ๋ฆ(ํ๋ณต ๊ฒฝ๋ก ํ ์คํธ ํ๋๋ง์ด ์๋)์ ์ธก์ ํด์ผ ์ฐพ์ ์ ์์ต๋๋ค.
ํธ๋ํฝ์ด ๋ง์ ๋ช๋ช ํ๋ฉด์ ๋ํด ๊ธฐ๋ณธ ํญ๋ชฉ์ ๋ก๊น ํ์ธ์: ๋ก๋๋น ์์ฒญ ์, ํธ์ถ๋๋ ์๋ํฌ์ธํธ, ์ ์ก ๋ฐ ์์ ๋ฐ์ดํธ(ํค๋์ ๋ฐ๋ ํฌํจ), ์ฌ์๋ ๋ฐ ํ์์์ ๋น์จ, ๊ทธ๋ฆฌ๊ณ UI๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ. ๊ฐ๋ฅํ๋ค๋ฉด ๋คํธ์ํฌ ํ์ (์์ดํ์ด vs ์ ๋ฃฐ๋ฌ)๋ณ๋ก ์ค๋ฅ ๋น์จ์ ๋๋์ธ์. ์์ ๋ ์ฐ๊ฒฐ์์๋ ๋ณด์ด์ง ์๋ ๋ฌธ์ ๋ค์ด ์ ๋ฃฐ๋ฌ์์ ๋๋ฌ๋๊ณค ํฉ๋๋ค.
์ ๊ฒฝ ํธ๋ํฝ๊ณผ ๋ฐฑ๊ทธ๋ผ์ด๋ ํธ๋ํฝ์ ๋ถ๋ฆฌํ์ธ์. ํ๋ฉด์ ์กฐ์ฉํด ๋ณด์ฌ๋ ๊ธฐ๊ธฐ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ก๊ณ ์นจ, ํธ์๋ก ์ ๋ฐ๋ ๋๊ธฐํ, ๋ถ์ ์ ๋ก๋, ํน์ โํน์ ๋ชฐ๋ผโ ํ๋ ํ๋ฆฌํ์น๋ก ๋ฐ์ ์ ์์ต๋๋ค. ์ด๋ค์ ๋ฐ๋ก ์ถ์ ํด ์๋ชป๋ ๊ฒ์ ์ต์ ํํ์ง ์๋๋ก ํ์ธ์.
ํซ์คํ์ ๋ณดํต ์ฑ ์์, ํ/ํผ๋ ํ๋ฉด, ์ฌ๋ฌ ํธ์ถ๋ก ํ์ฅ๋๋ ์์ธ ํ๋ฉด, ํํฌ๋ฆฌํ๋ ์ ๊ฐ์ ์๊ฐ์ ์ง์ค๋ฉ๋๋ค. ์ด ์ค ํ๋๋ฅผ ๊ณจ๋ผ ์ข ๋จ๊ฐ์ผ๋ก ์ธก์ ํ์ธ์.
ํ์ด โ์ข์โ์ ๊ธฐ์ค์ ํฉ์ํ ์ ์๋๋ก ๊ธฐ์ค ์์ฐ์ ์ ํ์ธ์. ์: โ์ฃผ๋ฌธ ์ถ์ ํ๋ฉด์ ์ฝ๋ ๋ก๋๋ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ ์ ์ต๋ 6๊ฐ์ ์์ฒญ์ ํ๊ณ 250KB๋ฅผ ์ด๊ณผํ์ง ์์์ผ ํ๋ค.โ
๊ฐ๋จํ KPI ์์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด (1) ํ๋ฉด ๋ก๋๋น ์์ฒญ ์์ (2) ์ฌ์๋์จ์ ์ฌ์ฉํ์ธ์. ์ฌ์๋ ๊ฐ์๋ ์์๋ณด๋ค ๋ ๋ง์ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์ ์ฝํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฐ๋ณต ์ฌ์๋๋ ๋ผ๋์ค๋ฅผ ๋ ์ค๋ ํ์ฑํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋จ๊ณ๋ณ: ๋ฐฐ์น๋ก ์์ฒญ ์ ์ค์ด๊ธฐ
์ฑํฐํ API๋ ์ค์๋ก ์ฝ๊ฒ ์๊น๋๋ค. ๊ฐ ์์ ฏ์ด โ์์ ์โ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๊ณ ํ ํ๋ฉด์ด ์ด ๊ฐ๊ฐ ๋๋ ์์ ํธ์ถ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ํด๊ฒฐ์ฑ ์ ๋ณดํต ๊ฐ๋จํฉ๋๋ค: ํญ์ ํจ๊ป ๋ก๋๋๋ ๊ฒ์ ์๋ณํ๊ณ ๋ ์ ์ ํธ์ถ๋ก ๋ฐํํ์ธ์.
๋จผ์ ํธ๋ํฝ์ด ๋ง์ ํ ํ๋ฉด(ํ, ์ธ๋ฐ์ค, ์ฃผ๋ฌธ ๋ชฉ๋ก)์ ๋งคํํ์ธ์. ์ ํ์ง ์๋(above the fold) ๋ถ๋ถ์ ๋ฌด์์ด ๋ณด์ด๋์ง ์ ๊ณ , ๊ฐ UI ์์๊ฐ ์ด๋ค ์์ฒญ์์ ์ค๋์ง ์ถ์ ํฉ๋๋ค. ๊ฐ์ ์ฌ์ฉ์ ํ๋กํ์ ๋ ๋ฒ ๊ฐ์ ธ์ค๋ ์ค๋ณต์ด๋ ํญ์ ํจ๊ป ๊ฐ๋ ํธ์ถ๋ค(ํ๋กํ + ๊ถํ + ์ฝ์ง ์์ ์ ๋ฑ)์ ์์ฃผ ๋ฐ๊ฒฌํ ๊ฒ์ ๋๋ค.
๋ค์์ผ๋ก ์ ๋ขฐํ ์ ์๊ฒ ํจ๊ป ๋ฐ์ํ๋ ํธ์ถ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ผ์ธ์. ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ์ ํ์ง๊ฐ ์์ต๋๋ค:
- ๊ทธ ํ๋ฉด์ ์ํด ๋ชฉ์ ๋ณ ์๋ํฌ์ธํธ๋ฅผ ๋ง๋ค๊ธฐ(๋ณดํต ๋ ์์ ์ )
- ์ํ ์์ธก ๊ฐ๋ฅํ ๋ฆฌ์์ค ๋ชฉ๋ก์ ๋ฐ๋ ๋ฐฐ์น ์๋ํฌ์ธํธ ์ถ๊ฐํ๊ธฐ
๋ฐฐ์น๋ ํ๋ฉด ๊ธฐ๋ฐ์ด๊ณ ๋ฒ์๊ฐ ์ ํ๋๊ฒ ์ ์งํด ์บ์, ๋ชจ๋ํฐ๋ง, ๋๋ฒ๊ทธ๋ฅผ ์ฝ๊ฒ ๋ง๋์ธ์.
๋ฐฐ์นญ์ด ์๋ง์ด ๋์ง ์๋๋ก ๋ช ๊ฐ์ง ๊ท์น์ ์งํค์ธ์. ํ๋ฉด์ด ์ง๊ธ ์ค์ ๋ก ํ์๋ก ํ๋ ๊ฒ๋ง ๋ฐํํ๊ณ โํน์ ๋ชฐ๋ผโ ์ ์ฒด ๊ฐ์ฒด๋ฅผ ์ฃผ์ง ๋ง์ธ์. ์ผ๋ถ ์กฐ๊ฐ์ด ์ ํ์ ์ด๋ฉด ๋ช ํํ ํ์ํด UI๊ฐ ์ค์ํ ๋ถ๋ถ์ ๋น ๋ฅด๊ฒ ๋ ๋ํ๋๋ก ํ์ธ์. ๋ํ ๋ถ๋ถ ์คํจ๊ฐ ์ ์ฒด ์ฌ์๋๋ฅผ ๊ฐ์ํ์ง ์๋๋ก ์๋ต์ ์ค๊ณํ์ธ์. ์คํจํ ๊ฒ๋ง ์ฌ์๋ํ๋ ๊ฒ์ด ์ ์ฒด ๋ฐฐ์น๋ฅผ ๋ค์ ๋ณด๋ด๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น์ฉ์ด ์ ์ต๋๋ค.
๋ฐฐํฐ๋ฆฌ๋ฅผ ์ ์ฝํ๋ ์บ์ฑ ํค๋(๋จ์ํ ๋์ญํญ ์ ๊ฐ์ด ์๋)
์บ์ฑ์ ๋ฐฐํฐ๋ฆฌ ๊ธฐ๋ฅ์ ๋๋ค. ๋ชจ๋ ์์ฒญ์ ๋ผ๋์ค๋ฅผ ๊นจ์ฐ๊ณ CPU๋ฅผ ๋ฐ์๊ฒ ํ๋ฉฐ ํ์ฑ๊ณผ ์ฑ ๋ก์ง์ ์ด๋ฐํฉ๋๋ค. ์ข์ ์บ์ฑ ํค๋๋ ๋ง์ ์๋ก๊ณ ์นจ์ ๊ฐ๋ฒผ์ด ๊ฒ์ฌ๋ก ๋ฐ๊ฟ๋๋ค.
๊ฐ์ฅ ํฐ ์ด๋์ ์กฐ๊ฑด๋ถ ์์ฒญ์
๋๋ค. ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ค์ด๋ก๋ํ๋ ๋์ ์ฑ์ด โ๋ณ๊ฒฝ๋์๋?โ๋ฅผ ๋ฌป์ต๋๋ค. ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด ์๋ฒ๋ ์์ 304 Not Modified๋ก ์๋ตํฉ๋๋ค.
๋ฆฌ์์ค์ ๋ฒ์ ์ ๋ํ๋ด๋ ์๋ต์ ETag๋ฅผ ์ฌ์ฉํ๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ๊ฐ์ ธ์ค๊ธฐ์์ If-None-Match๋ฅผ ๋ณด๋ด๊ฒ ํ์ธ์. ETag ์์ฑ์ด ์ด๋ ต๋ค๋ฉด Last-Modified์ If-Modified-Since๋ ๊ฐ๋จํ โ์
๋ฐ์ดํธ๋จโ ๋ฆฌ์์ค์ ์ ๋์ํฉ๋๋ค.
๋ณ๊ฒฝ์ด ๋๋ฌธ ๋ฐ์ดํฐ๋ ์บ์ ์ ์ฑ
์ ๋ช
ํํ ํ์ธ์. Cache-Control์ ์ค์ ๋ณํ ๋น๋์ ๋ง์์ผ ํฉ๋๋ค. ์ฌ์ฉ์ ํ๋กํ์๋ ์งง์ max-age๊ฐ ์ ๋นํ ์ ์์ง๋ง ์ฑ ์ค์ , ์ฐธ์กฐ ๋ชฉ๋ก, ๊ธฐ๋ฅ ํ๋๊ทธ๋ ๋ ๊ธธ๊ฒ ๋ ์ ์์ต๋๋ค.
์ฑ ์ชฝ์์ 304๋ฅผ ๋น ๋ฅธ ๊ฒฝ๋ก๋ก ์ทจ๊ธํ์ธ์. JSON์ ํ์ฑํ์ง ๋ง๊ณ (์์ต๋๋ค), ๋ชจ๋ธ์ ์ฌ๊ตฌ์ฑํ์ง ๋ง๊ณ , UI๋ฅผ ๊น๋ฐ์ด์ง ๋ง์ธ์. ํ๋ฉด์ ์ด๋ฏธ ์๋ ๊ฒ์ ์ ์งํ๊ณ ํ์๊ธฐ๋ง ์
๋ฐ์ดํธํ์ธ์.
์: ์ฃผ๋ฌธ ์ถ์ ํ๋ฉด์ด ๋งค 15์ด๋ง๋ค ์ฃผ๋ฌธ ์ํ๋ฅผ ํด๋งํ๋ค๊ณ ํฉ์๋ค. ์๋ต์ ETag๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๋๋ถ๋ถ์ ๊ฒ์ฌ์์ 304๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค. ์ฑ์ ๋ง์ง๋ง ์ํ๋ฅผ ์ ์งํ๊ณ ์ํ๊ฐ ๋ฐ๋ ๋๋ง ์ค์ ์์
์ ํฉ๋๋ค(์: โํฌ์ฅ๋จโ์์ โ๋ฐฐ์ก๋จโ์ผ๋ก ๋ณ๊ฒฝ๋ ๋).
๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๋ํด์๋ ์๋์ ์ผ๋ก ์ฒ๋ฆฌํ์ธ์. ์บ์ฑ์ด ์๋์ผ๋ก ์ํํ ๊ฒ์ ์๋์ง๋ง ๋ช
ํํ ๊ท์น์ด ํ์ํฉ๋๋ค. ๊ฐ์ธ ์ ๋ณด๋ ํ ํฐ์ด ํฌํจ๋ ์๋ต์ ์ ํ ์๊ตฌ์ฌํญ์ด ํ์ฉํ์ง ์์ผ๋ฉด ์บ์ํ์ง ๋ง์ธ์. ์ฌ์ฉ์๋ณ ๋ฐ์ดํฐ์๋ ์งง์ ์๋ช
์ ์ฌ์ฉํ๊ณ , ๊ณต์ ์บ์๊ฐ ๊ฐ์ธ ์๋ต์ ์ ์ฅํ์ง ๋ชปํ๋๋ก (Cache-Control: private) ํ์ธ์.
๋ ๋๋ํ ํ์ด๋ก๋: ๋ ๋ณด๋ด๊ณ ๋ ํ์ฑํ๊ธฐ
์ถ๊ฐ ๋ฐ์ดํธ๋ ๋ชจ๋ฐ์ผ์์ ๋จ์ํ ๋์ญํญ์ ๋๋ ๋น์ฉ์ ์ ๋ฐํฉ๋๋ค. ๋ผ๋์ค๋ฅผ ๋ ์ค๋ ๊นจ์ฐ๊ณ ์ฑ์ด JSON ๋์ฝ๋ฉ๊ณผ ๋ชจ๋ธ ์ ๋ฐ์ดํธ์ ๋ ๋ง์ CPU๋ฅผ ์ฌ์ฉํ๊ฒ ํฉ๋๋ค. API ํต์ ์ ์ค์ด๋ ค๋ฉด ํ์ด๋ก๋ ํธ๋ฆฌ๋ฐ์ด ๊ฐ์ฅ ๋น ๋ฅธ ์ฑ๊ณผ๋ฅผ ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
ํ๋ฉด๋ณ๋ก ํ์ด๋ก๋๋ฅผ ๊ฐ์ฌํ์ธ์. ํ๋์ ํ๋ฉด(์: ํ ํผ๋)์ ๊ณจ๋ผ ์๋ต ํฌ๊ธฐ๋ฅผ ๊ธฐ๋กํ๊ณ ํ๋๋ณ๋ก ๊ฒํ ํ์ธ์: ํด๋ผ์ด์ธํธ๊ฐ ์ด๊ฒ์ ๋ ๋ํ๋๊ฐ, ์๋๋ฉด ํ์ ๊ฒฐ์ ์ ์ํด์๋ง ์ฌ์ฉํ๋๊ฐ? ์๋๋ผ๋ฉด ํด๋น ์๋ํฌ์ธํธ์์ ์ ๊ฑฐํ์ธ์.
๋ชฉ๋ก์๋ ๋ณดํต ์์ โ์์ฝโ ํํ๋ฉด ์ถฉ๋ถํฉ๋๋ค. ๋ชฉ๋ก ํ์๋ ๋ณดํต id, ์ ๋ชฉ, ์ํ, ํ์์คํฌํ ์ ๋๋ฉด ์ถฉ๋ถํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํญ๋ชฉ์ ์ด ๋๋ง ์์ธ๋ฅผ ๊ฐ์ ธ์ค์ธ์.
๋น ๋ฅด๊ฒ ํ์ด๋ก๋๋ฅผ ์ค์ด๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ:
- ๋ฐ๋ณต๋๋ ๊ธด ๋ฌธ์์ด ๋์ id๋ ์งง์ enum ์ฝ๋ ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ๊ฐ ์์ ํ๊ฒ ๊ฐ์ ํ ์ ์๋ ๋ช ๋ฐฑํ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ ์กํ์ง ์๊ธฐ
- ๋์ผํ ์ค์ฒฉ ๊ฐ์ฒด๋ฅผ ๊ฐ ๋ชฉ๋ก ํญ๋ชฉ๋ง๋ค ๋ฐ๋ณตํ์ง ์๊ธฐ
- ํ๋ ์ด๋ฆ๊ณผ ํ์ ์ ์์ ์ ์ผ๋ก ์ ์งํด ํด๋ผ์ด์ธํธ๊ฐ ๋ถ๊ธฐ ์ฒ๋ฆฌํ๊ฑฐ๋ ์ฌํ์ฑํ์ง ์๋๋ก ํ๊ธฐ
์์ถ์ ํนํ ๋๋ฆฐ ๋คํธ์ํฌ์์ ๋์์ด ๋์ง๋ง ์ค์ ๊ธฐ๊ธฐ์์ CPU ํธ๋ ์ด๋์คํ๋ฅผ ํ ์คํธํ์ธ์. Gzip์ด๋ Brotli๋ ์ ์ก ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ด์ง๋ง ์ค๋๋ ํฐ์์๋ ๋งค์ฐ ํฐ ์๋ต์ ์์ถ ํด์ ํ๋ ๋ฐ ๋์ ๋๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ์ฌ์ ํ ๊ฐ์ฅ ํฐ ์ด๋์ ์ฒ์๋ถํฐ ์ ์กํ๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค.
์๋ต ํํ๋ฅผ ๊ณ์ฝ(contract)์ฒ๋ผ ๋ค๋ฃจ์ธ์. ํ๋ ์ด๋ฆ๊ณผ ํ์ ์ด ์ผ๊ด๋๋ฉด ์ฑ์ ๋ ์ ์ ํด๋ฐฑ๊ณผ ๋ฐฉ์ด์ ์ธ ์ฝ๋๋ฅผ ํ์๋ก ํ๊ณ , ์ด๋ UI๋ฅผ ๋ถ๋๋ฝ๊ฒ ์ ์งํ๊ณ ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ์ ๋ฎ์ถ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ด์ ํ ๋คํธ์ํฌ์ ์ฌ์๋ ํ์๋ฅผ ์ค์ด๋๋ก ์ค๊ณํ๊ธฐ
๋ชจ๋ฐ์ผ ์ฑ์ ์์ฒญ์ ๋ณด๋ผ ๋๋ฟ ์๋๋ผ ์คํจํด์ ์ฌ์๋ํ๊ณ ๋ผ๋์ค๋ฅผ ๋ค์ ๊นจ์ฐ๊ณ ์์ ์ ๋ฐ๋ณตํ ๋๋ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์๋ชจํฉ๋๋ค. API๊ฐ ์๋ฒฝํ ์์ดํ์ด๋ฅผ ๊ฐ์ ํ๋ฉด ๋ถ์์ ํ 4G๋ฅผ ์ฐ๋ ์ค์ ์ฌ์ฉ์๋ ๊ทธ ๋น์ฉ์ ์ง๋ถํฉ๋๋ค.
๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ธฐ ์ฝ๊ฒ ๋ง๋์ธ์. ์๋ฒ ์ธก ํํฐ์ ํ์ด์ง๋ค์ด์ ์ ํด๋ผ์ด์ธํธ ํํฐ๋ง๋ณด๋ค ์ฐ์ ์ํค์ธ์. ํ๋ฉด์ด ํน์ ์ฌ์ฉ์์ ๋ํด ์ต๊ทผ 20๊ฐ์ ์ด๋ฒคํธ๋ง ํ์ํ๋ฉด, ์ฑ์ด ์๋ฐฑ ํ์ ๋ฐ์ ๋๋ถ๋ถ์ ๋ฒ๋ฆฌ์ง ์๋๋ก ๊ทธ ์ ํํ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ธ์.
๋ธํ ๋๊ธฐ(delta sync)๋ฅผ ์ง์ํ์ธ์. ์ฑ์ด โ๋ด๊ฐ ๋ง์ง๋ง์ผ๋ก ํ์ธํ ์ดํ ๋ฌด์์ด ๋ฐ๋์๋?โ๋ฅผ ๋ฌผ์ ์ ์๊ฒ ํ๋ฉด ํด๋ผ์ด์ธํธ๋ ๊ทธ ์์ ์ดํ์ ์ ๋ฐ์ดํธ์ ์ญ์ ๋ง ์์ฒญํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ํ์์คํฌํ๋ ์ฆ๊ฐํ๋ ๋ฒ์ ๋ฒํธ๋ฅผ ๋ฐํํ๋ ๋จ์ํ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
์ฌ์๋๋ ๋ถ๊ฐํผํ๋ฏ๋ก ์ ๋ฐ์ดํธ๋ฅผ ๋ฉฑ๋ฑํ๊ฒ ๋ง๋์ธ์. ์ฌ์๋๊ฐ ์ค๋ณต ์ฒญ๊ตฌ๋ ์ค๋ณต ์ ์ถ์ ์ผ์ผํค๋ฉด ์ ๋ฉ๋๋ค. ์์ฑ ์์ ์ ๋ํ idempotency ํค์ ์ํ๋ฅผ ์ค์ ํ๋ ์ ๋ฐ์ดํธ ๋ฐฉ์์ ํฐ ๋์์ด ๋ฉ๋๋ค.
์ฌ์๋๊ฐ ๋ฐ์ํ ๋๋ ์ฌ์๋ ํญํ(retry storms)์ ํผํ์ธ์. ์ง์ ๋ฐฑ์คํ์ ์งํฐ๋ฅผ ์ฌ์ฉํด ์์ฒ ๋์ ๊ธฐ๊ธฐ๊ฐ ๋์์ ์๋ฒ๋ฅผ ๋๋ฆฌ์ง ์๊ฒ ํ๊ณ , ๊ธฐ๊ธฐ๊ฐ ์ด๋ง๋ค ๊นจ์ด๋์ง ์๋๋ก ํ์ธ์.
๋ช ํํ ์ค๋ฅ ์ฝ๋๋ฅผ ๋ฐํํด ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ๊ฒฐ์ ํ๊ฒ ํ์ธ์. 401์ ์ฌ์ธ์ฆ์ ํธ๋ฆฌ๊ฑฐํ๊ณ , 404๋ ๋ณดํต ์ฌ์๋๋ฅผ ๋ฉ์ถ๊ฒ ํ๋ฉฐ, 409๋ ์ํ ์๋ก๊ณ ์นจ์ด ํ์ํ ์ ์๊ณ , 429๋ 503์ ๋ฐฑ์คํ๋ฅผ ์ ๋ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ๋์์ด API ๋น์ฉ์ ๋ฐฐ๋ก ๋ง๋๋ ๊ฒฝ์ฐ
์ ์ค๊ณ๋ API๊ฐ ์์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ๋คํธ์ํฌ ์์ ์ ์กฐ์ฉํ ๋ฐฐ๋ก ๋ง๋ค ์ ์์ต๋๋ค. ๋ชจ๋ฐ์ผ์์๋ ๊ทธ๋ฐ ์ถ๊ฐ ๊นจ์ด๋จ๊ณผ ๋ผ๋์ค ์๊ฐ๋ค์ด ๋ฐ์ดํธ ์์ฒด๋ณด๋ค ๋ฐฐํฐ๋ฆฌ์ ๋ ํฐ ๋น์ฉ์ ๋ผ ๋๊ฐ ๋ง์ต๋๋ค.
๋ณ๊ฒฝ์ด ๊ฑฐ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ์ธ์. ํ๋กํ ์ฌ์ง, ๊ธฐ๋ฅ ํ๋๊ทธ, ์ฐธ์กฐ ๋ฐ์ดํฐ(๊ตญ๊ฐ, ์ํ, ์นดํ ๊ณ ๋ฆฌ)๋ ๋งค๋ฒ ํ๋ฉด ๋ฐฉ๋ฌธ ์ ๊ฐ์ ธ์ค์ง ์์์ผ ํฉ๋๋ค. ํฉ๋ฆฌ์ ์ธ ์๋ช ์ ๋ถ์ฌํ๊ณ ๋์คํฌ์ ์ ์ฅํ๋ฉฐ ํ์ํ ๋๋ง ์๋ก ๊ณ ์น์ธ์. API๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ง์ํ๋ฉด(ETag๋ Last-Modified) ๋น ๋ฅธ ์ฌ๊ฒ์ฌ๊ฐ ์ ์ฒด ๋ค์ด๋ก๋๋ณด๋ค ํจ์ฌ ์ ๋ ดํฉ๋๋ค.
๋ ๋ค๋ฅธ ํํ ๋ฌธ์ ๋ ์งํ ์ค์ธ ์ค๋ณต ์์ฒญ์ ๋๋ค. ์ฑ์ ๋ ๋ถ๋ถ์ด ๋์์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ฉด(์: ํค๋์ ์ค์ ํ๋ฉด์ด ๋ชจ๋ ํ๋กํ์ ์์ฒญ) ์์ฒญ์ ํฉ์น์ง ์์ผ๋ฉด ๋ ๋ฒ ์ ์กํ๊ณ ๋ ๋ฒ ํ์ฑํ๊ณ ์ํ๋ฅผ ๋ ๋ฒ ๊ฐฑ์ ํฉ๋๋ค. ํ ๋คํธ์ํฌ ํธ์ถ์ ๋จ์ผ ์ง์ค ์์ค๋ก ์ทจ๊ธํ๊ณ ์ฌ๋ฌ ์๋น์๊ฐ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ์ธ์.
๋ฐฑ๊ทธ๋ผ์ด๋ ์๋ก๊ณ ์นจ์ ์๋์ ์ผ๋ก ์ํ๋์ด์ผ ํฉ๋๋ค. ์ ์ ๊ฐ ๊ณง ๋ณด๊ฒ ๋ ๋ด์ฉ์ ๋ฐ๊พธ์ง ์๊ฑฐ๋ ์๋ฆผ์ ์ ๋ฐํ์ง ์๋๋ค๋ฉด ๋ณดํต ๊ธฐ๋ค๋ ค๋ ๋ฉ๋๋ค. ๋ชจ๋ ์ฑ ์ฌ๊ฐ(resume) ์ ์๋ก๊ณ ์นจ ๋ก์ง์ ์คํํ์ง ๋ง์ธ์. ์งง์ ์ฟจ๋ค์ด์ ์ถ๊ฐํ๊ณ ๋ง์ง๋ง ์ ๋ฐ์ดํธ ์๊ฐ์ ํ์ธํ์ธ์.
AppMaster๋ก ๋ฐฑ์๋๋ฅผ ๋ง๋ค๋ฉด ํ๋ฉด ์ค์ฌ ์๋ํฌ์ธํธ๋ฅผ ์ฝ๊ฒ ์ค๊ณํ๊ณ ์๋ต ์คํค๋ง๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํ๋ฉฐ ์บ์ฑ ํค๋๋ฅผ ์ ์ด๋ ๋ฐฉ์์ผ๋ก ์ถ๊ฐํด ํด๋ผ์ด์ธํธ๊ฐ ๋๋ถ๋ถ์ ์๊ฐ์ ์กฐ์ฉํ ์ ์๊ฒ ๋์ธ ์ ์์ต๋๋ค.
๋ฐฐ์นญ, ์บ์ฑ, ํ์ด๋ก๋์์ ํํ ํ๋ ์ค์
๋ชฉํ๋ ๋ผ๋์ค ๊นจ์ฐ๊ธฐ ๊ฐ์, CPU ์์ ๊ฐ์, ์ฌ์๋ ๊ฐ์์ ๋๋ค. ๋ช ๊ฐ์ง ํจํด์ ์ ์ฝ์ ์์ํ๊ฑฐ๋ ์คํ๋ ค ํ๋ฉด์ ๋ ๋๋ฆฌ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฐฐ์นญ์ด ์ํฉ์ ์ ํ์ํค๋ ๊ฒฝ์ฐ
๋ฐฐ์นญ์ ๋์์ด ๋๋ค๊ฐ ๋ฐฐ์น๊ฐ โ๋ชจ๋ ๋ฌ๋ผ์คโ ํธ์ถ๋ก ๋ณํ ๋ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์๋ฒ๊ฐ ๋ง์ ํ ์ด๋ธ์ ์กฐ์ธํ๊ณ ๋ฌด๊ฑฐ์ด ๊ถํ ๊ฒ์ฌ๋ฅผ ํ๋ฉฐ ๊ฑฐ๋ํ ์๋ต์ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด, ๊ทธ ๋จ์ผ ์์ฒญ์ด ์ฌ๋ฌ ์์ ์์ฒญ๋ณด๋ค ๋ ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๋ชจ๋ฐ์ผ์์๋ ํ ๋ฒ์ ๋๋ฆฐ ์์ฒญ์ด ์ฑ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๊ณ ๋คํธ์ํฌ๋ฅผ ํ์ฑ ์ํ๋ก ์ ์งํ๋ฉฐ ํ์์์ ์ํ์ ๋์ ๋๋ค.
๊ฑด๊ฐํ ๋ฐฐ์น๋ ํ๋ฉด ๋ชจ์์ผ๋ก ์ ํ๋์ด์ผ ํฉ๋๋ค: ํ๋์ ๋ทฐ์ ํ์ํ ๊ฒ๋ง, ๋ช ํํ ํ๊ณ๋ฅผ ๋๊ณ . ์๋ต์ ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช ํ ์ ์๋ค๋ฉด ๊ทธ ์๋ํฌ์ธํธ๋ ์๋ง๋ ๋ฒ์๊ฐ ๋๋ฌด ๋์ต๋๋ค.
์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ์บ์ฑ
๋ช ํํ ๋ฌดํจํ ๊ณํ ์์ด ์บ์ฑํ๋ฉด ์ฌ์ฉ์๊ฐ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ํํฌ๋ฆฌํ๋ ์๋ฅผ ํ๋ฉฐ ์ฑ์ด ๋ถํ์ํ ์ ์ฒด ์ฌ๋ก๋๋ฅผ ํ๊ฒ ๋ฉ๋๋ค. ์บ์ฑ ํค๋๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ ์ํด ์ ๋ฐ์ดํธ๋๋์ง(์์ฑ/์ ๋ฐ์ดํธ ์ก์ , ์๋ฒ ์ด๋ฒคํธ, ์งง์ ์ ์ ๋ ์ฐฝ)๋ฅผ ๋ฏธ๋ฆฌ ๊ณํํด ํด๋ผ์ด์ธํธ๊ฐ ์บ์๋ ์๋ต์ ์ ๋ขฐํ ์ ์๊ฒ ํ์ธ์.
ํด๋ง๋ ๋ฐฐํฐ๋ฆฌ ํจ์ ์ ๋๋ค. 5์ด ๊ฐ๊ฒฉ์ ํ์ดํธํ ํ์ด๋จธ๋ ์๋ฌด ๋ณํ๊ฐ ์์ด๋ ๊ธฐ๊ธฐ๋ฅผ ๋ฐ์๊ฒ ํฉ๋๋ค. ๊ฐ๋ฅํ๋ฉด ์๋ฒ ์ฃผ๋ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๊ฐํ๊ฒ ๋ฐฑ์คํํ์ธ์(๋น ํด๋ง ํ ๊ฐ๊ฒฉ ๋๋ฆฌ๊ธฐ, ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ์ผ์์ค์ง).
๊ณผ๋ํ๋ ํ์ด๋ก๋๋ ์๋ฐํ ๋น์ฉ์ ๋๋ค. ๊ฑฐ๋ํ ์ค์ฒฉ ๊ฐ์ฒด๋ฅผ โํธ์์โ ๋ฐํํ๋ฉด ๋ ๋ง์ ๋ฐ์ดํธ, ๋ ๋ง์ JSON ํ์ฑ, ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ churn์ด ๋ฐ์ํฉ๋๋ค. ํ๋ฉด์ด ํ์๋ก ํ๋ ๊ฒ๋ง ๋ณด๋ด๊ณ ์์ธ๋ ํ์ ์ ๊ฐ์ ธ๊ฐ์ธ์.
๋ง์ง๋ง์ผ๋ก ๋ฐฐ์น์์ ๋ถ๋ถ ์คํจ๋ฅผ ๋ฌด์ํ์ง ๋ง์ธ์. ํ๋์ ํ์ ๊ฒฐ๊ณผ๊ฐ ์คํจํด ์ ์ฒด๋ฅผ ์ฌ์๋ํ๋ฉด ํธ๋ํฝ์ด ์ค๋ณต๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์คํจํ ๋ถ๋ถ๋ง ๋ค์ ์๋ํ ์ ์๊ฒ ์ค๊ณํ์ธ์.
์งง์ ์ฒดํฌ๋ฆฌ์คํธ: ๋ฐฐ์น๋ ๋ฒ์๋ฅผ ์ ํํ๋ผ, ์บ์ ์ ์ ๋๋ฅผ ๋ฏธ๋ฆฌ ์ ํ๋ผ, ํ์ดํธํ ํด๋ง์ ํผํ๋ผ, ํ์ด๋ก๋๋ฅผ ๋ค๋ฌ์ด๋ผ, ๋ถ๋ถ ์ฑ๊ณต์ ์ง์ํ๋ผ.
์ถ์ ์ ๋น ๋ฅธ ์ฒดํฌ๋ฆฌ์คํธ
๋ฆด๋ฆฌ์ค ์ ์ ๋คํธ์ํฌ ๋์์๋ง ์ง์คํ ํ ๋ฒ์ ์ ๊ฒ์ ํ์ธ์. ๋๋ถ๋ถ์ ๋ฐฐํฐ๋ฆฌ ์ด๋์ ๋๋ผ์ด ์ํฉ์ ์ ๊ฑฐํ๋ ๋ฐ์ ์ต๋๋ค: ๋ ์ ์ ๊นจ์ด๋จ, ์ ์ ํ์ฑ, ๋ฐฑ๊ทธ๋ผ์ด๋์์์ ์ฌ์๋ ๊ฐ์.
์์ ์ธ ๊ฐ ํ๋ฉด์์ ๋ค์์ ์ ๊ฒํ์ธ์:
- ์ฝ๋ ๋ก๋๊ฐ ์์ ์์ธก ๊ฐ๋ฅํ ์์ ์์ฒญ์ผ๋ก ๋๋๋๊ฐ(ํญ๋ชฉ๋ณ ์กฐํ ๊ฐ์ ์จ์ ์ถ๊ฐ ํธ์ถ์ ๊ฒฝ๊ณ)
- ์๋ต์ ๋ช
ํํ ์บ์ฑ ๊ท์น์ด ํฌํจ๋์ด ์๋๊ฐ(
ETag๋๋Last-Modified๊ฐ ์ ํฉํ ๊ณณ์ ์์ผ๋ฉฐ, ๋ณ๊ฒฝ์ด ์์ ๋304 Not Modified๋ฅผ ๋ฐํํ๋๊ฐ) - ๋ชฉ๋ก ์๋ํฌ์ธํธ๊ฐ ํ๊ณ๊ฐ ์ ํด์ ธ ์๋๊ฐ: ์์ ์ ์ ๋ ฌ, ํ์ด์ง๋ค์ด์ , ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋์ง ์๋ ํ๋ ์์
- ์ฌ์๋ ๋ก์ง์ด ์งํฐ๊ฐ ์๋ ๋ฐฑ์คํ๋ฅผ ์ฌ์ฉํ๊ณ ์์ฒด์ ์ผ๋ก ๋ฉ์ถ ์ ์๋ ์ค๋ฅ์์ ๋ฉ์ถ๋ฉฐ ์ ์ฒด ์ฌ์๋ ์๊ฐ์ด ์ ํ๋๋๊ฐ
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฐ์ดํธ๊ฐ ์ ๋นํ๋๋๊ฐ; ํ๋ฉด์ ๋ณํ๋ฅผ ์ฃผ์ง ์๋ ์ง์์ ํด๋ง์ ํผํ๋ผ
๊ฐ๋จํ ํ์ค ์ ๊ฒ: ํ๋ฉด์ ํ ๋ฒ ๋ก๋ํ ๋ค ๋นํ๊ธฐ ๋ชจ๋๋ฅผ ์ผ๊ณ ๋ค์ ์ด์ด๋ณด์ธ์. ์บ์๋ ๋ด์ฉ, ๋ง์ง๋ง ์ํ, ์น์ ํ ํ๋ ์ด์คํ๋ ๋ฑ ์ ์ฉํ ๊ฒ์ ์ฌ์ ํ ๋ณด์ฌ์ฃผ๋ฉด ๋ถํ์ํ ํธ์ถ์ ์ค์ฌ ์ฒด๊ฐ ์๋๋ ๊ฐ์ ํ์ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
์์: ์ฃผ๋ฌธ ์ถ์ ํ๋ฉด์ ๋ ์ ๋ ดํ๊ฒ ๋ก๋ํ๊ธฐ
๊ณ ๊ฐ์ด ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ๋ก ์ฃผ๋ฌธ ์ถ์ ์ฑ์ ์ด๊ณ ๋ฐฐํฐ๋ฆฌ๊ฐ 20% ๋จ์ ์๋ค๊ณ ํฉ์๋ค. ๊ทธ๋ค์ด ์ํ๋ ๊ฒ์ ํ๋์ ๋๋ค: โ๋ด ์ํฌ๊ฐ ์ง๊ธ ์ด๋ ์์ง?โ ํ๋ฉด์ ๋จ์ํด ๋ณด์ฌ๋ ๊ทธ ๋ค์ API ํธ๋ํฝ์ ์๊ฐ๋ณด๋ค ๋น์ ์ ์์ต๋๋ค.
์ด์ ์๋ ์ฑ์ด ํ๋ฉด์ ๋ก๋ํ ๋ ์์ฒญ์ด ํญ์ฃผํ์ต๋๋ค. UI๋ ๋ผ๋์ค๊ฐ ๊ณ์ ๊นจ์ด๋๋ ๋์ ๊ธฐ๋ค๋ฆฌ๊ณ ์ฝํ ์ฐ๊ฒฐ์์๋ ๋ช๋ช ํธ์ถ์ด ํ์์์์ด ๋ฌ์ต๋๋ค.
์ ํ์ ์ธ โ์ด์ โ ํจํด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
GET /orders/{id}์ฃผ๋ฌธ ์์ฝGET /orders/{id}/items๋ผ์ธ ์์ดํ GET /orders/{id}/history์ํ ์ด๋ฒคํธGET /me์ฌ์ฉ์ ํ๋กํ ๋ฐ ์ค์ GET /settingsํ์ ๊ท์น(ํตํ, ๋ ์ง ํ์)
์ด์ UI๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ธ ๊ฐ์ง ๋ณ๊ฒฝ์ ์ ์ฉํ์ธ์.
์ฒซ์งธ, ํ๋ฉด์ด ํ์๋ก ํ๋ ๊ฒ๋ง ํ ๋ฒ์ ๋ฐํํ๋ ๋จ์ผ ํ๋ฉด ์๋ํฌ์ธํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค: ์ฃผ๋ฌธ ์์ฝ, ์ต์ ์ํ, ์ต๊ทผ ๊ธฐ๋ก, ํญ๋ชฉ ์ ๋ชฉ ๋ฑ. ๋์งธ, ํ๋กํ์ ์บ์ํ์ธ์: GET /me๊ฐ ETag์ Cache-Control: private, max-age=86400๋ฅผ ๋ฐํํ๋ฉด ๋๋ถ๋ถ์ ์ด๋์ ๋น ๋ฅธ 304 ์๋ต(๋๋ ์บ์๊ฐ ์์ง ์ ์ ํ๋ฉด ์์ ์์ฒญ ์์)์ด ๋ฉ๋๋ค. ์
์งธ, ํ์ด๋ก๋๋ฅผ ์ฌ๋ฆผํ๊ฒ ๋ง๋์ธ์: ํญ๋ชฉ ๋ชฉ๋ก์ ์ ์ฒด ์ ํ ์ค๋ช
์ด๋ ์ฌ์ฉ๋์ง ์๋ ๋ฉํ๋ฐ์ดํฐ ๋์ id, name, qty, thumbnail_url๋ง ๋ณด๋
๋๋ค.
๊ฒฐ๊ณผ๋ ์ ์ ์๋ณต, ์ ์ ๋ฐ์ดํธ, ๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ ๋ ์ฌ์๋ ๊ฐ์์ ๋๋ค. ๊ธฐ๊ธฐ์ ๋ผ๋์ค๋ ๋ ์์ฃผ ์ ๋ค๊ณ , ๊ทธ๊ฒ ๋ฐฐํฐ๋ฆฌ ์ ๊ฐ์ ํต์ฌ์ ๋๋ค.
์ฌ์ฉ์์๊ฒ๋ ์๋ก์ด ๊ฒ์ด ๋ณด์ด์ง ์์ต๋๋ค. ํ๋ฉด์ ๋์ผํ์ง๋ง ๋ ๋นจ๋ฆฌ ๋ก๋๋๊ณ ๋ฐ์์ฑ์ด ์ข์์ง๋ฉฐ ์ฐ๊ฒฐ์ด ๋ถ์์ ํด๋ ๋ ์ ์๋ํฉ๋๋ค.
๋ค์ ๋จ๊ณ: ์ค์ฉ์ ์ธ ๋จ๊ณ๋ณ ๋กค์์ ๊ณํ(๊ทธ๋ฆฌ๊ณ AppMaster๊ฐ ๋์ธ ์ ์๋ ๋ถ๋ถ)
๋น ๋ฅธ ์ฑ๊ณผ๋ฅผ ์ํ๋ค๋ฉด ์๊ฒ ์์ํด ์ํฅ์ ์ฆ๋ช ํ์ธ์. ๋ฐฐํฐ๋ฆฌ ์ ๊ฐ์ ๋ณดํต ์์์ ๋ผ๋์ค ๊นจ์ฐ๊ธฐ์ ํ์ฑ ์์ ์ ์ค์ด๋ ๊ฒ์์ ๋์ค์ง, ๋๊ท๋ชจ ์ฌ์์ฑ์์ ๋์ค์ง ์์ต๋๋ค.
์์ ํ๊ณ ์ธก์ ๊ฐ๋ฅํ๋ฉฐ ๋๋๋ฆฌ๊ธฐ ์ฌ์ด ์ธ ๊ฐ์ง ๋ณ๊ฒฝ:
- ํ ํ๋ฉด์ ์ข ๋จ๊ฐ์ผ๋ก ์ธก์ (์์ฒญ ์, ์ด ๋ฐ์ดํธ, ์ํธ์์ฉ ๊ฐ๋ฅ ์๊ฐ, ์ค๋ฅ ๋ฐ ์ฌ์๋์จ)
- ๊ทธ ํ๋ฉด์ ์์ฒญ์ ํ๋ ๋๋ ๋ ๊ฐ์ ํธ์ถ๋ก ๋ฐฐ์น(ํธํ์ฑ์ ์ํด ๊ธฐ์กด ์๋ํฌ์ธํธ๋ ์ ์ง)
- ์ต๊ณ ํธ๋ํฝ GET ์๋ํฌ์ธํธ์
ETag์ง์ ์ถ๊ฐํด ํด๋ผ์ด์ธํธ๊ฐIf-None-Match๋ก304 Not Modified๋ฅผ ๋ฐ๊ฒ ํจ
์ฌ์ฉ๋์ด ์์ ์ ์ธ ๊ธฐ๋ฅ(์: ์ฃผ๋ฌธ ๋ชฉ๋ก ๋๋ ๋ฉ์์ง ์ธ๋ฐ์ค)์ ์ ํํ์ธ์. ๊ฐ๋ฅํ๋ฉด ์๋ฒ ์ฌ์ด๋ ํ๋๊ทธ๋ก ๋ฐฐํฌํ ๋ค ๋ฉฐ์น ๊ฐ ์ค๋๋ ๊ฒฝ๋ก์ ์ ๊ฒฝ๋ก์ KPI๋ฅผ ๋น๊ตํ์ธ์. ์ธ์ ๋น ์์ฒญ ์ ๊ฐ์, ์ฌ์๋ ๊ฐ์, ํ์ฑ ์ฌ์ฉ์๋น ๋ค์ด๋ก๋ ๋ฐ์ดํธ ๊ฐ์๋ฅผ ์ฐพ์ผ์ธ์.
API์ ์ฑ ๋ฆด๋ฆฌ์ค๋ฅผ ์กฐ์จํด ์ด์ ํด๋ผ์ด์ธํธ๊ฐ ๊นจ์ง์ง ์๊ฒ ํ์ธ์. ์ค์ฉ์ ๊ท์น: ๋จผ์ ์ ๋์์ ์ถ๊ฐํ๊ณ , ํด๋ผ์ด์ธํธ๋ฅผ ์ด์ฃผ์ํค๊ณ , ๋ง์ง๋ง์ ์ด์ ๋์์ ์ ๊ฑฐํ์ธ์. ์บ์ฑ ๋์์ ๋ฐ๊ฟ ๋๋ ๊ฐ์ธํ๋ ๋ฐ์ดํฐ์ ์ฃผ์ํ๊ณ ๊ณต์ ์บ์๊ฐ ์ฌ์ฉ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ง ์๋๋ก ํ์ธ์.
๋ฐฑ์๋ ๋ณ๊ฒฝ์ ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ดํํ๊ณ ๋ฐฐํฌํ๊ณ ์ถ๋ค๋ฉด AppMaster (appmaster.io)๋ฅผ ์ฌ์ฉํด๋ณด์ธ์. ์๊ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ๋งํ๊ณ ๋๋๊ทธ ์ค ๋๋กญ ์๋ํฐ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๋ง๋ค๋ฉฐ ์๊ตฌ์ฌํญ์ด ๋ฐ๋ ๋ ํ๋ก๋์ ์ฉ ์์ค์ฝ๋๋ฅผ ์ฌ์์ฑํ ์ ์์ต๋๋ค.
์ฐ์ ํ๋์ ๋ฐฐ์น๋ ์๋ํฌ์ธํธ์ ๊ทธ ์๋ํฌ์ธํธ์ ์ฃผ์ GET๋ค์ ETag๋ฅผ ์ถ๊ฐํด๋ณด์ธ์. ์์น๊ฐ ๊ฐ์ ๋๋ฉด ์ด๋์ ๋ ๊ณต์ ๋ค์ฌ์ผ ํ ์ง ์ ํํ ์ ์ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ข์ ์ถ๋ฐ์ ์ ํ๋ฉด๋ณ ์์ฐ์ ์ ํ๊ณ ์ค์ ์ธ์ ์ ์ธก์ ํ๋ ๊ฒ์ ๋๋ค. ๋ง์ ํ์ด ์ฒ์์๋ ์ ๋ฃฐ๋ฌ ํ๊ฒฝ์์ ์ฐจ๊ฐ์ด(์ฒ์) ํ๋ฉด ๋ก๋๋น 4โ8๊ฐ์ ์์ฒญ์ ๋ชฉํ๋ก ์ผ๊ณ , ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ค์ ์์ ํ ๋ค์ ๊ทธ ๋ฒ์๋ฅผ ๋ ์ขํ๋๋ค. ์ ๋ต์ ๋คํธ์ํฌ ์ฌ์๋๋ ์ฅ์๊ฐ ๋ผ๋์ค ํ์ฑํ๋ฅผ ์ ๋ฐํ์ง ์์ผ๋ฉด์ ์ผ๊ด๋๊ฒ ๋ชฉํํ๋ ์๊ฐ๋๋น ์ํธ์์ฉ ๊ฐ๋ฅ ์๊ฐ(time-to-interactive)์ ๋ง์กฑ์ํค๋ ์์น์ ๋๋ค.
์ฌ๋ฌ ํธ์ถ์ด ํญ์ ํจ๊ป ๋ฐ์ํ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐฐ์นญ์ด ๋์์ด ๋ฉ๋๋ค. ํ์ง๋ง ๋ฐฐ์น๊ฐ ๋๋ฌด ๋๋ฆฌ๊ฑฐ๋ ๊ฑฐ๋ํด์ ธ์ ๋ง์ ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ฉด ์คํ๋ ค ํด๋ก์ธ ์ ์์ต๋๋ค. ๋ฐฐ์น ์๋ต์ โํ๋ฉด ๋ชจ์(screen-shaped)โ์ผ๋ก ์ ํํ๊ณ ๋ฒ์๋ฅผ ๋ช ํํ ํ์ธ์. ๋ฐฐ์น ์๋ํฌ์ธํธ๊ฐ ์ ๊ธฐ์ ์ผ๋ก ํ์์์๋๊ฑฐ๋ ๋ง์ ์ฌ์ฉ๋์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค๋ฉด, ์์์ ์ง์ค๋ ํธ์ถ๋ก ๋ค์ ๋๋๋ ๊ฒ์ด ๋ซ์ต๋๋ค.
์ฐ์ ETag์ ์กฐ๊ฑด๋ถ ์์ฒญ(If-None-Match)์ผ๋ก ์์ํ์ธ์. ์ด๊ฒ์ ๋ง์ ์๋ก๊ณ ์นจ์ ์์ 304 Not Modified ์๋ต์ผ๋ก ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐํฐ๋ฆฌ ์ ๊ฐ ํจ๊ณผ๊ฐ ํฝ๋๋ค. ๋ํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๋น๋์ ๋ง์ถ Cache-Control์ ์ถ๊ฐํด ํด๋ผ์ด์ธํธ๊ฐ ๋ถํ์ํ ๋คํธ์ํฌ ์์
์ ํผํ๋๋ก ํ์ธ์. ETag ๊ตฌํ์ด ์ด๋ ต๋ค๋ฉด Last-Modified + If-Modified-Since๊ฐ โ์
๋ฐ์ดํธ๋ ์๊ฐโ ์คํ์ผ ๋ฆฌ์์ค์ ์ค์ฉ์ ์ธ ๋์์
๋๋ค.
์ปจํ
์ธ ๋ณ๊ฒฝ์ด ํ์์คํฌํ์ ์ ๋งคํ๋์ง ์๊ฑฐ๋ ์ ํํ ๋ฒ์ ์ฒดํฌ๊ฐ ํ์ํ๋ฉด ETag๋ฅผ ์ฌ์ฉํ์ธ์. ์๋ฒ์ ๋ช
ํํ ๊ฐฑ์ ์๊ฐ์ด ์๊ณ ํ์์คํฌํ ๋จ์์ ๊ทธ๋ ์ธ(granularity)์ด ๊ด์ฐฎ๋ค๋ฉด Last-Modified๋ฅผ ์ฌ์ฉํด๋ ๋ฉ๋๋ค. ํ๋๋ง ๊ตฌํํ ์ ์๋ค๋ฉด ๋ถํ์ํ ๋ค์ด๋ก๋๋ฅผ ๋ง๋ ๋ฐ์๋ ETag๊ฐ ๋ ์ ํํ ์ ํ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
API ๋ณ๊ฒฝ ์ ์ ํ๋ฉด๊ณผ ์ธ์ ๋จ์๋ก ๊ณ์ธกํ์ธ์. ์๋ํฌ์ธํธ๋ง ๋ณด์ง ๋ง๊ณ ์ค์ ํ๋ฉด์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ธก์ ํด์ผ ํฉ๋๋ค. ์์ฒญ ์, ๋ฐ์ดํธ(ํค๋ + ๋ฐ๋), ์ฌ์๋ ๋ฐ ํ์์์ ๋น์จ, ์ํธ์์ฉ ๊ฐ๋ฅ ์๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ ๊ฒฝ(ํฌ์ด๊ทธ๋ผ์ด๋) ํธ๋ํฝ๊ณผ ๋ฐฑ๊ทธ๋ผ์ด๋ ํธ๋ํฝ์ ๊ตฌ๋ถํด ๊ธฐ๋กํ์ธ์. ๋ณดํต ๋ฐ๋ณต์ ์ธ ๋ผ๋์ค ๊นจ์ฐ๊ธฐ๋ฅผ ์ ๋ฐํ๋ ๋ฌธ์ ๋ ๋ช๋ช ํ๋ฉด์ด๋ ํ๋ฆ์์ ์ง์ค์ ์ผ๋ก ๋ฐ์ํฉ๋๋ค.
๋ฐฐ์น ์๋ต์ ๊ฐ ํ์ ๊ฒฐ๊ณผ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ฑ๊ณตํ๊ฑฐ๋ ์คํจํ ์ ์๋๋ก ์ค๊ณํ๊ณ , ์คํจํ ํญ๋ชฉ๋ง ์ฌ์๋ํ ์ ์๋๋ก ์ถฉ๋ถํ ์ค๋ฅ ์์ธ๋ฅผ ํฌํจํ์ธ์. ํ๋์ ํ์ ๊ฒฐ๊ณผ ์คํจ ๋๋ฌธ์ ์ ์ฒด ๋ฐฐ์น๋ฅผ ๋ค์ ์์ฒญํ๊ฒ ๋ง๋ค์ง ๋ง์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ค๋ณต ํธ๋ํฝ์ ์ค์ด๊ณ ๋ถ์์ ํ ์ฐ๊ฒฐ์์ ๋ผ๋์ค ๊นจ์ฐ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
ํ๋ฉด์ด ์ง๊ธ ๋ ๋ํ๋ ๋ฐ์ดํฐ๋ง ๋จ๊ธฐ๊ณ ์๋ต์ ์ ๋ฆฌํ์ธ์. ๋ชฉ๋ก์๋ ์์ฝ ํํ(summary)๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฌด๊ฑฐ์ด ํ๋๋ ์์ฃผ ์ฌ์ฉ๋์ง ์๋ ํ๋๋ ํญ๋ชฉ์ ์ด ๋ ๋ถ๋ฌ์ค๋ ์์ธ ์๋ํฌ์ธํธ๋ก ์ฎ๊ธฐ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ก ๋ฐ์ดํธ๊ฐ ์ค๊ณ JSON ํ์ฑ๊ณผ ๋ชจ๋ธ ์ ๋ฐ์ดํธ ๋น์ฉ๋ ๋ด๋ ค๊ฐ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฑ์ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ํ์ด๋ก๋๋ฅผ ๋น ๋ฅด๊ฒ ์ค์ด๋ ๊ฐ์ฅ ์ค์ฉ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค.
์ง์์ ๋ฐฑ์คํ์ ์งํฐ(jitter)๋ฅผ ์ฌ์ฉํ๊ณ ์ ์ฒด ์ฌ์๋ ์ฐฝ์ ์ ํํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ๊ธฐ๊ฐ ๋ช ์ด๋ง๋ค ๊นจ์ด๋์ง ์์ต๋๋ค. ์ฐ๊ธฐ ์์ ์ ๋ฉฑ๋ฑ์ฑ(idempotent)์ ๊ณ ๋ คํด ์ฌ์๋๊ฐ ์ค๋ณต ์์ฑ์ด๋ ์ค๋ณต ์ฒญ๊ตฌ๋ฅผ ์ผ์ผํค์ง ์๋๋ก ํ์ธ์. ๋ํ ์๋ฒ๊ฐ ๋ช ํํ ์ํ ์ฝ๋๋ฅผ ๋ฐํํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๋ ์ด์ ์ฌ์๋ํ ํ์๊ฐ ์๋ ์ํฉ์ ํ๋จํ ์ ์์ต๋๋ค.
๋น๋ฒํ ํด๋ง์ ์๋ฌด ๋ณํ๊ฐ ์์ด๋ ๋ผ๋์ค์ CPU๋ฅผ ๋ฐ์๊ฒ ์ ์งํฉ๋๋ค. ํด๋ง์ด ํ์ํ๋ค๋ฉด ๋ณํ๊ฐ ์์ ๋ ๊ฐ๊ฒฉ์ ๋๋ฆฌ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ํด๋ง์ ์ค๋จํ์ธ์. ๊ฐ๋ฅํ๋ฉด ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ ๋ฐ์ดํธ๋ก ์ ํํด ์๋ก์ด ๋ด์ฉ์ด ์์ ๋๋ง ์ฑ์ ๊นจ์ฐ๋๋ก ํ์ธ์.
AppMaster์์๋ ํ๋ฉด ์ค์ฌ ์๋ํฌ์ธํธ๋ฅผ ๋ง๋ค๊ณ ์๋ต ์คํค๋ง๋ฅผ ์ผ๊ด๋๊ฒ ์ ์งํ ์ ์์ด ๋ฐฐ์นญ๊ณผ ํ์ด๋ก๋ ์กฐ์ ์ด ์ฌ์์ง๋๋ค. ๋ํ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ง์ํ๋ ํค๋๋ฅผ ๋ฐํํ๋ ๋ฒ์ ๊ด๋ฆฌ ๋ก์ง์ ์ถ๊ฐํด ํด๋ผ์ด์ธํธ๊ฐ ๋น ๋ฅธ โ๋ณ๊ฒฝ ์์โ ์๋ต์ ๋ฐ๋๋ก ๋์ธ ์ ์์ต๋๋ค. ์ค์ฉ์ ์ธ ์ ๊ทผ๋ฒ์ ํธ๋ํฝ์ด ๋ง์ ํ ํ๋ฉด์์ ๋ฐฐ์นญ๋ ์๋ํฌ์ธํธ์ ETag ์ง์์ ๋จผ์ ๋์
ํด ์์ฒญ๊ณผ ์ฌ์๋๊ฐ ์ผ๋ง๋ ์ค์ด๋๋์ง ์ธก์ ํ๋ ๊ฒ์
๋๋ค.


