Skip to main content

๋ฐ”ํ€ด ๋Œ€์‹  ๋กœ์ผ“ ๋งŒ๋“ค๊ธฐ

FEConf2025๋…„ 1์›” 15์ผAbout 2 minNode.jsReact.jsDesignSystemArticle(s)blogyozm.wishket.comnodenodejsnode-jsreactreactjsreact-jsdesignsystem

๋ฐ”ํ€ด ๋Œ€์‹  ๋กœ์ผ“ ๋งŒ๋“ค๊ธฐ ๊ด€๋ จ

React.js > Article(s)

Article(s)
System Design > Article(s)

Article(s)

๋ฐ”ํ€ด ๋Œ€์‹  ๋กœ์ผ“ ๋งŒ๋“ค๊ธฐ (1)
ํ† ์Šค ํŽ˜์ด๋จผ์ธ ๊ฐ€ ์ฒ˜์Œ ๋ฒ•์ธ์„ ์„ค๋ฆฝํ•œ ๋‹น์‹œ์—๋Š” ์‹œ์žฅ์„ ํ˜์‹ ํ•ด๋ณด์ž๋ผ๋Š” ์ž์‹ ๊ฐ์ด ๋„˜์ณค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์œ ์‚ฐ ์†์— ์กด์žฌํ•˜๋Š” ๋‹ค์–‘ํ•˜๊ณ  ๋ฐฉ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์„œ๋น„์Šค๋“ค์ด ์„ฑ์žฅ์— ๋Œ€ํ•œ ๋ฐœ๋ชฉ์„ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JSP, EUC-KR ๋“ฑ ์ƒ์†Œํ•œ ๊ฒƒ๋“ค์ด ์ด๊ณณ์ €๊ณณ ์ง€๋ขฐ์ฒ˜๋Ÿผ ์กด์žฌํ•˜๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๋ฐœ์ „์„ ๋ง‰๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 24๋…„ ์ƒ๋ฐ˜๊ธฐ์—๋Š” ์ด ๋ ˆ๊ฑฐ์‹œ๋“ค์„ ๊ผญ ์ฒญ์‚ฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๊ฒฌ์ด ๊ธ‰๋ถ€์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌด๋ ค 400๊ฐœ๊ฐ€ ๋„˜๋Š” ์–ด๋“œ๋ฏผ ํ™”๋ฉด์ด ๋ ˆ๊ฑฐ์‹œ๋กœ ์กด์žฌํ•˜๊ณ , 6๊ฐœ์›” ๋‚ด์— ํŒ€์—์„œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€๊ณผ ํ˜•ํƒœ๋กœ ์ด๊ด€ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ์–ด์ง„ 6๊ฐœ์›”์€ ์งง์€ ์‹œ๊ฐ„์ด์—ˆ๊ณ , ํ• ๋‹น๋œ FE ๊ฐœ๋ฐœ์ž๋Š” 4๋ช…์ด ์ „๋ถ€์˜€์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒฝํ—˜ํ•˜๋ฉฐ ์–ป์€ ๊ฒƒ๋“ค์„ ๋“ค๋ ค๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

;:: info

FEConf2024์—์„œ ๋ฐœํ‘œํ•œ <๋ฐ”ํ€ด ๋Œ€์‹  ๋กœ์ผ“ ๋งŒ๋“ค๊ธฐ>๋ฅผ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋ฐœํ‘œ ๋‚ด์šฉ์„ 2ํšŒ๋กœ ๋‚˜๋ˆ„์–ด ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. 1ํšŒ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง๋ฉดํ•˜๋Š” โ€˜๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…โ€™ ๋ณ‘๋ชฉ ํ˜„์ƒ๊ณผ ๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. 2ํšŒ์—์„œ๋Š” โ€˜๋ฐฑ์—”๋“œ APIโ€™, โ€˜์š”๊ตฌ ์‚ฌํ•ญโ€™ ๋ณ‘๋ชฉ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์— ์‚ฝ์ž…๋œ ์ด๋ฏธ์ง€์˜ ์ถœ์ฒ˜๋Š” ๋ชจ๋‘ ์ด ์ฝ˜ํ…์ธ ์™€ ๊ฐ™์€ ์ œ๋ชฉ์˜ ๋ฐœํ‘œ ์ž๋ฃŒ๋กœ, ๋”ฐ๋กœ ์ถœ์ฒ˜๋ฅผ ํ‘œ๊ธฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

:::

์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” โ€˜๋ฐ”ํ€ด ๋Œ€์‹  ๋กœ์ผ“ ๋งŒ๋“ค๊ธฐโ€™๋ผ๋Š” ์ œ๋ชฉ์˜ ๋ฐœํ‘œ๋ฅผ ์ง„ํ–‰ํ•  ์–‘์˜ํ˜„์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ฃผ๋กœ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํ˜‘์—…, ์˜๊ฐ์„ ์ฃผ๋Š” ํ™œ๋™์— ๊ด€์‹ฌ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ† ์Šค ํŽ˜์ด๋จผ์ธ ๋ผ๋Š” ํšŒ์‚ฌ์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์ผํ•˜๋ฉฐ, ์–ด๋“œ๋ฏผ ํ”„๋กœ๋•ํŠธ ํŒ€์—์„œ ์–ด๋“œ๋ฏผ ์ œํ’ˆ์„ ์ฃผ๋กœ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ด ํŒ€์—์„œ ๊ฒฝํ—˜ํ•˜๋ฉฐ ์–ป์€ ๊ฒƒ๋“ค์„ ์ด๋ฒˆ ๋ฐœํ‘œ๋ฅผ ํ†ตํ•ด ๋“ค๋ ค๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


๋ ˆ๊ฑฐ์‹œ ์ฒญ์‚ฐ

ํ† ์Šค ํŽ˜์ด๋จผ์ธ ๊ฐ€ ์งŠ์–ด์ง„ ์œ ์‚ฐ

๋ณธ๊ฒฉ์ ์ธ ์„ค๋ช…์— ์•ž์„œ ๋ฐฐ๊ฒฝ ์„ค๋ช…์„ ๋จผ์ € ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ† ์Šค ํŽ˜์ด๋จผ์ธ ๋ผ๋Š” ํšŒ์‚ฌ๋Š” 5๋…„ ์ •๋„ ๋œ ์‹ ์ƒ ๊ธฐ์—…์ด์ง€๋งŒ, ์‚ฌ์‹ค ๋ฐ์ด์ฝค์ด๋ผ๋Š” ํšŒ์‚ฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด LG U+ PG๋ผ๋Š” ํšŒ์‚ฌ๋ฅผ ๊ฑฐ์ณ, PG ์—…๊ณ„์—์„œ 30๋…„ ๋„˜๊ฒŒ ๊ฒฝํ—˜์„ ์Œ“์•„์˜จ ํšŒ์‚ฌ์ž…๋‹ˆ๋‹ค. ์Šคํƒ€ํŠธ์—…์ด์ง€๋งŒ ๊ฝค๋‚˜ ๊ธด ๊ธฐ๊ฐ„ ๋™์•ˆ ์—…์„ ์ด์–ด์˜ค๋ฉด์„œ ๋งŽ์€ ์œ ์‚ฐ์„ ์ƒ์†๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

