Skip to main content

Posts

๋ฐ์ดํ„ฐ ํ’ˆ์งˆ๊ด€๋ฆฌ, CI/CD ๊ฒ€์ฆ, Telegram ์•Œ๋ฆผ ๋ฐ Rollback ๊ตฌ์กฐ

๋ฐ์ดํ„ฐ ํ’ˆ์งˆ๊ด€๋ฆฌ, CI/CD ๊ฒ€์ฆ, Telegram ์•Œ๋ฆผ ๋ฐ Rollback ๊ตฌ์กฐ 1. ๋ฐฐ๊ฒฝ — "๋ฐ์ดํ„ฐ๊ฐ€ ์ฝ”๋“œ๋‹ค" REINDEERS ํ”Œ๋žซํผ์€ ๋‹ค๊ตญ๊ฐ€·๋‹คํ†ตํ™” ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹œ์Šคํ…œ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ฝ”๋“œ๋ณด๋‹ค ๋” ์œ„ํ—˜ํ•œ ๊ฒƒ์€ "๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜"์˜€๋‹ค. 6์›” ์ดˆ, PO ํ…Œ์ด๋ธ”์˜ ํ†ตํ™” ์ฝ”๋“œ ๋ˆ„๋ฝ์œผ๋กœ ๊ฒฐ์ œ ๊ธˆ์•ก ๊ณ„์‚ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ฐœ๋ฐœ ๋กœ์ง์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์ ธ ์žˆ์—ˆ๋‹ค. ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ–ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋Š” ๊ฒ€์ฆ ๋Œ€์ƒ์— ํฌํ•จ๋˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์ด๋‹ค. ์ด ์‚ฌ๊ฑด์„ ๊ณ„๊ธฐ๋กœ REINDEERS๋Š” ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ๊ด€๋ฆฌ(DQM, Data Quality Management)๋ฅผ DevOps ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋“ฏ์ด, ๋ฐ์ดํ„ฐ๋„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋ฐฐํฌ๋˜์ง€ ์•Š๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์›์น™์ด์—ˆ๋‹ค. CI/CD ํŒŒ์ดํ”„๋ผ์ธ์— ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋‹จ๊ณ„๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ์‹คํŒจ ์‹œ ์ž๋™ ์ฐจ๋‹จ๊ณผ Telegram ์•Œ๋ฆผ, ๊ทธ๋ฆฌ๊ณ  ์›๊ฒฉ Rollback๊นŒ์ง€ ์—ฐ๊ฒฐํ•˜๋Š” ์ „์ฒด ํ๋ฆ„์„ ์„ค๊ณ„ํ–ˆ๋‹ค. 2. ํ’ˆ์งˆ๊ด€๋ฆฌ ์ฒด๊ณ„์˜ ์›์น™ ๋ชจ๋“  ํ’ˆ์งˆ๊ฒ€์ฆ์€ SQL ๊ธฐ๋ฐ˜ ์„ ์–ธํ˜• ๊ทœ์น™์œผ๋กœ ์ •์˜๋œ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด ๊ทœ์น™๋งŒ ๋“ฑ๋กํ•˜๋ฉด ์ฆ‰์‹œ ์ ์šฉ๋œ๋‹ค. ๊ฒ€์ฆ์€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋‹จ๊ณ„์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. ์ˆ˜๋™ ํ™•์ธ์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ Telegram์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ณด๊ณ ๋œ๋‹ค. ์šด์˜์ž๋Š” ์–ด๋””์„œ๋“  ๋ชจ๋ฐ”์ผ๋กœ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•œ๋‹ค. Telegram ๋ช…๋ น์„ ํ†ตํ•ด ์Šน์ธ·๋กค๋ฐฑ์„ ์›๊ฒฉ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. CLI๋‚˜ ์„œ๋ฒ„ ์ ‘์†์ด ํ•„์š” ์—†๋‹ค. ์ด ๋„ค ๊ฐ€์ง€ ์›์น™์ด ์ ์šฉ๋˜๋ฉด์„œ, "์‚ฌ๋žŒ์ด ์ง์ ‘ ํ™•์ธํ•˜๋Š” ๊ฒ€์ฆ"์€ ์‚ฌ๋ผ์กŒ๋‹ค. ์‹œ์Šคํ…œ์ด ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ์ž๋™์œผ๋กœ ๊ฐ์‹œํ•˜๊ณ , ๋ฌธ์ œ...

