-
Notifications
You must be signed in to change notification settings - Fork 2
๐ nginx proxy pass๋ฅผ ๋ฐ๊ฟจ๋๋ ์๊ธด ์๋ฌ โ ์ค์จ๊ฑฐ ์ธ์ ๋ฌธ์
๋ฐฑ์๋ ์๋ฒ์ proxy pass๋ฅผ ๊ธฐ์กด์ http://backend
์์ http://backend/
๋ก ์์ ํ๋๋ ์๊ธฐ๋ ์๋ฌ์ ๊ดํ ์ ๋ฆฌ๋ฅผ ํ ๋ฌธ์์
๋๋ค
์ฐ์ ํด๋ผ์ฐ๋์์ ๋์ปค๋ฅผ ๋๋ฆฌ๋ ค ํ๋ค๋ณด๋ ๊ณ์ํด์ ์๋ฌ๊ฐ ๋ฐ์์ ํ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ๋ก์ปฌ์์ ๋์ปค๋ฅผ ์คํํ๋ ค๋ ํ๊ฒฝ์ ๊ตฌ์ถํด๋์๋ค
ํ์ฌ ๋ฐฑ์๋์ ๋ณ๋์ api์ ๊ด๋ จ๋ ์ฝ๋๊ฐ ์์๊ธฐ์ ๋ฐฑ์๋ ํ
์คํธ๋ก ๊ฐ์ฅ ์ง๊ด์ ์ด๋ผ๊ณ ์๊ฐํ ๊ฒ์ด public
๋๋ ํ ๋ฆฌ ์์ ์๋ server-test.html
ํ์ผ์ ์คํ์ํค๋ ๊ฒ์ด์๋ค.
nginx์ ์ค์ ์ ๋ณด๊ฒ ๋๋ฉด
location /api {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
ํด๋น ๋ฐฉ์์ผ๋ก /api
์ prefix๋ฅผ ๋ถ์ด๋ ์์ฒญ๋ค์ด ๋ฐฑ์๋ ์ปจํ
์ด๋๋ก ํฅํ๊ฒ ๋๋ค.
๊ทธ๋ ๊ธฐ์ localhost/api/socket-test.html
๋ก GET ์์ฒญ์ ๋ณด๋ด๊ฒ ๋์๋๋ฐ ์ด๊ธฐ์ ๋ฐฑ์๋ ์ปจํ
์ด๋๋ฅผ ๋๋ฆฌ๊ณ ๊ธฐ์กด์ฒ๋ผ socket-test.html ์์ฒญ์ ๋ณด๋ด๋ 404์๋ฌ๊ฐ ์ง์์ ์ผ๋ก ๋์๋ค.
socket-test.html์ ์๋ฒ ๋๋ ํ ๋ฆฌ ์์ ์๋ ํ์ผ์ด๋ค๋ณด๋ ๋ฐฑ์๋์ ์์ฒญ์ ๋ณด๋ผ๋ /api๋ฅผ ์ ํํ์ฌ ๋ณด๋ด์ผ ํ๋๋ฐ ๊ทธ๋ ๊ฒ ๋ ๊ฒฝ์ฐ prefix ๊น์ง ์ ์ ํ์ผ ์์ฒญ ๊ฒฝ๋ก์ ํฌํจ์ด ๋์ public ์์์ ํ์ผ์ ์ฐพ์ง๋ฅผ ๋ชปํ๋ค
์ฌ์ค ์ด๋ฐ ๊ฒฝ์ฐ
app.useStaticAssets(join(__dirname, '..', 'public'), {
prefix: '/api'});
}
์ด๋ฐ ์์ผ๋ก prefix๋ฅผ ์ง์ ํด์ฃผ๋ฉด ๋ค์ด์ค๋ ์์ฒญ์์ ์ ์ ํ์ผ ์๋น์ ์งํ์ ํ ๋, ์์ฒญ ์ฃผ์์ /api
prefix๋ฅผ ์์์ ์ ๊ฑฐ๋ฅผ ํด์ฃผ๊ณ ์ฌ๋ฐ๋ฅธ ๊ฒฝ๋ก๋ก ์งํ์ด ๋๋๋ฐ ๋์ ๊ฒฝ์ฐ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ์ฌ๊ธฐ์ ๋ฐ์ํ๋ ์๋ฌ๊ฐ ์๋ค!!!
๋ ๊ฐ์ ๊ฒฝ์ฐ nginx์ default.conf์์ ์ง์ ์ ์ผ๋ก ๋ชจ๋ ์์ฒญ์ ๊ดํ์ฌ api prefix๋ฅผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค
location /api {
proxy_pass http://backend/; //์ฌ๊ธฐ์ ๋ฐฑ์ฌ๋์ ์ถ๊ฐ!!!!
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
์๋ฐ์์ผ๋ก proxy_pass์ trailing slash๋ฅผ ์ถ๊ฐํ๊ฒ ๋ ๊ฒฝ์ฐ ๋ค์ด์ค๋ ์์ฒญ์ ๊ดํ์ฌ api๊ฐ ์ ๊ฑฐ๊ฐ ๋๋ค
์๋ฅผ ๋ค์ด /api/users
์ด๋ฐ์์ ์์ฒญ์ด ๋ค์ด์ค๊ฒ ๋ ๊ฒฝ์ฐ, ๋ฐฑ์๋๋ก ๋๋ค ์ฒ๋ฆฌ๊ฐ ๋๋๊ฑด ๋๊ฐ์ง๋ง
- trailing slash ์๋ ๊ฒฝ์ฐ: http://backend/users (api๊ฐ ์ ๊ฑฐ๋จ)
- trailing slash ์๋ ๊ฒฝ์ฐ: http://backend/api/users (api๊ฐ ์ ๊ฑฐ๋๋ ์์)
๊ทธ๋ ๊ธฐ์ ์ ์ ํ์ผ ์์ฒญ๊ณผ backend api ์์ฒญ๋ค ๋ชจ์กฐ๋ฆฌ ๋ค api๊ฐ ๋ฌด์๋์ด์ ๊ทธ๋ฆฌ ์งํ์ ๋ง์ฝ ํ ๊ฒฝ์ฐ, ๋ฐฑ์๋์ ๊ดํ ์์ฒญ์ฒ๋ฆฌ์ swagger๊ฐ ์ ์ ์๋์ด ๋์ง ์๊ฒ ๋๋ ๊ฒ์ด๋ค!
app.setGlobalPrefix('api');
- ๋ชจ๋ ์ปจํธ๋กค๋ฌ์ ๋ผ์ฐํธ์ ์๋์ผ๋ก '/api' prefix ์ถ๊ฐ
- ์ปจํธ๋กค๋ฌ ์ฝ๋๋ฅผ ์์ ํ ํ์ ์์ด ์ ์ญ์ ์ผ๋ก ์ ์ฉ
setGlobalPrefix('api')
์ ์ฉ ์ :
GET /users
POST /users
setGlobalPrefix('api')
์ ์ฉ ํ:
GET /api/users
POST /api/users
setGlobalPrefix
๋ ๋ผ์ฐํธ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ์ ์๋ํฌ์ธํธ)์๋ง ์ ์ฉ๋๊ณ , ์ ์ ํ์ผ ์๋น์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
๋ํ setGlobalPrefix
๋ Swagger์๋ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๊ธฐ์ swagger๋ด์์๋ ๋ณ๋๋ก prefix๋ฅผ ์ค์ ํด์ผํฉ๋๋ค
๋ฐ๋ผ์ ๋๊ฐ์ ๊ฒฝ์ฐ์๋ prefix๋ฅผ ๋ฐ๋ก ํด๋น ์ฝ๋๋ค ์์์ ๋ช ์๋ฅผ ํด๋ฌ์ผํ๋ค
SwaggerModule.setup('api/api-document', app, document);
app.useStaticAssets(join(__dirname, '..', 'public'), {
prefix: '/api',
});
๐ 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์ฃผ์ฐจ