ํ† ์Šค ํŽ˜์ด๋จผ์ธ ๊ฐ€ ์ฒ˜์Œ ๋ฒ•์ธ์„ ์„ค๋ฆฝํ•œ ๋‹น์‹œ์—๋Š” ์‹œ์žฅ์„ ํ˜์‹ ํ•ด๋ณด์ž๋ผ๋Š” ์ž์‹ ๊ฐ์ด ๋„˜์ณค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์œ ์‚ฐ ์†์— ์กด์žฌํ•˜๋Š” ๋‹ค์–‘ํ•˜๊ณ  ๋ฐฉ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์„œ๋น„์Šค๋“ค์ด ์„ฑ์žฅ์— ๋Œ€ํ•œ ๋ฐœ๋ชฉ์„ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JSP, EUC-KR ๋“ฑ ์ƒ์†Œํ•œ ๊ฒƒ๋“ค์ด ์ด๊ณณ์ €๊ณณ ์ง€๋ขฐ์ฒ˜๋Ÿผ ์กด์žฌํ•˜๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๋ฐœ์ „์„ ๋ง‰๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํšŒ์‚ฌ ์ „์‚ฌ ์ฐจ์›์—์„œ๋„ ์ด ๋ฌธ์ œ๋ฅผ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉฐ, 24๋…„ ์ƒ๋ฐ˜๊ธฐ์—๋Š” ํŠนํžˆ ์ด ๋ ˆ๊ฑฐ์‹œ๋“ค์„ ๊ผญ ์ฒญ์‚ฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๊ฒฌ์ด ๊ธ‰๋ถ€์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ œ๊ฐ€ ์†ํ•œ ํŒ€์—์„œ๋„ ๋ ˆ๊ฑฐ์‹œ ์ฒญ์‚ฐ ์—…๋ฌด๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์•„์กŒ์Šต๋‹ˆ๋‹ค.

๋ฌด๋ ค 400๊ฐœ๊ฐ€ ๋„˜๋Š” ์–ด๋“œ๋ฏผ ํ™”๋ฉด์ด ๋ ˆ๊ฑฐ์‹œ๋กœ ์กด์žฌํ•˜๊ณ , 6๊ฐœ์›” ๋‚ด์— ํŒ€์—์„œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€๊ณผ ํ˜•ํƒœ๋กœ ์ด๊ด€ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ์–ด์ง„ 6๊ฐœ์›”์€ ์งง์€ ์‹œ๊ฐ„์ด์—ˆ๊ณ , ํ• ๋‹น๋œ FE ๊ฐœ๋ฐœ์ž๋Š” 4๋ช…์ด ์ „๋ถ€์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹จ์ˆœํžˆ ์ด๊ด€ํ•˜๊ณ  ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์ œํ’ˆ์ด โ€˜10๋…„ ์ด์ƒ ์ง€์† ๊ฐ€๋Šฅํ•œ ์ œํ’ˆ์ด ๋˜๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹คโ€™๋Š” ๋ชฉํ‘œ๊ฐ€ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋‹ด๊ฐ๋„ ์ปธ์Šต๋‹ˆ๋‹ค.

์žฅ์• ๋ฌผ

์ฒ˜์Œ์—๋Š” ํ•œ์ •์ ์ธ ๋ฆฌ์†Œ์Šค์™€ ๋†’์€ ๋ชฉํ‘œ๋กœ ์ธํ•ด โ€˜๋ถˆ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„๊นŒ?โ€™๋ผ๋Š” ์ƒ๊ฐ์ด ๋งŽ์ด ๋“ค๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์žฅ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๊ธฐ์—๋„ ์—ฌ๋Ÿฌ ์žฅ์• ๋ฌผ๋“ค์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœํ•˜๋Š” ๋„์ค‘ ํ˜‘์—…์„ ์œ„ํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๊ณผ์ •์œผ๋กœ ๊ฐœ๋ฐœ ์†๋„๋Š” ์ ์  ๋А๋ ค์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ๊ฐœ๋ฐœํ•ด์•ผ ํ•˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ์–‘๋„ ๊ต‰์žฅํžˆ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ด ๋๋‚˜๋”๋ผ๋„ ์œ ์ง€ ๋ณด์ˆ˜์— ๋“ค์–ด๊ฐˆ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์žฅ์• ๋ฌผ๋“ค๊ณผ ๋”๋ถˆ์–ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ๊ฐœ๋ฐœ์„ ๋ง‰๋Š” ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋จผ์ € ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ๊ฐ–์ถฐ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…
  2. ์„œ๋ฒ„ API
  3. ์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜จ์ „ํžˆ ์—…๋ฌด๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด  ์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…๋„ ์ค€๋น„๋˜์–ด์•ผ ํ•˜๊ณ , ์„œ๋ฒ„ API๋„ ๊ฐœ๋ฐœ๋˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์งง์€ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„์—๋„ ์ด๋Ÿฐ ๋ณ‘๋ชฉ๋“ค๋กœ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋‹น์žฅ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„ 3๊ฐ€์ง€๊ฐ€ ์ถฉ์กฑ๋˜์–ด์•ผ ๊ฐœ๋ฐœ ์ถœ๋ฐœ์ ์— ์„ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์™„๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ ๊ฐ€๋งŒํžˆ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ๋Š” ์ ˆ๋Œ€ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.


์ผํ•˜๋Š” ๋ฐฉ์‹์„ ๋ฐ”๊ฟ”๋ณด์ž

๊ฒฐ๊ตญ โ€˜์ด๋Ÿฐ ์žฅ์• ๋ฌผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ผํ•˜๋Š” ๋ฐฉ์‹ ์ž์ฒด๋ฅผ ๋ฐ”๊ฟ”๋ณผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒโ€™๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผํ•˜๋Š” ๋ฐฉ์‹์„ ๋ฐ”๊พผ๋‹ค๋ฉด ๋ณ‘๋ชฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ฒ—์–ด๋‚˜ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ์ผํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

1. โ€˜๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…โ€™์— ์˜ํ•œ ๋ณ‘๋ชฉ