i18n·๋‹ค๊ตญ์–ด·๋‹คํ†ตํ™” ์—”์ง„ ๋ฐ DTS/Redis ์ผ๊ด€์„ฑ ๊ตฌ์กฐ

i18n·๋‹ค๊ตญ์–ด·๋‹คํ†ตํ™” ์—”์ง„ ๋ฐ DTS/Redis ์ผ๊ด€์„ฑ ๊ตฌ์กฐ 1. ๋ฌธ์ œ ์ •์˜ — "์–ธ์–ด, ํ†ตํ™”, ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„" ๊ธ€๋กœ๋ฒŒ ํ”Œ๋žซํผ์„ ์„ค๊ณ„ํ•  ๋•Œ ๊ฐ€์žฅ ์–ด๋ ค์šด ์ ์€ ๋‹จ์ˆœํžˆ ๋ฒˆ์—ญ์ด ์•„๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์–ธ์–ด์™€ ํ†ตํ™”, ๊ทธ๋ฆฌ๊ณ  ๊ฑฐ๋ž˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„๋Œ€(timezone)๊ฐ€ ๋™์‹œ์— ์ผ๊ด€์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค ๋Š” ๊ฒƒ์ด๋‹ค. ํƒœ๊ตญ ๋ฐ”์ด์–ด๊ฐ€ THB(๋ฐ”ํŠธ)๋กœ ์ฃผ๋ฌธ์„ ์ƒ์„ฑํ•˜๊ณ , ํ•œ๊ตญ ๊ณต๊ธ‰์‚ฌ๊ฐ€ KRW(์›ํ™”) ๊ธฐ์ค€์œผ๋กœ ์†ก์žฅ์„ ๋ฐœํ–‰ํ•˜๋ฉด, ๋ชจ๋“  ๊ณ„์‚ฐ์€ "์‹ค์ œ ๊ฒฐ์ œ์ผ ํ™˜์œจ"์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด์•ผ ํ•œ๋‹ค. ์‹œ์Šคํ…œ์€ ํƒœ๊ตญ์–ด·์˜์–ด·ํ•œ๊ตญ์–ด·์ค‘๊ตญ์–ด๋กœ ๊ฐ๊ฐ ๋™์ผํ•œ ์ƒํ’ˆ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ, ์–ด๋–ค ๋ฆฌ์ „์—์„œ ์ ‘์†ํ•˜๋”๋ผ๋„ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์—ฐ ์—†์ด ๋…ธ์ถœ๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ๋ณต์žก์„ฑ์˜ ํ•ต์‹ฌ์€ ์„ธ ๊ฐ€์ง€ ์ถ•์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์–ธ์–ด๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํ‘œ์‹œํ•  ํ…์ŠคํŠธ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ณ , ํ†ตํ™”๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ ๋กœ์ง์ด ๋‹ฌ๋ผ์ง€๋ฉฐ, ๋ฆฌ์ „์ด ๋ฐ”๋€Œ๋ฉด ์บ์‹œ ์›๋ณธ ์œ„์น˜๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. ํ•˜๋‚˜๋ผ๋„ ์–ด๊ธ‹๋‚˜๋ฉด ๋ฐ”์ด์–ด๊ฐ€ ๋ณด๋Š” ๊ฐ€๊ฒฉ๊ณผ ๊ณต๊ธ‰์‚ฌ๊ฐ€ ๋ฐ›๋Š” ์ •์‚ฐ์•ก์ด ๋ถˆ์ผ์น˜ํ•˜๋Š” ์‚ฌ๊ณ ๋กœ ์ด์–ด์ง„๋‹ค. REINDEERS๋Š” 6์›”์— i18n + Currency + DTS + Redis ํ†ตํ•ฉ ๊ตฌ์กฐ๋ฅผ ์™„์„ฑํ•˜์—ฌ ์ด ์„ธ ์ถ•์„ ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๋ฌถ์—ˆ๋‹ค. 2. i18n ์—”์ง„ — ์–ธ์–ด ๋ฐ์ดํ„ฐ์˜ ์ถ”์ƒํ™”์™€ ์ €์žฅ ์ „๋žต REINDEERS์˜ ๋‹ค๊ตญ์–ด(i18n) ์—”์ง„์€ ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด ๋ฒˆ์—ญ์ด ์•„๋‹ˆ๋‹ค. ์–ธ์–ด ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋“  ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ„ฐํ‹ฐ(Product, Category, Notice ๋“ฑ)์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค. ์ƒํ’ˆ ํ…Œ์ด๋ธ”์— ์ง์ ‘ name_th , name_ko ์ปฌ๋Ÿผ์„ ๋‘๋Š” ๋ฐฉ์‹์€ ์–ธ์–ด๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ™•์žฅ์„ฑ์ด ์—†๋‹ค. ๋Œ€์‹  i18n_text ํ…Œ์ด๋ธ”์„ ๋„์ž…ํ•˜์—ฌ ํ‚ค-๊ฐ’ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋“  ๋‹ค๊ตญ์–ด ํ…์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. CRE...

