NestJS와 PostgreSQL을 연동하는 방법과 데이터 저장 방법에 대해 자세히 설명드리겠습니다.
PostgreSQL과의 연동에는 TypeORM 또는 Sequelize 같은 ORM(Object-Relational Mapping) 라이브러리를 사용할 수 있습니다.
이 예제에서는 TypeORM을 사용하여 PostgreSQL과 연결하고 데이터를 저장하는 방법을 포스팅 하였습니다.
NestJS 프로젝트를 새로 생성하거나 기존 프로젝트에 PostgreSQL을 연동할 수 있습니다.
새로운 프로젝트를 생성하려면 다음 명령어를 사용하세요.
nest new my-nestjs-project
cd my-nestjs-project
PostgreSQL과 TypeORM을 사용하려면 관련 패키지를 설치해야 합니다.
다음 명령어를 사용하여 @nestjs/typeorm, typeorm, 및 pg 패키지를 설치합니다.
npm install @nestjs/typeorm typeorm pg
NestJS에서 TypeORM을 사용하여 PostgreSQL 데이터베이스에 연결하려면, AppModule에서 TypeORM 모듈을 설정해야 합니다.
app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { User } from './user.entity'; // 엔티티 임포트
import { UserService } from './user.service';
import { UserController } from './user.controller';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: 'localhost', // PostgreSQL 서버 주소
port: 5432, // PostgreSQL 포트
username: 'postgres', // PostgreSQL 사용자 이름
password: 'password', // PostgreSQL 비밀번호
database: 'testdb', // 데이터베이스 이름
entities: [User], // 엔티티 등록
synchronize: true, // 자동으로 데이터베이스와 엔티티 동기화
}),
TypeOrmModule.forFeature([User]), // Feature 모듈 등록
],
controllers: [AppController, UserController],
providers: [AppService, UserService],
})
export class AppModule {}
위 코드에서 TypeOrmModule.forRoot()를 사용하여 PostgreSQL 데이터베이스와 연결을 설정합니다.
데이터베이스의 주소, 포트, 사용자 이름, 비밀번호, 데이터베이스 이름을 적절히 수정해 주세요.
entities 배열에는 사용할 엔티티 클래스를 등록합니다.
데이터베이스 테이블을 정의하기 위해 엔티티 클래스를 작성합니다.
엔티티는 TypeORM에서 데이터베이스 테이블을 표현하는 클래스입니다.
user.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
@Column()
email: string;
}
서비스는 비즈니스 로직을 처리하고, 엔티티를 데이터베이스에 저장하거나 조회하는 역할을 합니다.
user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
) {}
async createUser(name: string, age: number, email: string): Promise<User> {
const user = this.userRepository.create({ name, age, email });
return this.userRepository.save(user);
}
async findAll(): Promise<User[]> {
return this.userRepository.find();
}
}
컨트롤러는 클라이언트의 요청을 처리하고, 서비스 메서드를 호출하여 데이터를 반환합니다.
user.controller.ts
import { Controller, Post, Body, Get } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from './user.entity';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Post()
async createUser(
@Body('name') name: string,
@Body('age') age: number,
@Body('email') email: string,
): Promise<User> {
return this.userService.createUser(name, age, email);
}
@Get()
async findAll(): Promise<User[]> {
return this.userService.findAll();
}
}
모든 설정이 완료되면 애플리케이션을 실행하여 데이터베이스와의 연결을 테스트할 수 있습니다.
npm run start
이제 NestJS 애플리케이션이 PostgreSQL과 연결되고, 기본적인 CRUD 작업을 수행할 수 있습니다.
클라이언트는 /users 엔드포인트를 통해 사용자 데이터를 생성하고 조회할 수 있습니다.
이 과정을 통해 NestJS와 PostgreSQL을 연동하고, 데이터베이스에 데이터를 저장하고 조회하는 방법을 이해할 수 있었습니다.