ORM?

최민수·2023년 3월 20일
0

[개발] Java Spring

목록 보기
7/18

처음엔 ORM 이라는 용어를 들으면 무슨 기술인지 떠오르지가 않았다. 단어가 익숙하지 않은 탓일 수도 있겠지만 프로젝트에서는 jpa orm 기술을 항상 사용한다. 항상 사용하고 있는데 그 기술이 뭔지 잘 모른다니 뭔가 기분이 이상했다.

ORMObject-Relational Mapping을 줄인 용어다. 풀어서 생각하니 감이 좀 잡혔다. DB와 객체의 매핑을 도와주는 기술이구나. 그리고 JPA는 이런 ORM 기술 위에 만들어진 인터페이스 모음이고, hibernate 같은 기술이 이를 구현한 구현체구나.

그럼 ORM은 왜 쓸까? 쓰면 뭐가 좋길래 쓸까?


ORM의 가장 큰 역할은 개발자가 DB에 object-oriented 하게 접근할 수 있게 해준다는 점이다.
DB에 데이터를 추가하고 관리하려면 sql 쿼리를 작성해야 한다. 이런 수고로움이 db 테이블을 자바 클래스로 매핑함으로써 사라지게 된다.

단지 sql을 작성하는 수고로움을 덜기 위한 점만 좋을까?
아니다. 크게 4가지 큰 장점이 있다.

  1. Abstraction
    개발자들이 객체와 클래스 레벨에서 db를 다룰 수 있게 되어 코드의 유지보수가 쉬워졌다. 또 db 연동과 관련된 코드도 대폭 줄일 수 있게 되었다.

  2. Portability
    다른 시스템을 가진 DB로 바꾸더라도 문제가 생기지 않는다. DB마다 고유의 SQL 문법이 있고 기능과 용어가 다른 경우가 많다. 이런 문제점에서 해방시켜 준다.

  3. Maintainability
    DB 스키마가 바뀌게 되면 코드에 자동적으로 반영된다. 개발의 유지보수성이 매우 좋아지게 된다.

  4. Performance
    ORM 프레임워크는 DB 퍼포먼스를 향상시키는 최적화 기법이 있는 경우가 많다. 캐싱이나 lazy loading 같은 기법들이 그 예다.

Lazy loading 은 엔티티 간의 관계 설정에 있어 JPA가 취하는 loading strategy 중 한 개이다.

  • Eager loading: Entity를 load 할 때 관계가 이어져 있는 Entity들을 그 시점에서 모두 loading 해놓는다. 이 방식은 데이터가 많거나 연관관계가 복잡하게 얽혀있으면 성능에 악영향을 끼칠 확률이 매우 높다.
  • Lazy loading: 반면에 lazy 전략은 Entity를 load할 때 연관된 Entity들을 load 하지 않고 후에 실제로 엔티티에 접근하는 코드를 만나면 그 시점에서 loading 을 한다. 따라서 메모리 용량과 성능 문제를 해결하는 방법이 될 수 있다.

참고 사이트: https://docs.oracle.com/javaee/7/tutorial/partpersist.htm
https://www.baeldung.com/hibernate-lazy-eager-loading

profile
CS, 개발 공부기록 🌱

0개의 댓글