๊ธ€๋กœ๋ฒŒ DB ๋ ˆ์ด์–ด๋ง๊ณผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์žฌ์„ค๊ณ„

1. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ฐœํŽธ์˜ ๋ฐฐ๊ฒฝ ๊ธฐ์กด ๊ตฌ์กฐ๋Š” AWS ์‹ฑ๊ฐ€ํฌ๋ฅด ๋‹จ์ผ ๋ฆฌ์ „์— ์ง‘์ค‘๋˜์–ด ์žˆ์—ˆ๊ณ , ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”์€ ์•ฝ 50~60๊ฐœ ์ˆ˜์ค€์ด์—ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋ช…ํ™•ํ–ˆ๋‹ค. ๊ฐ๊ตญ์˜ ํ†ตํ™”, ์–ธ์–ด, ์„ธ์œจ, ์šด์†ก ๋‹จ๊ฐ€ ๋“ฑ์ด ๋ชจ๋‘ ํ•˜๋“œ์ฝ”๋”ฉ ๋˜์–ด ์žˆ์—ˆ๊ณ , ๊ตญ๊ฐ€๋ณ„ ์šด์˜ ์ •์ฑ…์— ๋งž์ถ˜ ๋ฐ์ดํ„ฐ ํ™•์žฅ์ด ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค. ํŠนํžˆ, PO(๊ตฌ๋งค ์ฃผ๋ฌธ)์™€ Invoice(์†ก์žฅ) ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์•„, ํšŒ๊ณ„/์ •์‚ฐ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํƒœ๊ตญ ๋ฐ”ํŠธํ™”๋กœ ์ƒ์„ฑ๋œ PO์— ํ•œ๊ตญ ์›ํ™” ๊ธฐ์ค€์˜ ํ™˜์œจ์ด ์ž˜๋ชป ์ ์šฉ๋˜๊ฑฐ๋‚˜, ๋ง๋ ˆ์ด์‹œ์•„ ๋ง๊นƒ์˜ ์„ธ์œจ ๊ณ„์‚ฐ์— ํƒœ๊ตญ VAT 7%๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์€ ์ฝ”๋“œ ๋ ˆ๋ฒจ์˜ ํŒจ์น˜๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. CEO๊ฐ€ ์ œ์‹œํ•œ ์š”๊ตฌ์‚ฌํ•ญ์€ ๊ฐ„๋‹จํ–ˆ์ง€๋งŒ ๊นŠ์—ˆ๋‹ค. "๋ฐ์ดํ„ฐ์˜ ์ถœ๋ฐœ์ ์ด ํ•œ๊ตญ์ด ์•„๋‹ˆ๋ผ, ์„ธ๊ณ„ ์–ด๋””์„œ๋“  ๋™์ผํ•œ ๊ตฌ์กฐ ๋กœ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค." ์ด ํ•œ ๋ฌธ์žฅ์ด ์ „์ฒด ๋ฆฌ๋””์ž์ธ์˜ ๊ธฐ์ค€์ด ๋˜์—ˆ๋‹ค. REINDEERS๋Š” ํ•œ๊ตญ, ํƒœ๊ตญ, ๋ง๋ ˆ์ด์‹œ์•„, ์ค‘๊ตญ 4๊ฐœ๊ตญ์— ๋ฒ•์ธ์„ ๋‘๊ณ  ์žˆ๊ณ , 4,300๊ฐœ ์ด์ƒ์˜ ํŒŒํŠธ๋„ˆ์‚ฌ๊ฐ€ ์ด ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ”์ด์–ด 2,500๊ฐœ ์ด์ƒ, ๊ณต๊ธ‰์‚ฌ 1,800๊ฐœ ์ด์ƒ, ํฌ์›Œ๋” 30๊ฐœ ์ด์ƒ์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํ†ตํ™”์™€ ์–ธ์–ด๋กœ ๊ฑฐ๋ž˜๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ƒํ™ฉ์—์„œ, ๋‹จ์ผ ๊ตญ๊ฐ€ ๊ธฐ์ค€์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ํ•œ๊ณ„์— ๋„๋‹ฌํ•ด ์žˆ์—ˆ๋‹ค. 2. 6-Layer Architecture: ๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ๋ถ„๋ฆฌ DB ๊ตฌ์กฐ๋Š” ๊ธฐ๋Šฅ์  ๋ชฉ์ ์— ๋”ฐ๋ผ 6๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋‰˜์—ˆ๋‹ค. ๊ฐ ๊ณ„์ธต์€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ™์€ MySQL ์ธ์Šคํ„ด์Šค ๋‚ด์— ์กด์žฌํ•˜์ง€๋งŒ, ๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” ๋…๋ฆฝ๋œ ์Šคํ‚ค๋งˆ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค. ์ด ๋ถ„๋ฆฌ์˜ ํ•ต์‹ฌ ์›์น™์€ "๋ณ€๊ฒฝ ๋นˆ๋„๊ฐ€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ™์€ ๊ณ„์ธต์— ๋‘์ง€ ์•Š๋Š”๋‹ค"๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ...

๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๋ฌธํ™”์˜ ํ‘œ์ค€ํ™” — ์ฝ”๋“œ, ํ˜‘์—…, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ๋žŒ์˜ ์ผํ•˜๋Š” ๋ฐฉ์‹

1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ๋ชฉํ‘œ — '์‚ฌ๋žŒ ์—†์ด๋„ ์ผ๊ด€๋œ ๊ฒฐ๊ณผ' REINDEERS์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ๋‹จ ํ•˜๋‚˜์˜ ๋ชฉํ‘œ๋ฅผ ๊ฐ–๊ณ  ์„ค๊ณ„๋˜์—ˆ๋‹ค. "์‚ฌ๋žŒ์ด ์—†์–ด๋„ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ๋ฐฐํฌ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค." ์ด๋ฅผ ์œ„ํ•ด ๋ชจ๋“  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์™„์ „ํžˆ ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ธํŒ…๋˜์—ˆ๊ณ , ํ™˜๊ฒฝ ํŽธ์ฐจ๋‚˜ ๋กœ์ปฌ ์˜์กด์„ฑ ๋ฌธ์ œ๋Š” ์ œ๊ฑฐ๋˜์—ˆ๋‹ค. ๊ฐœ์ธ์˜ ํ™˜๊ฒฝ์€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ชจ๋“  ํ™˜๊ฒฝ์€ dev , staging , production ์„ธ ๋‹จ๊ณ„๋กœ ํ†ตํ•ฉ ๊ด€๋ฆฌ๋œ๋‹ค. ์ด ๋ชฉํ‘œ๊ฐ€ ์ƒ๊ธด ๋ฐฐ๊ฒฝ์ด ์žˆ๋‹ค. ํŒ€์ด ๋„ค ๋ฒˆ ๊ต์ฒด๋˜๋ฉด์„œ ๋งค๋ฒˆ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ๊ฐ€ "๋‚ด PC์—์„œ๋Š” ๋˜๋Š”๋ฐ ์„œ๋ฒ„์—์„œ๋Š” ์•ˆ ๋œ๋‹ค"์˜€๋‹ค. ์šด์˜์ฒด์ œ ๋ฒ„์ „, ๋Ÿฐํƒ€์ž„ ๋ฒ„์ „, ๋กœ์ปฌ์— ์„ค์น˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด๊ฐ€ ๋นŒ๋“œ ๊ฒฐ๊ณผ์˜ ๋ถˆ์ผ์น˜๋ฅผ ๋งŒ๋“ค์–ด๋ƒˆ๋‹ค. ํŠนํžˆ 4๊ฐœ๊ตญ(ํƒœ๊ตญ, ํ•œ๊ตญ, ์ค‘๊ตญ, ๋ง๋ ˆ์ด์‹œ์•„)์— ๋ถ„์‚ฐ๋œ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ์ž ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜๋ฉด ์ด ๋ฌธ์ œ๋Š” ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ปค์ง„๋‹ค. ์ปจํ…Œ์ด๋„ˆํ™”๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์ด ๋ฌธ์ œ๋ฅผ ์›์ฒœ์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ๋ˆ„๊ฐ€, ์–ด๋””์„œ ๋นŒ๋“œํ•˜๋“  ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜๋‹ค. ํ‘œ์ค€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์กฐ # Dockerfile (๊ณต์šฉ ๊ฐœ๋ฐœํ™˜๊ฒฝ) FROM node:20-bullseye RUN apt-get update && \ apt-get install -y python3 python3-pip vim curl git && \ pip install pre-commit flake8 WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . CMD ["npm", "run", "dev"] ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋Š” ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฝ”๋“œ ์ˆ˜์ • ์‹œ Dr...