๋จผ์ € 3๊ฐ€์ง€ ๋ณ‘๋ชฉ ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋ณ‘๋ชฉ, ๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…์„ ์—†์• ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋””์ž์ด๋„ˆ๋“ค์—๊ฒŒ โ€˜6๊ฐœ์›” ๋™์•ˆ 400๊ฐœ ํ™”๋ฉด์— ๋Œ€ํ•ด ์ตœ์ ํ™”๋œ ์œ ์ € ๊ฒฝํ—˜์„ ๊ณ ๋ คํ•œ ๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”โ€™๋ผ๋Š” ์š”์ฒญ์„ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ• ๊นŒ์š”? ์ง์ ‘ ํ‘œํ˜„์€ ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์†์œผ๋ก  ์ด ํšŒ์‚ฌ๋ฅผ ๋– ๋‚˜์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋Ÿฐ ๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž… ์ž์ฒด๊ฐ€ ์šฐ๋ฆฌ์—๊ฒ ๋ณ‘๋ชฉ์ด๊ณ , ์—…๋ฌด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ง„ํ–‰ํ•˜๋ ค๋ฉด ์ด ๋ณ‘๋ชฉ์ด ์—†์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋งŽ์€ ํšŒ์‚ฌ์—์„œ๋„ ์ด๋Ÿฐ ๋ณ‘๋ชฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ๋„์ž…ํ•˜๊ณ  ์žˆ์„ ๊ฑฐ๋ผ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ํ† ์Šค๋Š” โ€˜ํ† ์Šค ๋””์ž์ธ ์‹œ์Šคํ…œโ€™์ด๋ผ๋Š” ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•ด์„œ ์ด๋ฏธ ๋งŽ์€ ๋””์ž์ธ ์ž‘์—…์— ๋Œ€ํ•œ ๋ณ‘๋ชฉ์„ ์ค„์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋””์ž์ธ ์‹œ์Šคํ…œ์€ ํ† ์Šค ๋‚ด ๋ชจ๋“  ๊ณ„์—ด์‚ฌ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ , ๊ณ„์—ด์‚ฌ๋“ค์˜ ๋ชจ๋“  ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋””์ž์ธ ์‹œ์Šคํ…œ๋„ ๊ฒฐ๊ตญ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋””์ž์ธ ์‹œ์Šคํ…œ

๋””์ž์ธ ์‹œ์Šคํ…œ ์ž์ฒด๋Š” ๊ต‰์žฅํžˆ ๋งŽ์€ ์žฅ์ ์„ ๊ฐ€์ง„ ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ† ์Šค ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ธฐ์ค€์œผ๋กœ ๋ณด๋ฉด, ์‹œ์Šคํ…œ์€ ์•„ํ† ๋ฏนํ•œ ํ˜•ํƒœ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•ด์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์ด ์‰ฌ์šด ๋„๊ตฌ๋ผ๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์ž์ฃผ ์ƒ๊ธฐ๊ณ , ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. ๋˜, ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๊ตฌํ˜„ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋Š” ๋น„ํšจ์œจ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

ํ† ์Šค ํŽ˜์ด๋จผ์ธ  ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ

์ด๋Ÿฌํ•œ ๋น„ํšจ์œจ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋””์ž์ด๋„ˆ๋ถ„๋“ค๊ณผ ํ•จ๊ป˜ ํ† ์Šค ํŽ˜์ด๋จผ์ธ ์—์„œ ์‚ฌ์šฉํ•  ๋ณ„๋„์˜ ๊ฐœ๋…์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜จ์ „ํžˆ ํ† ์Šค ํŽ˜์ด๋จผ์ธ  ์‹œ์Šคํ…œ์— ํฌ์ปค์Šค๋ฅผ ๋งž์ถฐ ์ตœ์ ํ™”๋œ ํŒจํ„ด์„ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ผ ๊ตฌํ˜„์ฒด๋กœ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ์œผ๋กœ ๋™์ผํ•œ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ๋Š” ๋™์ผํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ฐœ๋ณ„ ๊ตฌํ˜„์„ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ์‡„์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š” ํŒจํ„ด๊ณผ ๋งž์ง€ ์•Š๋Š” ์‚ฌ์šฉ์„ ์›์ฒœ์ ์œผ๋กœ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜, ๋‹จ์ˆœํžˆ ์•„ํ† ๋ฏนํ•œ ๋‹จ์œ„์—์„œ ๋ฒ—์–ด๋‚˜์„œ, ์•„์ฃผ ์ž‘์€ ์˜์—ญ๋ถ€ํ„ฐ ์Šคํฌ๋ฆฐ์ด๋ผ๋Š” ๊ฐ€์žฅ ํฐ ์˜์—ญ๊นŒ์ง€ ๋„“์€ ์˜์—ญ์— ๋Œ€์‘ํ•˜๋„๋ก ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ์žฅ์ ์ด ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ์˜ ๋‹จ์ ์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€์ ์œผ๋กœ ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ ธ์„œ ์žฌ์‚ฌ์šฉ์ด ํž˜๋“ค์–ด์ง€๊ณ , ๊ธฐ๋Šฅ์ด ํ•œ์ •์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋‹จ์ ์ด ์ œํ’ˆ์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์น˜๋ช…์ ์ด์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋””์ž์ธ ์‹œ์Šคํ…œ(Design System) vs. ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ(Product System)

์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๋Š” DateRangePicker๋ฅผ ๊ฐ๊ฐ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™ผ์ชฝ ๊ทธ๋ฆผ์ด ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๊ตฌํ˜„ ๊ฒฐ๊ณผ์ด๊ณ , ์˜ค๋ฅธ์ชฝ์€ ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ์˜ ๊ตฌํ˜„ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๋””์ž์ธ ์‹œ์Šคํ…œ์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณด๋ฉด ๊ต‰์žฅํžˆ ์žฅํ™ฉํ•˜๊ณ  ์˜๋„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์–ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ์€ ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•˜๊ณ , ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„๋˜์–ด ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์˜ˆ์‹œ๋„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์…€๋ ‰ํŠธ ๋ฐ•์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์‚ฌ๋žŒ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์‰ฝ๊ฒŒ ์ƒ๊น๋‹ˆ๋‹ค. ์–ด๋–ค ์‚ฌ๋žŒ์€ ์˜ต์…˜์„ props๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ์–ด๋–ค ์‚ฌ๋žŒ์€ ํ•ฉ์„ฑ์œผ๋กœ ์˜ต์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ ๊ฐœ์ธ์˜ ์ทจํ–ฅ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋‹ต์€ ์—†์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๋‹ค๋Š” ์ž์ฒด๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‹จ์ผ ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์—ฌ๋Ÿฌ ๋ช…์˜ ์‚ฌ๋žŒ์ด ๊ตฌํ˜„์„ ํ•˜๋”๋ผ๋„ ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์ง€ ์•Š๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ผ๊ด€์„ฑ ์žˆ๊ณ  ๊ฐ„๊ฒฐํ•œ ๋‹จ์ผ ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌํ˜„์ฒด๋“ค์„ ๋งŒ๋“ค์–ด๋‚ผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ์กฐํ•ฉ

