Nest.js는 현대적인 웹 애플리케이션 개발을 위한 강력한 프레임워크로, TypeORM과 함께 사용하면 데이터베이스 통합이 매우 간편해집니다. 이번 포스트에서는 TypeORM의 기본 개념과 Nest.js에서의 설정 및 활용 방법에 대해 자세히 알아보겠습니다.
TypeORM 소개
TypeORM은 JavaScript 및 TypeScript를 위한 ORM(Object-Relational Mapping) 라이브러리로, SQL 기반 데이터베이스와의 상호작용을 쉽게 만들어 줍니다. TypeORM의 주요 기능은 다음과 같습니다:
- 데이터 모델링: 클래스를 통해 데이터베이스 테이블의 구조를 정의할 수 있어, 데이터베이스 설계가 직관적이고 관리하기 쉬워집니다.
- CRUD 작업: Create, Read, Update, Delete 작업을 간단한 메서드로 수행할 수 있어, 복잡한 SQL 쿼리를 작성할 필요가 없습니다.
- 쿼리 빌더: 복잡한 SQL 쿼리를 작성하지 않고도 다양한 쿼리를 생성할 수 있는 API를 제공합니다.
Nest.js에서 TypeORM 설치 및 설정
Nest.js 프로젝트에 TypeORM을 추가하는 과정은 다음과 같습니다.
패키지 설치
TypeORM과 MySQL 드라이버를 설치합니다. 아래의 명령어를 사용하세요:npm install --save @nestjs/typeorm typeorm mysql2
모듈 설정
app.module.ts
파일에 TypeOrmModule을 임포트하여 데이터베이스 연결 정보를 설정합니다:import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: '비밀번호', database: 'test_db', entities: [__dirname + '/**/*.entity{.ts,.js}'], synchronize: true, }), ], }) export class AppModule {}
엔티티 정의
데이터베이스 테이블과 매핑되는 클래스를 정의합니다. 예를 들어, User 엔티티는 다음과 같이 작성할 수 있습니다:import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() name: string; @Column() email: string; }
서비스 및 컨트롤러 생성
CRUD 작업을 수행하기 위해 서비스를 만들고 이를 컨트롤러와 연결합니다. 서비스는 데이터베이스와의 상호작용을 담당합니다: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 userRepository: Repository<User>, ) {} create(userData): Promise<User> { const user = this.userRepository.create(userData); return this.userRepository.save(user); } findAll(): Promise<User[]> { return this.userRepository.find(); } }
컨트롤러 예시
사용자 요청을 처리하는 컨트롤러를 만듭니다. 아래 코드는 사용자 정보를 추가하고 조회하는 엔드포인트를 정의합니다:import { Controller, Get, Post, Body } from '@nestjs/common'; import { UserService } from './user.service'; @Controller('users') export class UserController { constructor(private readonly userService: UserService) {} @Post() async create(@Body() userData) { return await this.userService.create(userData); } @Get() async findAll() { return await this.userService.findAll(); } }
실습 예제
이제 실제로 사용자 정보를 추가하고 조회하는 간단한 API를 구성해보겠습니다. 서버를 실행한 후, Postman 또는 Curl 등을 사용하여 POST 요청으로 사용자 정보를 추가합니다:
- POST 요청:
POST http://localhost:<port>/users { "name": "홍길동", "email": "hong@example.com" }
이 요청을 통해 새로운 사용자가 데이터베이스에 추가됩니다. 이후 GET 요청을 통해 모든 사용자 정보를 조회할 수 있습니다:
- GET 요청:
GET http://localhost:<port>/users
위 요청을 통해 등록된 모든 사용자의 목록이 반환됩니다.
결론
TypeORM은 Nest.js 애플리케이션에서 관계형 데이터베이스와 효과적으로 통신할 수 있게 해주는 강력한 도구입니다. 위에서 설명한 내용을 바탕으로 여러분의 프로젝트에 맞춰 TypeORM을 적절히 활용하실 수 있을 것입니다. 데이터베이스 통합을 통해 애플리케이션의 데이터 관리가 더욱 효율적이고 체계적으로 이루어질 수 있기를 바랍니다.
'프로그래밍 > Nest.js' 카테고리의 다른 글
라우팅 및 요청 처리: 경로 매개변수와 쿼리 매개변수의 이해 (0) | 2025.03.17 |
---|---|
Nest.js의 아키텍처: 프로바이더의 중요성 (0) | 2025.03.17 |
Nest.js의 아키텍처: 미들웨어의 중요성과 활용 (0) | 2025.03.17 |
Nest.js에서의 효과적인 디버깅 방법 (0) | 2025.03.17 |
Nest.js에서 유효성 검사 및 오류 처리: 예외 필터의 중요성 (0) | 2025.03.17 |