상세 컨텐츠

본문 제목

[nestJS] 엔티티 만들때 import 하는것들 의미

카테고리 없음

by esoesmio 2024. 5. 10. 13:11

본문

`typeorm`은 Node.js에서 사용할 수 있는 ORM (Object-Relational Mapping) 라이브러리입니다. 이 라이브러리를 사용하면 JavaScript 객체와 데이터베이스 테이블 간의 매핑을 쉽게 설정할 수 있으며, 복잡한 SQL 쿼리 없이 데이터를 처리할 수 있습니다. 아래는 주어진 `typeorm` 데코레이터들의 각각의 역할과 사용 예제를 설명합니다.

### 1. **@Entity**
`@Entity` 데코레이터는 클래스를 데이터베이스 테이블과 매핑합니다. 이 데코레이터가 적용된 클래스의 인스턴스는 테이블의 로우(row)를 나타내며, 클래스의 필드는 테이블의 컬럼(column)과 매핑됩니다.

**예제:**
```typescript

@Entity()
class User extends BaseEntity {
  // 클래스 정의
}


```
이 예제에서 `User` 클래스는 데이터베이스의 `User` 테이블과 매핑됩니다.

### 2. **@PrimaryGeneratedColumn**
이 데코레이터는 필드를 테이블의 기본 키(primary key) 컬럼으로 지정하고, 값이 자동으로 생성되도록 설정합니다. 대부분의 경우, 이 값은 자동 증가하는 숫자입니다.

**예제:**

```typescript
@Entity()
class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;
}


```
여기서 `id` 필드는 자동 증가하는 기본 키 역할을 합니다.

### 3. **@Column**
`@Column` 데코레이터는 클래스 필드를 테이블의 컬럼과 매핑합니다. 이 데코레이터는 필드 타입, 길이, 널 허용 여부 등을 설정할 수 있습니다.

**예제:**
```typescript

@Entity()
class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ type: 'varchar', length: 255 })
  username: string;

  @Column({ type: 'boolean', default: true })
  isActive: boolean;
}


```
`username`은 문자열 컬럼, `isActive`는 불리언 컬럼으로 매핑됩니다.

### 4. **@Unique**
`@Unique` 데코레이터는 지정된 필드의 조합에 대해 유니크 제약조건(unique constraint)을 생성합니다. 이는 테이블에서 각 로우가 해당 필드의 조합에서 고유해야 함을 보장합니다.

**예제:**
```typescript

@Entity()
@Unique(["username"])
class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;
}


```
여기서 `username` 필드는 각 로우에 대해 고유해야 합니다.

### 5. **@OneToMany**
`@OneToMany` 데코레이터는 일대다(one-to-many) 관계를 설정합니다. 이 데코레이터는 두 엔티티 클래스 간의 관계를 정의하며, 여기서 하나의 엔티티는 다른 엔티티의 여러 인스턴스와 관계를 맺을 수 있습니다.

**예제:**
```typescript

@Entity()
class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToMany(() => Photo, photo => photo.user)
  photos: Photo[];
}

@Entity()
class Photo extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  url: string;

  @ManyToOne(() => User, user => user.photos)
  user: User;
}


```
여기서 `User` 엔티티는 여러 `Photo` 엔티티와 연관될 수 있으며, 각 `Photo`는 한 명의 `User`에 속합니다.

이렇게 `

댓글 영역