-
Notifications
You must be signed in to change notification settings - Fork 2
๐ ๋ก์ปฌ ํ๊ฒฝ ๊ฐ๋ฐ ๋ชจ๋ ๋ฐฐํฌ
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
๋ฅผ ์ ์ด์คฌ๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
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์๋ ์๋์ ๊ฐ์ ๋ก๊ทธ๋ง ์ฐํ์์ ๋ฟ์ด์๋ค..
์ด ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํด 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 ๋ฐ์์ ๋์ํ๊ฒ ๋์๊ณ ,
๋ณ๊ฒฝ์ ๋ํด์๋ ๋ฐ๋ก๋ฐ๋ก ์ ์ฉ๋๋ ๋ชจ์ต์ ํ์ธํ ์ ์์๋ค.
๋ฉ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฒ์ด ์๋๋ผ์ ์๋นํ ์๊ฐ์ ๋ํด ์์ฌ์ด ๋ถ๋ถ์ ์์ง๋ง
์์ง ๋ชปํ ๊ฒฝํ์ด๋ผ๊ณ ์๊ฐํ๋คโฆ
๊ทธ๋๋ ๊ณํํ๋๋ก ๊ตฌ๋์ด ๋๊ณ , ํ์๋ค ๊ฐ๋ฐ ๊ณผ์ ์์ ์๊ฐ ๋จ์ถ์ ๊ธฐ๋ํ ์ ์๋ค๋ฉด
๊ทธ๊ฒ์ผ๋ก ๋ง์กฑํ๋คโฆ
๐ 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์ฃผ์ฐจ