๋ฐ์ดํ„ฐ์™€ ์ž๋™ํ™” — ์š”๊ตฌ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” '์ƒˆ๋กœ์šด' ํ”Œ๋žซํผ๋งŒ์ด ํ•ด๋‹ต์ด์—ˆ๋‹ค

1. ์š”๊ตฌ์กฐ๊ฑด์—์„œ ์‹œ์ž‘ํ•œ '์ƒˆ ํ”Œ๋žซํผ' ์„ ์–ธ Quote → PO → Invoice → Delivery → Settlement ์ „์ฒด ํ๋ฆ„์ด ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์ฒด์ธ ์œผ๋กœ ์—ฐ๊ฒฐ๋  ๊ฒƒ ๊ตญ๊ฐ€/์–ธ์–ด/ํ†ตํ™”/์„ธ์œจ/๋ฌผ๋ฅ˜ ๊ทœ์น™์„ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด ์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•  ๊ฒƒ ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๊ฐ€ ์ด๋ฒคํŠธ(AMQP) ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์ „ํŒŒ๋˜๊ณ  ์บ์‹œ์™€ UI๊ฐ€ ์ž๋™ ๊ฐฑ์‹ ๋  ๊ฒƒ ์‚ฌ๋žŒ์ด ๋ฌธ์„œ/ํˆด์„ ์กฐ์ž‘ํ•˜์ง€ ์•Š์•„๋„ AI ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ€ ๋ช…์„ธ→์Šคํ‚ค๋งˆ→API→๋ฐฐํฌ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•  ๊ฒƒ ์ด ์š”๊ตฌ๋Š” ๊ณง ํ”Œ๋žซํผ์˜ ์žฌ์ •์˜ ์˜€๋‹ค. "์ฝ”๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค๋ช…"ํ•˜๋˜ ๊ณผ๊ฑฐ์—์„œ, " ๋ฐ์ดํ„ฐ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ง€๋ฐฐ ํ•˜๋Š”" ๊ตฌ์กฐ๋กœ์˜ ์ „ํ™˜. ์ด ๊ด€์ ์—์„œ ์ „ ๊ณ„์ธต์„ ๋‹ค์‹œ ์„ค๊ณ„ํ–ˆ๋‹ค. ์ด ์š”๊ตฌ์กฐ๊ฑด์ด ์™œ ๊ธฐ์กด ์‹œ์Šคํ…œ์œผ๋กœ๋Š” ์ถฉ์กฑ๋  ์ˆ˜ ์—†์—ˆ๋Š”์ง€๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ์งš์–ด๋ณด์ž. ๊ธฐ์กด ์‹œ์Šคํ…œ์—์„œ ๊ฒฌ์ (Quote)๊ณผ ์ฃผ๋ฌธ(PO)์€ ๋ณ„๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์— ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์—ˆ๋‹ค. ๊ฒฌ์ ์„œ์— ์ ํžŒ ๋‹จ๊ฐ€์™€ ์‹ค์ œ ์ฃผ๋ฌธ์— ๋ฐ˜์˜๋œ ๋‹จ๊ฐ€๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ˆ˜๋™์œผ๋กœ ์กฐ์ธํ•ด์•ผ ํ–ˆ๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ํ™˜์œจ ๋ณ€ํ™˜ ์‹œ์ ์ด ๋‹ฌ๋ผ ๊ธˆ์•ก ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žฆ์•˜๋‹ค. 4๊ฐœ๊ตญ(ํƒœ๊ตญ, ํ•œ๊ตญ, ์ค‘๊ตญ, ๋ง๋ ˆ์ด์‹œ์•„)์˜ ๊ฑฐ๋ž˜์—์„œ THB, KRW, CNY, MYR, USD๋ผ๋Š” 5๊ฐœ ํ†ตํ™”๊ฐ€ ์˜ค๊ฐ€๋Š” ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฐ ๋ถˆ์ผ์น˜๋Š” ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ  ๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„์ฆˆ๋‹ˆ์Šค ์‹ ๋ขฐ ๋ฌธ์ œ์˜€๋‹ค. 2. ๊ธฐ์กด ์‹œ์Šคํ…œ์ด ๋ง‰ํ˜€ ์žˆ๋˜ ๊ตฌ์ฒด์  ์ง€์ ๋“ค ํŒจ์น˜๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋‹ค๊ตญ์–ด/๋‹คํ†ตํ™” ํ•˜๋“œ์ฝ”๋”ฉ: i18n ํ…์ŠคํŠธ๊ฐ€ ํ”„๋ŸฐํŠธ์—”๋“œ ์ปดํฌ๋„ŒํŠธ์— ์ง์ ‘ ์‚ฝ์ž…๋˜์–ด ์žˆ์—ˆ๋‹ค. ์ƒˆ ์–ธ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ˆ˜๋ฐฑ ๊ฐœ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๋‹ค. ๋‹จ์ผ ๋ฆฌ์ „ ์ข…์†: ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ฑ๊ฐ€ํฌ๋ฅด ๋ฆฌ์ „์— ์žˆ์–ด์„œ, ํƒœ๊ตญ ๋ฐ”์ด์–ด์™€ ํ•œ๊ตญ...

