[nestjs] 자주 사용하는 데코레이터 정리

Uhan33·2024년 3월 11일
0

TIL

목록 보기
44/72
  • 모듈

    • @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의 철학과 디자인 패턴을 준수하는 것이 좋다.
  • 서비스

    • @Injectable
      • 아래에서 자세한 설명이 이어집니다.
  • 엔티티

    • @Entity(”테이블 이름”)
      • 해당 엔티티 클래스가 특정 테이블과 매핑될 엔티티임을 선언한다.
    • @PrimaryGeneratedColumn
      • PK(기본 키) 명시를 위한 데코레이터
    • @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(외래 키)를 매핑할 열을 지정한다.
      • 열의 이름을 선택적으로 설정할 수 있다.

0개의 댓글