Nest.js에서 typeORM을 통해 Tibero db연결하기

개발 오답 노트·2024년 11월 5일

TypeORM은 Node.js 및 TypeScript 환경에서 사용하는 ORM(Object-Relational Mapping) 라이브러리로, 데이터베이스와 객체 간의 매핑을 자동으로 관리해주는 도구입니다. ORM을 사용하면 SQL 쿼리를 직접 작성하는 대신, 데이터베이스 레코드를 객체 형태로 다룰 수 있게 되어 코드의 가독성과 유지보수성이 높아집니다.

NestJS에서 TypeORM을 사용하여 Tibero 데이터베이스에 연결하고 데이터를 브라우저를 통해 볼 수 있는 간단한 예제를 단계별로 설명하겠습니다. 다음 순서대로 진행하시면 됩니다.

1. NestJS 프로젝트 생성

먼저 NestJS CLI를 사용하여 새로운 프로젝트를 생성합니다.


npm i -g @nestjs/cli
nest new my-nest-project    //프로젝트 폴더명 : my-nest-projectnmnp
cd my-nest-project

2. TypeORM 및 Tibero 드라이버 설치

TypeORM과 Tibero 데이터베이스 드라이버를 설치합니다. Tibero의 경우 node-oracledb 드라이버를 사용할 수 있습니다.


npm install @nestjs/typeorm typeorm oracledb

3. TypeORM 설정

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,
};

4. TypeORM 모듈 설정

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 {}

5. 엔티티 생성

데이터베이스와 상호작용할 엔티티를 생성합니다. 예를 들어 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;
}

6. 리포지토리 및 서비스 생성

유저 데이터를 처리할 리포지토리와 서비스를 생성합니다.

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);
  }
}

7. 컨트롤러 생성

유저 데이터를 브라우저를 통해 볼 수 있도록 컨트롤러를 생성합니다.

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);
  }
}

8. 모듈 구성

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 {}

그리고 AppModuleUserModule을 추가합니다.


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 {}

9. 서버 실행

NestJS 서버를 실행합니다.


npm run start

10. 테스트

브라우저에서 http://localhost:3000/users로 접속하여 GET 요청을 보내 유저 데이터를 확인할 수 있습니다. POST 요청을 통해 유저 데이터를 추가할 수도 있습니다.

이상으로 NestJS와 TypeORM을 사용하여 Tibero 데이터베이스에 연결하고 데이터를 브라우저를 통해 볼 수 있는 간단한 예제를 마칩니다. 더 복잡한 설정이나 기능이 필요하다면 NestJS와 TypeORM 공식 문서를 참고하세요.

npm start 결과

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

profile
포토폴리오 https://wikidocs.net/book/10969 유튜브 링크 https://www.youtube.com/@%EC%B5%9C%EC%9B%90%EC%9D%BC-n5r

0개의 댓글