Skip to content

๐Ÿš€ ๋กœ์ปฌ ํ™˜๊ฒฝ ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋ฐฐํฌ

rdyjun edited this page Dec 1, 2024 · 2 revisions

image

GitHub Actions๋ฅผ ํ™œ์šฉํ•œ CICD๋ฅผ ๋๋‚ด๊ณ  ํ•œ ๊ฐ€์ง€ ์š”์ฒญ์„ ๋ฐ›์•˜๋‹ค.

๋ฐ”๋กœ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ๋„์ปค ์ปดํฌ์ฆˆ๋ฅผ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋„์šฐ๋Š” ์ผ์ด์—ˆ๋‹ค.

์ด์™€ ๋™์‹œ์—, ์ˆ˜์ •์‚ฌํ•ญ์ด ๋ฐ”๋กœ ๋ฐ˜์˜์ด ๋˜์–ด์•ผ ํ–ˆ๋‹ค.

์ด ์ž‘์—…์„ ํ•˜๋Š” ์ด์œ ๋Š”โ€ฆ ๋ฐ”๋กœ๋ฐ”๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์•ก์…˜์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ˆ˜์ • ๋ฐฉ์•ˆ

์šฐ์„ ์€ ๊ธฐ์กด์˜ ๋ฐฉ์‹์—์„œ ์–ด๋–ป๊ฒŒ ๋„์›Œ์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค.

๋ฐฑ์—”๋“œ server๋Š” ๊ทธ๋Œ€๋กœ 3000ํฌํŠธ์—์„œ ๋„์šฐ๋ฉด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

ํ”„๋ก ํŠธ ์—”๋“œ๋Š” ํŒŒ์ผ ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ๋งˆ๋‹ค ๋นŒ๋“œํ•˜๊ธฐ๋Š” ๋ฒˆ๊ฑฐ๋กญ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ,

ํ”„๋ก ํŠธ๋„ ๋ฐฑ์—”๋“œ์ฒ˜๋Ÿผ vite๋กœ watch๋ฅผ ์ผœ์„œ ์‹คํ–‰ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

๋ฐฑ์—”๋“œ ์ฒ˜๋ฆฌ๋ถ€ํ„ฐ

๊ธฐ์กด ๋ฐฑ์—”๋“œ Dockerfile์ด yarn start๋กœ ๋˜์–ด์žˆ์–ด์„œ dev๋กœ ๋ฐ”๊ฟ”์ฃผ๋ ค๊ณ  ํ–ˆ์œผ๋‚˜,

์ด Dockerfile์ด GitHub Actions์—์„œ ๋ฐฐํฌ๋  ๋•Œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ, docker-compose ํŒŒ์ผ์—์„œ command ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด Dockerfile์˜ CMD๊ฐ€ ๋ฌด์‹œ๋œ๋‹ค๋Š” ์–˜๊ธฐ๋ฅผ ์ฐพ์•˜๋‹ค.

๊ทธ๋ž˜์„œ docker-compose.yml์— command: yarn --cwd ../app/server dev ๋ฅผ ์ ์–ด์คฌ๋‹ค.

command not found nest

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

server๊ฐ€ ๊ณ„์† restarting ๋˜๊ณ  ์žˆ์—ˆ๋‹คโ€ฆ.

๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ command not found nest๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋–  ์žˆ์—ˆ๋‹คโ€ฆ.?

