ORM(Object-Relational Mapping)이란,
객체지향 프로그래밍의 객체와 관계형 데이터베이스(RDBMS)의 테이블 간의 구조적/행위적 차이를 자동으로 연결(Mapping)해주는 기술이다.
항목 | 객체지향 모델 | 관계형 모델 |
---|---|---|
단위 | 객체(Class/Instance) | 테이블/행(Row) |
관계 표현 | 참조(Reference) | 외래키(Foreign Key) |
상속 표현 | 클래스 상속 | 별도 테이블 설계 필요 |
타입 체계 | 언어의 타입 시스템 | SQL 기반 정적 타입 |
→ ORM은 이러한 차이를 자동으로 해석하여 매핑함. (예: Prisma에서 @relation
으로 관계 표현)
schema.prisma
파일에 모델 구조를 정의model User {
id Int @id @default(autoincrement())
name String
email String @unique
posts Post[]
}
User
↔ Post
는 1\:N 관계, @relation
으로 표현Prisma 타입 | TypeScript 타입 | SQL 타입 예시 |
---|---|---|
String | string | VARCHAR, TEXT |
Int | number | INT, BIGINT |
Boolean | boolean | BOOLEAN, TINYINT(1) |
DateTime | Date | TIMESTAMP, DATETIME |
→ 예: Prisma 모델의 name: String
→ DB에서는 VARCHAR
, 코드에서는 string
await prisma.user.create({
data: {
name: '엔지니어',
email: 'eng@openai.com',
posts: {
create: [{ title: 'ORM 정복하기', content: '기술사 수준으로 접근' }]
}
}
});
const user = await prisma.user.findUnique({
where: { id: 1 },
include: { posts: true }
});
→ 내부적으로 JOIN
쿼리를 자동 생성하여 관계 탐색 수행
await prisma.$transaction([
prisma.user.create(...),
prisma.post.create(...)
]);
npx prisma migrate dev --name add_user_table
npx prisma generate
prisma.$queryRaw
또는 prisma.$executeRaw
로 SQL 직접 사용 가능항목 | 설명 |
---|---|
정의 | 객체-관계 간 구조를 자동으로 매핑해주는 기술 |
목적 | SQL 추상화, 생산성 향상, 유지보수성 확보 |
기술 | Prisma ORM + TypeScript + PostgreSQL |
핵심 기능 | 모델 정의, 타입 매핑, 관계 설정, 트랜잭션 처리, 마이그레이션 |
적용 계층 | 데이터 액세스 계층 (DAO/Repository) |
주요 장점 | 타입 안전성, 관계 표현 명확성, 마이그레이션 자동화 |