๋‹ค์Œ์œผ๋กœ๋Š” ๋” ์ž์„ธํžˆ ๋“ค์–ด๊ฐ€, ๋‹ค์ค‘ ์ปดํฌ๋„ŒํŠธ ์กฐํ•ฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋””์ž์ธ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ปค๋ฒ„ํ•˜์ง€ ์•Š๋Š” ๋‹ค์ค‘ ์ปดํฌ๋„ŒํŠธ ์กฐํ•ฉ์„ ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ž์œ ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์นฉ๊ณผ ์…€๋ ‰ํŠธ๋ฅผ ์กฐํ•ฉํ•œ ์นฉํ•„ํ„ฐ๋ผ๋Š” ๊ฐœ๋…์„ ๋งŒ๋“ค๊ณ  ์ด๊ฒƒ์— ๋Œ€ํ•œ ํŒจํ„ด์„ ์ •์˜ํ•˜๋ฉด, ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„์ฒด๋กœ์จ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ •์˜๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์‚ฐ์„ฑ์ด ์˜ฌ๋ผ๊ฐˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” react-hook-form์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์‹œ์Šคํ…œ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด react-hook-form๊ณผ ํ† ์Šค์˜ UI ์š”์†Œ๋“ค์„ ๊ฒฐํ•ฉํ•ด ์ฝ”๋“œ์˜ ๊ตฐ๋”๋”๊ธฐ๋“ค์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ์ง€๋ณด์ˆ˜์˜ ์–ด๋ ค์›€

์—ฌ๋Ÿฌ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ ์—†์ด ๊ฐ๊ฐ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋ฉด ์ฒœ์ฐจ๋งŒ๋ณ„ ๋‹ค๋ฅธ ๋ชจ์Šต์ด ๋‚˜์˜ค๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํ™”๋ฉด์ด 400๊ฐœ ์ด์ƒ์ด๋‚˜ ์žˆ๋‹ค๋ฉด, ์œ ์ง€ ๋ณด์ˆ˜๋Š” ๋‹น์—ฐํžˆ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ™”๋ฉด์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ง๊ด€์ ์œผ๋กœ ์•Œ๊ธฐ ์–ด๋ ต๊ณ , ์˜์—ญ ๋ถ„๋ฆฌ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋А ๋ถ€๋ถ„์„ ๋ณด๊ณ  ์›์ธ์„ ํŒŒ์•…ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ต๊ณ  ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ํ™”๋ฉด์˜ ๊ณตํ†ต ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ˆ˜์ •ํ•˜๊ณ  ๋ฐ˜์˜ํ•  ๋•Œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์ˆ˜์ •์ด ๋ฐ˜๋ณต๋˜๋Š” ๋ถˆํŽธํ•จ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์ƒˆ๋กœ ๋งŒ๋“  ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ์— ๋‹จ์ˆœํžˆ ์•„ํ† ๋ฏนํ•œ ์ปดํฌ๋„ŒํŠธ๋ผ๋Š” ํ‹€์—์„œ ๋ฒ—์–ด๋‚˜ ๋‹ค์–‘ํ•œ ๋ ˆ์ด์–ด๋กœ ๊ตฌ์„ฑ๋œ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์„น์…˜์ด๋‚˜ ์Šคํฌ๋ฆฐ๊ณผ ๊ฐ™์€ ๋„“์€ ๋‹จ์œ„์˜ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๊ฐ€์ง„ ํŒจํ„ด์„ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ž์ฃผ ๋ฐ˜๋ณต๋˜๋Š” ํŒจํ„ด์ด ์žˆ๋‹ค๋ฉด ์ด ํŒจํ„ด์— ์ตœ์ ํ™”๋œ ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๊ฐ€๋ณ๊ฒŒ ํ›‘์–ด๋ณด๊ธฐ๋งŒ ํ•ด๋„ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ธ์ง€ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ” ๋ชฉ๋ก์„ ๊ทธ๋ฆด ๋•Œ ์•„๋ž˜ ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ง„ํ™” : ํ† ์ŠคํŽ˜์ด๋จผ์ธ  ํ”„๋กœ๋•ํŠธ ์‹œ์Šคํ…œ

๋‚ด์šฉ์„ ์š”์•ฝํ•˜๋ฉด, ๊ธฐ์กด ๋””์ž์ธ ์‹œ์Šคํ…œ์—์„œ ๋ฒ—์–ด๋‚˜ ๊ตฌ์ฒด์ ์ธ ๋งฅ๋ฝ์ด ๋“ค์–ด๊ฐ€๋”๋ผ๋„ ์•„ํ† ๋ฏนํ•œ ๊ตฌ์กฐ๋ฅผ ๋ฒ—์–ด๋‚˜์„œ ๋ฐ˜๋ณต ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์€ ํ˜•ํƒœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์ƒํ™ฉ์ด ์—†๋„๋ก ๋ฐฉ์ง€ํ–ˆ๊ณ , ๋ช…ํ™•ํ•œ ์—ญํ• ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•ด์„œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒจํ„ด์„ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋””์ž์ด๋„ˆ์˜ ๋„์›€ ์—†์ด ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€, ๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•œ ์˜์กด์„ฑ์—์„œ ๋ฒ—์–ด๋‚˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ์˜ํ•œ ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.


2. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ์˜ํ•œ ๋ณ‘๋ชฉ

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐฑ์—”๋“œ API๊ฐ€ ์ค€๋น„๋˜์–ด์•ผ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋ฐฑ์—”๋“œ API๊ฐ€ ์™„์„ฑ๋˜์–ด์•ผ๋งŒ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ๊ทธ๋ ‡์ง€๋Š” ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ๋Š” ์‹ค์ œ๋กœ ์„œ๋ฒ„ API๊ฐ€ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์„ ํ–ˆ๋Š”์ง€ ์‚ฌ์‹ค ๋ณด๋‹ค๋Š”, ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์š”์ฒญํ•  HTTP ์š”์ฒญ์˜ ์—”๋“œ ํฌ์ธํŠธ์™€ ๋ฆฌํ€˜์ŠคํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ, ์‘๋‹ต ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํŒ€์€ ์ด๋ฏธ ์ด๋Ÿฐ ํ˜‘์—…์„ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ •์˜ ๋ฌธ์„œ์ธ API ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์ด ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ŠคํŽ™ ๋ฌธ์„œ๋งŒ์œผ๋กœ๋Š” ์กฐ๊ธˆ ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉฐ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์— ๋น„ํšจ์œจ์ด ๋งŽ์ด ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋‹จ๊ณ„์—๋Š” ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ , ์ŠคํŽ™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , Data Fetcher๋ฅผ ํ†ตํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๋Ÿฌ๋ฉด ํ˜ธ์ถœํ•œ ๋ฐ์ดํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ์ŠคํŽ™ ์ˆ˜์ •์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ๊ณ , ์ŠคํŽ™ ์ˆ˜์ •์ด ๋๋‚œ๋‹ค ํ•ด๋„ ๊ณผ์ •์„ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋Ÿฐ ๋น„ํšจ์œจ์ ์ธ ๊ณผ์ •์„ ์ค„์ด๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

OpenAPI Code Generator

์•ž์„œ ์„ค๋ช…ํ•œ ๋น„ํšจ์œจ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ OpenAPI Code Generator์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ™œ์šฉํ•  ๋งŒํ•œ ๋„๊ตฌ๋“ค์€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ ์•„๋ž˜์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. API ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ ์—†์ด ์ŠคํŽ™ ์ •๋ณด๋งŒ ์ž๋™ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  2. zod๋กœ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์‘๋‹ต ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํŒŒ์‹ฑ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  3. ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ปค์Šคํ…€ transform ์กฐ๊ฑด์„ ์‰ฝ๊ฒŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  4. ๋ณ„๋„์˜ ํ•™์Šต ๋น„์šฉ ์—†์ด ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, zero config๋กœ๋„ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

