[코팩] NestJs typeorm 설정 및 사용

Seong Hyeon Kim·2024년 2월 22일
0

NestJs

목록 보기
9/14

1. typeorm 설치

터미널창에 npm install @nestjs/typeorm typeorm pg 를 입력해서 설치를 해줍니다.

설치가 잘 되었다면 package.json 파일에 사진처럼 잘 추가된것을 볼 수 있습니다..



2. 앱 모듈에 세팅값 추가

src\app.module.ts

  imports: [
    PostsModule,
    TypeOrmModule.forRoot({
      // 데이터베이스 타입
      type: 'postgres',
      host: '127.0.0.1',
      port: 5432,
      username: 'postgres',
      password: '내가 설정했던 비밀번호~',
      database: 'postgres',
      entities: [],
      synchronize: true,
    })
  ],

imports 부분에 새로 값을 추가해주고 데이터베이스에 관한 정보를 추가로 입력해줍니다. (아직 환경변수를 설정해주지 않았어서 다이렉트로 스트링형태로 작성해줍니다.).

여기서 entities 는 우선 그냥 비어있는 리스트 형태로 놔둡니다. 나중에는 생성할 모델이나 데이터베이스와 연동될 모델들을 작성해줄 예정입니다.

synchronize 는 nestjs 에서 작성하는 typeorm 코드와 DB 의 싱크를 자동으로 맞출껀지를 결정하는 코드입니다. 이 부분은 개발단계에서는 true 로 해놔야 편하지만,

프로덕션 관계에서는 데이터베이스의 구조가 바뀔수도 있기 때문에 반드시 False 로 해줘야 합니다.



3. npm run start:dev 입력해서 서버 실행

실행해주엇을때에 이상이 없이 잘 실행된다면, 성공입니다.

이제 nestjs 에서 typeorm 을 사용해서 도커로 실행중인 postgresql DB 에 연결이 성공했다고 볼 수 있습니다.



4.본격적으로 Entity 만들어보기

entities 라는것은 일반적으로 모델을 지칭하는 단어입니다.
이제 이 엔티티를 orm 을 사용해 쉽게 매핑을하고 DB 에서 테이블이 생성되는것까지 해보겠습니다.



4-1. 엔티티로 사용될 폴더 및 파일 생성

사진처럼 post 폴더 -> entities 폴더생성 -> posts.entity.ts 파일 생성



4-2. 엔티티와 데코레이터 세팅

사실 우리는 이미 이전에 모델을 만든적이 있었습니다.

src\posts\posts.service.ts

export interface PostModel {
  id: number;
  author: string;
  title: string;
  content: string;
  likeCount: number;
  commentConut: number;
}

posts.service.ts 파일안에 이러한 형태로 인터페이스를 만들었던 것을 Entity 에 다시 만들어주면 됩니다.

하지만 이번에는 클래스로 만듭니다.

entities\posts.entity.ts

import { Entity } from 'typeorm';

@Entity()
export class PostsModel {
  id: number;

  author: string;

  title: string;

  content: string;

  likeCount: number;

  commentCount: number;
}

서비스 파일에서 만든것과 비슷하게 만들되, 차이가 있다면 클래스로 만들었다는 점과 그 클래스 위에 @Entity() 라는 데코레이터를 추가해줬다는 부분입니다.

여기서 추가해준 데코레이터 덕분에 typeorm 은 저 클래스의 모델을 토대로 DB에 테이블이 생성되는 것입니다.

여기서 추가로 더 해줘야될 부분이 @Entity() 로 클래스 모델을 데코레이터 해준 것처럼 각각의 값들도 칼럼이라고 지정해줘야 하기 때문에 @Column 으로 데코레이터를 추가해줘야 합니다.

import { Column, Entity } from 'typeorm';

@Entity()
export class PostsModel {
  @Column()
  id: number;

  @Column()
  author: string;

  @Column()
  title: string;

  @Column()
  content: string;

  @Column()
  likeCount: number;

  @Column()
  commentCount: number;
}

이제 이렇게 작성해주면 PostsModel 이라는 모델로 테이블을 만들건데 각각의 컬럼값들은 다음과 같다 라는 형태로 자동 매핑이 되는것입니다.



4-3. 앱모듈로 돌아가서 빈 리스트로 만들어둔 엔티티에 추가해주기.

아까 초기에 만들었던 app.module.ts 파일에서 entities 부분안에 PostsModel 을 추가해줍니다

다만 이렇게 추가하고 실행해보면 사진처럼 오류가 나는걸 볼 수 있는데요, 테이블을 세팅할때 고유값으로 사용될 프라이머리키를 지정해주지 않아서 나는 오류입니다.

엔티티 파일로 돌아서 @Column 으로된 id값의 데코레이터를 @PrimaryGeneratedColumn 로 변경해주면 이 오류는 해결됩니다.



5. 생성된 테이블을 DB에서 확인해보기

좌측에 있는 postgresql explore(코끼리) 아이콘을 클릭후 refresh 를 해보면 새로운 테이블이 생성된 것을 볼 수 있습니다.

업로드중..

profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 백엔드 개발자

0개의 댓글