NuxtJS
์์ํ๊ธฐ
Edgegap์ ํ์์ ๋ฐ๋ผ ์๋ฒ๋ฆฌ์ค ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ์ ์๋ ์ง๊ด์ ์ธ ํ๋ซํผ์ ์ ๊ณตํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ Nuxt ์ฑ์ ๋ฐฐํฌํ๋ ๋จ๊ณ๋ฅผ ์ค๋ช ํฉ๋๋ค. ๋ค๋ฅธ ๊ฒ์ ํ์ธํ๊ธฐ ์ ์ yarn ๋๋ npm, npx์ ๊ฐ์ ๋ค๋ฅธ ํจํค์ง ๊ด๋ฆฌ ์ํํธ์จ์ด๊ฐ ์๋์ง ํ์ธํ์ธ์. ์ด ํํ ๋ฆฌ์ผ์์๋ yarn์ ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ํฐ๋ฆฌ์์ ์คํ๋์ด์ผ ํ๋ฉฐ, ์ฒ์์๋ ๋น ํด๋์ผ ์ ์์ต๋๋ค.
ํด๋ ์์น์์ ํฐ๋ฏธ๋์ ์ด๊ณ ๋ค์ ๋ช ๋ น์ ์คํํ์ธ์:
C:\Users\JohnDoe\Documents\demo-nuxt-edgegap> yarn๋ชจ๋ ์ข ์์ฑ์ด ์ค์น๋๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ ๋๋ก ์ค์น๋์๋์ง ํ์ธํ์ธ์:
C:\Users\JohnDoe\Documents\demo-nuxt-edgegap> yarn devyarn dev๋ ๋ชจ๋ ๊ฒ์ด ์์กฐ๋กญ๊ฒ ์งํ๋์์ผ๋ฉด ์ค์น๋ yarn์ ๋ฒ์ ์ ๋ฐํํด์ผ ํฉ๋๋ค. ์ด ๋ถ๋ถ์ด ๋๋๋ฉด ์ด ํํ ๋ฆฌ์ผ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃํ๊ธฐ ์ํ ๋๋จธ์ง ์๊ตฌ ์ฌํญ์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
์๊ตฌ ์ฌํญ
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ํํ๊ธฐ
๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ํํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค. Dockerfile์ ์์ฑํ ๋ค์ ํด๋น ํ์ผ์ Docker์์ ์คํํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. Visual Studio Code๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก ์์ฑํ ํ์ผ์ ํ์ฅ์๋ฅผ ์๋์ผ๋ก ๋ถ์ด์ง ์๊ธฐ ๋๋ฌธ์ Dockerfile์ ์์ฑํ๊ธฐ์ ์ข์ ํ๋ซํผ์ ๋๋ค. ๋ฐ๋ก ๊ทธ๊ฒ์ด ํ์ํฉ๋๋ค. ์ ํ์ผ์ ๋ง๋ค๊ณ ์ด๋ฆ์ Dockerfile๋ก ์ง์ ํ์ธ์. ํ์ผ ์์ ์์ ๋์ปค ๋ก๊ณ ๊ฐ ๋ํ๋ ๊ฒ์ ๋๋ค.
์ด์ ์ฃผ์ ์ข ์์ฑ์ ์ป๊ธฐ ์ํด ์ด ์คํฌ๋ฆฝํธ๋ฅผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ์ฝ 1GB๋ฅผ ์กฐ๊ธ ๋๊ฒ ์์ฑ๋๋ค๋ ์ ์ ์ ๋ ํ์ธ์. ์ด ํํ ๋ฆฌ์ผ ๋ชฉ์ ์๋ ๊ด์ฐฎ์ง๋ง, ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ต์ ํํด์ผ ํฉ๋๋ค:
FROM node:lts as builder
WORKDIR /app
COPY . .
RUN yarn install \
--prefer-offline \
--frozen-lockfile \
--non-interactive \
--production=false
RUN yarn build
RUN rm -rf node_modules && \
NODE_ENV=production yarn install \
--prefer-offline \
--pure-lockfile \
--non-interactive \
--production=true
FROM node:lts
WORKDIR /app
COPY --from=builder /app .
ENV HOST 0.0.0.0
EXPOSE 80
CMD [ "yarn", "start" ]Dockerfile์ ์ ์ฅํ ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์๊ฐ์ ๋๋ค. ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค:
ARM CPU(Mac M1, M2 ๋ฑ)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ค์ ์ ์ฉ ํ์ด์ง.
์๋ฏธ๋ก ์ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ๋ฒ์ ๋ฒํธ๋ฅผ ๋ถ์ด๋ ๊ฒ์ด ๋ฐ๋์งํ์ง๋ง, ์ฒซ ๋ฐฐํฌ ํ Edgegap์์ ๋น๋๋ฅผ ์ ๋ฐ์ดํธํ ๊ณํ์ด ์๋ค๋ฉด ๋ฒ์ ๋ฒํธ๋ฅผ ์์ ํ ์๋ตํ ์ ์์ต๋๋ค.
ํ์ง๋ง ๊ทธ ์ ์ ์๋ก ์์ฑํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ํํ ์ด๋ฏธ์ง ์ ์ฅ์์ ํธ์ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ Docker ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ ๊ณต๋์ง ์์ ์ ์๋ ์ผ๋ จ์ ๋ณด์ ์ด์ ์ ์ ๊ณตํ๋ Harbor๋ฅผ ํตํ ์ฌ์ค ์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์.
ํ์ง๋ง ๊ทธ ์ ์ ์๋ก ์์ฑํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ํํ ์ด๋ฏธ์ง ์ ์ฅ์์ ํธ์ํด์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ Docker ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ ๊ณต๋์ง ์์ ์ ์๋ ์ผ๋ จ์ ๋ณด์ ์ด์ ์ ์ ๊ณตํ๋ Edgegap Registry๋ฅผ ํตํ ์ฌ์ค ์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์.
์ด๋ฏธ์ง๋ฅผ ์ฐ๋ฆฌ ์ ์ฅ์์ ํธ์ํ๋ ค๋ฉด ๋จผ์ ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์๊ฒฉ ์ฆ๋ช ์ผ๋ก ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค:
์ด์ ๋จ์ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฏธ์ง๋ฅผ ํธ์ํ๋ ๊ฒ๋ฟ์ ๋๋ค:
์ข์ต๋๋ค! ์ด์ Edgegap ํ๋ซํผ์ Nuxt ์ฑ์ ๋ฐฐํฌํ๊ธฐ๊น์ง ๋จ ํ ๋จ๊ณ๋ง ๋จ์์ต๋๋ค.
Edgegap์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌํ๊ธฐ
Edgegap์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋ ๋ค ๋น์ฌ ๊ณ์ ์ด ํ์ํ๋ฉฐ, ์ฌ๊ธฐ์์ ๋ฌด๋ฃ๋ก ๊ณ์ ์ ์์ฑํ ์ ์์ต๋๋ค. ๋จผ์ ์น์ฌ์ดํธ๋ฅผ ํตํด ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Edgegap ๋์๋ณด๋๋ฅผ ํตํ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ:
๋ค์ ์น ์ฃผ์๋ก ์ด๋ํ์ฌ ์๊ฒฉ ์ฆ๋ช ์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. ์ ๋ ฅํ๋ฉด ์๋์ผ๋ก ๋์๋ณด๋๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค. ๋ฐฉ๊ธ ๊ณ์ ์ ์์ฑํ ๊ฒฝ์ฐ ๋ฐ๋ก ์ฒซ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๋ ์ต์ ์ ๋ณด๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ํ๋ฉด ์ผ์ชฝ์ ๋ฉ๋ด์์ 'Applications and games' ํญ์ผ๋ก ์ด๋ํ์ธ์. ์ค๋ฅธ์ชฝ ์๋จ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ์ต์ ์ด ๋ณด์ผ ๊ฒ์ ๋๋ค:

ํด๋ฆญํ๋ฉด ๋ค์ ์์์ด ๋ํ๋ฉ๋๋ค:

ํ์ ํ๋๋ฅผ ๋ชจ๋ ์์ฑํด์ผ ํ๋ฉฐ, ์๋ฃํ ํ ๊ธฐ๋ณธ๊ฐ์์ ์์ ํด์ผ ํ ๋ช ๊ฐ์ง๊ฐ ์์ต๋๋ค:
ํฌํธ ๋ฒํธ: ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํธ 3000์ ์ด์ด์ผ ํ๋ฏ๋ก ์์ฑ ์์์ 'ports' ์น์ ์ ์ถ๊ฐํ์ธ์.
์ต๋ ๋ฐฐํฌ ์๊ฐ: ์์ ์ธ๊ธํ๋ฏ์ด ์ฐ๋ฆฌ์ NuxtJS ์ด๋ฏธ์ง๋ ์ฝ 1GB ์ ๋์ ๋๋ค. Edgegap์ ์ด๋ ๊ฒ ํฐ ์ด๋ฏธ์ง๋ฅผ ๋ฐฐํฌํ๋ ค๋ฉด ์ต๋ ๋ฐฐํฌ ์๊ฐ์ ์ฝ 300์ด๋ก ๋๋ ค์ผ ํฉ๋๋ค.
์ ์ ํ ์ ๋ณด๋ก ์์์ ์์ฑํ ํ ์ ์ถํ๋ฉด ๋ฐฐํฌ ์ค๋น๊ฐ ์๋ฃ๋ฉ๋๋ค. ๋จ์ํ ๋ฆฌ์ ๊ณผ ์๋ฎฌ๋ ์ด์ ํ๋ ค๋ ํ๋ ์ด์ด ์๋ฅผ ์ ํํ์ธ์.