์•„์‰ฝ๊ฒŒ๋„ ์ด ์š”๊ตฌ์‚ฌํ•ญ์„ 100% ๋งŒ์กฑํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค๋Š” ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๋„๊ตฌ๋ฅผ ๊นŠ์ด ๋ถ„์„ํ•˜๊ธฐ ๋ณด๋‹ค, ์š”๊ตฌ์‚ฌํ•ญ์„ ์™„์ „ํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง์ ‘ ๋งŒ๋“ค์ž๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋‚˜๋Š” ๋ณ‘๋ชฉ์— ๋Œ€ํ•œ ๋‚ด์šฉ๊ณผ โ€˜๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•œ ๋ณ‘๋ชฉโ€™๊ณผ ์ด๋ฅผ ํ•ด๊ฒฐํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. โ€˜์„œ๋ฒ„ API์— ๋Œ€ํ•œ ๋ณ‘๋ชฉโ€™ ์—ญ์‹œ ๋ฌธ์ œ์ ๊นŒ์ง€ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ธ€์—์„œ๋Š” Codegen์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด ์„œ๋ฒ„ API์— ๋Œ€ํ•œ ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•๊ณผ ๋งˆ์ง€๋ง‰ ๋ณ‘๋ชฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ”ํ€ด ๋Œ€์‹  ๋กœ์ผ“ ๋งŒ๋“ค๊ธฐ (2)
๊ฐœ๋ฐœ์ž๊ฐ€ ์ง๋ฉดํ•˜๋Š” โ€˜๋ฐฑ์—”๋“œ APIโ€™, ๊ทธ๋ฆฌ๊ณ  โ€˜๋น„ํšจ์œจโ€™์ด๋ž€ ๋ณ‘๋ชฉ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•œ ๋•์— ์‹œ์ž‘ํ•  ๋•Œ๋Š” 6๊ฐœ์›” ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์น˜๊ธฐ ํž˜๋“ค ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” 2๋‹ฌ ๋ฐ–์— ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 4๊ฐœ์˜ ์–ด๋“œ๋ฏผ๊ณผ 400ํŽ˜์ด์ง€ ์ด์ƒ์˜ ๋ฉ”๋‰ด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฐ์ฐจ ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์ˆ˜์ค€์˜ ํ’ˆ์งˆ์„ ๊ฐ€์ง„ ์ฝ”๋“œ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•˜๋ฃจ ์ •๋„ ๊ฑธ๋ฆฌ๋˜ ์ž‘์—…์„ ํ•œ ์‹œ๊ฐ„์œผ๋กœ ์ค„์ธ ๊ฒฝํ—˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋“ค ๋ชจ๋‘ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฝ๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋น„ํšจ์œจ ์ œ๊ฑฐ ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ์œ ์˜๋ฏธํ•œ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์™”์„๊นŒ์š”?

์ด์ „ ๊ธ€์—์„œ๋Š” ํ† ์ŠคํŽ˜์ด๋จผ์ธ  ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ˆ๊ฑฐ์‹œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋‹ค ๋งŒ๋‚œ ๋ณ‘๋ชฉ, ๊ทธ ๊ฐ€์šด๋ฐ โ€˜๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•œ ๋ณ‘๋ชฉโ€™๊ณผ ์ด๋ฅผ ํ•ด๊ฒฐํ•œ ๋‚ด์šฉ, ๋‚˜์•„๊ฐ€ โ€˜์„œ๋ฒ„ API ๋ณ‘๋ชฉโ€™ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž Codegen์„ ๊ตฌํ˜„ํ•œ ๋ฐฉ๋ฒ•๊ณผ ๋งˆ์ง€๋ง‰ ๋ณ‘๋ชฉ์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


ํ† ์Šค ํŽ˜์ด๋จผ์ธ  codegen

์„œ๋ฒ„ API ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ฐ€ โ€˜์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ฒ ๋‹คโ€™๊ณ  ๋งํ–ˆ๋˜ OpenAPI Code Generator๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. JSON ์Šคํ‚ค๋งˆ๋ฅผ ์›ํ•˜๋Š” ํ˜•์‹ ๋Œ€๋กœ ๋‹ค๋“ฌ๊ธฐ
  2. ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ, zod ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ
  3. ํŒŒ์ผ๋กœ ์“ฐ๊ธฐ

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ ค๋Š” Codegen์—๋Š” ๋ฆฌ์†Œ์Šค(Resource)๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ฆฌ์†Œ์Šค๋ž€ ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ API ๋ช…์„ธ์˜ ๊ฐ์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค๋กœ ์ŠคํŽ™์„ ๊ด€๋ฆฌํ•˜๋„๋ก ๊ณ„ํšํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด API์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ ๊ณณ๊ณณ์— ํผ์ง€๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•„์š”์— ๋”ฐ๋ผ์„œ ๋ฆฌ์†Œ์Šค์— ์ •์˜ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์Šคํ‚ค๋งˆ ํŒŒ์„œ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ์ •ํ•ฉ์„ฑ์„ ํ™•์ธํ•˜๋„๋ก ํ–ˆ์œผ๋ฉฐ, ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋„๊ตฌ, ๊ทธ๋ฆฌ๊ณ  ๋„๊ตฌ๋ฅผ ๋งŒ๋“œ๋Š” ์˜ˆ์‹œ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ƒํƒœ๊ณ„์— ๊ต‰์žฅํžˆ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋งŒํผ ๋ˆ„๊ตฌ๋‚˜ ๋„๊ตฌ๋“ค์„ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒํ•˜์—ฌ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์Šค์›จ๊ฑฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์Šค์›จ๊ฑฐ ํŒŒ์„œ, JSON ๊ฐ์ฒด๋ฅผ zod ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋„๊ตฌ, ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ์„ ์œ„ํ•œ ํ•ธ๋“ค๋ฐ”, CLI ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ clipanion ๋“ฑ์˜ ๋„๊ตฌ ๋“ฑ์„ ์ž˜ ์กฐํ•ฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ ์ œ๋„ค๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Codegen ๊ตฌํ˜„ํ•˜๊ธฐ

Codegen์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์„ ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์Šค์›จ๊ฑฐ ๋…์Šค URL๋กœ๋ถ€ํ„ฐ ์˜คํ”ˆ API ์ŠคํŽ™ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์‹œ์ž‘์ž…๋‹ˆ๋‹ค. ์ด ์ŠคํŽ™์˜ ์ผ๋ถ€ ์š”์†Œ๋Š” spec.components ์š”์†Œ๋กœ๋ถ€ํ„ฐ ๋ฆฌํ€˜์ŠคํŠธ ๋ฐ”๋””์™€ ๋ฆฌ์Šคํฐ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ zod ์Šคํ‚ค๋งˆ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  spec.paths๋กœ๋ถ€ํ„ฐ API ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ๋น„๋กฏํ•œ ๊ฐ์ข… ์ŠคํŽ™์„ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋กœ ๊ฐ€๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๊ฒฐ๊ณผ๋ฌผ์„ ์›ํ•˜๋Š” ์œ„์น˜์— ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ spec.components๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? spec.components์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์Šค์›จ๊ฑฐ์˜ ์Šคํ‚ค๋งˆ๋“ค ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šค์›จ๊ฑฐ์—์„œ openapi.json์ด๋ผ๋Š” json ์Šคํ‚ค๋งˆ ๊ฐ์ฒด๋ฅผ ๋ฝ‘์•„ ์˜ค๊ณ , ์ด ๊ฐ์ฒด๋ฅผ ๋‹ค๋“ฌ์–ด ์ž๋™์œผ๋กœ ์Šคํ‚ค๋งˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

