์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์œ„ํ•ด Docker์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž๋™ ํ…Œ์ŠคํŠธ

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

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

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

์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ž๋™ํ™”ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋ž˜์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋™์ผํ•œ ๋„์ปค ํ˜ธ์ŠคํŠธ์—์„œ ๋ณ‘๋ ฌ ์ž‘์—…์˜ ์ถฉ๋Œ;
  • ํ…Œ์ŠคํŠธ ๋ฐ˜๋ณต ์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‹๋ณ„์ž ์ถฉ๋Œ;
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๊ฐ€ ์ค€๋น„๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ๋ฅผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์— ๋ณ‘ํ•ฉํ•˜๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚˜๊ฐ€๋Š” HTTP ์š”์ฒญ ํ…Œ์ŠคํŠธ
  • ์›น ์†Œ์ผ“ ํ…Œ์ŠคํŠธ(SignalR ์‚ฌ์šฉ)
  • OAuth ์ธ์ฆ ๋ฐ ์Šน์ธ ํ…Œ์ŠคํŠธ.

์ด ๊ธฐ์‚ฌ๋Š” ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์˜ ์—ฐ์„ค SECR 2019์—์„œ. ๊ทธ๋ž˜์„œ ์ฑ… ์ฝ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ๊ท€์ฐฎ์€ ๋ถ„๋“ค์„ ์œ„ํ•ด, ์—ฌ๊ธฐ ์—ฐ์„ค ๋…น์Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์œ„ํ•ด Docker์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž๋™ ํ…Œ์ŠคํŠธ

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

Windows ๋ฐ์Šคํฌํ†ฑ์˜ ๊ฐœ๋ฐœ์ž์™€ Linux์˜ Gitlab CI ์„œ๋ฒ„ ๋ชจ๋‘ ๋™์ผํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ •๋‹นํ™”ํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด ํ…Œ์ŠคํŠธ๋ฅผ ๋„์ž…ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž์˜ ์ปดํ“จํ„ฐ๋‚˜ ์ปค๋ฐ‹์—์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์„œ๋ฒ„์— ์ถ”๊ฐ€ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Docker๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ๋กœ์ปฌ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ๋Š” ๊ฒฐ์ฝ” ์™„์ „ํžˆ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜์ฒœ ๊ฐœ์˜ ์š”์ฒญ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ด ๊ฒฝ์šฐ ์ž๋™ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ์ž‘์—…์ด ์ค‘์ง€๋˜๋ฉฐ ๋กœ๊ทธ์—์„œ ์ด์œ ๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ถ€ ํƒ€์‚ฌ ์„œ๋น„์Šค์—์„œ๋Š” ๋„ˆ๋ฌด ๋นˆ๋ฒˆํ•œ ์š”์ฒญ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์Šคํƒ ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

ํ”„๋กœ์ ํŠธ ๋ฐ ํ”„๋กœ์„ธ์Šค ์กฐ์ง ์ •๋ณด

์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” Amazon AWS ํด๋ผ์šฐ๋“œ์˜ Docker์—์„œ ์‹คํ–‰๋˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ Amazon ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ ์ „์ฒด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๋ชจ๋“  ์ปค๋ฐ‹์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ํ‘œ์ค€ ์—ฐ์† ํ†ตํ•ฉ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ํ• ๋‹นํ•œ ํ›„ ๊ฐœ๋ฐœ์ž๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋ฉฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ž๋™ํ™” ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ์ด ๋ฌธ์ œ์˜ ๋ถ„๊ธฐ์— ์ปค๋ฐ‹์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ปค๋ฐ‹ํ•  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์ธ ๊ฒ€ํ†  ํ›„์— ๊ณตํ†ต ๋ถ„๊ธฐ์— ๋ณ‘ํ•ฉํ•˜๊ณ  ์ž๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ๋ธŒ๋žœ์น˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋ฉด Amazon Elastic Container Service(๋ฒค์น˜)์˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์Šคํƒ ๋“œ๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์™€ ํ…Œ์Šคํ„ฐ์—๊ฒŒ ๊ผญ ํ•„์š”ํ•œ ์ œํ’ˆ์ด๋ฏ€๋กœ ๋ถ€์ˆ˜๋Š” ๊ฒƒ์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํ™˜๊ฒฝ์˜ ํ…Œ์Šคํ„ฐ๋Š” ์ˆ˜๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ˆ˜์ • ์‚ฌํ•ญ์ด๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜

์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์œ„ํ•ด Docker์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž๋™ ํ…Œ์ŠคํŠธ

์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ XNUMX๊ฐœ ์ด์ƒ์˜ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” .NET Core๋กœ ์ž‘์„ฑ๋˜๊ณ  ์ผ๋ถ€๋Š” NodeJ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค๋Š” Amazon Elastic Container Service์˜ Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์—๋Š” ์ž์ฒด Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ๊ณ  ์ผ๋ถ€์—๋Š” Redis๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด SNS(Simple Notification Service) ๋ฐ SQS(Amazon Simple Queue Service)๋ฅผ ํ†ตํ•ด ๊ฐ ์„œ๋น„์Šค๋กœ ์ „์†ก๋˜๊ณ  ์„œ๋น„์Šค๋Š” ์ด๋ฅผ ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

SQS์™€ SNS

SQS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ๋Œ€๊ธฐ์—ด์— ๋„ฃ๊ณ  HTTPS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ธฐ์—ด์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ํ•˜๋‚˜์˜ ๋Œ€๊ธฐ์—ด์„ ์ฝ๋Š” ๊ฒฝ์šฐ ๊ฐ ๋ฉ”์‹œ์ง€๋Š” ๊ทธ ์ค‘ ํ•˜๋‚˜์—๋งŒ ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ผํ•œ ์„œ๋น„์Šค์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ๊ฐ„์— ๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์— ์ „๋‹ฌํ•˜๋ ค๋ฉด ๊ฐ ์ˆ˜์‹ ์ž์—๊ฒŒ ์ž์ฒด ๋Œ€๊ธฐ์—ด์ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€๊ธฐ์—ด์— ๋ณต์ œํ•˜๋ ค๋ฉด SNS๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

SNS์—์„œ๋Š” ์ฃผ์ œ(์˜ˆ: SQS ๋Œ€๊ธฐ์—ด)๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์ œ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฉ”์‹œ์ง€๋Š” ์ด ์ฃผ์ œ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๊ฐ ๋Œ€๊ธฐ์—ด๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. SNS์—๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ๋˜๋Š” ํ…Œ์ŠคํŠธ ์ค‘์— SNS๋กœ ์ „์†ก๋œ ๋‚ด์šฉ์„ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ SQS ๋Œ€๊ธฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์›ํ•˜๋Š” ์ฃผ์ œ๋ฅผ ๊ตฌ๋…ํ•œ ํ›„ ๋Œ€๊ธฐ์—ด์„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์œ„ํ•ด Docker์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž๋™ ํ…Œ์ŠคํŠธ

API ๊ฒŒ์ดํŠธ์›จ์ด

๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค๋Š” ์ธํ„ฐ๋„ท์—์„œ ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ ‘๊ทผ์€ ์ ‘๊ทผ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” API Gateway๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค์ด๋ฉฐ ์ด์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ

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

์ž˜ ์•Œ๋ ค์ง„ ํ…Œ์ŠคํŠธ ์ ‘๊ทผ ๋ฐฉ์‹

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

ะ’ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ ๊ธฐ์‚ฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ชจ์˜ ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์ธ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” Entity Framework์—์„œ ์ง€์›ํ•˜๋Š” DBMS ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ํŠน๋ณ„ํžˆ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ์˜ ๊ฐ์ฒด๋Š” ํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋Š” ์ •๋„๊นŒ์ง€๋งŒ ๋Œ€์ฒดํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.

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

์†”๋ฃจ์…˜์œผ๋กœ ๋„˜์–ด ๊ฐ‘์‹œ๋‹ค

๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋งŒ์œผ๋กœ๋Š” ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ์ ์‹œ์— ์ฐพ์•„๋‚ด๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ฐ๋„์—์„œ ์ ‘๊ทผํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •

์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„:

  • ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ค‘์ธ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ AWS์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Postgres๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  Liquibase๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    ๊ด€๊ณ„ํ˜• DBMS์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ, ์ฆ‰ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ…Œ์ด๋ธ”์€ ์ƒˆ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋ฉฐ, ๊ฐ€๊ธ‰์  ๋ฐ์ดํ„ฐ ์†์‹ค ์—†์ด ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ๋น„์–ด ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด์— ๋‚ด์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .NET๊ณผ NodeJS์—๋Š” ๋ชจ๋‘ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—๋Š” ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ๋ฐ•ํƒˆ๋˜์—ˆ์œผ๋ฉฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ Liquibase๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • Amazon LocalStack์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ง‘์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” AWS ์„œ๋น„์Šค์˜ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. Docker Hub์—๋Š” LocalStack์šฉ์œผ๋กœ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ LocalStack์— ํ•„์š”ํ•œ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” AWS CLI๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉ๋จ ์šฐํŽธ ์ง‘๋ฐฐ์›. ์ด์ „์—๋„ ์กด์žฌํ–ˆ์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰๋˜์—ˆ์œผ๋ฉฐ ์ด๋ฏธ ์Šคํƒ ๋“œ์— ๋ฐฐํฌ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž„์˜์˜ HTTP(S) ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‘๋‹ต์ด ์˜ˆ์ƒํ•œ ๋Œ€๋กœ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๋Š” ์ปฌ๋ ‰์…˜์œผ๋กœ ๊ฒฐํ•ฉ๋˜๋ฉฐ ์ „์ฒด ์ปฌ๋ ‰์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์œ„ํ•ด Docker์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž๋™ ํ…Œ์ŠคํŠธ

์ž๋™ ํ…Œ์ŠคํŠธ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

ํ…Œ์ŠคํŠธ ์ค‘์—๋Š” ํ…Œ์ŠคํŠธ ์ค‘์ธ ์„œ๋น„์Šค, Postgres, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋„๊ตฌ, Postman ๋˜๋Š” ํ•ด๋‹น ์ฝ˜์†” ๋ฒ„์ „์ธ Newman ๋“ฑ ๋ชจ๋“  ๊ฒƒ์ด Docker์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Docker๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ๊ณผ์˜ ๋…๋ฆฝ์„ฑ
  • ์ข…์†์„ฑ ์„ค์น˜: Docker๋Š” Docker Hub์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ์„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ: ๊ฐ„๋‹จํžˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Docker ์ž‘์„ฑ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ธํ„ฐ๋„ท์—์„œ ๊ฒฉ๋ฆฌ๋œ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ๋กœ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„์œผ๋กœ ์„œ๋กœ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค. Windows์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด git-bash๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Windows์™€ Linux ๋ชจ๋‘์— ํ•˜๋‚˜์˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. Git ๋ฐ Docker๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. Windows์— Git์„ ์„ค์น˜ํ•˜๋ฉด git-bash๊ฐ€ ์„ค์น˜๋˜๋ฏ€๋กœ ๋ชจ๋‘๊ฐ€ ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ
    docker-compose build
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ LocalStack ์‹คํ–‰
    docker-compose up -d <ะบะพะฝั‚ะตะนะฝะตั€>
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ LocalStack ์ค€๋น„
    docker-compose run <ะบะพะฝั‚ะตะนะฝะตั€>
  • ํ…Œ์ŠคํŠธ ์ค‘์ธ ์„œ๋น„์Šค ์ถœ์‹œ
    docker-compose up -d <ัะตั€ะฒะธั>
  • ํ…Œ์ŠคํŠธ ์‹คํ–‰(Newman)
  • ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€
    docker-compose down
  • Slack์— ๊ฒฐ๊ณผ ๊ฒŒ์‹œ
    ๋…น์ƒ‰ ํ™•์ธ ํ‘œ์‹œ๋‚˜ ๋นจ๊ฐ„์ƒ‰ ์‹ญ์ž๊ฐ€๊ฐ€ ์žˆ๋Š” ๋ฉ”์‹œ์ง€์™€ ๋กœ๊ทธ ๋งํฌ๊ฐ€ ์žˆ๋Š” ์ฑ„ํŒ…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„์—๋Š” ๋‹ค์Œ Docker ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ์ค‘์ธ ์„œ๋น„์Šค๋Š” ํ”„๋กœ๋•์…˜๊ณผ ๋™์ผํ•œ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ตฌ์„ฑ์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • Postgres, Redis ๋ฐ LocalStack์˜ ๊ฒฝ์šฐ Docker Hub์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Liquibase ๋ฐ Newman์šฉ ๊ธฐ์„ฑ ์ด๋ฏธ์ง€๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋“ค์˜ ๋ผˆ๋Œ€ ์œ„์— ์šฐ๋ฆฌ์˜ ๊ฒƒ์„ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • LocalStack์„ ์ค€๋น„ํ•˜๋ ค๋ฉด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ AWS CLI ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

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

๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

์ค€๋น„๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘

์„œ๋น„์Šค๊ฐ€ ํฌํ•จ๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ผ๊ณ  ํ•ด์„œ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ๊ณ„์†๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋•Œ๋•Œ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋‹ค๋ ค๋ผ.sh, TCP ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ๊ธฐํšŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ LocalStack์—์„œ 502 Bad Gateway ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งŽ์€ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ทธ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์œผ๋ฉด ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด ๋ง๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •: SQS์™€ SNS ๋ชจ๋‘์—์„œ 200 ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” LocalStack ํ”„๋กœ๋น„์ €๋‹ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ์ž‘์—… ์ถฉ๋Œ

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

๊ฒฐ์ •: ์Šคํฌ๋ฆฝํŠธ๋Š” COMPOSE_PROJECT_NAME ๋ณ€์ˆ˜๋ฅผ ๊ณ ์œ ํ•œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์œˆ๋„์šฐ ๊ธฐ๋Šฅ

Windows์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ง€์ ํ•˜๊ณ  ์‹ถ์€ ์‚ฌํ•ญ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  1. ์ปจํ…Œ์ด๋„ˆ์˜ ์…ธ ์Šคํฌ๋ฆฝํŠธ์—๋Š” Linux ์ค„ ๋์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์‰˜ CR ๊ธฐํ˜ธ๋Š” ๊ตฌ๋ฌธ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์—์„œ๋Š” ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ธ์ง€ ์•Œ๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Windows์—์„œ ์ด๋Ÿฌํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํŽธ์ง‘ํ•˜๋ ค๋ฉด ์ ์ ˆํ•œ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๋„ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Git์ด ๊ตฌ์„ฑ๋˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