์ ํ์ ํ์ธํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณง ์จ๋ผ์ธ ์ํ๊ฐ ๋ฉ๋๋ค. ๋ฐฐํฌ๋ ํ ๋ณผ ์ ์๋ ํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด ์ด๋ฏธ์ง์์ ์์ผ๋ก ํ์ํ ์์ด์ฝ์ ํด๋ฆญํ๋ฉด ์ ์ํ ์ ์์ต๋๋ค.

์ด๋ ๊ฒ ํ๋ฉด Nuxt ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ๋๋ฉ ํ์ด์ง๊ฐ ํ์๋๋ ์ ํญ์ด ์ด๋ฆฝ๋๋ค.
Edgegap์ API๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌํ๊ธฐ
์น ๋์๋ณด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๊ฐ์ฅ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ฐฉ๋ฒ์ด์ง๋ง, ๋งค์ฐ ๊ฐ๋จํ API ์์ฒญ์ ํตํด์๋ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด Postman์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋กํ ์ต์ ์์ API ํ ํฐ ์์ฑ ํ๋กํ์ ์ต์ ์ ํตํด. ๋ค์์ API ํ ํฐ์ ์์ฑํ๋ ๊ฐ๋จํ ๊ฐ์ด๋์ ๋๋ค.
API ํ ํฐ์ ์ป์ผ๋ฉด ๋จ์ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฆ, ๋ฒ์ , IP ์ฃผ์, ๋ฐฐํฌํ ๋ฆฌ์ ๋ฐ ์ธ์ฆ ๋งค๊ฐ๋ณ์์ ์ผ๋ถ๋ก ํ ํฐ์ ํฌํจํ ๋ฐฐํฌ ์์ฒญ์ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ์ ์ฒด ์์ฒญ ์์๋ ์ฐ๋ฆฌ์ ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค.
์์ฒญ์ ๋ณด๋ด๋ฉด ์ปค๋งจ๋ ๋ผ์ธ์ด๋ Postman์์ ๋ค์๊ณผ ์ ์ฌํ ์๋ต์ ๋ณผ ์ ์์ต๋๋ค:

CLI๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ธฐ ์ํด ํด์ผ ํ ์ผ์ ์ด๊ฒ๋ฟ์ ๋๋ค. ์ฑ์ด ๋ฐฐํฌ๋์๋์ง ํ์ธํ๋ ค๋ฉด ๋์๋ณด๋๋ก ๋ค์ ์ด๋ํ์ฌ โActive deploymentsโ ํญ์ ํด๋ฆญํ๋ฉด ํ์ฑ ๋ฐฐํฌ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๋ง์ง๋ง ์ ๋ฐ์ดํธ
๋์์ด ๋์๋์?

