본문 바로가기
JavaScript/JS & TS

[NestJS]TypeORM과 DB 컬럼 명명 규칙

by noddu 2023. 9. 21.
728x90
반응형

 
 
 

기존 Entity

notice.entity.ts

@Entity()
export class Notice extends BaseEntity {
  @PrimaryGeneratedColumn()
  wr_no: number;

  @Column()
  wr_category: string;

  @Column()
  wr_subject: string;

  @Column()
  wr_content: string;

  @Column()
  wr_hit: number;

  @ManyToOne((type) => Member, (wr_writer) => wr_writer.mb_boards, {
    eager: false,
  })
  wr_writer: Member;

  @Column()
  wr_date: Date;
}

간단한 게시판 Entity를 만들었습니다
TypeORM을 사용해서 Snake 케이스로 DB에 저장하려고 했습니다.
 
 
 

문제 발생!

나머지는 Snake케이스로 저장 됐지만,
맨 마지막 컬럼이 wr_writer_mb_no로 저장이 되는게 아니라 Camel케이스로 저장이 되는 문제가 있었습니다.
 
 
 

반응형

 

 
 

명명 규칙 패키지 설치/ 문제 해결

notice.entity.ts

@Entity()
export class Notice extends BaseEntity {
  @PrimaryGeneratedColumn()
  wrNo: number;

  @Column()
  wrCategory: string;

  @Column()
  wrSubject: string;

  @Column()
  wrContent: string;

  @Column()
  wrHit: number;

  @ManyToOne((type) => Member, (wr_writer) => wr_writer.mbBoards, {
    eager: false,
  })
  wrWriter: Member;

  @Column()
  wrDate: Date;
}

( + 애플리케이션 코드의 필드 명명 규칙은 Camel케이스 라는걸 알았습니다....)
그래서 Entity를 모두 Camel케이스로 변경 했습니다
 
 

npm install typeorm-naming-strategies

그리고 TypeORM에서 DB에 저장할 때 컬럼명을 Snake케이스로 저장하기 위해
명명 전략 패키지를 설치합니다.
 
 

typeorm.config.ts

...
import { SnakeNamingStrategy } from 'typeorm-naming-strategies';

export const typeOrmConfig: TypeOrmModuleOptions = {
  ...
  namingStrategy: new SnakeNamingStrategy(),
};

TypeORM에서 명명 규칙이 적용 되도록 추가합니다.
 
 

 
다시 POST 요청을 보내봅니다.
 
 

명명 규칙 전환이 돼 정상적으로 Snake 케이스로 저장되는 것을 확인할 수 있습니다.

반응형