์„œ๋ก 

Konect ํ”„๋กœ์ ํŠธ์˜ ์Šคํ…Œ์ด์ง€ ๋ถ„๋ฆฌ ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋„์ปค ์ปดํฌ์ฆˆ๋ฅผ ํ†ตํ•ด WAS์™€ DB๋ฅผ ๊ฐ™์ด ๊ด€๋ฆฌํ•˜์ž๋Š” ์˜๊ฒฌ์ด ๋‚˜์™”๊ณ  ํ•ด๋‹น ์ž‘์—…์„ ๊ฐ™์ด ์ง„ํ–‰ํ–ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ–ˆ๋‹ค.

๋ณธ๋ก 

๋„์ปค

๋„์ปค๋Š” ์šด์˜์ฒด์ œ ์ˆ˜์ค€ ๊ฐ€์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํŒจํ‚ค์ง€๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ผ๋ จ์˜ ์„œ๋น„์Šคํ˜• ์ œํ’ˆ๊ตฐ์ด๋‹ค - ์œ„ํ‚ค๋ฐฑ๊ณผ -

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

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

์ด์™ธ์—๋„ ๋„์ปค๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค.

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

๋„์ปค ์ฃผ์š” ๊ฐœ๋…

๋„์ปค ์ฃผ์š” ๊ฐœ๋…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ๋ช…๋ น์–ด ๋“ฑ์€ ๋ณ„๋„์˜ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃจ๊ณ , ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์˜๋งŒ ์งš๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

๋„์ปค ์—”์ง„

๋„์ปค์˜ ๋Ÿฐํƒ€์ž„์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ์š”์†Œ์ด๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ, ์‹คํ–‰ ๊ทธ๋ฆฌ๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. ๋„์ปค ์—”์ง„์˜ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Docker CLI : ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๋ช…๋ น์„ ๋ฐ›์•„ Daemon์— ์ „๋‹ฌํ•œ๋‹ค.
  • Docker API : Daemon๊ณผ CLI ์‚ฌ์ด, ํ˜น์€ ์™ธ๋ถ€ ๋„๊ตฌ์™€ Daemon ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” REST API์ด๋‹ค.
  • Docker Daemon(dockerd) : ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋กœ, ๋ชจ๋“  ๋„์ปค ์ž‘์—…์˜ ์ค‘์‹ฌ์ด๋‹ค.

๋„์ปค ํŒŒ์ผ

๋„์ปค ํŒŒ์ผ์€ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์ž‘์„ฑํ•˜๋Š” ํŒŒ์ผ์ด๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€์˜ ์„ค๊ณ„๋„๋ผ๊ณ  ๋ณด๋ฉด ๋˜๊ฒ ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ์ง€ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์„ฑํ•œ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋ฉฐ, docker build ๋ช…๋ น์–ด๋กœ Dockerfile์„ ์ฝ์–ด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ ๋„์ปค ํŒŒ์ผ์˜ ์ด๋ฆ„์€ Dockerfile์œผ๋กœ ์ง€์ •ํ•ด์•ผํ•œ๋‹ค. WAS๋ฅผ ๋„์ปค๋ผ์ด์ œ์ด์…˜ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•œ ๋„์ปค ํŒŒ์ผ์ด๋‹ค.

# amazoncorretto 17 ๋ฒ„์ „์„ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋กœ ์‚ฌ์šฉ
FROM amazoncorretto:17-alpine  

# ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
WORKDIR /app  

# ๋ณด์•ˆ์„ ์œ„ํ•ด ์ „์šฉ ์œ ์ €/๊ทธ๋ฃน ์ƒ์„ฑ (root ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•จ)
RUN addgroup -S konect && adduser -S konect -G konect  

COPY build/libs/KONECT_API.jar KONECT_API.jar  

# jar ํŒŒ์ผ์˜ ์†Œ์œ ๊ถŒ์„ konect ์œ ์ €๋กœ ๋ณ€๊ฒฝ
RUN chown -R konect:konect KONECT_API.jar  

# ์ดํ›„ ๋ช…๋ น์–ด๋Š” konect ์œ ์ €๋กœ ์‹คํ–‰
USER konect:konect  

EXPOSE 8080  

# ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌ
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \  
  CMD wget --no-verbose --tries=1 --spider http://localhost:8080/actuator/health || exit 1  

ENTRYPOINT ["java", "-jar", "KONECT_API.jar"]

๋„์ปค ์ด๋ฏธ์ง€

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

๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ

๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค. ๊ณต๊ฐœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ธ Docker Hub๊ฐ€ ๋Œ€ํ‘œ์ ์ด๋‹ค. ๋น„๊ณต๊ฐœ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ๋Š” AWS ECR, Github Container Register ๋“ฑ์ด ์žˆ๋‹ค. docker pull ~์ฒ˜๋Ÿผ ๋ณ„๋„ ์ฃผ์†Œ ์—†์ด ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Docker Hub๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋„์ปค ์ปจํ…Œ์ด๋„ˆ

๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ธ์Šคํ„ด์Šค์ด๋‹ค. ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ถ•์–ด๋นตํ‹€๊ณผ ๋ถ•์–ด๋นต์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋  ๊ฑฐ ๊ฐ™๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๊ฒฉ๋ฆฌ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…Œ์ด๋„ˆ A์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ B๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ, ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Stateless์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋’ค์—์„œ ๋‹ค๋ฃฐ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์€ VM์„ ๋‹ค๋ฃจ๋Š” ํฌ์ŠคํŒ…์—์„œ ์ถ”๊ฐ€๋กœ ๋” ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.

๋„์ปค ๋ณผ๋ฅจ

์œ„์—์„œ ์„œ์ˆ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Volume : ๋„์ปค๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค. /var/lib/docker/volumes ์•„๋ž˜์— ์ €์žฅ๋œ๋‹ค.
  • Bind Mount : ํ˜ธ์ŠคํŠธ์˜ ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์™€ ์ง์ ‘ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • tmpfs Mount : ๋ฉ”๋ชจ๋ฆฌ์— ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

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

๋„์ปค ์ปดํฌ์ฆˆ

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

๋„์ปค๋ผ์ด์ œ์ด์…˜

๊ทธ๋Ÿผ ํ”„๋กœ์ ํŠธ์—๋Š” ์–ด๋–ป๊ฒŒ ์ ์šฉ์„ ํ–ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž. ๋จผ์ € ์ธํ”„๋ผ ๊ตฌ์กฐ๋„์ด๋‹ค. ์ธํ”„๋ผ ๊ตฌ์กฐ๋„

  • Github Action์—์„œ ๋นŒ๋“œ ๋ฐ ๋„์ปค ์ด๋ฏธ์ง€ ์ƒ์„ฑ
  • ์ƒ์„ฑ๋œ ๋„์ปค ์ด๋ฏธ์ง€๋Š” ๋„์ปค ํ—ˆ๋ธŒ์— ํ‘ธ์‰ฌ, ์„œ๋ฒ„์—์„œ ๋„์ปค ์ด๋ฏธ์ง€ ํ’€
  • ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ ์ง„ํ–‰

๋„์ปค ์ปดํฌ์ฆˆ๋กœ MySQL, Redis ๊ทธ๋ฆฌ๊ณ  ๋ธ”๋ฃจ/๊ทธ๋ฆฐ WAS๋ฅผ ๋ฌถ์—ˆ๋‹ค. ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ๋„์–ด์ ธ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™•์ธ ํ›„, ๋ฐ˜๋Œ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋„์šด๋‹ค. ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์˜ฌ๋ผ์˜จ ๊ฒฝ์šฐ, ๊ธฐ์กด์— ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฃฝ์ด๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„์„ ํ–ˆ๋‹ค. ๊ด€๋ จํ•ด์„œ ์ฐจ์ธฐ์ฐจ์ฆ˜ ํฌ์ŠคํŒ…์„ ํ•ด๋ณผ ์˜ˆ์ •์ด๋‹ค.

๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ž‘์—… ๊ณผ์ •์—์„œ ์ ‘ํ•œ ๋‚ด์šฉ์˜ ๊ธฐ๋ณธ ์ •์˜๋งŒ ์งš๊ณ  ๋„˜์–ด๊ฐ”๋‹ค. ํฌ์ŠคํŒ…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ์„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.