MCP ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๊ธฐ — ๊ธ€๋กœ๋ฒŒ ์ธํ”„๋ผ์˜ ๋ผˆ๋Œ€๋ฅผ ์„ธ์šฐ๋‹ค

MCP ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๊ธฐ — ๊ธ€๋กœ๋ฒŒ ์ธํ”„๋ผ์˜ ๋ผˆ๋Œ€๋ฅผ ์„ธ์šฐ๋‹ค 2025๋…„ 5์›”, REINDEERS ํ”Œ๋žซํผ์˜ ์ธํ”„๋ผ ์žฌ์„ค๊ณ„๊ฐ€ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ๋‹ค. 4์›” ํ•œ ๋‹ฌ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ๊ธฐ์กด ์‹œ์Šคํ…œ์„ ์ „๋ฉด ์ ๊ฒ€ํ–ˆ๊ณ , AWS ์‹ฑ๊ฐ€ํด ๋ฆฌ์ „์— ์‚ฐ์žฌ๋œ ๋น„ํšจ์œจ์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ–ˆ๋‹ค. CI/CD๋Š” ๋‹จ์ˆœ ์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ค€์— ๋จธ๋ฌผ๋ €๊ณ , ์šด์˜ ์Šคํ…Œ์ด์ง€๋„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋˜์ง€ ์•Š์•˜๋‹ค. ์†Œ์Šค ๊ด€๋ฆฌ์กฐ์ฐจ ํ†ตํ•ฉ๋˜์ง€ ์•Š์•„ ๋นŒ๋“œ๊ฐ€ ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ฌ๋ž๋‹ค. ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์™„์ „ํžˆ ๋‹ค์‹œ ์„ธ์›Œ์•ผ ํ–ˆ๋‹ค. MCP๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€ — ์•„ํ‚คํ…์ฒ˜์  ์ •์˜ MCP๋Š” Multi-Commerce Platform์˜ ์•ฝ์ž๋‹ค. ๋‹จ์ผ ์„œ๋น„์Šค๊ฐ€ ์•„๋‹ˆ๋ผ 5๊ฐœ์˜ ๋…๋ฆฝ ํ”Œ๋žซํผ์ด ํ•˜๋‚˜์˜ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ฐ ํ”Œ๋žซํผ์€ ๊ณ ์œ ํ•œ ๋„๋ฉ”์ธ์„ ๋‹ด๋‹นํ•˜๋ฉด์„œ๋„, ๋ฌด์—ญ ๊ฑฐ๋ž˜์˜ ์ „์ฒด ํ๋ฆ„ ์•ˆ์—์„œ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค. 5๊ฐœ ํ”Œ๋žซํผ์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉด์„œ๋„ ๊ฑฐ๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์€ ๊ธฐ์กด์˜ ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ฒฌ์  ํ”Œ๋žซํผ์—์„œ ์ƒ์„ฑ๋œ PQ(Price Quotation)๊ฐ€ ๊ณต๊ธ‰์‚ฌ ํ”Œ๋žซํผ์˜ QA(Quote Answer)์™€ ์—ฐ๊ฒฐ๋˜๊ณ , ์ด๊ฒƒ์ด ๋‹ค์‹œ QB(Quote Back) - PO(Purchase Order) - DO(Delivery Order) - FWD(Forwarding) - Pay - Settlement์œผ๋กœ ์ด์–ด์ง€๋Š” ๋ฌด์—ญ ๊ฑฐ๋ž˜์˜ ํ๋ฆ„์€ ๊ฐ ํ”Œ๋žซํผ ๊ฐ„์˜ ์ •๊ตํ•œ ์ด๋ฒคํŠธ ์ „๋‹ฌ ์—†์ด๋Š” ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ์ธ๊ฐ€ — Request-Response๋ฅผ ๋ฒ„๋ฆฐ ์ด์œ  ์ดˆ๊ธฐ ์„ค๊ณ„์—์„œ ํ”Œ๋žซํผ ๊ฐ„ ํ†ต์‹ ์„ REST API ๊ธฐ๋ฐ˜ ๋™๊ธฐ ํ˜ธ์ถœ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ์•ˆ์„ ๊ฒ€ํ† ํ–ˆ๋‹ค. ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์ด ๊ณต๊ธ‰์‚ฌ ํ”Œ๋žซํผ์˜ API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ณ , ์‘๋‹ต์„ ๋ฐ›์•„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๊ตฌ์กฐ์˜ ๋ฌธ์ œ๋Š” ๋ฌด์—ญ ๊ฑฐ๋ž˜์˜ ํŠน์„ฑ์—์„œ ๋“œ๋Ÿฌ๋‚œ๋‹ค. PO๊ฐ€ ํ™•์ •๋˜๋ฉด ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ผ์ด ๋ฐœ์ƒํ•ด์•ผ ํ•œ๋‹ค. ๊ณต๊ธ‰์‚ฌ์— ์ƒ์‚ฐ ์ง€์‹œ๊ฐ€ ์ „๋‹ฌ๋˜๊ณ , ํฌ์›Œ๋”ฉ ํ”Œ๋žซํผ์—์„œ ๋ฌผ๋ฅ˜ ๊ฒฌ์  ์ค€๋น„๊ฐ€ ์‹œ์ž‘๋˜๋ฉฐ, ๊ฒฐ์ œ ํ”Œ๋žซํผ์—์„œ ์„ ์ˆ˜๊ธˆ ์š”์ฒญ์ด ์ƒ์„ฑ๋˜๊ณ ,...