spec.paths๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์Šค์›จ๊ฑฐ์—์„œ ํŒจ์Šค ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ์ด ๋ฐ์ดํ„ฐ๋ฅผ json์œผ๋กœ ํŒŒ์‹ฑํ•˜๊ณ , ํŒŒ์‹ฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ์•ž์„œ ์ •์˜ํ•œ ๋ฆฌ์†Œ์Šค(Resource) ํ˜•ํƒœ๋กœ ๊ฐ€๊ณตํ•ด์„œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์ž ๋ช‡ ์ดˆ ๋งŒ์— ๊ฒฐ๊ณผ๋ฌผ์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Codegen์˜ ํšจ๊ณผ

Codegen์€ ์ € ํ˜ผ์ž ์ผ์ฃผ์ผ ์ •๋„ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ์ด๋กœ ์–ป์€ ์—ฌ๋Ÿฌ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„  CLI๋กœ ์ƒ์„ฑํ•œ api ์—”๋“œ ํฌ์ธํŠธ๋Š” 2,000๊ฐœ๊ฐ€ ๋„˜์œผ๋ฉฐ, ์ด ์—”๋“œ ํฌ์ธํŠธ๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ์ฝ”๋“œ ๋ผ์ธ ์ˆ˜๋Š” 3๋งŒ ์ค„ ๋„˜๋Š” ๋ถ€๋ถ„๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ์ฝ”๋“œ๋ฅผ ๋‹จ 10์—ฌ ์ดˆ ๋งŒ์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋™ํ™” ์‹œํ‚จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฐ๊ณผ๋ฌผ๋“ค์€ ๋‹น์—ฐํžˆ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ, ๋ฌด์—‡๋ณด๋‹ค ์ŠคํŽ™์„ ์ œ๋Œ€๋กœ ์˜ฎ๊ฒจ์™”๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒ€์ฆ์„ ํ•  ํ•„์š” ์—†์ด CLI ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ”๋กœ ๋™๊ธฐํ™”๋˜๋Š” ์ž๋™ํ™” ๋ฃจํ‹ด์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ง„ํ™” : ํ† ์Šค ํŽ˜์ด๋จผ์ธ  Codegen

Codegen์„ ๋„์ž…ํ•จ์œผ๋กœ์จ ์ŠคํŽ™ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ , ์ŠคํŽ™์„ ์ฝ”๋“œ๋กœ ์ƒ์„ฑํ•˜๊ณ , ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฌธ์ œ์ ์ด ํŒŒ์•…๋˜๋ฉด ์ŠคํŽ™์„ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์˜ ๋ฐ˜๋ณต์„ ํšจ์œจ์ ์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ API ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ  ํ•œ ๋•€ ํ•œ ๋•€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์ด ํ•„์š” ์—†์–ด์ง€๊ณ , CLI ๋ช…๋ น์–ด ํ•œ์ค„๋งŒ ์‹คํ–‰ํ•˜๋„๋ก ์ถ•์†Œํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ API ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์˜ ์‹ค์ˆ˜์ธ์ง€, ์ž˜๋ชป๋œ ์„œ๋ฒ„ API ๊ตฌํ˜„์ธ์ง€ ์ถ”์ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์œ ์ฆˆ์ผ€์ด์Šค์— ๋งž๊ฒŒ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” 100% ์ œ์–ด ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ๋ฅผ ์–ป์—ˆ์œผ๋ฉฐ, API๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฆ‰์‹œ ์‹ฑํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ์˜ํ•œ ์˜์กด์„ฑ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.


3. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ๋น„ํšจ์œจ์— ์˜ํ•œ ๋ณ‘๋ชฉ

์‚ฌ์‹ค ์•ž์„œ ์ œ์‹œํ•œ ์„ธ ๊ฐ€์ง€ ๋ณ‘๋ชฉ์— ๋”ฐ๋ฅด๋ฉด, ์ด๋ฒˆ ๋‹จ๋ฝ์€ โ€˜์ œํ’ˆ ์š”๊ตฌ ์‚ฌํ•ญ ๋ถ„์„โ€™์— ์˜ํ•œ ๋ณ‘๋ชฉ์„ ์•Œ์•„๋ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์‹ค ์ œํ’ˆ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ๋Š์–ด๋‚ด๋Š” ์ผ์„ ๊ธฐ์ˆ ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์ง€๋Š” ์•Š๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์„ธ ๋ฒˆ์งธ ์ฃผ์ œ๋ฅผ ์‚ด์ง ๋ฐ”๊ฟ”๋ดค์Šต๋‹ˆ๋‹ค. ์•ž์„  2๊ฐ€์ง€ ๋ณ‘๋ชฉ๊ณผ ๊ฐ™์€ ์™ธ์ ์ธ ์š”์†Œ ๋ง๊ณ , โ€˜ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์ž์ฒด์— ๋น„ํšจ์œจ์ด ์žˆ์ง€ ์•Š์„๊นŒ?โ€™ ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์ƒํƒœ๊ณ„์—๋Š” ๋„ˆ๋ฌด๋‚˜ ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํˆด์ด ์žˆ๊ณ , ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ์•กํŠธ, Next.js, Vite, Tanstack Query ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋„๊ตฌ๋“ค์„ ํ™œ์šฉํ•˜๋Š” ๊ฒฐ๊ณผ๋ฌผ์€ ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ๋ชจ๋‘ ๋‹ค๋ฅผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ผ ์ž์ฒด๊ฐ€ ๋˜ ๋‹ค๋ฅธ โ€˜๋ฐ”ํ€ด๋ฅผ ๋งŒ๋“œ๋Š” ์ผโ€™์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋Ÿฐ ๋น„ํšจ์œจ์„ ๋ฐ˜๋ณตํ•˜์ง€ ๋ง๊ณ , ๋ชจ๋‘๊ฐ€ ์ผ๊ด€์„ฑ ์žˆ๊ณ  ์ง€์† ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ† ์Šค ํŽ˜์ด๋จผ์ธ  ํ”„๋ ˆ์ž„์›Œํฌ: Pramework

