Schema 완벽 마스터

Schema의 핵심 개념과 실전 활용법

TypeScript중급
12시간
6개 항목
학습 진행률0 / 6 (0%)

학습 항목

1. TypeScript
초급
Drizzle|ORM|기초부터|심화까지
퀴즈튜토리얼
2. TypeScript
중급
Drizzle|ORM|디자인|패턴|완벽|가이드
퀴즈튜토리얼
3. TypeScript
GraphQL|API|설계|패턴
퀴즈튜토리얼
4. TypeScript
고급
GraphQL|기초부터|심화까지|완벽|가이드
퀴즈튜토리얼
5. TypeScript
중급
Prisma|ORM|기초부터|심화까지
퀴즈튜토리얼
6. TypeScript
Zod|런타임|타입|검증|완벽|가이드
퀴즈튜토리얼
1 / 6

이미지 로딩 중...

Drizzle ORM 기초부터 심화까지 - 슬라이드 1/13

Drizzle ORM 기초부터 심화까지

TypeScript 기반의 경량 ORM인 Drizzle의 기본 개념부터 고급 활용법까지 학습합니다. 데이터베이스 스키마 정의, CRUD 작업, 관계 설정, 트랜잭션 처리 등 실무에 필요한 핵심 기능을 단계별로 익힐 수 있습니다.


카테고리:TypeScript
언어:TypeScript
난이도:beginner
메인 태그:#Drizzle
서브 태그:
#ORM#Database#Schema#Query

들어가며

이 글에서는 Drizzle ORM 기초부터 심화까지에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. Drizzle_설치와_설정
  2. 테이블_스키마_정의
  3. 데이터_삽입하기
  4. 데이터_조회하기
  5. 데이터_수정하기
  6. 데이터_삭제하기
  7. 관계_정의하기
  8. 조인_쿼리_실행
  9. 트랜잭션_처리
  10. 동적_쿼리_빌딩
  11. 페이지네이션_구현
  12. 집계_함수_사용

1. Drizzle_설치와_설정

개요

Drizzle ORM을 프로젝트에 설치하고 데이터베이스 연결을 설정하는 방법입니다.

코드 예제

import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';

const client = postgres('postgresql://localhost:5432/mydb');
const db = drizzle(client);

export default db;

설명

postgres 클라이언트를 생성하고 drizzle로 래핑하여 데이터베이스 연결을 초기화합니다.


2. 테이블_스키마_정의

개요

Drizzle에서 테이블 구조를 정의하는 방법입니다. pgTable을 사용하여 컬럼과 타입을 선언합니다.

코드 예제

import { pgTable, serial, text, integer } from 'drizzle-orm/pg-core';

export const users = pgTable('users', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
  age: integer('age'),
  email: text('email').unique()
});

설명

users 테이블을 정의하며 id는 자동 증가, name은 필수, email은 중복 불가 속성을 가집니다.


3. 데이터_삽입하기

개요

insert 메서드를 사용하여 새로운 데이터를 테이블에 추가하는 방법입니다.

코드 예제

import db from './db';
import { users } from './schema';

await db.insert(users).values({
  name: '김철수',
  age: 25,
  email: 'kim@example.com'
});

설명

values 메서드에 객체를 전달하여 users 테이블에 새로운 사용자 데이터를 삽입합니다.


4. 데이터_조회하기

개요

select를 사용하여 데이터베이스에서 데이터를 가져오는 기본적인 쿼리 방법입니다.

코드 예제

import db from './db';
import { users } from './schema';

const allUsers = await db.select().from(users);
const userById = await db.select()
  .from(users)
  .where(eq(users.id, 1));

설명

모든 사용자를 조회하거나 where 조건을 사용하여 특정 조건에 맞는 데이터를 필터링할 수 있습니다.


5. 데이터_수정하기

개요

update 메서드를 사용하여 기존 데이터를 변경하는 방법입니다.

