본문 바로가기
취준/CS 기술면접 준비

ORM(Object-Relational Mapping)

by 윤숩 2025. 1. 6.
728x90
728x90

 

ORM(Object-Relational Mapping)

: 객체 지향 프로그래밍 언어에서 관계형 데이터베이스의 데이터를 객체로 다룰 수 있도록 매핑하는 기술입니다. ORM은 데이터베이스의 테이블과 객체 지향 프로그래밍의 클래스를 연결하여 SQL을 직접 작성하지 않고도 데이터베이스를 조작할 수 있도록 합니다.

 


ORM의 주요 개념

  1. 객체 지향 프로그래밍(OOP)과 관계형 데이터베이스(RDB)의 차이
    • 객체 지향 프로그래밍에서는 데이터를 객체로 다루지만, 관계형 데이터베이스는 데이터를 테이블로 관리합니다.
    • ORM은 이 두 개념 간의 불일치를 해소하기 위해 등장했습니다.
  2. 매핑(Mapping)
    • 데이터베이스의 테이블은 프로그래밍 언어의 클래스로 매핑.
    • 테이블의 행(row)은 클래스의 인스턴스로 매핑.
    • 테이블의 열(column)은 클래스의 속성(attribute)으로 매핑.

ORM의 작동 원리

  1. 클래스 정의
    • 개발자는 데이터베이스 테이블에 해당하는 클래스를 정의합니다.
  2. 객체 생성 및 조작
    • 데이터를 객체로 다루며, 데이터베이스 작업이 객체의 메서드를 통해 이루어집니다.
  3. SQL 생성 및 실행
    • ORM은 객체 작업을 기반으로 SQL 쿼리를 자동 생성하여 데이터베이스와 통신합니다.

ORM의 장점

  1. 생산성 향상
    • 개발자는 SQL을 직접 작성하지 않아도 데이터베이스를 조작할 수 있습니다.
    • 객체 지향적으로 데이터베이스를 다룰 수 있어 코드를 단순화하고 개발 속도를 높입니다.
  2. 유지보수 용이
    • 데이터베이스 구조 변경 시, 클래스 정의만 수정하면 됩니다.
    • SQL 쿼리를 직접 수정할 필요가 줄어듭니다.
  3. 이식성
    • 데이터베이스에 종속적이지 않아, 다른 DBMS로의 전환이 비교적 간단합니다.
    • ORM 라이브러리는 다양한 데이터베이스를 지원합니다.
  4. 보안
    • ORM이 자동으로 SQL 쿼리를 생성하기 때문에, SQL 인젝션(SQL Injection) 같은 보안 위협을 줄일 수 있습니다.

ORM의 단점

  1. 퍼포먼스 이슈
    • 복잡한 쿼리나 대량의 데이터를 처리할 때 자동 생성된 SQL이 비효율적일 수 있습니다.
    • 이를 해결하려면 종종 원시 SQL을 직접 작성해야 합니다.
  2. 학습 곡선
    • ORM 사용법과 함께 데이터베이스의 동작 방식도 이해해야 하므로 초반 학습 부담이 있습니다.
  3. 추상화에 따른 제약
    • ORM은 추상화 계층을 추가하기 때문에, 데이터베이스의 고유 기능이나 최적화 작업을 활용하기 어려울 수 있습니다.

대표적인 ORM 도구

  1. Python
    • SQLAlchemy: Python의 가장 강력하고 유연한 ORM 라이브러리.
    • Django ORM: Django 프레임워크에 내장된 ORM.
  2. Java
    • Hibernate: Java 생태계에서 가장 널리 사용되는 ORM.
  3. JavaScript
    • Sequelize: Node.js에서 사용하는 ORM.
    • TypeORM: TypeScript 지원과 강력한 기능을 제공.
  4. Ruby
    • ActiveRecord: Ruby on Rails 프레임워크에 내장된 ORM.
  5. 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을 사용하는 경우

  1. 데이터베이스 작업이 많고 반복적인 SQL 작성이 비효율적일 때.
  2. 다수의 데이터베이스를 지원하거나 변경 가능성이 높은 프로젝트에서.
  3. 생산성과 유지보수가 중요한 대규모 프로젝트에서.

ORM vs SQL

특징 ORM SQL
생산성 높은 생산성 제공 쿼리 작성 및 유지보수에 시간 소요
퍼포먼스 단순 쿼리에서 우수 복잡한 쿼리에서 더 나은 성능 제공
유지보수 테이블 구조 변경 시 간단히 반영 가능 쿼리 수정 필요
복잡한 쿼리 원시 SQL 사용이 필요할 수 있음 복잡한 작업에 유리
학습 난이도 ORM 도구 학습 필요 SQL 기본 지식 필요

 


결론

ORM은 데이터베이스와 객체 지향 언어의 간극을 메우는 강력한 도구로, 생산성과 유지보수를 크게 향상시킬 수 있습니다. 그러나 프로젝트의 특성과 데이터베이스의 복잡성을 고려하여 ORM과 원시 SQL을 적절히 조합해 사용하는 것이 중요합니다. 😊

728x90
728x90

댓글