์ด ๋ฌธ๊ตฌ๋Š” package.json์— ์ •์˜๋œ dev ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‚˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. `

"dev": "nest start --watch"

๊ทธ๋ž˜์„œ ๋“ค์—ˆ๋˜ ์ƒ๊ฐ์€ โ€œnestjs๊ฐ€ ์„ค์น˜๊ฐ€ ์•ˆ๋๋‚˜?โ€ ์˜€๋‹ค.

๊ทธ๋ ‡๊ฒŒ nestjs ๋ฅผ ์„ค์น˜ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

FROM node:22-alpine

WORKDIR /app

COPY package.json yarn.lock .yarnrc.yml tsconfig.json ./
COPY .yarn .yarn
COPY server/ server/

RUN corepack enable && \
    yarn install && \
    yarn add nestjs@cli

WORKDIR /app/server

EXPOSE 3000
CMD ["yarn", "start"]

๊ทธ๋Ÿฐ ๋‹ค์Œ ์‹คํ–‰์„ ํ–ˆ์„ ๋•Œ๋„ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๋ ‡๊ฒŒ ์‚ฝ์งˆ์„ ์—ด์‹ฌํžˆ ํ•˜๋˜ ๋„์ค‘ ํ•œ ๊ฐ€์ง€ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ฐพ์•„๋ƒˆ๋‹ค.

docker-compose์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.

command:
  - yarn --cwd /app/server dev
      
command: yarn --cwd /app/server dev

๊ฒ€์ƒ‰์„ ํ•ด์„œ ์ฐพ์•„๋ณด๋‹ˆ, ์œ„์— ๋ฐฉ์‹์œผ๋กœ ์ ์šฉํ–ˆ์„ ๋•Œ๋Š”

/bin/sh -c "yarn --cwd /app/server devโ€ ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ -c๋Š” ๋’ค์˜ ๋ฌธ์ž์—ด์„ ๋ช…๋ น์–ด๋กœ ํ•ด์„ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.

์œ„ ๋ฐฉ์‹์ฒ˜๋Ÿผ ํ–ˆ์„ ๋•Œ, ๋ฌธ์ œ์ ์€ ์‹ค์ œ ๋ช…๋ น์–ด๋กœ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ž์—ด์„ ํ•ด์„ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋‚จ์€ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์ด๋‹ค.

command: yarn --cwd /app/server dev

command:
  - yarn
  - --cwd
  - /app/server
  - dev

์™œ ์„ ํƒ์ง€๊ฐ€ ํ•˜๋‚˜ ๋Š˜์—ˆ๋ƒ๋ฉด, ์œ„ ๋‚ด์šฉ์„ ํ•™์Šตํ•˜๋ฉด์„œ ์ด๋ ‡๊ฒŒ ์ผ์„ ๋•Œ๋„ ๋™์ž‘ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์œ„ ๋‘˜์˜ ์ฐจ์ด๋Š” ์šฐ์„  command ์˜†์— ๋ฐ”๋กœ ๋ช…๋ น์–ด๋ฅผ ์ ์—ˆ์„ ๋•Œ sh์— ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์—ญํ• ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฆ‰, yarn --cwd /app/server dev ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์Œ

๋‘ ๋ฒˆ์งธ๋Š” ์‰˜์„ ๋นŒ๋ฆฌ์ง€ ์•Š๊ณ  docker ๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ฆ‰, execv("yarn", ["yarn", "--cwd", "/app/server", "dev"]);

sh๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ณด๋‹ค docker ์—์„œ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋„์ปค ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์ด๋ฏธ์ง€์— ์–ด์šธ๋ฆฐ๋‹ค๊ณ  ํŒ๋‹จ๋˜์–ด ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์„ ์ ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


์•„๋งˆ ์—ฌ๊ธฐ์„œ ๊ถ๊ธˆ์ฆ์ด ํ•˜๋‚˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. command:

  • yarn
  • --cwd
  • /app/server
  • dev

์œ„ ๋ฐฉ์‹๊ณผ

command:

  • yarn --cwd /app/server dev

์ด ๋‘˜์€ ๋ชจ๋‘ -๋กœ ์‹œ์ž‘ํ•˜๋Š”๋ฐ ์™œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋‹ค๋ฅด์ง€?

๋ฐ”๋กœ command์˜ ์ธ์ž๊ฐ€ ๋‹จ์ผ ๋ฌธ์ž์—ด๋กœ ์ธ์‹๋œ ๊ฒฝ์šฐ /bin/sh -c๋ฅผ ์“ด๋‹ค๊ณ  ํ•œ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐฑ์—”๋“œ๋ฅผ ๋„์šฐ๊ณ  ์ˆ˜์ •์ด ๋ฐ”๋กœ ๋ฐ˜์˜๋˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ดค๋Š”๋ฐโ€ฆ.

ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€๋Š” ์™ธ์•Š๋˜

ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉํ•œ swagger์˜ api ์„ค๋ช…์„ ๋ฐ”๊ฟ”๋ดค๋‹ค.

/api์— ์ž‘์„ฑ๋œ ์„ค๋ช…์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹คโ€ฆ.

๊ทธ๋ ‡๊ฒŒ ๋ฐฑ์—”๋“œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ–ˆ๊ณ , COPY /server /server ๋กœ ์„œ๋ฒ„ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

์ฆ‰, ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ์— ํŒŒ์ผ์„ ํ•œ ๋ฒˆ ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ , ๋” ์ด์ƒ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ copy ๋ถ€๋ถ„์„ ์ง€์šฐ๊ณ  docker compose์— volume์œผ๋กœ ๋กœ์ปฌ ์„œ๋ฒ„ ํŒŒ์ผ์„ ๋งˆ์šดํŠธ ํ•ด์คฌ๋‹ค.

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ณ  ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ ๊ทธ๋ž˜๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹คโ€ฆ

๊ทธ๋ ‡๊ฒŒ ์‚ฝ์งˆ์„ ํ•˜๋‹ค๊ฐ€ tsconfig.json์— ๊ฐ์‹œ ์˜ต์…˜์„ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

๊ฒฐ๊ตญ tsconfig์— ์•„๋ž˜ ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜์—ˆ๋‹ค.

  "watchOptions": {
    "watchFile": "fixedPollingInterval"
  }

api ์ด๋ฆ„์„ ๋ฐ”๊พธ๋‹ˆ ์„œ๋ฒ„๊ฐ€ ์žฌ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค!

์•„๊นŒ ์ง€์› ๋˜ COPY /server /server ๋ถ€๋ถ„์ด ์‹ค์ œ ๋ฐฐํฌ ๋•Œ GitHub Actions์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ,

์ด๊ฑธ ๊ทธ๋Ÿผ ๋„ฃ์€ ์ƒํƒœ๋กœ ์–ด๋–ป๊ฒŒ ๋งˆ์šดํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๋ผ๋Š” ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ COPY /server /server๋ฅผ ํ•˜๊ณ ์žˆ๋”๋ผ๋„ composeํŒŒ์ผ์—์„œ volume์œผ๋กœ ๋งˆ์šดํŠธํ•˜๋ฉด ํฌ๊ฒŒ ์ƒ๊ด€์—†์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธํ–ˆ๋‹ค.

์ž ์ด์ œ ํด๋ผ์ด์–ธํŠธ

๋ฐฑ์—”๋“œ๋ฅผ ํ–ˆ์œผ๋‹ˆ ํด๋ผ์ด์–ธํŠธ๋„ ์ž˜ ๋  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํฐ ์˜ค์‚ฐ์ด์—ˆ๋‹ค.

๋˜‘๊ฐ™์ด ์ž‘์„ฑํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋„์› ๋Š”๋ฐ

๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘์†ํ•ด๋ณด๋‹ˆ ํ•˜์–€ ํ™”๋ฉด๋งŒ ๋‚˜์˜ค๊ณ  console์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋กœ๊ทธ๋งŒ ์ฐํ˜€์žˆ์„ ๋ฟ์ด์—ˆ๋‹ค..

image

์ด ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด nginx ์„ค์ •๋„ ํ•ด๋ณด๊ณ  vite.config.ts๋„ ์„ค์ •ํ•ด๋ณด๊ณ 

์—ฌ๋Ÿฌ ์˜ต์…˜๋“ค์„ ๋„ฃ์–ด๋ดค์œผ๋‚˜.. ์•„๋ฌด๋Ÿฐ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜๋‹คโ€ฆ

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋ฌธ๋“ docker compose ํŒŒ์ผ์„ ๋ณด๋Š”๋ฐ nginx์— compose: - 5173 ์˜ต์…˜์ด ์žˆ์—ˆ๋‹คโ€ฆ

๊ธฐ๊ฒํ•˜๋ฉฐ nginx์˜ ํฌํŠธ ์„ค์ •์„ ์ง€์› ๋Š”๋ฐ, ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค.

๊ทธ๋ ‡๊ฒŒ ์‚ฝ์งˆ์„ ํ•œ 1~2์‹œ๊ฐ„ ์—ด์‹ฌํžˆ ํ•ด๋ณด๋‹ค๊ฐ€โ€ฆ..

nginx์˜ default.conf ํŒŒ์ผ์„ ์—ด์—ˆ๋Š”๋ฐ ์•„๋ž˜ ์„ค์ •์ด ๋ˆˆ์— ๋“ค์–ด์™”๋‹ค.

root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;

๊ทธ๋ ‡๋‹ค.. ์œ„ ์„ค์ •์€ ํด๋ผ์ด์–ธํŠธ ํŒŒ์ผ์„ ๋นŒ๋“œํ•œ ์ •์  ํŒŒ์ผ์„ ๊ธฐ๋ณธ ๋ฃจํŠธ ํŒŒ์ผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹คโ€ฆ.

๊ฒฐ๊ตญ ์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ๋กœ์ปฌ์˜ client ํŒŒ์ผ์ด nginx์˜ ๊ธฐ๋ณธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ 

/usr/share/nginx/html ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์ •์  ํŒŒ์ผ์ด ๊ธฐ๋ณธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋œ๋‹ค.

์•„๋งˆ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์•„๋ฌด๊ฒƒ๋„ ์—†์–ด์„œ ํ•˜์–€ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์™”๋˜ ๊ฒƒ์ด๋‹ค..

์œ„ ์˜ต์…˜์„ ์ œ๊ฑฐํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ์ด ๋˜์—ˆ๋‹ค..!

๋‹ค๋งŒ, ์—ฌ๊ธฐ์„œ ๋˜ ๋ฌธ์ œ๋Š” ์‹ค์‹œ๊ฐ„ ๋ณ€๊ฒฝ ๊ฐ์ง€๊ฐ€ ์•ˆ๋œ๋‹ค๋Š” ์ ์ด๋‹ค.

๋ฐฑ์—”๋“œ์ฒ˜๋Ÿผ tsconfig.json์— ๊ฐ™์€ ์„ค์ •์„ ๋„ฃ์–ด๋ดค์œผ๋‚˜โ€ฆ์•ˆ๋œ๋‹คโ€ฆ

๊ทธ๋ž˜์„œ ๋˜ ์ด๊ฒƒ์ €๊ฒƒ ์—ด์‹ฌํžˆ ์‚ฝ์งˆ์„ ํ–ˆ์ง€๋งŒ..์ œ๋Œ€๋กœ ๋˜๋Š” ๊ฑด ์—†์—ˆ๋‹ค..

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ docker compose ํŒŒ์ผ์— ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋„ฃ์–ด๋ณด๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ,

environment:
  - CHOKIDAR_USEPOLLING=true
  - WATCHPACK_POLLING=true

๋ฐ”๋กœ ์œ„ ๋‘ ์˜ต์…˜์ด๋‹ค.

  • CHOKIDAR_USEPOLLING์€ node ํ™˜๊ฒฝ์—์„œ์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•œ๋‹ค.
  • WATCHPACK_POLLING์€ web pack๊ณผ react์˜ ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•œ๋‹ค.

์ ์šฉํ•˜์ž๋งˆ์ž ํ”„๋ก ํŠธ ํŒŒ์ผ์„ ๋ฐ”๊พธ๋‹ˆ ํŽ˜์ด์ง€์— ์•ก์…˜์ด ๋ฐ”๋กœ ๋‚˜์™”๋‹ค.

๊ฒฐ๋ง

ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ ๋ชจ๋‘ nginx ๋ฐ‘์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ ,

๋ณ€๊ฒฝ์— ๋Œ€ํ•ด์„œ๋„ ๋ฐ”๋กœ๋ฐ”๋กœ ์ ์šฉ๋˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฉ”์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์„œ ์†Œ๋น„ํ•œ ์‹œ๊ฐ„์— ๋Œ€ํ•ด ์•„์‰ฌ์šด ๋ถ€๋ถ„์€ ์žˆ์ง€๋งŒ

์žŠ์ง€ ๋ชปํ•  ๊ฒฝํ—˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹คโ€ฆ

๊ทธ๋ž˜๋„ ๊ณ„ํšํ•œ๋Œ€๋กœ ๊ตฌ๋™์ด ๋˜๊ณ , ํŒ€์›๋“ค ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด

๊ทธ๊ฒƒ์œผ๋กœ ๋งŒ์กฑํ•œ๋‹คโ€ฆ

inear

๊ธฐ์ˆ  ๊ณต์œ 

๐Ÿš€ ffmpeg๋Š” stderr๋กœ ๋””๋ฒ„๊น…์„ ํ•˜๋Š” ์ด์œ 
๐Ÿš€ HLS ํ”„๋กœํ† ์ฝœ์— ๊ด€ํ•œ ์ •๋ฆฌ ๋ฐ FFmpeg ์‚ฌ์šฉ๊ธฐ
๐Ÿš€ ๋น„ํŠธ๋Š” tsconfig.json์ด ์„ธ ๊ฐœ?
๐Ÿš€ NestJS ๊ธฐ๋ณธ ๊ฐœ๋… - Modules
๐Ÿš€ Socket.io ์ตœ(๊ฐ•)์ ํ™”
๐Ÿš€ ๋„์ปค์™€ nginx์˜ ์‚ฌ์šฉ๊ธฐ
๐Ÿš€ ๋ถ€ํ•˜ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์ž

๊ฐœ๋ฐœ ์ผ์ง€

๐Ÿš€ FSD ์‚ฌ์šฉ๊ธฐ, ๊ทผ๋ฐ ์ด์ œ ๋‚˜๋งŒ์˜ ๊ทœ์น™์„ ๊ณ๋“ค์ธ
๐Ÿš€ CICD ๊ตฌ์กฐ ์ˆ˜์ •
๐Ÿš€ ์•จ๋ฒ” ๋‹จ์œ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•˜๊ธฐ (with HLS)
๐Ÿš€ HLS๋กœ ์Œ์•… ์ฃผ๊ณ ๋ฐ›๊ธฐ
๐Ÿš€ vite + react + typescript ํ™˜๊ฒฝ์—์„œ path alias ์„ค์ •
๐Ÿš€ React Scan์ด ๋ญ์ฃ ?
๐Ÿš€ ๋กœ์ปฌ ํ™˜๊ฒฝ ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋ฐฐํฌ
๐Ÿš€ ์•จ๋ฒ” ์ „์ฒด๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•œ๋‹ค๊ณ ? (with HLS)
๐Ÿš€ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

๐Ÿš€ ์ƒˆ๋กœ๊ณ ์นจ ์‹œ HLS ERROR
๐Ÿš€ input ํƒœ๊ทธ์— ํ•œ๊ธ€ ์ž…๋ ฅ ํ›„, Enter๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•จ์ˆ˜๊ฐ€ ๋‘๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ์˜ค๋ฅ˜
๐Ÿš€ nginx proxy pass๋ฅผ ๋ฐ”๊ฟจ๋”๋‹ˆ ์ƒ๊ธด ์—๋Ÿฌ - ์Šค์›จ๊ฑฐ ์ธ์‹ ๋ฌธ์ œ
๐Ÿš€ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ WS handshake
๐Ÿš€ ๋ Œ๋”๋ง ๋ฒ”์ธ์€ ํ•˜๋‚˜!

ํ˜‘์—… ๊ทœ์น™

๐ŸŒˆ ๊ทธ๋ผ์šด๋“œ ๋ฃฐ
๐Ÿฅ” ํŒ€์› ์†Œ๊ฐœ
๐Ÿ”Ž ์ฝ”๋“œ & ๊นƒ ์ปจ๋ฒค์…˜
๐ŸŒณ ๊นƒ branch ์ „๋žต
๐Ÿ“Œ ๋…ธ์…˜ ๋ฌธ์„œ ์ €์žฅ์†Œ

ํ”„๋กœ์ ํŠธ ๊ธฐํš

๐ŸŽจ ํ”ผ๊ทธ๋งˆ
๐Ÿง‘โ€๐Ÿ’ป ๊ธฐํš ๊ณต์œ  ๋ฐœํ‘œ ์ž๋ฃŒ
๐ŸŽค 2์ฃผ์ฐจ ๋ฐœํ‘œ ์ž๋ฃŒ
๐Ÿ˜Ž ๋ฐฑ๋กœ๊ทธ

๋ฐ์ผ๋ฆฌ ์Šคํฌ๋Ÿผ

๐Ÿ“ 1์ฃผ์ฐจ
๐Ÿ“ 2์ฃผ์ฐจ
๐Ÿ“ 3์ฃผ์ฐจ
๐Ÿ“ 4์ฃผ์ฐจ
๐Ÿ“ 5์ฃผ์ฐจ

์ฃผ๊ฐ„ ๊ณ„ํš์„œ

๐Ÿ—“๏ธ 1์ฃผ์ฐจ
๐Ÿ—“๏ธ 2์ฃผ์ฐจ
๐Ÿ—“๏ธ 3์ฃผ์ฐจ
๐Ÿ—“๏ธ 4์ฃผ์ฐจ
๐Ÿ—“๏ธ 5์ฃผ์ฐจ

๊ทธ๋ฃน ํšŒ๊ณ 

โœจ 1์ฃผ์ฐจ
โœจ 2์ฃผ์ฐจ
โœจ 3์ฃผ์ฐจ
โœจ 4์ฃผ์ฐจ


view

Clone this wiki locally