๐ก ๋์ปค ์ด๋ฏธ์ง๊ฐ ์ปค์ง๋ฉด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๊ณ , ์ด๋ฏธ์ง ์ต์ ํ ์ ๋ต์ ์์ ํ์์ค.
๋์ปค๊ด๋ จํ์ฌ ์์นญ์ ํด๋ณด๋ฉด, โ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ๋๋ฌด ํฌ๋ค.. ์ต์ ํํด์ผ๊ฒ ๋คโ๋ผ๋ ๊ธ์ ์์ฃผ ์ ํ์๋ค. ๋ ์ญ์ ์ด๋ฒ ํ๋ก์ ํธ์์ BE, FE ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋น๋ํ๋ฉด์
โ์ด๋ฏธ์ง๊ฐ ํฐ ๊ฒ ๋ฌธ์ ์ผ๊น?โ โ์ผ๋ง๋ถํฐ ํฌ๋ค๊ณ ๋ณด๋ ๊ฑฐ์ง?โ
๋ผ๋ ์๊ฐ์ ๋ง์ด ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋์ปค ์ด๋ฏธ์ง๊ฐ ํฌ๋ค๋ ํํ์ ์๋์ ์ธ ๊ฐ๋ ์ด๊ณ , ์ด๊ฑธ ์ต๊ทผ์ ๋ ํ์คํ๊ฒ ๋๊ผ๋๊ฑด ์๋์ ํฌ๋ผ๊ธ์ ๋ฐ๊ฒฌํ๊ณ ๋์ ๋ถํฐ๋ค :
์ฌ๊ธฐ์ ๋์จ ๋ต๋ณ ์ค ์ผ๋ถ๋ฅผ ๋ณด๋ฉด, ์๋์ ๊ฐ๋ค.
โThe word โlargeโ of course is a relative term, as are โfastโ and โslowโ when considering performance.
Youย mayย be falling into the trap of early optimisation before you really know whether you are actually focusing on the right thing or even if you actually have a performance issue โฆ which you very well may not."
์์ฝํ์๋ฉด, ์ด๋ฏธ์ง๊ฐ ํฌ๋ค๊ณ ํด์ ๋ฌด์กฐ๊ฑด ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ ์๋๋ผ
ํ๊ฒฝ, ๋คํธ์ํฌ ์๋, ๋ ์ง์คํธ๋ฆฌ ์์น, ๋ ์ด์ด ์บ์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฒด๊ฐ๋๋ค๋ ์ด์ผ๊ธฐ๋ค.
ํฌ๋ผ์์๋ ๊ฐ์กฐํ๋ฏ์ด, ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ปจํ ์ด๋ ์์ฑ ์๋์ ์ด๋ ์ ๋ ์ํฅ์ ์์ง๋ง
๊ฐ์ฅ ํฐ ์ํฅ์ ์ฃผ๋ ๊ฑด ์ต์ด Pull ์๊ฐ์ด๋ค.
์ฆ, ์ด๋ฏธ์ง๊ฐ ์๋ฌด๋ฆฌ ์ปค๋
๊ทธ๋ฌ๋ ์ฒ์๋ถํฐ โ์ด๋ฏธ์ง๊ฐ ํฌ๋๊น ๋ฌด์กฐ๊ฑด ์ต์ ํ ํด์ผ ํ๋ค!โ๋ผ๊ธฐ๋ณด๋ค ์ค์ ๋ก ๋ณ๋ชฉ์ด ์ด๋ ์๋์ง ํ์ ํด์ ํ์ธํ๋ ๊ฒ ์ฐ์ ์ด๋ผ๊ณ ์๊ฐํ๊ฒ ๋๋ค.
ํ์ง๋ง ์ด ๋ง์ด ์ฒ์๋ถํฐ ์๋ฌด๊ฒ๋ ์ ๊ฒฝ ์ฐ์ง ๋ง๋ผ๋ ๋ป์ด ์๋๋ผ, ์ฒ์๋ถํฐ ์ ์ฉํด๋๋ฉด ์ข์ ๊ธฐ๋ณธ ์์น๋ค์ ์งํค๋, ์ฌํ๋ ์ต์ ํ๋ ๋ฌธ์ ๋ฅผ ๊ณ์ธกํ ๋ค ํ์ํ ๋ ํ๋ค๋ผ๋ ๋ป์ผ๋ก ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๋ณ๋ชฉ์ด ์ด๋์ธ์ง ํ์ธ๋ ํ๊ธฐ ์ ์ ์ต์ ํ๋ฅผ ์์ํ๋ฉด ์คํ๋ ค ์๋ฑํ ๋ถ๋ถ์ ์๊ฐ์ ์ฐ๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ผ ๊ถ๊ธ์ฆ์ ํด์ํ์ผ๋, ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ์ Image๊ฐ ์ปค์ง๋ฉด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ค์ ์๊ฐํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์ด์ธ์๋ ๋ฌธ์ ๊ฐ ๋ง๊ฒ ์ง๋ง, ๋ํ์ ์ผ๋ก ๋ช๊ฐ๋ง ์์ฑํด๋ดค๋ค.
| ๋ฌธ์ | ์ค๋ช |
|---|---|
| ๋ฐฐํฌ/๋ค์ด๋ก๋ ์๊ฐ ์ฆ๊ฐ | ํฐ ์ด๋ฏธ์ง์ผ์๋ก ๋ ์ง์คํธ๋ฆฌ์์ ํ(Pull)ํ๊ฑฐ๋ ๋ ธ๋์ ๋ฐฐํฌํ ๋ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๋ฉฐ, ํนํ ๋คํธ์ํฌ๊ฐ ๋๋ฆฌ๊ฑฐ๋ CI/CD ํ๊ฒฝ์์ ๋ณ๋ชฉ์ด ๋จ. |
| ์คํ ๋ฆฌ์ง ๋ฐ ์บ์ ๋น์ฉ ์ฆ๊ฐ | ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ํฌ๋ฉด ๋ ์ง์คํธ๋ฆฌ ์ ์ฅ ๊ณต๊ฐ, ์บ์๋ ์ด๋ฏธ์ง ๋ ์ด์ด, ํธ์คํธ ๋ ธ๋์ ๋์คํฌ ์ฌ์ฉ๋ ๋ฑ์ด ์ฆ๊ฐ |
| ๋ณด์ ๋ฆฌ์คํฌ ๋ฐ ๊ณต๊ฒฉ ํ๋ฉด ํ๋ | ์ปจํ ์ด๋์ ๋ ๋ง์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํ ์๋ก ์์คํ ์ด ๋ ๋ง์ด ๋ ธ์ถ๋๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ด๋ ค์์ง. ๋ํ ๋ถํ์ํ ๋ ์ด์ด๊ฐ ๋ง์ผ๋ฉด ๊ณผ๊ฑฐ ์ญ์ ๋ ํ์ผ์ด๋ผ๋ ๋ ์ด์ด ํ์คํ ๋ฆฌ์ ๋จ์ ์์ ์ ์์ |
| ์์ยท์ค์ผ์ผ๋ง ์ง์ฐ | ํฐ ์ด๋ฏธ์ง์ผ ๊ฒฝ์ฐ ์ปจํ ์ด๋ ์์ ์๊ฐ์ด ์์ ์ด๋ฏธ์ง์ ๋นํด ๋๋ฆด ์ ์๊ณ , ํนํ ์คํ ์ค์ผ์ผ๋ง์ด๋ ๋ ธ๋ ์ ๊ท ํ๋ก๋น์ ๋ ์ ์ง์ฐ์ด ์๊ธธ ์ ์์ |
Alpine ๋ฑ์ ๊ฐ๋ฒผ์ด Base ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ํจํค์ง๋ค์ ์ฌ์ ์ ์ ๊ฑฐDocker ๊ณต์๋ฌธ์์์๋ โ๊ฐ์ฅ ์์ base image๋ถํฐ ์์ํ๋ผโ ๊ณ ๊ฐ์กฐํ๊ณ ์์
# BAD
FROM node:16
WORKDIR /app
COPY package.json ./
COPY package-lock.json ./
...
#Good
FROM node:16
WORKDIR /app
COPY package*.json ./
...
COPY๋ก ๋ณต์ฌ๋ ์์คํ์ผ์ด ๋ฐ๋) ๊ทธ ๋ ์ด์ด ์ดํ์ ๋ชจ๋ ๋ ์ด์ด๋ ์บ์๊ฐ ๋ฌดํจํ๋ผ์ ๋ค์ ๋น๋๋จ โ ๋ณ๊ฒฝ ๋น๋๊ฐ ๋ฎ์ ๋ช
๋ น์ ์์ชฝ์ ๋ฐฐ์นํ๋ผ๋ ์ด์ !Dockerfile ๊ตฌ์กฐ, COPY ์์, ๋ณ๊ฒฝ ๋น๋ ๋ถ๋ฆฌ ๋ฑ์ด ์ค์ํจ
Dockerfile ์ ์ฒด ์ฝ๋๋ ์ด์ ํฌ์คํ
์ ์ ๋ฆฌํด๋์๋ค.
๐ ์ด์ ํฌ์คํ โ Docker Compose ๊ธฐ๋ฐ ์๋ฒ ๋ฐฐํฌ ๊ธฐ๋ก
node:24-alpine์ ์ ํํด OS ๋ ๋ฒจ ํจํค์ง๋ฅผ ์ต์ํํ๊ณ
package.json์ ๋จผ์ COPYํด npm install ์บ์๋ฅผ ํ์ฉํ ์ ์๋๋ก ๊ตฌ์ฑํ์ผ๋ฉฐ
production ๋ชจ๋๋ฅผ ๋ช ์ํด ๋ฐํ์ ํ๊ฒฝ์ ๊ฐ๋ณ๊ฒ ์ ์งํ๋ค.
๋น๋๋ฅผ ์ํ gradle:8.5-jdk21๊ณผ
์คํ์ ์ํ eclipse-temurin:21-jre๋ฅผ ๋ถ๋ฆฌํด
๋ฉํฐ์คํ ์ด์ง ๋น๋๋ฅผ ๊ตฌ์ฑํ๊ณ
Gradle ์ค์ ํ์ผ์ ๋จผ์ COPYํด dependency ๋ ์ด์ด์ ์บ์๊ฐ ์ ์ ์ง๋๋๋ก ์ค๊ณํ๋ค.
์ฆ, ๋๋ ์ด๋ฒ์ โ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ต์ ํํ ๊ฒโ์ด ์๋๋ผ ์ด๊ธฐ ์ค๊ณ ๋จ๊ณ์์๋ถํฐ ๊ณต์๋ฌธ์์ ์ต์ ํ ์์น์ ์์ฐ์ค๋ฝ๊ฒ ์ ์ฉํด์ ์ฒ์๋ถํฐ ๊ฐ๋ฒผ์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ์ค๊ณํ๋ค.
Docker image ์ต์ ํ ๋ฐฉ๋ฒ์ ๊ณต์๋ฌธ์์ ๋ ๋ค์ํ ๊ธฐ๋ฒ์ด ์์ง๋ง, ์ด๋ฒ ๊ธ์์๋ ๋ํ์ ์ด๊ณ ์ค์ ์์ ๋ง์ด ์ฐ์ด๋ ์์น๋ค๋ง ์ ๋ฆฌํด๋ณด์๋ค.
๋์ปค ์ด๋ฏธ์ง ์ต์ ํ๋ โ์ฒ์๋ถํฐ ๊ณผํ๊ฒ ํ๋ ๊ฒโ์ด ์๋๋ผ, ๊ธฐ๋ณธ์ ์ธ Best Practice๋ ์ด๊ธฐ์ ์ ์ฉํด๋๊ณ , ์ค์ ๋ก ๋ณ๋ชฉ์ด๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋๋ฌ๋ฌ์ ๋ ํ์ํ ์์ญ์ ์ถ๊ฐ๋ก ์ต์ ํํ๋ ๋ฐฉ์์ด ๊ฐ์ฅ ํจ์จ์ ์ด๋ผ๊ณ ๋๊ผ๋ค.
๋ฉํฐ์คํ ์ด์ง ๋น๋, ์ต์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ ํ, ์บ์ ์ ๋ต ๊ฐ์ ์์๋ค์ ์ฒ์๋ถํฐ ์ ์ฉํด๋๋ฉด ์ข์ โ๊ธฐ๋ณธ ์ค๊ณโ๊ฐ์ ๋๋์ด๊ณ , ์ดํ ์๋น์ค๊ฐ ํ์ฅ๋๋ฉด์ ๋น๋ยท๋ฐฐํฌ ์๋๋ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๋ ์ธก์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ ๋ถ๋ถ์ ๋ค์ ๋ค๋ฌ์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ์ ๋์ปค ๊ธฐ๋ฐ์ผ๋ก FE/BE๋ฅผ ์ง์ ๋น๋ํ๊ณ ๋ฐฐํฌํด๋ณด๋ฉด์,
์ด๋ฏธ์ง ์ต์ ํ ๋ฅ๋ค์ด๋ธ์์ ์ ๋ฆฌํ๋ ๋ด์ฉ๋ค์ด ์ค์ ์์
์ ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐ๋์๋ค.
์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ โํฌ๋ค/์๋คโ๋ผ๋ ์๋์ ์ธ ๊ฐ๋
์ด๋,
์ต์ ํ๋ ๋ฌด์กฐ๊ฑด ์ฒ์๋ถํฐ ํ๋ ๊ฒ ์๋๋ผ ๊ธฐ๋ณธ ์์น์ ์ ์ฉํด๋๊ณ
๋ฌธ์ ๊ฐ ๋ณด์ผ ๋ ๋ณ๋ชฉ์ ์ฐพ์์ ๊ฐ์ ํ๋ ๊ฒ์ด๋ผ๋ ๊ด์ ์ด ์ค์ Dockerfile ์์ฑ ๊ณผ์ ์์ ๊ณ์ ๋ ์ฌ๋๋ค.
โ์ด๋ก โ ์ค์ ์ ์ฉโ ํ๋ฆ์ ๋ฐ๋ก ๊ฒฝํํ ์ ์์๊ณ ,
์ด๋ฏธ์ง ์ต์ ํ๋ผ๋ ์ฃผ์ ๊ฐ ๋จ์ํ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ์์
์ด ์๋๋ผ
๋ฐฐํฌ ์๋, ์ค์ผ์ผ๋ง ๋์, ๋ณด์ ์์ ์ฑ๊น์ง ์ฐ๊ฒฐ๋๋ ์ค์ํ ์ค๊ณ ์์๋ผ๋ ๊ฑธ ํ์คํ ๋๊ผ๋ค.
์ด๋ฒ ๊ณผ์ ๋๋ถ์ ์์ผ๋ก Dockerfile์ ์์ฑํ ๋ ๋ ๊ตฌ์กฐ์ ์ผ๋ก, ๋ ๊ทผ๊ฑฐ ์๊ฒ ์ ๊ทผํ ์ ์์ ๊ฒ ๊ฐ๋ค.