라떼군 이야기


typeorm에서 entity 상속 시 컬럼 순서 문제

Problem

typeorm을 이용해서 구현 시 updatedAtcreatedAt같은 컬럼을 대부분 엔티티에 공통으로 추가해주고 싶었다. sequelize1를 사용했을 때는 이부분을 자동으로 해줘서 상대적으로 편리 했었지만 typeorm에서는 직접 작업해 줘야 했다.

export class TimestampableEntity {
  @CreateDateColumn({
    type: 'timestamp',
    default: () => 'CURRENT_TIMESTAMP',
  })
  public createdAt: Date;

  @UpdateDateColumn({
    type: 'timestamp',
    default: () => 'CURRENT_TIMESTAMP',
  })
  public updatedAt: Date;
}

위와 같이 TimestampableEntity를 이를 구현하고 상속 받은 다른 엔티티들을 사용하고자 했다.

export class UserEntity extends TimestampableEntity {
  ...
}

동작은 했지만 createdAtupdatedAt이 모든 컬럼의 가장 앞쪽에 생성되는 되는 문제가 생겼다.

Solution

안타깝지만 방법은 없었다. 여기2에서 자세한 내용은 확인할 수 있었다. 항상 ORM만을 이용해서 작업 한다면 상관 없겠지만 (대부분 그렇지 않으므로) 직접 쿼리해야 하는 상황이라면, 중요 필드가 뒷쪽에 위치할 경우 그 만큼 가독성이 떨어질 수 밖에 없었다. typeorm에서는 정의한 순서대로 필드의 순서가 보장되는 것은 아니지만, 상위 엔티티의 필드가 가장 앞쪽에 위치하는 것이 싫다면 typeorminheritance는 사용지 말아야 한다.

References

프리랜서로 제품 기획과 개발을 맡길 파트너가 필요하신가요? 개인, 팀, 기업 누구나 의뢰할 수 있으며 문제 정의부터 출시까지 함께합니다.