반응형
데이터베이스
- 데이터를 체계적으로 저장하고 관리하는 시스템
- 데이터를 효율적으로 삽입, 수정, 삭제, 조회할 수 있는 구조를 제공
- 종류
- 관계형 데이터베이스: MySQL, PostgreSQL, SQLite (테이블과 SQL을 사용)
- 비관계형 데이터베이스: MongoDB, Redis (NoSQL, 유연한 데이터 저장 구조)
ORM
- 객체 지향 프로그래밍 안에서 데이터베이스와 상호 작용하기 위한 기술
- 데이터베이스의 테이블을 코드에서 객체로 매핑하여 SQL을 직접 작성하지 않고도 데이터베이스 작업을 수행 할 수 있음
- 예: Sequelize(Node.js), Prisma(Node.js), Hibernate(Java), Django ORM(Python)
장점
- 생산성 향상
- SQL 쿼리를 직접 작성하지 않아도 되고, 객체 기반으로 데이터베이스 작업이 가능하여 개발 속도가 빨라짐
- 데이터 베이스 작업을 객체 지향 방식으로 처리하기 때문에 코드의 가독성이 높아짐
- 데이터베이스 독립성
- ORM은 여러 데이터베이스를 지원하기 때문에, 데이터베이스를 변경하더라도 ORM 설정만 변경하면 됩니다
- 예: MySQL에서 PostgreSQL로 변경 시 큰 수정 없이 마이그레이션 가능
- 유지보수 용이성
- SQL 쿼리가 코드에 분산되지 않아 코드의 일관성이 유지됨
- 변경 사항이 발생하면 ORM 모델만 수정하면 됨
- 보안 강화
- ORM은 SQL Injection 같은 공격을 방지하는 Prepared Statement를 기본적으로 제공함
- 데이터베이스 작업을 더 안전하게 처리할 수 있음
- 데이터와 객체 간 매핑
- 테이블과 객체가 1:1로 매핑되므로, 객체 지향 언어의 장점을 살릴 수 있음
- 직관적으로 데이터베이스 구조를 이해하고 작업 가능
예제
SQL 방식
SELECT * FROM users WHERE id = 1;
ORM 방식(Prisma 예)
const user = await prisma.user.findUnique({
where: { id: 1 },
});
ORM을 활용하면 데이터베이스 작업이 훨씬 간결하고 객체 지향적 형태로 처리할 수 있다
Prisma
- TypeScript/JavaScript 기반의 ORM 도구
- 데이터베이스와 애플리케이션 간 상호작용을 간소화하여 SQL 쿼리를 작성하지 않고 데이터베이스 작업을 수행할 수 있음
- Prisma는 세 가지 주요 구성 요소로 이루어져 있다
- Prisma Client: 데이터베이스 쿼리를 위한 자동 생성 클라이언트
- Prisma Migrate: 데이터베이스 스키마 관련 도구(마이그레이션)
- Prisma Studio: 데이터베이스 데이터를 시각적으로 관리할 수 있는 UI
장점
- 자동으로 생성되는 데이터베이스 클라이언트
- Prisma는 데이터베이스 스키마를 기반으로 타입 안정성이 보장된 Prisma Client를 자동 생성함
- 데이터베이스 작업 시 컴파일 단계에서 오류를 검출할 수 있음
- TypeScript와 완벽한 통합
- Prisma는 TypeScript를 기본 지원하여 타입 안정성을 제공하고, 데이터베이스 쿼리를 안전하게 처리할 수 있음
- 코드 작성 중에 자동 완성을 활용 가능
- 데이터베이스 독립성
- 다양한 데이터베이스(MySQL, PostrgreSQL, SQLite, MongoDB 등)를 지원하며, 데이터베이스를 교체해도 최소한의 수정으로 적응할 수 있음
- 직관적인 데이터베이스 마이그레이션
- Prisma Migrate를 사용하면 코드 기반으로 데이터베이스 스키마를 관리하고 버전 컨트롤이 가능함
- 예: 데이터베이스 테이블을 추가하거나 수정하는 작업을 간단한 명령으로 실행
- npx prisma migrate dev --name add_users_table
- Prisma Studio로 데이터 관리
- Prisma Studio를 통해 데이터베이스의 데이터를 브라우저에서 시각적으로 확인하고 관리할 수 있음
- 복잡한 SQL 없이 데이터 수정 가능
- 간단한 관계 설정
- Prisma는 데이터베이스 관계를 쉽게 설정하고 활용할 수 있도록 도와줌
- 예:
model User {
id Int @id @default(autoincrement())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
userId Int
user User @relation(fields: [userId], references: [id])
}
단점
- ORM을 처음 사용하는 개발자에게 초기 학습 비용이 발생할 수 있음
- 대규모 쿼리를 처리할 때, SQL에 비해 성능이 약간 떨어질 수 있음
- 특정 복잡한 쿼리는 Prisma로 작성하기 어렵거나 SQL 문을 직접 작성해야 할 수도 있음
Prisma는 데이터베이스 작업을 간소화하고 생산성을 높이는 도구로, 특히 TypeScript 기반 프로젝트에 적합함
반응형
'BE > DataBase' 카테고리의 다른 글
DB | 3-Tier (0) | 2024.11.22 |
---|