์ด ๊ธฐ๋ฐ˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ํ•˜๋‚˜์˜ ๋ฐฉ์‹์œผ๋กœ ํ†ต์ผํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌํŒŒ์ธ(Refine)์ด๋ผ๋Š” ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ–ˆ์œผ๋ฉฐ, ๋งŽ์€ ๋ถ€๋ถ„์—์„œ ์•„์ด๋””์–ด๋ฅผ ์–ป์–ด ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํŒŒ์ธ์€ ์˜คํ”ˆ์†Œ์Šค ๋ฆฌ์•กํŠธ ์–ด๋“œ๋ฏผ ํˆด์ž…๋‹ˆ๋‹ค. ์ด ํˆด์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ํ—ค๋“œ๋ฆฌ์Šคํ•œ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • UI์™€ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ž์œ ๋กœ์šด ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฆฌ์†Œ์Šค๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ด API ๋ช…์„ธ๋ฅผ ํ•œ ๊ณณ์—์„œ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์€ ํ”„๋กœ๋ฐ”์ด๋” ํŒจํ„ด์„ ํ†ตํ•ด ์ž์œ ๋กญ๊ฒŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ด๋Ÿฌํ•œ ๋ฆฌํŒŒ์ธ์˜ ์•„์ด๋””์–ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋น„ํšจ์œจ์„ ํ•ด๊ฒฐํ•ด ๋ณด๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์–ด๋“œ๋ฏผ ์ œํ’ˆ์„ ๋งŒ๋“ค ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ˜๋ณต๋˜๋Š” ๋น„ํšจ์œจ์€ ๋ฌด์—‡์ผ๊นŒ์š”? ์ œ๊ฐ€ ์ƒ๊ฐํ•œ ๋น„ํšจ์œจ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋ฐ์ดํ„ฐ ํŽ˜์นญ
  2. ํผ ์ปจํŠธ๋กค
  3. ํ…Œ์ด๋ธ”
  4. ๋กœ๊น…

๋ฐ์ดํ„ฐ ํŽ˜์นญ

์ฒซ ๋ฒˆ์งธ๋กœ ๋ฐ์ดํ„ฐ ํŽ˜์นญ๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € API ์ŠคํŽ™์„ ๋ฆฌ์†Œ์Šค ๊ฐ์ฒด๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  API์— ๋Œ€ํ•œ ๋งฅ๋ฝ์„ ํ•œ๊ณณ์—์„œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ์†Œ์Šค์™€ API ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ํ†ตํ•ด์„œ ํ”„๋กœ๋ฐ”์ด๋”์— ์ฃผ์ž…ํ•˜๊ณ , ๋นˆ๋ฒˆํ•œ CRUD ๋ฐ˜๋ณต๊ณผ ๊ฐ™์€ โ€˜ํ–‰์œ„์— ๋Œ€ํ•œ ํ›…โ€™์„ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋ชฉ์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ณ , ์„ ์–ธ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•„์š”ํ•œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜๋œ ์‘๋‹ต์„ ์ž๋™์œผ๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋กœ ์ข€ ๋” ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด useQuery์™€ ์ง์ ‘ ๋งŒ๋“  useItem์„ ๋น„๊ตํ•ด ๋ณด๋ฉด, useQuery๋Š” ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ์žฅํ™ฉํ•˜๊ณ  API๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ด๋–ค ํŒŒ๋ผ๋ฏธํ„ฐ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์•ผ ํ•˜๋Š”์ง€ ์ผ์ผ์ด ๋‹ค ์ œ์–ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด, useItem๋Š” ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒ ๋‹ค๋Š” ์˜๋„๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ์ž…ํ•˜๋ฉด API ๋ช…์„ธ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ์ฒด๋งŒ ๋„ฃ์–ด ๋ณด๋‚ด๋„ ํ—ค๋”์— ํ•„์š”ํ•˜๋‹ค๋ฉด ํ—ค๋”์— ๋ฐฐ์น˜๋ฅผ ํ•˜๊ณ , ์ฟผ๋ฆฌ์— ํ•„์š”ํ•˜๋ฉด ์ฟผ๋ฆฌ์— ๋ฐฐ์น˜๋ฅผ ํ•˜๋Š” ๋“ฑ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ถ€๋ถ„์— ์ ์ ˆํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•ด์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋งŒ ๊ฐ„๊ฒฐํ•ด์ง€๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์„ ์–ธํ•œ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๋ก ํ•ด ์ค๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’ ์—ญ์‹œ ๋ฐ”๋กœ ์ถ”๋ก ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค.

ํผ ์ปจํŠธ๋กค

๋‹ค์Œ์œผ๋กœ ํผ ์ปจํŠธ๋กค์— ๋Œ€ํ•œ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ํผ ์ปจํŠธ๋กค ์—ญ์‹œ ๋ถˆํ•„์š”ํ•œ ๋น„ํšจ์œจ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฐœ์„ ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฆฌ์†Œ์Šค์— ์ •์˜ํ•œ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋Š” ๋””ํดํŠธ ๋ฐธ๋ฅ˜์— ์ž๋™์œผ๋กœ ์ฃผ์ž…๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ ๋””ํดํŠธ ๋ฐธ๋ฅ˜๋กœ ์ฃผ์ž…ํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์™ธ๋ถ€ ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ํผ ๋ฐ์ดํ„ฐ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํผ์„ ์ œ์ถœํ•˜๊ฑฐ๋‚˜ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ ์—ญ์‹œ ์ฝ”๋“œ๋กœ ๋” ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. useForm์ด๋ผ๋Š” ๊ธฐ๋Šฅ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋ฉด ํผ์„ ๋ Œ๋”๋ง ํ•  ๋•Œ ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜์œผ๋กœ GET ์š”์ฒญ์„ ์‹คํ–‰ํ•˜์—ฌ ๊ธฐ๋ณธ ๊ฐ’์„ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์ถœํ•  ๋•Œ๋„ ์ €์žฅ API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก submitter๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์‹œ์ ์— ์ž์œ ๋กญ๊ฒŒ ํ˜ธ์ถœํ•˜๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ํŒŒ์„œ๋ฅผ ํ•„๋“œ ํ˜•ํƒœ๋กœ ๊ฐ€๊ณตํ•˜๊ฑฐ๋‚˜, ์ œ์ถœํ•  ๋•Œ ํ•„๋“œ๋ฅผ ๋‹ค์‹œ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋‹จ์ผ ๊ตฌํ˜„์ฒด๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ๋žŒ๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”

์„ธ ๋ฒˆ์งธ, ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฆฌ์†Œ์Šค์— ์ •์˜ํ•œ API๋ฅผ ํ˜ธ์ถœํ•ด์„œ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” ํŠน์„ฑ์ƒ ํŠธ๋ฆฌ๊ตฌ์กฐ ํ˜•ํƒœ์˜ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋ณต๋˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊นŠ์€ depth์˜ JSX๋ฅผ ๋ฐ˜๋ณต ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ ์—, ๋ชจ๋ธ์ด๋ผ๋Š” ๊ฐœ๋…์„ ์ฃผ์ž…ํ•ด์„œ ํ…Œ์ด๋ธ”์ด ๋ Œ๋”๋ง ๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋•์— ํ…Œ์ด๋ธ” ๋ Œ๋”๋ง ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ํ›จ์”ฌ ์ข‹์•„์กŒ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ…Œ์ด๋ธ”์— ๊ณตํ†ต์œผ๋กœ ํ•„์š”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ธ ํŽ˜์ด์ง€๋„ค์ด์…˜, ์—ด ๋ฒˆํ˜ธ, ์ฒดํฌ ๋ฐ•์Šค์™€ ๊ฐ™์€ ์š”์†Œ๋ฅผ ๊ณตํ†ต์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋Š” ๊ณตํ†ต ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ณ , ๋ณต์žกํ•˜๊ณ  ์ฝ๊ธฐ ์–ด๋ ค์šด ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๋ฒ—์–ด๋‚˜์„œ ํ…Œ์ด๋ธ”์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊น…

