2024. 7. 3. 19:51ㆍNestJs
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;
}
'NestJs' 카테고리의 다른 글
[NestJS] multer를 사용하여 File upload하기 (0) | 2024.07.11 |
---|---|
NestJS에서 Swagger CLI Plugins 사용하여 API 문서화하기 (0) | 2024.07.10 |
[NestJS] TypeORM QueryBuilder (0) | 2024.07.02 |
[NestJS] 커스텀 데코레이터 (Custom decorator) (0) | 2024.07.01 |
[NestJS] DTO, DI, loC개념 (0) | 2024.06.28 |