Slack ํด๋ก ์ฝ๋ฉ[๋ฐฑ์๋ with NestJS + TypeORM]
Node.js์ ์คํ๋ง์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ NestJS๋ฅผ ๋ฐฐ์ฐ๊ณ , Dependency Injection์ ํธ๋ฆฌํจ์ ๋ง๋ด ์๋ค. API ๊ฐ๋ฐ๋ถํฐ, ์ต์คํ๋ ์ค์์ ๋น๊ต, ๋ฐฐํฌ, ํ ์คํ ๊น์ง ๋ชจ๋ ๋ฐฐ์๋ด ์๋ค.
์๊ฐ์ 1,932๋ช
๋์ด๋ ์ค๊ธ์ด์
์๊ฐ๊ธฐํ ๋ฌด์ ํ

- ๋ฏธํด๊ฒฐ
๊ฐ์์๋ฃ๋ ์ด๋์ ๋ค์ด๋ฐ๋์?
์ด๋ฐ ์ง๋ฌธ ๋๋ ค ์ฃ์กํด์...;;
node.jsexpressnestjstypeorm๊น์ฑํ
ใป
6๋ฌ ์
0
110
3
- ๋ฏธํด๊ฒฐ
์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์. API ๊ฐ๋ฐ์ ํ๋ค๊ฐ ํด๋ผ์ด์ธํธ์ IP๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉ ํ ์ผ์ด ์๊ฒผ์ต๋๋ค.๊ฐ๋จํ๊ฒ Request ๊ฐ์ฒด์ ip ๊ฐ์ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ, ์ ํฌ ํด๋ผ์ด์ธํธ๊ฐ NextJS์ SSR์ ์ฌ์ฉํด์ ๋ ๋๋ง์ ํ๊ณ ์์ด์ ๋ธ๋ผ์ฐ์ ์์ ์์ฒญ์ ํ๋ฉด
node.jsexpressnestjstypeorm๋ฑ ์ค
ใป
0
294
3
- ๋ฏธํด๊ฒฐ
(๊ฐ์ 5:42 ์ง๋ฌธ) providers๋ฅผ ํตํ ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค ์์ฑ & exports ํตํ ์ฑ๊ธํค ์์ฑ
providers๋ฅผ ํตํด ๋ฑ๋ก๋ UsersService๋ ์ฑ๊ธํค์ธ์ง ๊ถ๊ธํ์ฌ nest.js ๊ณต์๋ฌธ์๋ฅผ ์ฐพ์๋ณด์์ต๋๋ค. UsersModule์ exports๋ฅผ ํตํด ์บก์ํ๋ ๊ณต๊ธ์๋ค์ ๋ด๋ณด๋ด๊ณ , AppModule์ Users
node.jsnestjstypeorm์ฅ๋ด์ค
ใป
0
154
2
- ๋ฏธํด๊ฒฐ
์ฝ๋ ํธ์ง๊ธฐ ํ์ฅ ํ๋ก๊ทธ๋จ
<img src="https://cdn.inflearn.com/public/files/posts/dd6f62cd-7917-4e62-9381-a09839ae4724/5dec6c37-9b4c-4ab1-9d83-3392ec9f7ed9.png" media-type="img"
node.jsexpressnestjstypeorm์์ฑ์ ์์
ใป
0
209
2
- ํด๊ฒฐ
(์ง๋ฌธ)๋น๋ฐ ์ ์ฅ์์ ์ ๊ทผํ๊ธฐ ์ํ ์ธ์ฆ ์ ๋ณด๋ ๋ก์ปฌ .env์ ์ ์ฅํ๋์ง?
๋ง์ฝ ํ๊ฒฝ๋ณ์๋ฅผ ๋น๋ฐ์ ์ฅ์๋ฅผ ํตํด ๋ฐ์์จ๋ค๋ฉด, ๋น๋ฐ ์ ์ฅ์ ์ธ์ฆ์ ๋ํ ํ๊ฒฝ๋ณ์๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๊ฐ์ ธ์ค๋์ง ๊ถ๊ธํฉ๋๋ค.(๋น๋ฐ์ ์ฅ์์ ์ ๊ทผํ๊ธฐ ์ํ ์ธ์ฆ ์ ๋ณด๋ ๋ก์ปฌ.env ํ์ผ์ ์ ์ฅํด์ผ ํ๋๊ฑด๊ฐ์?)
node.jsexpressnestjstypeorm์ฅ๋ด์ค
ใป
0
143
2
- ๋ฏธํด๊ฒฐ
(์ง๋ฌธ)์ธ๋ถ ์ ์ฅ์๋ฅผ ํตํ ํ๊ฒฝ๋ณ์ ๋ถ๋ฌ์ค๊ธฐ ๋น๋๊ธฐ ์ง๋ฌธ
const getEnv = async ()=>{ const response = await axios.get(โ/๋น๋ฐํค์์ฒญโ) return response.data } ๊ฐ์์์
node.jsexpressnestjstypeorm์ฅ๋ด์ค
ใป
0
166
3
- ๋ฏธํด๊ฒฐ
๋ก๊ทธ์ธ์ ํด๋ LoggedInGuard์ชฝ์์ false๊ฐ์ด ๋์ต๋๋ค.
import { createParamDecorator, ExecutionContext } from '@nestjs/common'; //์ ์ฅ๋ ์ฌ์ฉ์ ์ ๋ณด์ ์ ๊ทผ ๊ฐ๋ฅ export const User = createParamDecorator(
node.jsexpressnestjstypeormGI P
ใป
0
151
2
- ๋ฏธํด๊ฒฐ
๋ก๊ทธ์ธ๋ฐฉ๋ฒ์ด ๊ณ ๋ฏผ๋ฉ๋๋ค.
์ ๊ฐ ํ๋ก ํธ์์๋ nextauth๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ nest์์๋ passport๋ฅผ ์ด์ฉํ๊ณ ์๋๋ฐ ๋๋ค ์ธ์ฆ๋ฐ ์ธ๊ฐ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ณด๋๊น ํ์ชฝ์์๋ง ์ธ์ฆ ์ธ๊ฐ๋ฅผ ํ๋๊ฒ ๋ง๋๊ฒ์ธ์ง ์๋๋ฉด ๋๋ค ์จ๋ ๋ฌธ์ ์๋๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
node.jsexpressnestjstypeormGI P
ใป
0
190
2
- ํด๊ฒฐ
yarn seed ๋ช ๋ น์ด ์คํ ์ ๋ฐ์ดํฐ ์ฝ์ ์๋จ
<img src="https://cdn.inflearn.com/public/files/posts/7978f856-1633-4469-b851-4c2a0335c213/c27ecf92-4f0d-45d5-891d-4f456ea7ce67.png" media-type="img"
node.jsexpressnestjstypeorm์๊ธฐ๋ฌธ
ใป
0
296
4
- ํด๊ฒฐ
yarn run db:create ์์ ๋ฐ์ํ๋ ๋ฐ์ฝ๋ ์ดํฐ ์ค๋ฅ
์ ๋ชฉ์ฒ๋ผ ๋ช ๋ น์ด ์คํ์ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.Decorating class property failed. Please ensure that transform-class-properties is enabled and r uns
node.jsexpressnestjstypeorm์๊ธฐ๋ฌธ
ใป
0
242
2
- ๋ฏธํด๊ฒฐ
npm run db:create ์์ ๋ฐ์ํ๋ decorating ์ค๋ฅ
cli ํตํด์ db์์ฑ์ ํ๋ฉด migration ํ ์ด๋ธ์ด ์๊ธฐ์ง ์์์ ์ค๋ฅ๋ฅผ ๋ค์ฌ๋ค ๋ดค๋๋ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ์๊ฒผ์ต๋๋ค.ERROR Decorating class property failed. Please ensure that tran
node.jsexpressnestjstypeormeducation mmax
ใป
0
231
2
- ๋ฏธํด๊ฒฐ
RxJS ๋๋ฒ๊น ์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์. ์ ๋ก์ด๋ ์ ๊ฐ ์ข ์ง๋ฌธ์ด ๋ง์ ๊ฒ ๊ฐ์๋ฐ, ํญ์ ์น์ ํ๊ฒ ๋ต๋ณํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.๋ค๋ฆ์ด ์๋๋ผ, ๊ฐ๋ฐํ๋ฉด์ IDE์ ๋๋ฒ๊น ๋ชจ๋๋ฅผ ์ด์ฉํด๋ณธ์ ์ด ๊ฑฐ์ ์๊ณ , ํญ์ ๊ฐ์ ํ๋ฆ๊ณผ ๋ณํ๋ฅผ ์ฝ์๋ก ์ฐ์ด์ ๋๋ฒ๊น ์ ํ๊ณค ํ๋๋ฐ, ๋๋ฒ๊น ๋ชจ๋๋ฅผ ์ฌ์ฉํ
node.jsexpressnestjstypeorm๋ฑ ์ค
ใป
0
187
3
- ๋ฏธํด๊ฒฐ
CacheManager์ ๋ํด ์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์. ์ต๊ทผ์ ๊ฒ์๋ฌผ ์กฐํ์ ์นด์ดํ ์์ ์ ํ๊ณ ์์ต๋๋ค. ์ด๋ป๊ฒ ๊ตฌ์ฑ์ ํ ์ง ์๊ฐ์ ์ข ํด๋ณด๋ค๊ฐ, `CacheManger (<a target="_blank" rel="noopener noreferrer nofollow" href="https://docs.
node.jsexpressnestjstypeorm๋ฑ ์ค
ใป
0
173
2
- ๋ฏธํด๊ฒฐ
๋ก๊น ์ ์ด๋ป๊ฒ ํ๋๊ฒ ํจ์จ์ ์ผ๊น์?
์๋ ํ์ธ์. ๋ช๊ฐ์ง ์ง๋ฌธ์ด ์์ต๋๋ค. ์ ๋ NestJS์์ ์ง์ํ๋ @nest/common ํจํค์ง์ Logger๋ฅผ ์ฌ์ฉํด์๋๋ฐ์. MTTD๋ฅผ ์ต์
node.jsexpressnestjstypeorm๋ฑ ์ค
ใป
0
222
1
- ๋ฏธํด๊ฒฐ
CORS ์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์.CORS ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ณ ์๋๋ฐ, ์ ์ดํด๊ฐ ๊ฐ์ง ์๋๊ฒ ์์ด์ ์ง๋ฌธ ๋๋ฆฝ๋๋ค.<img src="https://cdn.inflearn.
node.jsexpressnestjstypeorm๋ฑ ์ค
ใป
0
417
2
- ๋ฏธํด๊ฒฐ
์ฟ ํค ์ต์ ์ ๋ํด์ ์ง๋ฌธ ์์ต๋๋ค.
์๋ ํ์ธ์. ๋ฐฑ์๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ๋ ๋๋ฉ์ธ์ด ๋ฌ๋ผ์, ์ฟ ํค์ samesite ์ต์ ์ none์ผ๋ก ์ฃผ๊ณ , secure ์ต์ ์ true๋ก ์ค์ ํด์ ์ฌ์ฉํ๊ณ ์์ต๋
node.jsexpressnestjstypeorm๋ฑ ์ค
ใป
0
184
2
- ๋ฏธํด๊ฒฐ
๋ก๊ทธ์์ ์์ฒญ์ด 403 forbidden ์๋ฌ๊ฐ ๋๋๋ฐ ์๊ทธ๋ฐ๊ฑธ๊น์??
"success": false, "code": 403, "data": "Forbidden resource"์ด๋ ๊ฒ ์๋ฌ๊ฐ๋ฉ๋๋ค.@ApiCookieAuth('connect.sid')
node.jsexpressnestjstypeorm์คํฌ์ค
ใป
0
446
1
- ํด๊ฒฐ
401 unauthorized๋ฌธ์
์๋ ํ์ธ์ ์ ๋ก์ด๋ LocalGuard์์ can์ผ๋ก ๋์ด๊ฐ์ง๊ฐ ์์์ ์ง๋ฌธ๋๋ฆฝ๋๋ค.import { ExecutionContext, Injectable } from '@nestjs/common'; import { AuthGuard } f
node.jsexpressnestjstypeorm์คํฌ์ค
ใป
0
285
1
- ๋ฏธํด๊ฒฐ
๊ฐ๋์ ์ฅ์ ์ ๋ํด์ ์ง๋ฌธ์ด ์์ต๋๋ค.
์๋ ํ์ธ์. ์ ์ ๊ฐ ๊ฐ์ง ๊ถํ์ ๋ฐ๋ฅธ ์ ๊ทผ ์ ์ด ๊ฐ๋ฐ์ ํ๋ค ๋ฌธ๋ ๊ถ๊ธํ ๊ฒ์ด ์๊ฒผ๋๋ฐ์.์ ์ ๊ฐ ๊ถํ์ ๊ฐ๊ณ ์๋์ง ํ์ธํ๊ณ , ์ ๊ทผ์ ํ์ฉ/์ฐจ๋จ ํ๋ ์ฝ๋๋ฅผ ์๋น์ค์์ ์์ฑ ํ ์๋ ์๊ณ , ์ปค์คํ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์์ฑํด์ ์ปจํธ๋กค๋ฌ ๋จ์์ ๋ง์ ์๋ ์์์์
node.jsexpressnestjstypeorm๋ฑ ์ค
ใป
0
225
1
- ๋ฏธํด๊ฒฐ
์ ์ธ๊ณผ ํ ๋น์ด ๋์์ ๋๋๊ฒ์ Nest๋๋ฌธ์ด์๋๋ผ ํ์ ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด ์๋๊ฐ์?
๊ฐ์ 3๋ถ30์ด์ app.controller.ts ๋ถ๋ถ์ ๋๋ค.export class AppController { constructor(private readonly appService: AppService) {
typescriptํฉ์ง์
ใป
0
199
1






