상세 컨텐츠

본문 제목

[Spring] ORM(Object Relational Mapping)란?

Backend

by choiDev 2023. 12. 21. 00:12

본문

ORM이란?

1. 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑하는 프로그래밍 기법이다

2. SQL문을 직접 작성하는것이아니라 Entity 클래스나 Repository 클래스등을 활용하여 RDB에 접근하는 방식으로

3. 객체지향적 언어로 개발 하는 개발자가 DB의 데이터를 다룰때마다 프로그래밍 코드로 RDB를 간편하게 조회하는 방식이다.

 

ORM의 장점

1. 객체 지향적인 코드 작성 가능
  > ORM방식을 사용하면 개발자는 객체 지향적 코드로 쿼리를 사용가능하며 데이터베이스 접근이나 쿼리 작성의 복잡성이 줄어듭니다.

2. 생산성 향상
  > ORM은 데이터베이스와의 연결 및 사용을 추상화 하고 자동화 해주기에 개발자는 데이터베이스 접근을 위한 별도의 코드나 SQL 쿼리를 작성하는 시간을 줄일 수 있습니다. 

3. 코드 재사용 및 유지보수성 향상
  > ORM은 데이터베이스 스키마의 변경에 대응하기 쉽습니다. 따라서 코드를 쉽게 수정하고 변경된 스키마에 대응할 수 있어 유지보수가 간편해집니다. 

4. 데이터베이스 독립성
  > ORM을 사용하면 데이터베이스에 대한 종속성을 줄일수 있습니다 예시로 데이터베이스를 Mysql -> PostgreSql로 변경하거나 하더라도 DB마다 다른 타입을 자동으로 변환해주기에 코드 수정이 크지 않습니다 

 

ORM의 단점

1. 성능 이슈
  > ORM은 데이터베이스와의 중간계층이 추상화 되기에 쿼리를 직접 짜기보단 메소드형태로 사용하게 됩니다 따라서 최적의 쿼리가 아닌 ORM 기술로 만들어진 자동 추상화된 쿼리가 생성되어 대규모 데이터 혹은 복잡한 쿼리시 성능이슈를 크게 불러옵니다 대표적인 예로 N+1 이슈가 있습니다.

2. 최적화의 어려움 
  > 위에 1번과 겹치는 이슈로 쿼리를 직접 짜지 않기에 최적화가 되지 않는 쿼리거나 Entity구조가 발생할수 있습니다. 

3. 복잡한 쿼리 처리 어려움 
  > 간단한 쿼리는 findAllById 등으로 간단히 처리가 가능하나 2~3개 이상의 컬럼을 where 조건으로 하는 쿼리들은 메소드 명도 길어질 뿐만 아니라 join이나 sub query등을 처리하기에는 어려움이 있습니다.

 

'Backend' 카테고리의 다른 글

[Spring] Hibernate.cfx.xml이란  (0) 2023.12.23
[SpringBoot] JPA (Java Persistence API)란?  (1) 2023.12.21
[Spring Boot]MVC 와 MVC2 패턴이란?  (0) 2023.12.19
[Flyway] 설정하기  (0) 2023.04.10
[Java8] Stream이란  (0) 2022.06.22

관련글 더보기