ํŒ€๊ณผ ๊ธฐ์ˆ ์˜ ๋ฆฌ๋นŒ๋“œ — ๋‹ค์‹œ ์ผํ•˜๋Š” ๋ฒ•์„ ์ •๋น„ํ•˜๋‹ค

1. ๋ฆฌ๋นŒ๋“œ์˜ ์‹œ์ž‘ — ์‚ฌ๋žŒ๋ถ€ํ„ฐ ๋ฐ”๊ฟจ๋‹ค 2025๋…„ 4์›” ์ดˆ, REINDEERS๋Š” ์ค‘๋Œ€ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ ธ๋‹ค. ์‹œ์Šคํ…œ์„ ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ์ผ๋ณด๋‹ค ๋จผ์ €, ์‚ฌ๋žŒ์„ ๋ฐ”๊พธ๊ธฐ๋กœ ํ•œ ๊ฒƒ์ด๋‹ค. ํ”Œ๋žซํผ์€ ๊ธฐ์ˆ ๋กœ ์›€์ง์ด์ง€๋งŒ, ์šด์˜์˜ ์ผ๊ด€์„ฑ์„ ๋ฌด๋„ˆ๋œจ๋ฆฌ๋Š” ๊ฒƒ์€ ์–ธ์ œ๋‚˜ ์‚ฌ๋žŒ์ด๋‹ค. ๊ฒฐ๊ตญ ๊ธฐ์กด ์ง์›๋“ค์€ ๋ชจ๋‘ ํ‡ด์‚ฌํ–ˆ๋‹ค. ์ด์ „ ํŒ€์€ ์‹คํ—˜์ ์ด์—ˆ์ง€๋งŒ, ์šด์˜ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค๊ธฐ์—” ์—ญ๋ถ€์กฑ์ด์—ˆ๋‹ค. ๋‚จ์€ ๊ฒƒ์€ ์ฝ”๋“œ ์ผ๋ถ€์™€ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฟ์ด์—ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ ์œ„์— ์ƒˆ๋กœ์šด ๋ฌธํ™”๋ฅผ ์„ธ์šฐ๊ธฐ๋ณด๋‹ค, ์™„์ „ํžˆ ์ƒˆ ํŒ€์„ ๋งŒ๋“œ๋Š” ๊ธธ์„ ์„ ํƒํ–ˆ๋‹ค. ์ด๊ฒƒ์ด ๋„ค ๋ฒˆ์งธ ํŒ€ ๊ต์ฒด์˜€๋‹ค. 2015๋…„ IMARKET Thailand ์ฐฝ์—… ์ดํ›„ 10๋…„ ๋™์•ˆ ํŒ€์ด ๋„ค ๋ฒˆ ๋ฐ”๋€Œ์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€ํŠธ์—…์ด ๊ฒช๋Š” ํ˜„์‹ค์„ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ค€๋‹ค. 2. ์ƒˆ ํŒ€์˜ ํƒ„์ƒ — ๊ธฐ์ˆ  ์ปคํŠธ๋ผ์ธ๋ถ€ํ„ฐ ํ†ต๊ณผํ•ด์•ผ ํ–ˆ๋‹ค ์‹ ๊ทœ ์ฑ„์šฉ์˜ ๊ธฐ์ค€์€ ๋‹จ์ˆœํ–ˆ๋‹ค. " ์šด์˜ ๊ฐ€๋Šฅํ•œ ๊ธฐ์ˆ ์„ ์ดํ•ดํ•˜๋Š”๊ฐ€ ." ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ค„ ์•„๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ๋ณต์ œ๋˜๋ฉฐ, ์žฅ์• ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณต๊ตฌํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์•„๋Š” ์—”์ง€๋‹ˆ์–ด๋งŒ์ด ํ•ฉ๋ฅ˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ธฐ์ˆ  ์ปคํŠธ๋ผ์ธ (ํ•„์ˆ˜ ํ•ญ๋ชฉ) Nuxt 3 / Vue3 + SSR ๊ตฌ์กฐ ์ดํ•ด API ์„œ๋ฒ„ ์„ค๊ณ„ ๊ฒฝํ—˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• ๋ฐ ์œ ์ง€ ๊ฒฝํ—˜ COS/CDN ๋ฐฐํฌ ์ž๋™ํ™” ๊ฒฝํ—˜ Redis TTL ๊ด€๋ฆฌ, MQ(AMQP) ์ด๋ฒคํŠธ ์„ค๊ณ„ ๊ฒฝํ—˜ Git ๋ธŒ๋žœ์น˜ ์ „๋žต ๋ฐ Pull Request ํ”„๋กœ์„ธ์Šค ์ˆ™์ง€ ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD) ํ™˜๊ฒฝ ์„ค์ • ๊ฒฝํ—˜ ์‹ ๊ทœ ๊ตฌ์„ฑ์›๋“ค์€ ๋ชจ๋‘ ์œ„ ๊ธฐ์ค€์„ ํ†ต๊ณผํ•ด์•ผ ํ–ˆ์œผ๋ฉฐ, ๊ฐ์ž DevOps, Front, API, Data, AI ์…€๋กœ ๋ฐฐ์น˜๋˜์—ˆ๋‹ค. ์‹œ์Šคํ…œ ์„ค๊ณ„...