정지용
기술스택 목록
백엔드

TypeORM

프로젝트 12에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

TypeScript/JavaScript 환경에서 클래스 기반으로 데이터베이스를 다루는 ORM 라이브러리

TypeORM은 TypeScript와 JavaScript 애플리케이션에서 관계형 데이터베이스를 객체지향 방식으로 다룰 수 있게 해주는 ORM(Object-Relational Mapping) 라이브러리이다. SQL 쿼리를 직접 작성하는 대신 클래스와 데코레이터로 테이블 구조를 정의하고, 이를 통해 데이터베이스 스키마와 애플리케이션 코드 간의 불일치를 줄이는 것을 목표로 한다. Active Record와 Data Mapper 두 가지 패턴을 모두 지원해 프로젝트 구조에 맞게 선택할 수 있으며, 여러 종류의 관계형 데이터베이스를 동일한 방식으로 다룰 수 있도록 추상화한다.

이럴 때 사용합니다

  • TypeScript로 서버를 개발하면서 데이터베이스 스키마를 코드로 관리하고 싶을 때
  • SQL을 직접 다루기보다 클래스와 객체 중심으로 데이터를 조작하고 싶을 때
  • 마이그레이션 파일로 여러 환경의 스키마 변경 이력을 추적해야 할 때
  • NestJS 등 데코레이터 기반 프레임워크와 자연스럽게 연동하고 싶을 때

핵심 개념

Entity
데이터베이스 테이블에 대응하는 클래스로, 데코레이터를 통해 컬럼과 타입을 정의한다.
Repository
특정 엔티티에 대한 조회, 저장, 삭제 등의 쿼리 작업을 수행하는 객체이다.
Migration
데이터베이스 스키마 변경 이력을 코드로 관리하고, 여러 환경에 순서대로 적용할 수 있게 하는 파일 단위이다.
DataSource
데이터베이스 연결 정보와 엔티티, 마이그레이션 설정을 담는 애플리케이션의 진입점 역할을 한다.
Relations
OneToMany, ManyToOne 등의 데코레이터로 엔티티 간의 연관관계를 코드 수준에서 표현한다.
QueryBuilder
복잡한 조건의 쿼리를 메서드 체이닝 방식으로 직접 구성할 수 있는 기능이다.

엔티티 정의와 조회 예시

User 엔티티를 클래스로 정의하고, Repository를 통해 활성 사용자 목록을 조회하는 기본 예시이다.

TypeScript
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

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

  @Column()
  email: string;

  @Column({ default: true })
  isActive: boolean;
}

// Repository를 통한 조회
const userRepo = dataSource.getRepository(User);
const users = await userRepo.find({ where: { isActive: true } });

처음 쓸 때 흔한 함정

  • 개발 중 synchronize 옵션을 켜두면 스키마가 자동 변경되어 운영 환경에서는 위험할 수 있다
  • 엔티티 간 관계를 즉시 로딩(eager)으로 설정하면 의도치 않게 많은 쿼리가 실행될 수 있다
  • 마이그레이션 파일을 실제 스키마 변경 순서와 다르게 관리하면 환경 간 불일치가 생길 수 있다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

  1. 04백엔드
    2026년 7월

    NestJS 기반 NFT 배치 잡 러너

    NestJS와 TypeORM으로 구성한 NFT 관련 배치 작업 실행기 구조를 정리한 문서 프로젝트입니다.

    이 프로젝트에서의 TypeORM 활용

    배치 작업 데이터를 데이터베이스와 연동하기 위한 ORM

    nft-batch-job-runner-docs프로젝트 자세히 보기 →
  2. 05Web3
    2026년 7월

    Discord NFT 홀더 인증 서비스

    Discord 사용자의 지갑 서명과 NFT 보유 여부를 검증해 서버 접근 권한을 자동으로 부여하는 NestJS 기반 인증 서비스

    이 프로젝트에서의 TypeORM 활용

    migrations 디렉터리를 통한 데이터베이스 스키마 버전 관리

    discord-nft-holder-verification-docs프로젝트 자세히 보기 →

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.