본문 바로가기
NestJS

TypeORM - Entity Column 탐구

by Programmer.Junny 2025. 2. 24.

@Column

기본 컬럼

일반적인 데이터베이스 테이블의 컬럼을 정의할 때 사용한다.
데이터 타입, 길이, null 허용 여부, 기본값 등 다양한 옵션을 지정할 수 있다.

@Column({ type: 'varchar', length: 100 })
  name: string;

참고로 @Column() 으로 해두면 자동으로 타입을 추론한다.

@PrimaryGeneratedColumn

기본키 컬럼

자동 증가(primary key) 컬럼을 정의할 때 사용한다.
주로 숫자형(primary key: int)이나 uuid 타입을 사용할 수 있다.

@PrimaryGeneratedColumn()
id: number;

@PrimaryColumn

기본키 컬럼

수동으로 값을 할당하는 기본키를 정의할 때 사용한다.
예를 들어, 문자열로 된 기본키 등을 설정할 수 있다.

@PrimaryColumn({ type: 'varchar', length: 36 })
uuid: string;

@CreateDateColumn

생성 날짜/시간 컬럼 데코레이터

레코드가 생성될 때 자동으로 현재 날짜와 시간이 저장된다.
생성 시각을 자동 관리해주므로, 별도의 값을 넣을 필요가 없다.

@CreateDateColumn()
createdAt: Date;

@UpdateDateColumn

변경 날짜/시간 컬럼 데코레이터

레코드가 수정될 때마다 자동으로 업데이트된 날짜와 시간이 저장된다.

@UpdateDateColumn()
updatedAt: Date;

@DeleteDateColumn

삭제 날짜/시간 컬럼 데코레이터

소프트 삭제(soft delete)를 구현할 때 사용한다.
해당 컬럼에 삭제 시각이 기록되면, 실제 데이터는 남아있으면서 삭제된 것으로 간주할 수 있다.

@DeleteDateColumn()
deletedAt: Date;

컬럼 옵션

type

데이터베이스에서 인지하는 칼럼 타입

작성하지 않으면 프로퍼티 타입으로 자동 추론된다.

@Column()
email: string;
@Column({ type: 'varchar' })
email: string;

name

칼럼 이름

프로퍼티 이름으로 자동 추론된다.

@Column()
email: string;
@Column({ name: 'email' })
email: string;

length

값의 길이

// 300자만 입력가능
@Column({ length: 300 })
email: string;

nullable

null 허용 여부

@Column({ nullable: true })
description?: string;

update

find 계열 함수를 사용할 때 기본으로 값을 불러올지 여부.

기본값이 true이다. 최신 @nestjs/typeorm 에선 false여도 에러를 발생시키지 않는 이슈가 있다.

select

아무것도 입력 안했을때 기본으로 입력되게 하는 값.

특정 컬럼을 기본 조회(select) 결과에서 제외하고 싶을 때 사용한다.
보안상 민감한 정보(예: 비밀번호)나 불필요한 데이터를 기본 쿼리 결과에 포함시키지 않기 위해 활용된다.

default

기본값을 설정할 수 있다.

@Column({ default: 0 })
points: number;

unique

데이터베이스 레벨에서 해당 컬럼의 값이 중복되지 않도록 하는 유니크 제약 조건(Unique Constraint)을 설정하는 기능이다. 이는 데이터 무결성을 유지하고, 중복된 데이터 입력을 방지하는 데 중요한 역할을 한다.

@Column({ type: 'varchar', unique: true })
email: string;

enum

export enum Role {
    USER = 'user',
    ADMIN = 'admin',
}

위와 같은 enum이 있다고 가정했을 때,

@Column({
        type: 'enum',
        enum: Role,
        default: Role.USER,
    })
role: Role;

컬럼 내의 속성으로 enum을 지정할 수 있다.

'NestJS' 카테고리의 다른 글

TypeORM - 일대일 관계 구현  (0) 2025.02.24
Entity Embedding VS Table Inheritance  (0) 2025.02.24
TypeORM - Repository 주입하기  (0) 2025.02.24
TypeORM - Entity로 테이블 생성하기  (0) 2025.02.24
TypeORM - NestJS에 설정하기  (0) 2025.02.24

최근댓글

최근글

skin by © 2024 ttuttak