3 min read

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๋ฐฑ์—”๋“œ๋ฅผ ๊ณต์งœ๋กœ ๋ฐฐํฌํ•˜๋ ค๋ฉด (OCI, MongoDB Atlas)

Table of Contents

๊ฐœ์š”

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

Oracle Cloud Infrastructure

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์ ‘ํ•˜๋Š” ๊ฐ€์žฅ ๋งŽ์€ ํด๋ผ์šฐ๋“œ๋Š” ๋Œ€๊ฐœ AWS ์ •๋„์ผ ๊ฒƒ์ด๋‹ค. ์•„์‰ฝ๊ฒŒ๋„, AWS๋Š” ํ”„๋ฆฌํ‹ฐ์–ด ์ดํ›„์—๋Š” ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฌด๋ฃŒ๋กœ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ Lambda์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ •๋„๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์•ˆ๊ทธ๋ž˜๋„ ํ”„๋กœ์ ํŠธ ๊ธฐ๋™ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ Cold Start ํ•˜๋Š” ์ƒํ™ฉ์€ ์—ฌ๋Ÿฌ๋ชจ๊ณ  ๊ท€์ฐฎ์€ ์š”์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹น์‹ ์„ ์œ„ํ•ด, Oracle์—์„œ ์„œ๋น„์Šคํ•˜๋Š” OCI๊ฐ€ ์žˆ๋‹ค. AWS๋งŒํผ ์ฝ˜์†”์ด ํŽธ๋ฆฌํ•˜์ง€๋„ ์•Š๊ณ , ๋ญ”๊ฐ€ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋งค๋„๋Ÿฝ์ง€ ์•Š์€ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ OCI์—๋Š” ํ”„๋ฆฌํ‹ฐ์–ด์—์„œ๋„ ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ํฐ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (์ธ์Šคํ„ด์Šค ์ด์™ธ์— ์—ฌ๋Ÿฌ ๋ฌด๋ฃŒ ์„œ๋น„์Šค๋“ค๋„ ์กด์žฌํ•œ๋‹ค.)
๋‚˜๋Š” ARM 3-Core / 18GB RAM ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ž˜๋ชป ๋ณธ ์ˆ˜์น˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ 18GB RAM ์ธ์Šคํ„ด์Šค์ด๋‹ค. ๋„‰๋„‰ํ•œ ๋žจ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, Docker ์ปจํ…Œ์ด๋„ˆ ๋ช‡ ๊ฐœ ๋„์šฐ๋Š” ๊ฑธ๋กœ๋Š” ์ „ํ˜€ ๋ถ€๋‹ด์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์••๋„์ ์ธ ์žฅ์ ์ด ์กด์žฌํ•œ๋‹ค. ์ด๋Š” ๊ฐ™์€ ํ”„๋ฆฌํ‹ฐ์–ด์—์„œ๋„ ๊ณ ์ž‘ Spring Boot ํ”„๋กœ์ ํŠธ์™€ DB๋งŒ์„ ๋„์›Œ๋‘๊ณ ๋„ ํ˜น์‹œ๋‚˜ CPU๋‚˜ RAM์ด ํ„ฐ์ ธ์„œ ์„œ๋น„์Šค๊ฐ€ ๋ป—์„๊นŒ๋ด ๊ฑฑ์ •ํ•ด์•ผ ํ•˜๋Š” AWS t2.micro ์ธ์Šคํ„ด์Šค์—์„œ์˜ ๊ฒฝํ—˜๊ณผ ์ƒ๋ฐ˜๋œ๋‹ค.
๋น„๋ก ARM ์ธ์Šคํ„ด์Šค์—์„œ๋Š” aarch64 ์•„ํ‚คํ…์ฒ˜๋กœ ๋นŒ๋“œ๊ฐ€ ๋œ Docker ์ด๋ฏธ์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ œ์•ฝ์ด ์žˆ๊ธด ํ•˜๋‚˜, ์ผ๋‹จ์€ ๋ฌด๋‚œํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค. ์ผ๋‹จ Java Spring Boot(AdoptOpenJDK8)๋‚˜ node 16 ์ •๋„์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ์—ฌ๊ธฐ์— ๋”ํ•˜์—ฌ, x86, amd64 ํ™˜๊ฒฝ์˜ ์ธ์Šคํ„ด์Šค๋„ ๋ฌผ๋ก  ๋ฌด๋ฃŒ๋กœ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค. (๋‹ค๋งŒ ์ด ๊ฒฝ์šฐ, Ubuntu๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€๋Š” ๋ฏธ์ง€์ˆ˜์ด๋‹ค.)

MongoDB Atlas

๋ณดํ†ต ์„œ๋ฒ„๋ฅผ ๋„์šด ์ดํ›„ ๊ฐ€์žฅ ๋น„์šฉ ๋ถ€๋ถ„์—์„œ ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋…€์„์ด DB์ด๋‹ค. AWS RDS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ฌด๋ฆฌ ์ ์€ ๋น„์šฉ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ด๋„ ํ•˜๋ฃจ์— 3์‹œ๊ฐ„ ์ด์ƒ ํˆฌ์žํ•˜๊ธฐ๋„ ์–ด๋ ค์šด ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ๊ฒƒ ์น˜๊ณ ๋Š” ๊ฝค ๋งŽ์€ ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ MongoDB Atlas๋Š” ๊ฝค ์ข‹์€ ์„ ํƒ์ง€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
MongoDB Atlas๋ฅผ Shared ํ”Œ๋žœ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด, MongoDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฌด๋ฃŒ๋กœ ํ˜ธ์ŠคํŒ… ๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ƒ๊ธฐํ•œ OCI ์ธ์Šคํ„ด์Šค ๋‚ด์—์„œ ๋„์ปค์—๋‹ค๊ฐ€ ์›ํ•˜๋Š” DB ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›Œ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋งค๋ ฅ์ ์ด์ง€๋งŒ, ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค์™€ DB ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๊ณผ MongoDB Atlas์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ถ€๊ฐ€ ์„œ๋น„์Šค(๋ˆ์„ ์ข€ ๋‚ธ๋‹ค๋ฉด ํ™•์žฅ๋„ ์šฉ์ดํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์›น ์ƒ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฝ˜์†”๋„ ์ œ๊ณตํ•œ๋‹ค)๋„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฐ€๋ฒผ์šด ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ณ ๋ คํ•ด๋ณผ๋งŒ ํ•˜๋‹ค.
๋”๋ถˆ์–ด Spring์„ ํ•™์Šตํ•˜๋Š” ์ธก๋ฉด์—์„œ๋Š” WebFlux์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ, DB ๋ ˆ์ด์–ด๋ถ€ํ„ฐ Controller ๋ ˆ์ด์–ด๊นŒ์ง€ ์†์‰ฝ๊ฒŒ Full Reactive Stack์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (RDB + R2DBC๋ผ๋Š” ์„ ํƒ์ง€๋„ ์žˆ์ง€๋งŒ)

์ •๋ฆฌ

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

๋.