TypeORM은 Node.js 및 TypeScript 환경에서 사용하는 ORM(Object-Relational Mapping) 라이브러리로, 데이터베이스와 객체 간의 매핑을 자동으로 관리해주는 도구입니다. ORM을 사용하면 SQL 쿼리를 직접 작성하는 대신, 데이터베이스 레코드를 객체 형태로 다룰 수 있게 되어 코드의 가독성과 유지보수성이 높아집니다.
NestJS에서 TypeORM을 사용하여 Tibero 데이터베이스에 연결하고 데이터를 브라우저를 통해 볼 수 있는 간단한 예제를 단계별로 설명하겠습니다. 다음 순서대로 진행하시면 됩니다.
먼저 NestJS CLI를 사용하여 새로운 프로젝트를 생성합니다.
npm i -g @nestjs/cli
nest new my-nest-project //프로젝트 폴더명 : my-nest-projectnmnp
cd my-nest-project
TypeORM과 Tibero 데이터베이스 드라이버를 설치합니다. Tibero의 경우 node-oracledb 드라이버를 사용할 수 있습니다.
npm install @nestjs/typeorm typeorm oracledb
TypeORM 설정 파일을 작성합니다. src 디렉토리에 typeorm.config.ts 파일을 생성하고 다음과 같이 설정합니다.
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const typeOrmConfig: TypeOrmModuleOptions = {
type: 'oracle',
host: 'localhost', // Tibero DB의 호스트
port: 1521, // Tibero DB의 포트
username: 'your-username', // Tibero DB의 사용자 이름
password: 'your-password', // Tibero DB의 비밀번호
sid: 'your-db-sid', // Tibero DB의 SID
entities: [__dirname + '/../**/*.entity.{js,ts}'],
synchronize: true,
};
AppModule에서 TypeORM 모듈을 설정합니다. src/app.module.ts 파일을 열고 다음과 같이 수정합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfig } from './typeorm.config';
@Module({
imports: [
TypeOrmModule.forRoot(typeOrmConfig),
// 다른 모듈들
],
controllers: [],
providers: [],
})
export class AppModule {}
데이터베이스와 상호작용할 엔티티를 생성합니다. 예를 들어 User 엔티티를 생성해 보겠습니다.
src/user/user.entity.ts 파일을 생성하고 다음과 같이 작성합니다.
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
}
유저 데이터를 처리할 리포지토리와 서비스를 생성합니다.
src/user/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 userRepository: Repository<User>,
) {}
findAll(): Promise<User[]> {
return this.userRepository.find();
}
create(user: User): Promise<User> {
return this.userRepository.save(user);
}
}
유저 데이터를 브라우저를 통해 볼 수 있도록 컨트롤러를 생성합니다.
src/user/user.controller.ts 파일을 생성하고 다음과 같이 작성합니다.
import { Controller, Get, Post, Body } from '@nestjs/common';
import { UserService } from './user.service';
import { User } from './user.entity';
@Controller('users')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
findAll(): Promise<User[]> {
return this.userService.findAll();
}
@Post()
create(@Body() user: User): Promise<User> {
return this.userService.create(user);
}
}
User 모듈을 설정합니다. src/user/user.module.ts 파일을 생성하고 다음과 같이 작성합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UserService } from './user.service';
import { UserController } from './user.controller';
@Module({
imports: [TypeOrmModule.forFeature([User])],
providers: [UserService],
controllers: [UserController],
})
export class UserModule {}
그리고 AppModule에 UserModule을 추가합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfig } from './typeorm.config';
import { UserModule } from './user/user.module';
@Module({
imports: [
TypeOrmModule.forRoot(typeOrmConfig),
UserModule,
],
controllers: [],
providers: [],
})
export class AppModule {}
NestJS 서버를 실행합니다.
npm run start
브라우저에서 http://localhost:3000/users로 접속하여 GET 요청을 보내 유저 데이터를 확인할 수 있습니다. POST 요청을 통해 유저 데이터를 추가할 수도 있습니다.
이상으로 NestJS와 TypeORM을 사용하여 Tibero 데이터베이스에 연결하고 데이터를 브라우저를 통해 볼 수 있는 간단한 예제를 마칩니다. 더 복잡한 설정이나 기능이 필요하다면 NestJS와 TypeORM 공식 문서를 참고하세요.
npm start 결과

localhost:3000/users에서 {}만 보이는 것은 엔드포인트가 요청을 성공적으로 처리했지만 데이터가 없거나, 잘못된 데이터가 반환되고 있음을 의미 (테스트용)