[NestJs] @InjectRepository 데코레이터 with TypeORM

2024. 7. 27. 16:21·Back/NestJS
목차
  1. @InjectRepository 데코레이터 사용 방법
  2. TypeORM 및 GraphQL 설정
  3. User 엔티티 정의
  4. UserService 정의
  5. UserResolver 정의
  6. UserModule 정의
  7. GraphQL 스키마 정의
  8. 요약

 

NestJS에서 @InjectRepository 데코레이터는 TypeORM과 함께 사용되어 특정 엔티티의 리포지토리를 서비스 클래스에 주입하기 위해 사용됩니다!

이 데코레이터는 의존성 주입을 통해 데이터베이스와의 상호작용을 보다 간편하게 관리할 수 있도록 도와줘요

 

 

이 예제에서는 MySQL 데이터베이스를 사용하여 사용자(User) 데이터를 저장하고, GraphQL을 통해 사용자 데이터를 조회하고 추가하는 API를 구축합니다.

@InjectRepository 데코레이터 사용 방법

// npm 설치
npm install @nestjs/typeorm typeorm mysql2
npm install @nestjs/graphql @nestjs/apollo graphql apollo-server-express

// yarn 설치
yarn add @nestjs/typeorm typeorm mysql2
yarn add @nestjs/graphql @nestjs/apollo graphql apollo-server-express

 

TypeORM 및 GraphQL 설정

'app.module.ts' 설정

TypeORM 및 GraphQL 모듈을 설정합니다.

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'password',
      database: 'test',
      entities: [User],
      synchronize: true,
    }),
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: 'src/commons/graphql/schema.gql',
    }),
    UserModule, // Reposityor라고 함 -> service의 constructor에서 받음
  ],
})
export class AppModule {}

 

User 엔티티 정의

user.entity.ts 파일 생성

User 엔티티를 정의합니다.

import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;
}

 

UserService 정의

user.service.ts 파일 생성

UserService를 정의하여 데이터베이스 작업을 처리합니다.

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 findAll(): Promise<User[]> {
    return this.userRepository.find();
  }

  async findOne(id: number): Promise<User> {
    return this.userRepository.findOne({ where: { id } });
  }

  async create(name: string, email: string): Promise<User> {
    const user = this.userRepository.create({ name, email });
    return this.userRepository.save(user);
  }

  async remove(id: number): Promise<void> {
    await this.userRepository.delete(id);
  }
}

 

UserResolver 정의

user.resolver.ts 파일 생성

UserResolver를 정의하여 GraphQL 쿼리와 뮤테이션을 처리합니다.

import { Resolver, Query, Mutation, Args } from '@nestjs/graphql';
import { UserService } from './user.service';
import { User } from './user.entity';

@Resolver(of => User)
export class UserResolver {
  constructor(private readonly userService: UserService) {}

  @Query(returns => [User])
  async users(): Promise<User[]> {
    return this.userService.findAll();
  }

  @Query(returns => User)
  async user(@Args('id') id: number): Promise<User> {
    return this.userService.findOne(id);
  }

  @Mutation(returns => User)
  async createUser(
    @Args('name') name: string,
    @Args('email') email: string,
  ): Promise<User> {
    return this.userService.create(name, email);
  }

  @Mutation(returns => Boolean)
  async removeUser(@Args('id') id: number): Promise<boolean> {
    await this.userService.remove(id);
    return true;
  }
}

 

UserModule 정의

user.module.ts 파일 생성

UserModule을 정의하여 UserService와 UserResolver를 모듈에 등록합니다.

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
import { UserService } from './user.service';
import { UserResolver } from './user.resolver';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService, UserResolver],
})
export class UserModule {}

 

GraphQL 스키마 정의

User 엔티티와 GraphQL 스키마를 연동하기 위해, @ObjectType과 @Field 데코레이터를 사용하여 엔티티를 수정합니다.

import { ObjectType, Field, Int } from '@nestjs/graphql';
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@ObjectType()
@Entity()
export class User {
  @Field(type => Int)
  @PrimaryGeneratedColumn()
  id: number;

  @Field()
  @Column()
  name: string;

  @Field()
  @Column()
  email: string;
}

 

 

요약

  1. 설치 및 설정: MySQL과 GraphQL 관련 패키지를 설치하고 TypeORM 및 GraphQL 모듈을 설정합니다.
  2. 엔티티 정의: User 엔티티를 정의합니다.
  3. 서비스 정의: UserService를 정의하여 데이터베이스 작업을 처리합니다.
  4. 리졸버 정의: UserResolver를 정의하여 GraphQL 쿼리와 뮤테이션을 처리합니다.
  5. 모듈 정의: UserModule을 정의하여 모듈에 서비스와 리졸버를 등록합니다.
  6. 애플리케이션 실행: 애플리케이션을 실행하여 MySQL 데이터베이스와 GraphQL API가 제대로 연동되었는지 확인합니다.
저작자표시 (새창열림)

'Back > NestJS' 카테고리의 다른 글

페이지네이션(Pagenation) 구현하기 - (1)  (0) 2025.03.12
[NextJS] 프로젝트 생성하기 with Yarn berry 4.4.0  (0) 2025.01.26
[NestJS] JWT(JSON Web Token) - 로그인 API 구현과 암호화  (0) 2024.08.10
[Node.js] 블로킹 / 논블로킹  (0) 2023.03.28
[Node.js] 이벤트 루프 (event loop)  (0) 2023.03.28
  1. @InjectRepository 데코레이터 사용 방법
  2. TypeORM 및 GraphQL 설정
  3. User 엔티티 정의
  4. UserService 정의
  5. UserResolver 정의
  6. UserModule 정의
  7. GraphQL 스키마 정의
  8. 요약
'Back/NestJS' 카테고리의 다른 글
  • [NextJS] 프로젝트 생성하기 with Yarn berry 4.4.0
  • [NestJS] JWT(JSON Web Token) - 로그인 API 구현과 암호화
  • [Node.js] 블로킹 / 논블로킹
  • [Node.js] 이벤트 루프 (event loop)
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    springboot
    자바스크립트set
    강의 후기
    sql강의
    백엔드
    서블릿
    Next.js
    javascript
    csr과ssr의 차이
    과학기술인 등록번호 발급
    SQL강의 추천
    SSR
    과학기술인등록번호 조회
    Spring
    React
    React Next.js
    스프링부트
    김영한
    중복제거
    java의 정석
    인프런
    데이터베이스 강의
    프론트엔드
    과학기술인 등록
    과학기술인번호 조회
    강의후기
    csrvsssr
    Next.js 필요성
    Java
    과학기술인 번호 발급
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
[NestJs] @InjectRepository 데코레이터 with TypeORM

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.