๋งˆ์ง€๋ง‰์œผ๋กœ ๋กœ๊น…์— ๋Œ€ํ•œ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ๋กœ๊น… ๊ฐœ์„ ์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ์— ์ฃผ์ž…ํ•˜๊ณ , ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ Logger๋กœ ๋ž˜ํ•‘ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋กœ๊น…์„ ์‹คํ–‰ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตณ์ด ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค ๋กœ๊น… ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋Š”์ง€ ์‹ ๊ฒฝ ์“ธ ํ•„์š” ์—†์ด ๋ž˜ํ•‘๋งŒ ํ•ด์ฃผ๋ฉด ์•Œ์•„์„œ ๋กœ๊น… ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๋ฒˆ์งธ ์ง„ํ™” : ํ† ์ŠคํŽ˜์ด๋จผ์ธ  ํ”„๋ ˆ์ž„์›Œํฌ

์ด๋ ‡๊ฒŒ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ 4๊ฐ€์ง€ ๋น„ํšจ์œจ์„ ํ•ด๊ฒฐํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋”๋ผ๋„ ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค. ๊ทธ์™€ ํ•จ๊ป˜ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์˜ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋””์ž์ธ ํ”„๋กœํ† ํƒ€์ž…, ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ, ํ”„๋ก ํŠธ์—”๋“œ ์ž์ฒด๋ผ๋Š” 3๊ฐ€์ง€ ๋ณ‘๋ชฉ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋…ธ๋ ฅ์„ ํ†ตํ•ด ๋งŽ์€ ๊ฒƒ์„ ์–ป๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•  ๋•Œ๋Š” 6๊ฐœ์›” ์•ˆ์— ์ด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ํž˜๋“ค ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” 2๋‹ฌ ๋ฐ–์— ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 4๊ฐœ์˜ ์–ด๋“œ๋ฏผ๊ณผ 400ํŽ˜์ด์ง€ ์ด์ƒ์˜ ๋ฉ”๋‰ด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฐ์ฐจ ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์ˆ˜์ค€์˜ ํ’ˆ์งˆ์„ ๊ฐ€์ง„ ์ฝ”๋“œ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•˜๋ฃจ ์ •๋„ ๊ฑธ๋ฆฌ๋˜ ์ž‘์—…์„ ํ•œ ์‹œ๊ฐ„์œผ๋กœ ์ค„์ธ ๊ฒฝํ—˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋“ค ๋ชจ๋‘ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฝ๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.


๋งˆ์น˜๋ฉฐ

์ง€๊ธˆ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋น„ํšจ์œจ์„ ๊ฐœ์„ ํ•˜๋ฉฐ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํšจ์œจ์ ์œผ๋กœ ๋ฐ”๊พผ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์†Œ๊ฐœํ•œ ๋น„ํšจ์œจ ์ œ๊ฑฐ ๊ณผ์ •์ด ์œ ์˜๋ฏธํ•œ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์™”๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”?

์—ฌ๋Ÿฌ๋ถ„๋“ค๋„ ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋น„ํšจ์œจ์ ์ธ ์ˆœ๊ฐ„์„ ๋ชฉ๊ฒฉํ•œ๋‹ค๋ฉด ๋ฌด์‹œํ•˜์ง€ ๋ง๊ณ , ์ž‘์€ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ณ€ํ™”๋ฅผ ์‹œ๋„ํ•ด ๋ณด๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ž‘์€ ๋ณ€ํ™”๋“ค์ด ๋ชจ์—ฌ ์ œ๊ฐ€ ๊ฒฝํ—˜ํ•œ ์œ ์˜๋ฏธํ•œ ๋ณ€ํ™”์™€ ๊ฐ™์€ ๊ฐ’์ง„ ์ˆœ๊ฐ„์œผ๋กœ ๋Œ์•„์˜ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”ํ€ด ๋Œ€์‹  ๋กœ์ผ“ ๋งŒ๋“ค๊ธฐ

ํ† ์Šค ํŽ˜์ด๋จผ์ธ ๊ฐ€ ์ฒ˜์Œ ๋ฒ•์ธ์„ ์„ค๋ฆฝํ•œ ๋‹น์‹œ์—๋Š” ์‹œ์žฅ์„ ํ˜์‹ ํ•ด๋ณด์ž๋ผ๋Š” ์ž์‹ ๊ฐ์ด ๋„˜์ณค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์œ ์‚ฐ ์†์— ์กด์žฌํ•˜๋Š” ๋‹ค์–‘ํ•˜๊ณ  ๋ฐฉ๋Œ€ํ•œ ๋ ˆ๊ฑฐ์‹œ ์„œ๋น„์Šค๋“ค์ด ์„ฑ์žฅ์— ๋Œ€ํ•œ ๋ฐœ๋ชฉ์„ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JSP, EUC-KR ๋“ฑ ์ƒ์†Œํ•œ ๊ฒƒ๋“ค์ด ์ด๊ณณ์ €๊ณณ ์ง€๋ขฐ์ฒ˜๋Ÿผ ์กด์žฌํ•˜๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๋ฐœ์ „์„ ๋ง‰๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 24๋…„ ์ƒ๋ฐ˜๊ธฐ์—๋Š” ์ด ๋ ˆ๊ฑฐ์‹œ๋“ค์„ ๊ผญ ์ฒญ์‚ฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๊ฒฌ์ด ๊ธ‰๋ถ€์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌด๋ ค 400๊ฐœ๊ฐ€ ๋„˜๋Š” ์–ด๋“œ๋ฏผ ํ™”๋ฉด์ด ๋ ˆ๊ฑฐ์‹œ๋กœ ์กด์žฌํ•˜๊ณ , 6๊ฐœ์›” ๋‚ด์— ํŒ€์—์„œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€๊ณผ ํ˜•ํƒœ๋กœ ์ด๊ด€ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฃผ์–ด์ง„ 6๊ฐœ์›”์€ ์งง์€ ์‹œ๊ฐ„์ด์—ˆ๊ณ , ํ• ๋‹น๋œ FE ๊ฐœ๋ฐœ์ž๋Š” 4๋ช…์ด ์ „๋ถ€์˜€์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒฝํ—˜ํ•˜๋ฉฐ ์–ป์€ ๊ฒƒ๋“ค์„ ๋“ค๋ ค๋“œ๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.