Skip to main content

Posts

ํ†ตํ•ฉ ํšŒ์› ๊ด€๋ฆฌ(SSO/OIDC)์™€ ๊ธ€๋กœ๋ฒŒ ์ธ์ฆ ๊ตฌ์กฐ

ํ†ตํ•ฉ ํšŒ์› ๊ด€๋ฆฌ(SSO/OIDC)์™€ ๊ธ€๋กœ๋ฒŒ ์ธ์ฆ ๊ตฌ์กฐ 1. ๋ฐฐ๊ฒฝ — "๋กœ๊ทธ์ธ์€ ํ•˜๋‚˜, ์„œ๋น„์Šค๋Š” ์ „ ์„ธ๊ณ„" ์ด์ „๊นŒ์ง€๋Š” ๊ฐ ๊ตญ๊ฐ€๋ณ„๋กœ ๋ณ„๋„์˜ ํšŒ์› ์‹œ์Šคํ…œ์„ ์šด์˜ํ–ˆ๋‹ค. ํƒœ๊ตญ, ํ•œ๊ตญ, ์ค‘๊ตญ, ๋ง๋ ˆ์ด์‹œ์•„์˜ ์„œ๋น„์Šค๊ฐ€ ๋ชจ๋‘ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž DB๋ฅผ ๊ฐ€์กŒ๊ณ , ๊ธ€๋กœ๋ฒŒ ๊ณต๊ธ‰์‚ฌ๋Š” ๊ตญ๊ฐ€๋ณ„๋กœ ์ค‘๋ณต ๊ณ„์ •์„ ๋“ฑ๋กํ•ด์•ผ ํ–ˆ๋‹ค. ๋กœ๊ทธ์ธ ํ† ํฐ๋„ ์„œ๋ฒ„๋ณ„๋กœ ์ƒ์ดํ•ด SSO(Single Sign-On)๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค. ์ด ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ๋ฌธ์ œ๋Š” ๋ช…ํ™•ํ–ˆ๋‹ค. ํ•˜๋‚˜์˜ ๊ณต๊ธ‰์‚ฌ๊ฐ€ ํƒœ๊ตญ๊ณผ ํ•œ๊ตญ์—์„œ ๋ชจ๋‘ ํ™œ๋™ํ•˜๋ ค๋ฉด ๋‘ ๊ฐœ์˜ ๊ณ„์ •์ด ํ•„์š”ํ•˜๊ณ , ๊ฐ๊ฐ ๋ณ„๋„๋กœ ๋กœ๊ทธ์ธํ•ด์•ผ ํ•˜๋ฉฐ, ํ”„๋กœํ•„ ์ •๋ณด๋„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. 5๊ฐœ ํ”Œ๋žซํผ(Trade, Logistics, Workflow, Document AI, Delivery)์ด ๊ฐ์ž ๋…๋ฆฝ๋œ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ํŒŒํŠธ๋„ˆ ์ˆ˜๊ฐ€ 4,300๊ฐœ๋ฅผ ๋„˜์–ด์„  ์‹œ์ ์—์„œ ์šด์˜์€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 6์›”์— ์ด ๊ตฌ์กฐ๋ฅผ ์™„์ „ํžˆ ๊ฐœํŽธํ•˜๋ฉฐ, ๋‹จ์ผ ๋กœ๊ทธ์ธ์œผ๋กœ ๋ชจ๋“  ๊ตญ๊ฐ€์˜ ๋ชจ๋“  ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ์ธ์ฆ ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค. 2. ์™œ SSO์™€ OIDC์ธ๊ฐ€ SSO๋Š” ํ•œ ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. OIDC(OpenID Connect)๋Š” OAuth 2.0 ์œ„์— ๊ตฌ์ถ•๋œ ์ธ์ฆ ํ‘œ์ค€์œผ๋กœ, ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ๊ฒ€์ฆํ•˜๊ณ  ID Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. REINDEERS๊ฐ€ OIDC๋ฅผ ์„ ํƒํ•œ ์ด์œ ๋Š” ์„ธ ๊ฐ€์ง€๋‹ค. ์ฒซ์งธ, ๊ฐ ํ”Œ๋žซํผ์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๋”๋ผ๋„ ํ•˜๋‚˜์˜ ์ธ์ฆ ์„œ๋ฒ„๋งŒ ๋ฐ”๋ผ๋ณด๋ฉด ๋œ๋‹ค. ๋‘˜์งธ, Google, LINE, WeChat, Kakao ๋“ฑ ์†Œ์…œ ๋กœ๊ทธ์ธ ์ œ๊ณต์ž์™€์˜ ์—ฐ๋™์ด ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค. ์…‹์งธ, ID Token์˜ ์„œ๋ช… ๊ฒ€์ฆ๋งŒ์œผ๋กœ ์ธ์ฆ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด ...

๋ฐ์ดํ„ฐ ํ’ˆ์งˆ๊ด€๋ฆฌ, 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๊ฐ€ ํ™•์ •๋˜๋ฉด ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ผ์ด ๋ฐœ์ƒํ•ด์•ผ ํ•œ๋‹ค. ๊ณต๊ธ‰์‚ฌ์— ์ƒ์‚ฐ ์ง€์‹œ๊ฐ€ ์ „๋‹ฌ๋˜๊ณ , ํฌ์›Œ๋”ฉ ํ”Œ๋žซํผ์—์„œ ๋ฌผ๋ฅ˜ ๊ฒฌ์  ์ค€๋น„๊ฐ€ ์‹œ์ž‘๋˜๋ฉฐ, ๊ฒฐ์ œ ํ”Œ๋žซํผ์—์„œ ์„ ์ˆ˜๊ธˆ ์š”์ฒญ์ด ์ƒ์„ฑ๋˜๊ณ ,...