
TypeORM을 사용하여 데이터베이스와 상호 작용하는 경우,
엔티티(Entity)를 정의하는 것이 일반적인 접근 방식입니다.
엔티티는 데이터베이스 테이블과 매핑되는 클래스로서,
데이터베이스의 특정 테이블에 접근하고 데이터를 조작하는 데 사용됩니다.
엔티티를 사용하면 데이터베이스와 애플리케이션 간의 데이터 구조를 자연스럽게 매핑할 수 있으며, 쿼리 작성, 데이터 유효성 검사 등의 작업을 간편하게 처리할 수 있습니다.
하지만 엔티티를 만들지 않고도 TypeORM을 사용하여 데이터베이스와 상호 작용하는 방법이 있습니다.
TypeORM은 EntityManager를 통해 직접 쿼리를 작성하고 데이터를 조작할 수 있는 저수준의 인터페이스를 제공합니다. EntityManager를 사용하면 데이터베이스에 직접 SQL 쿼리를 실행하거나 데이터를 추가, 수정, 삭제할 수 있습니다.
엔티티를 사용하지 않고 EntityManager를 사용하는 방법은 일부 복잡한 쿼리를 작성하거나 특정 기능을 구현할 때 유용할 수 있습니다.
그러나 엔티티를 사용하는 것이 일반적으로 데이터베이스와 애플리케이션의 구조를 더 명확하게 유지하고 관리하기 쉽게 만듭니다.
엔티티를 사용하면 데이터베이스 테이블과 일치하는 데이터 모델을 정의하여 데이터베이스 스키마를 추상화하고, 애플리케이션 코드를 더 간결하고 읽기 쉽게 만들 수 있습니다.
따라서 대부분의 경우에는 엔티티를 정의하여 TypeORM을 사용하는 것이 좋습니다. 그러나 특정한 상황이나 요구사항에 따라 EntityManager를 사용하는 방법을 선택할 수도 있습니다.
데이터베이스에 접근할 때 무조건 엔티티(Entity)를 사용해야 하는 것은 아닙니다. 엔티티는 TypeORM이 제공하는 ORM(Object-Relational Mapping) 기능을 활용하여 데이터베이스 테이블과 매핑하는 클래스를 의미합니다. 엔티티를 사용하면 데이터베이스 테이블의 구조를 객체로 추상화하고, 객체 지향적인 방식으로 데이터를 다룰 수 있습니다.
하지만 TypeORM은 단순히 ORM만 제공하는 것이 아닙니다. TypeORM은 저수준의 데이터베이스 접근도 가능하도록 EntityManager와 Repository를 제공합니다. EntityManager는 SQL 쿼리를 직접 실행하고 데이터를 조작하는 기능을 제공하며, Repository는 엔티티와 관련된 쿼리를 추상화하여 좀 더 객체 지향적인 인터페이스로 제공합니다.
따라서 데이터베이스에 접근할 때 엔티티를 사용하는 것은 일반적이지만, EntityManager나 Repository를 사용하여 직접 SQL 쿼리를 실행하고 데이터를 다룰 수도 있습니다. 특히 복잡한 쿼리를 작성하거나 특정 기능을 구현해야 할 때, 엔티티를 사용하지 않고 저수준의 접근 방식을 선택하는 경우가 있을 수 있습니다.
또한, TypeORM의 QueryBuilder를 사용하면 쿼리를 더 유연하고 동적으로 작성할 수 있습니다. QueryBuilder를 사용하면 SQL 쿼리를 직접 작성하지 않고도 객체 지향적인 방식으로 쿼리를 구성할 수 있습니다.
따라서 엔티티를 사용할지, EntityManager, Repository, 또는 QueryBuilder를 사용할지는 프로젝트의 요구사항과 개발자의 선호도에 따라 결정됩니다. 각 방식에는 장단점이 있으며, 적절한 방법을 선택하여 데이터베이스에 접근할 수 있습니다.
예시!
import {
BaseEntity,
CreateDateColumn,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
export default abstract class Entity extends BaseEntity {
// 이 데코레이터는 엔티티의 기본 키(primary key) 역할을 하는 id 필드를 정의합니다.
// 데이터베이스에 새로운 레코드를 추가할 때 자동으로 고유한 값을 생성합니다.
@PrimaryGeneratedColumn()
id: number;
// 이 데코레이터는 엔티티가 생성된 날짜 및 시간을 나타내는 createdAt 필드를 정의합니다.
// 레코드가 삽입되었을 때의 날짜 및 시간이 자동으로 기록됩니다.
@CreateDateColumn()
createdAt: Date;
// 이 데코레이터는 엔티티가 마지막으로 업데이트된 날짜 및 시간을 나타내는 updatedAt 필드를 정의합니다.
// 레코드가 업데이트될 때마다 해당 필드가 자동으로 갱신됩니다.
@UpdateDateColumn()
updatedAt: Date;
}
많은 도움이 되었습니다, 감사합니다.