Node.js/NestJS

[NestJS, TypeORM] 배열, 객체 데이터를 database에 저장하는 법

왈왈디 2023. 5. 11. 15:21
728x90

* 개발 환경: Typescript, NestJS, Typeorm, MySql

 

NestJS 프레임워크로 Typeorm을 통해 MySql database를 사용하려고 하던 중, entity.ts 파일에서 아래와 같은 에러가 발생했다.

'data type array is not supported by mysql database'
//error가 났던 movie.entity.ts 파일

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Movie {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column()
  year: number;

  @Column()
  genres: string[]; //error 발생
}

 

배열 형태의 데이터는 mysql에서 받아들일 수 없다는 내용이다.

처음에는 배열을 string형태로 변환해야 하나 싶었다.

`[]` 배열을 백틱으로 감싼 형태로 일일이 변경하고 실행시켜 보니 에러는 나지 않았다.

 

하지만 찜찜한 마음이 들어 다른 방법이 없을까 하던 중

Typeorm 공식 문서에서 좋은 방법을 발견했다.

@Column() 데코레이터의 인자로 'simple-array'를 넣어주는 방법이다.

이렇게 하면, 데이터 타입을 배열로 지정해도 아무 문제 없이 database에 저장하고 호출하는 게 가능하다.

array 외에도, 'simple-json', 'simple-enum'이라고 입력해주면 json(객체)과 enum도 사용 가능하다.

 

수정한 코드는 아래와 같다.

//수정된 movie.enitity.ts 파일

import { Column, Entity,PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Movie {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @Column()
  year: number;

  @Column('simple-array')
  genres: string[];
}

이렇게 하면 database에 들어갈 때도 문제가 없고, 다른 파일들에서 편하게 'genres'의 type을 string[] 배열로 선언할 수 있다.

728x90