git config core.autocrlf input

  1. Git-bash๋Š” ํ‘œ์ค€ Linux ํด๋”๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๊ณ  exe ํŒŒ์ผ(docker.exe ํฌํ•จ)์„ ํ˜ธ์ถœํ•  ๋•Œ ์ ˆ๋Œ€ Linux ๊ฒฝ๋กœ๋ฅผ Windows ๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ์—†๋Š” ๊ฒฝ๋กœ(๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ๋กœ)์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •: ๊ฒฝ๋กœ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ถ”๊ฐ€ ์Šฌ๋ž˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(/bin ๋Œ€์‹  //bin). Linux๋Š” ์ด๋Ÿฌํ•œ ๊ฒฝ๋กœ๋ฅผ ์ดํ•ดํ•˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šฌ๋ž˜์‹œ๊ฐ€ ํ•˜๋‚˜์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ git-bash๋Š” ๊ทธ๋Ÿฌํ•œ ๊ฒฝ๋กœ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ณ€ํ™˜์„ ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ์ถœ๋ ฅ

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

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

docker-compose up <service> &

์ด๋Š” Docker์—์„œ ํƒ€์‚ฌ ์„œ๋น„์Šค๋กœ ๋กœ๊ทธ๋ฅผ ์ „์†กํ•ด์•ผ ํ•  ๋•Œ๊นŒ์ง€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค - ์ž‘์„ฑ ์ฝ˜์†”์— ๋กœ๊ทธ ์ถœ๋ ฅ์„ ์ค‘์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒ€์€ ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค ๋ถ€์ฐฉ.

๊ฒฐ์ •:

docker attach --no-stdin ${COMPOSE_PROJECT_NAME}_<ัะตั€ะฒะธั>_1 &

ํ…Œ์ŠคํŠธ ๋ฐ˜๋ณต ์ค‘ ์‹๋ณ„์ž ์ถฉ๋Œ

ํ…Œ์ŠคํŠธ๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ง€์›Œ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ ˆ์ฝ”๋“œ์—๋Š” ๊ณ ์œ  ID๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์— ํŠน์ • ID๋ฅผ ๊ธฐ๋กํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ID๊ฐ€ ๊ณ ์œ ํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์š”๊ตฌ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ๊ฐœ์ฒด๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •: Postman ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GUID๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

var uuid = require('uuid');
var myid = uuid.v4();
pm.environment.set('myUUID', myid);

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฟผ๋ฆฌ์—์„œ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. {{myUUID}}, ์ด๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.

LocalStack์„ ํ†ตํ•œ ํ˜‘์—…

ํ…Œ์ŠคํŠธ ์ค‘์ธ ์„œ๋น„์Šค๊ฐ€ SQS ๋Œ€๊ธฐ์—ด์„ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ํ…Œ์ŠคํŠธ ์ž์ฒด๋„ ์ด ๋Œ€๊ธฐ์—ด๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ •: Postman์—์„œ LocalStack์œผ๋กœ์˜ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

AWS ์„œ๋น„์Šค API๊ฐ€ ๋ฌธ์„œํ™”๋˜์–ด SDK ์—†์ด๋„ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ ๋Œ€๊ธฐ์—ด์— ์“ฐ๋ฉด ์ด๋ฅผ ์ฝ๊ณ  ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ SNS์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ ์ค€๋น„ ๋‹จ๊ณ„์—์„œ LocalStack๋„ ๋Œ€๊ธฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ์ด SNS ์ฃผ์ œ๋ฅผ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ ๋Œ€๊ธฐ์—ด์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ „ ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์—์„œ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋Œ€๊ธฐ์—ด์— ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ค‘์ธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” HTTP ์š”์ฒญ ํ…Œ์ŠคํŠธ

์ผ๋ถ€ ์„œ๋น„์Šค๋Š” AWS๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP๋ฅผ ํ†ตํ•ด ์ž‘๋™ํ•˜๋ฉฐ ์ผ๋ถ€ AWS ๊ธฐ๋Šฅ์€ LocalStack์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ •: ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋ชจ์˜์„œ๋ฒ„, ๊ธฐ์„ฑ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๋„์ปค ํ—ˆ๋ธŒ. ์˜ˆ์ƒ๋˜๋Š” ์š”์ฒญ๊ณผ ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์€ HTTP ์š”์ฒญ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. API๋Š” ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ Postman์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

OAuth ์ธ์ฆ ๋ฐ ์Šน์ธ ํ…Œ์ŠคํŠธ

์šฐ๋ฆฌ๋Š” OAuth๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  JSON ์›น ํ† ํฐ(JWT). ํ…Œ์ŠคํŠธ์—๋Š” ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” OAuth ๊ณต๊ธ‰์ž๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค์™€ OAuth ๊ณต๊ธ‰์ž ๊ฐ„์˜ ๋ชจ๋“  ์ƒํ˜ธ ์ž‘์šฉ์€ ๋‘ ๊ฐ€์ง€ ์š”์ฒญ์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๊ตฌ์„ฑ์ด ์š”์ฒญ๋ฉ๋‹ˆ๋‹ค. /.์ž˜ ์•Œ๋ ค์ง„/openid-๊ตฌ์„ฑ, ๊ตฌ์„ฑ์˜ ์ฃผ์†Œ์—์„œ ๊ณต๊ฐœ ํ‚ค(JWKS)๊ฐ€ ์š”์ฒญ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์€ ์ •์  ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

๊ฒฐ์ •: ์šฐ๋ฆฌ์˜ ํ…Œ์ŠคํŠธ OAuth ๊ณต๊ธ‰์ž๋Š” ์ •์  ์ฝ˜ํ…์ธ  ์„œ๋ฒ„์™€ ์—ฌ๊ธฐ์— ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ† ํฐ์€ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜์–ด Git์— ์ปค๋ฐ‹๋ฉ๋‹ˆ๋‹ค.

SignalR ํ…Œ์ŠคํŠธ์˜ ํŠน์ง•

Postman์€ ์›น์†Œ์ผ“์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SignalR์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํ•œ ๋„๊ตฌ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.

SignalR ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹จ์ˆœํ•œ ๋ธŒ๋ผ์šฐ์ € ์ด์ƒ์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .NET Core์—๋Š” ์ด์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. .NET Core๋กœ ์ž‘์„ฑ๋œ ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ์ธ์ฆ์„ ๋ฐ›์€ ํ›„ ํŠน์ • ๋ฉ”์‹œ์ง€ ์‹œํ€€์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ฝ”๋“œ 1๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜ˆ์ƒ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ฝ”๋“œ 0์œผ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

Newman์€ ํด๋ผ์ด์–ธํŠธ์™€ ๋™์‹œ์— ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์ง€์†์ ์ธ ํ†ตํ•ฉ์„ ์œ„ํ•ด Docker์—์„œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ž๋™ ํ…Œ์ŠคํŠธ

์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. --๊ทœ๋ชจ docker-compose ๋ช…๋ น์ค„์—์„œ.

์‹คํ–‰ํ•˜๊ธฐ ์ „์— Postman ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์—ฐ๊ฒฐ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ์žˆ์—ˆ๊ณ  ์—ฌ๊ธฐ์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ์ •: ์ปจํ…Œ์ด๋„ˆ์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฑด๊ฐ• ์ฒดํฌํ˜ธ์ŠคํŠธ์˜ ์Šคํฌ๋ฆฝํŠธ์— ์ƒํƒœ๋ฅผ ์•Œ๋ฆฝ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜์ž๋งˆ์ž /healthcheck๋ผ๋Š” ํŠน์ • ๊ฒฝ๋กœ์— ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Docker ํŒŒ์ผ์˜ HealthCheck ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

HEALTHCHECK --interval=3s CMD if [ ! -e /healthcheck ]; then false; fi

ํŒ€ ๋„์ปค ๊ฒ€์‚ฌ ์ปจํ…Œ์ด๋„ˆ์˜ ์ •์ƒ ์ƒํƒœ, ์ƒํƒœ ๋ฐ ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Newman์ด ์™„๋ฃŒ๋˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฝ”๋“œ 0์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ•ดํ”ผ๋„ค์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค

์œ„์—์„œ ์„ค๋ช…ํ•œ ์–ด๋ ค์›€์„ ๊ทน๋ณตํ•œ ํ›„ ์ผ๋ จ์˜ ์•ˆ์ •์ ์ธ ์‹คํ–‰ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์—์„œ ๊ฐ ์„œ๋น„์Šค๋Š” ๋‹จ์ผ ๋‹จ์œ„๋กœ ์ž‘๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ Amazon LocalStack๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ…Œ์ŠคํŠธ๋Š” ์ž์ฃผ ๋ฐฐํฌ๋˜๋Š” 30๊ฐœ ์ด์ƒ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋ณต์žกํ•œ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ†ตํ•ด 10๋ช… ์ด์ƒ์˜ ๊ฐœ๋ฐœ์ž๋กœ ๊ตฌ์„ฑ๋œ ํŒ€์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ค๋ฅ˜๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€