[CS] DB와 ORM(Object-Relation-Mapping) 사용 이유

Chance·2024년 12월 24일

ORM(Object-Relational Mapping) 패키지를 사용하는 이유는 객체 지향 프로그래밍과 관계형 데이터베이스(RDB)를 매끄럽게 통합하고 효율적으로 사용할 수 있도록 돕기 때문입니다. 구체적으로 다음과 같은 장점들이 있습니다:

  1. 생산성 향상
    ORM은 데이터베이스 작업을 고수준의 코드로 추상화하여 SQL 쿼리를 직접 작성하지 않아도 됩니다.
    객체지향 언어를 사용하여 데이터를 다룰 수 있으므로 개발자들이 더 적은 코드로 데이터베이스와 상호작용할 수 있습니다.
  2. 유지보수성 증가
    ORM을 사용하면 데이터베이스 스키마 변경이나 쿼리 수정 작업이 객체 모델 변경으로 일원화됩니다.
    코드 가독성이 높아지고, 유지보수가 쉬워집니다.
  3. 데이터베이스 독립성
    ORM은 데이터베이스에 종속적이지 않은 추상화 레이어를 제공합니다.
    예를 들어, MySQL에서 PostgreSQL로 이전하더라도 ORM 설정만 변경하면 대부분의 코드는 수정할 필요가 없습니다.
1. 데이터베이스 종속성의 문제
전통적으로 SQL을 직접 작성하는 방식에서는 데이터베이스 시스템마다 미묘한 차이 때문에 다음과 같은 문제점이 생길 수 있습니다:

데이터 타입이 서로 다름:
예를 들어, MySQL에서는 문자열 타입으로 VARCHAR를 사용하지만, PostgreSQL에서는 같은 용도로 TEXT를 사용할 수도 있습니다.
SQL 문법 차이:
예를 들어, MySQL의 LIMIT 구문과 Oracle의 ROWNUM 구문은 같은 기능을 하지만 문법이 다릅니다.
특정 데이터베이스 기능 의존:
특정 데이터베이스의 고유한 기능(예: JSON 컬럼 타입, 특정 함수 등)에 의존하면 다른 데이터베이스로 마이그레이션하기 어렵습니다.
이로 인해 특정 데이터베이스를 변경하거나 업그레이드할 때 코드 수정 비용이 증가하게 됩니다.

2. ORM의 데이터베이스 독립성
ORM은 데이터베이스에 종속적이지 않은 추상화 레이어를 제공합니다. 이 말은 ORM이 데이터베이스와 상호작용하는 세부 사항을 캡슐화하여, 개발자가 데이터베이스마다 다른 SQL 문법이나 구조를 직접 신경 쓰지 않아도 된다는 뜻입니다.

ORM의 동작 방식:
ORM은 객체 지향 코드와 관계형 데이터베이스 간의 매핑을 자동으로 처리합니다.
데이터베이스에 따라 적합한 SQL 쿼리를 생성합니다.
예를 들어, User.objects.all() 같은 ORM 메서드를 사용하면, MySQL에서는 MySQL에 맞는 쿼리를, PostgreSQL에서는 PostgreSQL에 맞는 쿼리를 생성합니다.
데이터베이스 설정을 변경해도 애플리케이션 코드에는 영향을 미치지 않습니다.
보통 설정 파일에서 데이터베이스 타입을 변경하면 ORM이 이에 맞는 작업을 처리합니다.
  1. 객체 지향적 접근
    데이터베이스의 테이블과 컬럼을 객체와 속성으로 매핑하여 객체 지향 프로그래밍의 이점을 활용할 수 있습니다.
    객체 지향 언어의 특성을 사용해 데이터 검증, 비즈니스 로직을 포함한 풍부한 모델링이 가능합니다.
  2. 보안 강화
    ORM은 SQL 인젝션과 같은 보안 문제를 예방하는 데 도움을 줍니다.
    SQL 쿼리를 자동으로 생성하며, 사용자 입력을 안전하게 처리하는 방식을 내장하고 있습니다.
  3. 공통 기능 제공
    ORM 패키지는 CRUD(Create, Read, Update, Delete) 작업과 같은 일반적인 데이터베이스 작업을 간편하게 처리할 수 있는 기능을 제공합니다.
    또한, Lazy Loading, Eager Loading, 관계 매핑 등 복잡한 데이터베이스 작업도 효율적으로 처리할 수 있습니다.
  4. 테스트 용이성
    ORM은 Mock 데이터베이스를 활용하여 실제 데이터베이스에 의존하지 않고도 테스트를 실행할 수 있게 해줍니다.

0개의 댓글