728x90
728x90
ORM(Object-Relational Mapping)
: 객체 지향 프로그래밍 언어에서 관계형 데이터베이스의 데이터를 객체로 다룰 수 있도록 매핑하는 기술입니다. ORM은 데이터베이스의 테이블과 객체 지향 프로그래밍의 클래스를 연결하여 SQL을 직접 작성하지 않고도 데이터베이스를 조작할 수 있도록 합니다.
ORM의 주요 개념
- 객체 지향 프로그래밍(OOP)과 관계형 데이터베이스(RDB)의 차이
- 객체 지향 프로그래밍에서는 데이터를 객체로 다루지만, 관계형 데이터베이스는 데이터를 테이블로 관리합니다.
- ORM은 이 두 개념 간의 불일치를 해소하기 위해 등장했습니다.
- 매핑(Mapping)
- 데이터베이스의 테이블은 프로그래밍 언어의 클래스로 매핑.
- 테이블의 행(row)은 클래스의 인스턴스로 매핑.
- 테이블의 열(column)은 클래스의 속성(attribute)으로 매핑.
ORM의 작동 원리
- 클래스 정의
- 개발자는 데이터베이스 테이블에 해당하는 클래스를 정의합니다.
- 객체 생성 및 조작
- 데이터를 객체로 다루며, 데이터베이스 작업이 객체의 메서드를 통해 이루어집니다.
- SQL 생성 및 실행
- ORM은 객체 작업을 기반으로 SQL 쿼리를 자동 생성하여 데이터베이스와 통신합니다.
ORM의 장점
- 생산성 향상
- 개발자는 SQL을 직접 작성하지 않아도 데이터베이스를 조작할 수 있습니다.
- 객체 지향적으로 데이터베이스를 다룰 수 있어 코드를 단순화하고 개발 속도를 높입니다.
- 유지보수 용이
- 데이터베이스 구조 변경 시, 클래스 정의만 수정하면 됩니다.
- SQL 쿼리를 직접 수정할 필요가 줄어듭니다.
- 이식성
- 데이터베이스에 종속적이지 않아, 다른 DBMS로의 전환이 비교적 간단합니다.
- ORM 라이브러리는 다양한 데이터베이스를 지원합니다.
- 보안
- ORM이 자동으로 SQL 쿼리를 생성하기 때문에, SQL 인젝션(SQL Injection) 같은 보안 위협을 줄일 수 있습니다.
ORM의 단점
- 퍼포먼스 이슈
- 복잡한 쿼리나 대량의 데이터를 처리할 때 자동 생성된 SQL이 비효율적일 수 있습니다.
- 이를 해결하려면 종종 원시 SQL을 직접 작성해야 합니다.
- 학습 곡선
- ORM 사용법과 함께 데이터베이스의 동작 방식도 이해해야 하므로 초반 학습 부담이 있습니다.
- 추상화에 따른 제약
- ORM은 추상화 계층을 추가하기 때문에, 데이터베이스의 고유 기능이나 최적화 작업을 활용하기 어려울 수 있습니다.
대표적인 ORM 도구
- Python
- SQLAlchemy: Python의 가장 강력하고 유연한 ORM 라이브러리.
- Django ORM: Django 프레임워크에 내장된 ORM.
- Java
- Hibernate: Java 생태계에서 가장 널리 사용되는 ORM.
- JavaScript
- Sequelize: Node.js에서 사용하는 ORM.
- TypeORM: TypeScript 지원과 강력한 기능을 제공.
- Ruby
- ActiveRecord: Ruby on Rails 프레임워크에 내장된 ORM.
- PHP
- Eloquent: Laravel 프레임워크에서 사용하는 ORM.
//JavaScript (Sequelize 예시)
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');
// 모델 정의
const User = sequelize.define('User', {
username: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING
}
});
// 데이터 저장
await User.create({ username: 'John', email: 'john@example.com' });
// 데이터 조회
const users = await User.findAll();
ORM을 사용하는 경우
- 데이터베이스 작업이 많고 반복적인 SQL 작성이 비효율적일 때.
- 다수의 데이터베이스를 지원하거나 변경 가능성이 높은 프로젝트에서.
- 생산성과 유지보수가 중요한 대규모 프로젝트에서.
ORM vs SQL
| 특징 | ORM | SQL |
| 생산성 | 높은 생산성 제공 | 쿼리 작성 및 유지보수에 시간 소요 |
| 퍼포먼스 | 단순 쿼리에서 우수 | 복잡한 쿼리에서 더 나은 성능 제공 |
| 유지보수 | 테이블 구조 변경 시 간단히 반영 가능 | 쿼리 수정 필요 |
| 복잡한 쿼리 | 원시 SQL 사용이 필요할 수 있음 | 복잡한 작업에 유리 |
| 학습 난이도 | ORM 도구 학습 필요 | SQL 기본 지식 필요 |
결론
ORM은 데이터베이스와 객체 지향 언어의 간극을 메우는 강력한 도구로, 생산성과 유지보수를 크게 향상시킬 수 있습니다. 그러나 프로젝트의 특성과 데이터베이스의 복잡성을 고려하여 ORM과 원시 SQL을 적절히 조합해 사용하는 것이 중요합니다. 😊
728x90
728x90
'취준 > CS 기술면접 준비' 카테고리의 다른 글
| 백엔드 질문 예상 리스트 (1) | 2025.01.16 |
|---|---|
| 라이브러리(Library)와 프레임워크(Framework) 차이 (2) | 2025.01.05 |
| OAuth (Open Authorization) (0) | 2025.01.05 |
| 로컬 스토리지(Local Storage)와 세션 스토리지(Session Storage) 차이 (0) | 2025.01.05 |
| JWT (JSON Web Token) (0) | 2025.01.05 |
댓글