NestJs 6

service에서의 repository 의존 역전하기 - 클린 아키텍처 적용하기

Clean Architecture를 보고 오시면 더 좋습니다. Service에서의 repository 의존 역전하기 기존 service와 repository 코드는 아래와 같습니다. // user.service.ts @Injectable() export class UserService { constructor(private userRepository: UserRepository) { } async findUserByEmail(email: string): Promise { return await this.userRepository.findOneBy({ email }); } async findUserById(id: number): Promise { return await this.userRepository...

NestJs 2023.03.28

Entity -> DTO 변환

Entity -> DTO 변환. 서비스에서? 컨트롤러에서? 서비스에서 Entity -> DTO 변환 저는 아래와 같이 엔티티를 DTO로 변환하는 코드를 서비스에 작성했습니다. 하지만 그렇게 작성하니 문제가 발생했습니다. async signup(@Body() signupDto: UserSignupDto): Promise { return this.authService.signup(signupDto); } async signin(dto: UserSigninDto): Promise { const user = await this.userService.findUserEntityByEmail(dto.email); if (!user) { throw new UserIncorrectEmailException(); } if..

NestJs 2023.03.23

NestJS - @Module(), @Injectable(), @InjectRepository()

@Module(), @Injectable(), @InjectRepository() NestJS는 여러 모듈로 이루어집니다. NestJS에서 @Module() 데코레이터는 그러한 모듈을 만들 때 사용합니다. 모듈은 providers, controllers, impoers, exports를 정의하며 최소 하나 이상의 @Conroller()나 @Provider()를 포함합니다. @Injectable 데코레이터는 클래스를 Injectable 하게 만드는 데 필요한 메타데이터를 NestJS에게 제공합니다. NestJS에서 해당 클래스를 DI 하고자 할 때 @Injectable 데코레이터가 제공하는 메타데이터가 필요합니다. @Injectable()은 아래와 같이 사용합니다. @Injectable() export c..

NestJs 2023.03.17

NestJS - passport

Passport passport는 애플리케이션의 인증을 도와주는 Node.js용 미들웨어입니다. passport는 OAuth, JWT, HTTP 기본/다이제스트 등과 같은 다양한 인증 메커니즘에 알맞은 로직(전략)을 제공해 줍니다. 각 인증에 맞게 미리 만들어진 로직(전략)을 그대로 사용할 수도 있지만 우리 입맛에 맞게 확장할 수도 있습니다. 이러한 '전략'을 통한 유연한 인증을 가능케 하는 것이 passport입니다. OAuth로 인증하고 싶어? OAuth 인증에 필요한 전략(로직) 이미 내가 다 작성해 놓았어! JWT로 인증하고 싶어? JWT 인증에 필요한 전략(로직) 이미 내가 다 작성해 놓았어! ID/PW로 인증하고 싶어? ID/PW 인증에 필요한 전략(로직) 이미 내가 다 작성해 놓았어! 너는 ..

NestJs 2023.03.13

NestJs - Guard

Guard ( 가드 ) nestjs에서 Guard란 "CanActivate" 인터페이스를 구현하는 "@Injectable()" 데코레이터로 주석이 달린 클래스를 뜻합니다. 쉽게 말해, 아래처럼 생긴 클래스가 있다면 무조건 가드라고 부르는 것입니다. @Injectable() class SomeGuard implements CanActivate { canActivate(context: ExecutionContext) { ... } } Guard가 하는 일은 런타임에 존재하는 특정 조건(예: 권한, 역할, ACL 등)에 따라 요청을 이다음으로 넘길지 말지를 결정하는 것입니다. canActive() 함수에서 true를 반환하면 요청이 다음 단계로 넘어가고 false를 반환하면 Nest는 요청을 거부합니다. ca..

NestJs 2023.03.09

NestJS 소개

소개 NestJS는 node.js의 서버사이드 애플리케이션 구축을 위한 프레임워크다. progressive Js를 사용하며 TypeScript를 완벽하게 지원한다. 물론 pure js도 지원하며 oop, fp, frp의 요소를 결합한다. NestJs는 내부적으로 Express(기본값)와 같은 HTTP 서버 프레임워크를 사용하며 선택적으로 Fastify도 사용할 수 있다. Nest는 일반적인 Node.js 프레임워크(Express/Fastify)보다 높은 수준의 추상화를 제공하며, API를 개발자에게 직접 노출한다. 철학 노드(및 서버 측 JavaScript)를 위한 뛰어난 라이브러리, 도우미 및 도구가 많이 존재하지만 그중 어느 것도 아키텍처의 주요 문제를 효과적으로 해결하지 못한다. NestJs는 이를..

NestJs 2022.10.23