본문 바로가기

Develop Log/개발 관련 잡학다식

ORM

반응형

ORM (Object Relational Mapping) 객체 - 관계 매핑

객체 지향 프로그래밍 언어를 사용하여 가상의 객체 데이터베이스를 생성한 후, 이를 관계형 데이터베이스의 테이블에 매핑하는 프로그래밍 기법

  • 객체지향에서 쓰이는 클래스와 관계형 데이터베이스에서 쓰이는 데이터를 테이블이 자동으로 매핑하는 것을 의미
  • 개발자들은 SQL 쿼리를 작성하지 않고도 데이터베이스 조작을 수행할 수 있습니다
  • 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생 => ORM을 통해 객체 간의 관계를 바탕으로 SQL 문을 자동으로 생성하여 불일치를 해결하는 데 사용
  • 객체 지향 프로그래밍을 클래스를 사용하며 관계형 데이터베이스는 테이블을 사용
  • ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다

장점

  1. 생산성
    1. ORM은 개발자가 SQL을 이용하여 직접 데이터베이스를 조작하는 대신에, 더 높은 수준의 추상화를 제공함으로써 개발 생산성을 높여주는 장점이 있다
    2. 이로 인해 개발자가 객체 모델만 이용하여 프로그래밍을 하는 데 집중할 수 있게 한다
  2. 유지보수성
    1. ORM은 기존 객체와 독립적으로 작성되어 있고, 객체로 작성되었기 때문에 재활용이 가능하다
    2. 객체 모델을 변경하면 ORM이 이를 데이터베이스에 자동으로 반영한다
    3. 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있다
  3. 성능 최적화
    1. 캐싱, 지연 로딩, 배치 처리등 다양한 성능 최적화 기능을 제공한다
    2. 객체 간 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다.
  4. 벤더 독립성
    1. ORM은 데이터베이스 엔진간 이동을 용이하게 해주어 특정 데이터베이스 엔진에 대한 의존성을 줄일 수 있다
    2. 데이터베이스 시스템을 추상화하여 MySQL에서 PostgreSQL로 전환하거나 원하는 방식으로 쉽게 전환할 수 있다

단점

  1. 복잡성
    1. ORM은 상당한 학습 곡선이 있을 수 있습니다. 복잡한 쿼리를 작성하거나 성능을 최적화하는 것이 어려울 수 있으며, 프로젝트의 복잡성이 늘어날수록 이러한 난이도는 상승할 수 있다
  2. 성능 이슈
    1. ORM은 SQL 쿼리를 자동으로 생성하므로, 때때로 비효율적인 쿼리가 생성되어 성능에 영향을 미칠 수 있다
  3. 데이터베이스 기능 제한
    1. ORM을 사용하면 데이터베이스의 모든 기능을 지원하지 않을 수 있습니다. 이는 특정 데이터베이스 기능의 사용이 어려울 수 있다
  4. 모델링 제한
    • ORM은 객체와 테이블 간의 매핑을 기본으로 하므로, 복잡한 관계나 데이터 구조를 표현하는데 어려움을 겪을 수 있다
    • 프로젝트의 복잡성이 커질 경우 난이도가 올라갈 수 있다.
    • 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 제대로 활용하기 어려울 수 있다.
    • 객체-관계 간의 불일치는 다음과 같은 형태로 나타나게 된다
      1. 세분성: 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다
      2. 상속성: RDBMS는 객체지향 프로그래밍 언어의 특징인 상속 개념이 없다
      3. 연관성: 객체지향 언어는 방향성이 있는 객체의 참조를 사용하여 연관성을 나타내지만, RDBMS는 방향성이 없는 외래키를 이용하여 연관성을 나타낸다
      4. 탐색: RDBMS에서 객체를 접근하는 방법과 ORM을 사용하여 객체에 접근하는 방법이 다르다
      5. 일치: RDBMS는 기본키를 사용하여 동일성을 정의하지만, 객체지향 언어는 하나 이상의 식별자를 통해 동일성을 정의할 수 있다

참고 자료

  1. https://gmlwjd9405.github.io/2019/02/01/orm.html
  2. https://geonlee.tistory.com/207
반응형

'Develop Log > 개발 관련 잡학다식' 카테고리의 다른 글

HTTP Method  (0) 2023.07.21
OSI(Open Systems Interconnection) 7계층  (0) 2023.07.18
Http 버전별 특징  (0) 2023.07.16
Tomcat, Nginx  (0) 2023.07.16
첫번째 이야기 WAS, Web Server  (0) 2023.07.16