Typeorm 사용 엔티티만들기
왜 엔티티를 만들어야 하나?
엔티티는 데이터베이스와의 상호작용을 표현하고 제어하기 위한 중요한 개념이다.
- 데이터베이스와의 매핑: 엔티티를 사용하면 데이터베이스의 테이블과 객체 간의 매핑을 수행할 수 있습니다.
엔티티의 속성은 테이블의 열(Column)에 대응하며, 엔티티 인스턴스는 데이터베이스 레코드에 대응합니다.
이를 통해 객체 지향 프로그래밍과 관계형 데이터베이스 간의 변환 작업을 추상화하여
개발자가 더 직관적이고 편리하게 데이터를 다룰 수 있습니다. - 스키마 유지 및 관리: 엔티티를 사용하면 데이터의 스키마를 정의하고 유지할 수 있습니다.
데이터베이스의 테이블 구조, 속성 타입, 관계 등을 엔티티로 표현하여 코드의 일관성과 가독성을 높이고,
데이터베이스 스키마 변경 시 해당 엔티티를 수정함으로써 관련된 코드를 일관성 있게 유지할 수 있습니다. - 객체 관계 매핑 (ORM): TypeORM은 객체 관계 매핑(ORM)을 지원합니다.
엔티티 간의 관계를 설정하고 관리함으로써 복잡한 데이터베이스 쿼리 및 조인 작업을 단순화할 수 있습니다.
객체 간의 관계를 자연스럽게 표현하고, 객체 지향적인 접근법으로 데이터를 다룰 수 있습니다.
이를 통해 개발자는 객체 간의 관계를 중심으로 코드를 작성하고 데이터베이스 쿼리를 추상화할 수 있습니다. - 유효성 검사와 비즈니스 규칙: 엔티티는 데이터의 유효성을 검사하고 비즈니스 규칙을 적용하는 데
사용될 수 있습니다.TypeORM은 class-validator와 통합하여 엔티티의 속성에
유효성 검사 규칙을 적용할 수 있습니다.
이를 통해 데이터의 일관성을 유지하고 잘못된 데이터 입력을 방지할 수 있습니다. - 데이터베이스 마이그레이션: TypeORM은 데이터베이스 마이그레이션을 지원합니다. 엔티티의 변경 사항을 추적하고 데이터베이스 스키마를 업데이트하는 마이그레이션 스크립트를 자동으로 생성할 수 있습니다. 이를 통해 데이터베이스의 스키마를 쉽게 유지 관리하고, 애플리케이션의 버전 관리와 함께 일관성을 유지할 수 있습니다.

@Entity() - Entity () 데코레이터 클래스는 User 클래스가 엔티티임을 나타내는 데 사용됩니다.
@Column() - Column () 데코레이터 클래스는 User 엔터티의 email 및 username과 같은
다른 열을 나타내는 데 사용됩니다.
@Index() - 데이터베이스 인덱스를 생성합니다.
@JoinColumn() - @JoinColumn을 통해서 어떤 관계쪽이 외래 키(Foreign Key)를 가지고 있는지 나타냅니다. - @JoinColumn을 설정하면 데이터베이스에 propertyName + referencedColumnName이라는 열이 자동으로 생성됩니다. - 이 데코레이터는 @ManyToOne의 경우 선택 사항이지만 @OneToOne의 경우 필수입니다.
엔터티 속성 또는 엔터티에 사용 할 수 있습니다. 엔티티에 사용될 때 복합 열로 인덱스를 생성할 수 있습니다.
데이터베이스에 인덱스 생성 이유는? : 테이블 쿼리 속도를 올려줍니다.특정 컬럼 값을 가지고
열이나 값을 빠르게찾을 수 있게 해 줍니다. 어떠한 정보를 찾을 때 처음부터 모든 데이터를 조회하지 않고데이터 파일의 중간에서 검색위치를 빠르게 잡을 수 있습니다.

One To Many, Many To One .
유저와 게시물 데이터의 관계 형성관계를 형성하기 위해서는 엔티티에 서로간의 필드를 넣어줘야 합니다.

"One-to-Many" 관계는 한 엔티티가 다른 엔티티 여러 개와 연결되는 관계를 의미합니다. 이 관계에서 한 쪽 엔티티는 여러 개의 관련 엔티티와 관계를 맺을 수 있지만, 다른 쪽 엔티티는 해당 관련 엔티티 중 하나와만 관계를 맺을 수 있습니다.
예를 들어, "한 회사에 여러 명의 직원이 있을 수 있다". 이 경우, 회사 엔티티는 여러 개의 직원과의 관계를 가질 수 있으며 각 직원은 한 회사에만 속할 수 있습니다.
One-to-Many 관계는 외래 키(Foreign Key)를 사용하여 구현됩니다.
예를 들어, 위의 예시에서는 직원 엔티티에 회사의 외래 키를 저장하여 해당 회사와의 관계를 맺습니다
"Many-to-One" 관계는 여러 개의 엔티티가 한 엔티티와 관계를 맺는 관계를 의미합니다. 이 관계에서 여러 쪽 엔티티는 한 쪽 엔티티와만 관계를 맺을 수 있습니다.
예를 들어"여러 직원이 한 회사에 속할 수 있다".이 경우여러 직원은 한 회사에 속할 수 있지만,
한 직원은 오직 한 회사에만 속할 수 있습니다. 이 경우, 직원 엔티티는 회사 엔티티와의 Many-to-One 관계를 가집니다.
Many-to-One 관계도 외래 키를 사용하여 구현됩니다.
위의 예시에서는 직원 엔티티에 회사의 외래 키를 저장하여 해당 회사와의 관계를 맺습니다.
외래 키란?
외래 키는 참조하는 테이블에서 1개의 키(속성 또는 속성의 집합)에 해당하 고, 참조하는 측의 관계 변수는 참조되는 측의 테이블의 키를 가리킨다. 참조하는 테이블의 속성의 행 1개의 값은,
참조되는 측 테이블의 행 값에 대응 된다