티스토리 뷰

카테고리 없음

ORM 이란?

구삼칠오 2021. 10. 20. 10:53

우리는 서비스에 필요한 데이터를 서버의 상태와 관계없이 영구적으로 저장하기 위해 RDBMS라는 도구를 많이 사용합니다. RDBMS는 키 값 하나로 테이블(데이터)간의 관계를 손쉽게 형성하여 데이터를 유기적으로 저장하는데 큰 도움을 줍니다. 하지만 RDBMS의 키를 이용한 관계 설정은 코드레밸에서 데이터들을 사용하는데에 불편함을 주기도 합니다.

 

OOP에서 객체간의 연관관계는 참조 형태로 이루어 집니다. 예를 들어 어떤 사람이 갖고 있는 음식 찾고자 할 때 다음과 같은 형태로 조회를 하게 될 것입니다.

person.getFood(); // 1

하지만 RDBMS의 경우 다음과 같이 키 값을 이용해 매칭 되는 값을 찾게 되죠.

foods.of(persionId: person.id) // 2 // 모든 음식들 중 특정 사람의 소유인 음식을 조회

 

ORM은 2번 처럼 작성해야 하는 코드를 1번 처럼 참조를 사용하도록 매핑해주는 도구로서 OOP스럽게 코딩하도록 도움을 줍니다.

 

 

장점

  • 객체지향적인 코드로 인해 더욱 직관적인 코드 작성이 가능하고, 비지니스 로직에 집중하도록 돕는다.
    • 선언문, 할당, 종료 같은 부수적인 코드가 없거나 급격히 줄어든다.
    • 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드의 가독성을 올려준다.
    • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가한다.
  • 재사용 및 유지보수의 편리성이 증가한다.
    • ORM은 독립적으로 작성되어있고, 해당 객체들을 재활용 할 수 있다.
  • DBMS에 대한 종속성이 줄어든다.
    • 대부분 ORM 솔루션은 DB에 종속적이지 않다.
    • 종속적이지 않다는것은 구현 방법 뿐만아니라 많은 솔루션에서 자료형 타입까지 유효하다.
    • 예를 들어 JPA의 표준 구현체인 hibernate의 경우 각 DBMS의 방언에 맞춰 쿼리를 생성한다.

 

단점

  • 완벽한 ORM 으로만 서비스를 구현하기가 어렵다.
    • 사용하기는 편하지만 설계는 매우 신중하게 해야한다.
    • 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
    • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.
  • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다.
    • 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다.

 

 

ref.

hibernate

ORM 이란?

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함