# Back-End/Spring

ORM 과 SQL Mapper 비교

ORM vs SQL Mapper

얼마 전 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 라는 도서를 읽으며 처음 ORM이라는 기술을 접했다.

 

이전에 회사에서 접했던 스프링 프로젝트에서는 Ibatis 혹은 Mybatis(SQL Mapper)를 이용하여 직접 작성한 SQL문으로 RDB에 질의를 하고 그 결과를 객체에 매핑을 시켜줬었는데, 도서를 읽으며 토이프로젝트에 JPA라는 기술을 사용하니 SQL 구문을 직접 작성하지 않고 간단한 CRUD는 모두 처리할 수 있어 편리하였다.

 

지금까지 스프링 프로젝트를 진행하며 사용해본 기술에 대해 정리하고자 글을 작성한다.

 

📝 영속성(Persistence)

먼저 데이터가 갖는 특성 중 영속성을 알아본다.

 

영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다.

영속성이 없는 데이터는 프로그램 실행중일 때 메모리에 존재하며 프로그램이 종료되면 같이 사라진다.

영속성은 파일 시스템, RDB 등을 이용하여 구현한다.

 

 

📝 ORM(Object Relational Mapping)

 

ORM이란 객체와 관계형 데이터베이스의 데이터를 매핑해주는 것을 말한다.

OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB에서 쓰이는 테이블을 자동으로 매핑하는 것이다. 객체 모델이 관계형 모델에 매핑되며 생길 수 있는 불일치 문제는 객체간의 관계를 표현하여 해결한다.

즉, ORM을 이용하여 객체 간의 관계를 표현하여 SQL문을 작성하지 않고 RDB를 조작한다.

 

😊 장점

  • 객체 모델만을 이용하여 객체지향적으로 프로그래밍을 할 수 있다.
  • SQL을 직접 작성하지 않아도 된다. (개발 시간 단축)
  • 유지보수 용이 (스키마의 수정이 필요할 때, 단순히 클래스를 수정하면 DB에 반영된다.)
  • DBMS 종속성 하락 (DBMS를 고려하지 않고 객체를 중심으로 개발한다.)

😑 단점

  • 데이터의 관계가 복잡할 수록 구현하기 어렵다.
  • 복잡한 SQL문을 처리하기가 어렵다.
  • 객체 - 관계 간의 불일치가 발생할 수 있다. (세분성, 상속성, 일치, 연관성, 탐색)

 

📝 SQL Mapper

 

SQL Mapper는 작성한 SQL 구문으로 RDB에 직접 질의하여 그 결과 값을 객체에 매핑 시켜준다.

 

😊 장점

  • 관계를 정확히 명시할 수 있다.
  • 복잡한 SQL문도 처리할 수 있다.

😑 단점

  • SQL 구문을 직접 작성해야 한다.
  • 유지보수 하락 (객체 모델, 관계 모델 각각 개발해야 한다.)
  • DBMS의 종속성 (Oracle, MS SQL, My SQL 등등)

 

둘다 사용해보니 간단한 프로젝트라면 ORM 기술만을 사용하고, 비즈니스 로직이 복잡하다면 ORM과 SQL Mapper를 혼용하면 좋을 것 같다.

 

728x90