코드 예제

import { eq } from 'drizzle-orm';
import db from './db';
import { users } from './schema';

await db.update(users)
  .set({ age: 26 })
  .where(eq(users.id, 1));

설명

where 조건으로 대상을 지정하고 set으로 변경할 값을 설정하여 데이터를 업데이트합니다.


6. 데이터_삭제하기

개요

delete 메서드를 사용하여 테이블에서 데이터를 제거하는 방법입니다.

코드 예제

import { eq } from 'drizzle-orm';
import db from './db';
import { users } from './schema';

await db.delete(users)
  .where(eq(users.email, 'kim@example.com'));

설명

where 조건에 맞는 레코드를 찾아서 테이블에서 삭제합니다.


7. 관계_정의하기

개요

테이블 간의 관계를 정의하여 조인 쿼리를 쉽게 작성할 수 있습니다.

코드 예제

import { relations } from 'drizzle-orm';

export const usersRelations = relations(users, ({ many }) => ({
  posts: many(posts)
}));

export const postsRelations = relations(posts, ({ one }) => ({
  author: one(users, { fields: [posts.userId], references: [users.id] })
}));

설명

users와 posts 간의 1:N 관계를 정의하여 관계형 쿼리를 타입 안전하게 작성할 수 있습니다.


8. 조인_쿼리_실행

개요

정의된 관계를 활용하여 여러 테이블을 연결하는 쿼리를 실행합니다.

코드 예제

import db from './db';
import { users } from './schema';

const usersWithPosts = await db.query.users.findMany({
  with: {
    posts: true
  }
});

설명

with 옵션을 사용하여 users와 연관된 posts를 한 번에 가져오는 쿼리를 실행합니다.


9. 트랜잭션_처리

개요

여러 데이터베이스 작업을 하나의 트랜잭션으로 묶어서 원자성을 보장합니다.

코드 예제

await db.transaction(async (tx) => {
  await tx.insert(users).values({ name: '이영희', age: 30 });
  await tx.insert(posts).values({ userId: 1, title: '첫 글' });

  // 에러 발생 시 모두 롤백됨
});

설명

transaction 블록 안의 모든 작업이 성공해야 커밋되고, 하나라도 실패하면 전체가 롤백됩니다.


10. 동적_쿼리_빌딩

개요

조건에 따라 쿼리를 동적으로 구성하는 방법입니다.

코드 예제

import { and, gte, like } from 'drizzle-orm';

const filters = [];
if (minAge) filters.push(gte(users.age, minAge));
if (namePattern) filters.push(like(users.name, `%${namePattern}%`));

const result = await db.select().from(users).where(and(...filters));

설명

조건을 배열로 모아서 and 함수로 결합하면 유연한 검색 기능을 구현할 수 있습니다.


11. 페이지네이션_구현

개요

limit과 offset을 사용하여 대량의 데이터를 페이지 단위로 조회합니다.

코드 예제

const page = 2;
const pageSize = 10;

const paginatedUsers = await db.select()
  .from(users)
  .limit(pageSize)
  .offset((page - 1) * pageSize);

설명

limit으로 한 페이지당 개수를 제한하고 offset으로 시작 위치를 지정하여 페이지네이션을 구현합니다.


12. 집계_함수_사용

개요

count, sum, avg 등의 집계 함수를 사용하여 데이터를 통계적으로 처리합니다.

코드 예제

import { count, avg } from 'drizzle-orm';

const stats = await db.select({
  totalUsers: count(),
  avgAge: avg(users.age)
}).from(users);

설명

SQL 집계 함수를 사용하여 전체 사용자 수와 평균 나이를 한 번의 쿼리로 계산합니다.


마치며

이번 글에서는 Drizzle ORM 기초부터 심화까지에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#Drizzle #ORM #Database #Schema #Query

#Drizzle#ORM#Database#Schema#Query#TypeScript