본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 4. · 26 Views
Drizzle ORM 기초부터 심화까지
TypeScript 기반의 경량 ORM인 Drizzle의 기본 개념부터 고급 활용법까지 학습합니다. 데이터베이스 스키마 정의, CRUD 작업, 관계 설정, 트랜잭션 처리 등 실무에 필요한 핵심 기능을 단계별로 익힐 수 있습니다.
들어가며
이 글에서는 Drizzle ORM 기초부터 심화까지에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Drizzle_설치와_설정
- 테이블_스키마_정의
- 데이터_삽입하기
- 데이터_조회하기
- 데이터_수정하기
- 데이터_삭제하기
- 관계_정의하기
- 조인_쿼리_실행
- 트랜잭션_처리
- 동적_쿼리_빌딩
- 페이지네이션_구현
- 집계_함수_사용
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
이 카드뉴스가 포함된 코스
댓글 (0)
함께 보면 좋은 카드 뉴스
마이크로서비스 배포 완벽 가이드
Kubernetes를 활용한 마이크로서비스 배포의 핵심 개념부터 실전 운영까지, 초급 개발자도 쉽게 따라할 수 있는 완벽 가이드입니다. 실무에서 바로 적용 가능한 배포 전략과 노하우를 담았습니다.
Application Load Balancer 완벽 가이드
AWS의 Application Load Balancer를 처음 배우는 개발자를 위한 실전 가이드입니다. ALB 생성부터 ECS 연동, 헬스 체크, HTTPS 설정까지 실무에 필요한 모든 내용을 다룹니다. 초급 개발자도 쉽게 따라할 수 있도록 단계별로 설명합니다.
DynamoDB CRUD 완벽 가이드
AWS DynamoDB의 기본 CRUD 작업부터 조건부 작업까지, 초급 개발자를 위한 완벽한 실무 가이드입니다. 실제 프로젝트에서 바로 사용할 수 있는 패턴과 주의사항을 담았습니다.
RDS 연결과 관리 완벽 가이드
AWS RDS를 처음 접하는 개발자를 위한 실전 가이드입니다. 엔드포인트 확인부터 모니터링까지, 실무에서 꼭 알아야 할 RDS 관리 핵심 개념을 이북처럼 술술 읽히는 스토리로 풀어냈습니다. 데이터베이스 연결과 운영의 모든 것을 경험해보세요.
AWS RDS 데이터베이스 생성 완벽 가이드
AWS RDS를 처음 접하는 개발자를 위한 안내서입니다. 데이터베이스 인스턴스 생성부터 서브넷 그룹, 파라미터 그룹 설정까지 실무에 필요한 모든 것을 다룹니다. 초급 개발자도 쉽게 따라할 수 있도록 단계별로 설명합니다.