NestJS에서 엔티티 간 관계 설정하기

2024. 7. 3. 19:51NestJs

728x90
반응형

 

NestJS는 TypeScript 기반의 서버 사이드 프레임워크로, TypeORM과 함께 데이터베이스와의 연동을 지원합니다. 이 글에서는 NestJS 애플리케이션에서 엔티티 간 관계를 설정하고 관리하는 방법에 대해 다루고자 합니다.

 

1. 엔티티(Entities)란?

NestJS에서 엔티티는 데이터베이스 테이블에 매핑되는 객체입니다. 각 엔티티는 애플리케이션의 데이터 모델을 정의하며, TypeORM을 사용하여 데이터베이스와의 CRUD 작업을 수행할 수 있습니다.

2. 엔티티 간 관계의 중요성

엔티티 간의 관계 설정은 데이터베이스 설계에서 중요한 부분입니다. 제대로 된 관계 설정은 데이터의 일관성을 유지하고 복잡한 쿼리를 간소화하는 데 도움을 줍니다. NestJS에서는 다양한 종류의 관계를 지원하며, 각각의 관계는 애플리케이션의 비즈니스 로직을 반영하여 설계됩니다.

3. 엔티티 간의 주요 관계 유형

일대다 관계 (One-to-Many)

일대다 관계는 한 엔티티가 여러 개의 하위 엔티티와 관계를 맺는 것을 의미합니다. 예를 들어, 하나의 글(Post)은 여러 개의 댓글(Comment)을 가질 수 있습니다. 이 관계는 @OneToMany 데코레이터를 사용하여 정의됩니다.

 

// Post 엔티티
@Entity()
export class Post {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @OneToMany(() => Comment, comment => comment.post)
  comments: Comment[];
}

// Comment 엔티티
@Entity()
export class Comment {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  content: string;

  @ManyToOne(() => Post, post => post.comments)
  post: Post;
}

 

 

다대일 관계 (Many-to-One)

다대일 관계는 여러 개의 하위 엔티티가 한 개의 상위 엔티티와 관계를 맺는 것을 의미합니다. 위의 예제에서 Comment 엔티티는 하나의 Post 엔티티에 속할 수 있습니다. 이 관계는 @ManyToOne 데코레이터를 사용하여 정의됩니다.

일대일 관계 (One-to-One)

일대일 관계는 한 엔티티가 정확히 하나의 다른 엔티티와 관계를 맺는 것을 의미합니다. 예를 들어, 사용자(User) 엔티티는 하나의 프로필(Profile) 엔티티를 가질 수 있습니다. 이 관계는 @OneToOne 데코레이터를 사용하여 정의됩니다.

4. NestJS에서 관계 설정하기

NestJS에서 관계 설정은 간단하고 직관적입니다. 각 엔티티 클래스에 TypeORM 데코레이터를 사용하여 관계를 정의하고, 필요한 경우 엔티티 간의 데이터 접근을 편리하게 할 수 있습니다.

// 예시: User 엔티티와 Profile 엔티티의 일대일 관계 설정
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @OneToOne(() => Profile, profile => profile.user)
  profile: Profile;
}

@Entity()
export class Profile {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  fullName: string;

  @OneToOne(() => User, user => user.profile)
  @JoinColumn()
  user: User;
}​

 
728x90
반응형