[nestjs] 자주 사용하는 데코레이터 정리
-
모듈
- @Module({모듈 속성들})
imports
- 이 모듈이 의존하는 다른 모듈의 배열
- 다시 말해, 해당 배열에 포함된 모듈들에서 내보낸 프로바이더는 이 모듈에서 사용할 수 있다.
controllers
- 모듈에 의해 관리되는 컨트롤러의 배열
- 이 컨트롤러들은 이 모듈에 정의된 경로를 처리하는데 사용
providers
- Nest.js의 DI(의존성 주입) 시스템에 포함될 서비스, 리포지토리, 팩토리, 헬퍼 등을 나열한다.
- 이들은 모듈 내에서 인스턴스화되고, 모듈 내의 다른 클래스에서 사용할 수 있다.
- 즉, 모듈 내에서만 사용되는 클래스라고 생각하면 된다.
exports
- 모듈 외부에서 사용할 수 있도록 하려는 providers를 나열한다.
- 조금 더 정확하게 말하면 providers 중 일부를 외부로 공개하는 것.
- 다시 말해, 다른 모듈이 특정 모듈을
imports
할 때는 특정 모듈의 exports
에 명시된 providers만 다른 모듈에서 사용할 수 있다.
-
컨트롤러
- @Controller(경로 접두사)
- 클래스를 컨트롤러로 선언하여 요청을 처리하도록 한다.
- 인자로 들어가는 경로 접두사는 컨트롤러의 모든 경로 앞에 추가되고 API 호출 시 해당 경로 접두사를 통해서 호출을 해야 한다
- @UseGuards(가드)
@UseGuards
데코레이터는 CanActivate
인터페이스를 구현하는 가드를 사용하여 특정 라우트의 접근을 제어할 수 있다. 이는 클래스 또는 메소드 레벨에서 사용될 수 있고 하나 이상의 가드를 적용할 수 있다.
- 즉, 해당 데코레이터를 사용하기 위해선 CanActivate 인터페이스를 구현하는 가드를 먼저 준비해놔야 한다
- @Get ~ @Delete
- HTTP 메소드에 해당하는 데코레이터
- 이 때, @Query(), @Body(), @Param()과 같은 데코레이터와 같이 사용될 수 있다.
- @Query() → 쿼리 스트링
- @Body() → 요청의 Body 부분 인출
- @Param() → URL 인자 인출
- @Req, @Res와 같은 데코레이터는 가급적 사용을 지양해야함
- Nest.js의 철학과 디자인 패턴을 준수하는 것이 좋다.
-
서비스
-
엔티티
- @Entity(”테이블 이름”)
- 해당 엔티티 클래스가 특정 테이블과 매핑될 엔티티임을 선언한다.
- @PrimaryGeneratedColumn
- @Column({옵션들})
- 해당 멤버 변수가 테이블의 특정 컬럼과 매핑됨을 선언한다.
- 옵션으로는 type, length, nullable, default와 같은 옵션들이 있다.
- @ManyToOne → @OneToMany와 반드시 한 쌍
- 다대일 관계를 선언한다.
- 첫 번째 인자는 참조하는 부모 엔티티 타입을 함수로 반환.
- 두 번째 인자는 1에서 N의 관계를 정의한다.
- e.g.
@ManyToOne(() => User, user => user.photos)
- 여러개의 Photo 엔티티가 하나의 User 엔티티에 소속된다.
- @OneToMany → @ManyToOne와 반드시 한 쌍
- 일대다 관계를 선언한다.
- 첫 번째 인자는 참조하는 자식 엔티티 타입을 함수로 반환.
- 두 번째 인자는 N에서 1의 관계를 정의한다.
- e.g.
@OneToMany(() => Photo, photo => photo.user)
- 하나의 User 엔티티가 여러 Photo 엔티티를 가질 수 있다.
- @OneToOne
- 일대일 관계를 선언.
- 관계의 양쪽이 서로 한 개의 레코드를 가지고 있음을 의미한다.
- e.g.
@OneToOne(() => Profile, profile => profile.user)
- User 엔티티와 Profile 엔티티 간의 일대일 관계를 선언한다.
- @ManyToMany
- 다대다 관계를 선언.
- 두 엔티티 유형 간에 매핑 테이블이 사용된다.
- e.g.
@ManyToMany(() => Category, category => category.posts)
- Post 엔티티와 Category 엔티티 간의 다대다 관계를 선언한다.
- @JoinColumn()
- 일대일이나 다대일 관계에서 사용되며 FK(외래 키)를 매핑할 열을 지정한다.
- 열의 이름을 선택적으로 설정할 수 있다.