[Spring] Persistence Framework, SQL Mapper

김민범·2024년 11월 2일

Spring

목록 보기
11/29

Persistence Framework

애플리케이션에서 데이터를 영구적으로 저장하고 관리하기 위해 데이터베이스와 같은 저장소와의 상호작용을 단순화하는 소프트웨어 도구이다.

JDBC의 한계

  1. 간단한 SQL을 실행할 때도 중복된 코드가 많이 필요하다.
    • Connection, PreparedStatement, ResultSet과 같은 반복적인 코드가 필요하다.
  2. SQLException과 같은 Checked Exception 처리가 필요하다.
    • 각 DBMS는 고유한 SQL 문법과 오류 코드 체계를 가지므로, SQLException의 처리 방식이 일관되지 않다.
  3. Connection 같은 공유 자원을 적절히 반환하지 않으면 자원 누수로 인해 서버가 다운될 수 있다.
  4. SQL Query를 개발자가 직접 작성해야 한다.
    • CRUD와 같은 단순 작업을 위해서도 쿼리와 반복 코드 작성이 필요하다.

Persistence Framework의 등장

  • JDBC의 복잡함을 해결하기 위해 등장한 프레임워크로, 간단한 작업만으로도 데이터베이스와의 연동이 가능하다.
  • 모든 Persistence Framework는 내부적으로 JDBC API를 사용하며, preparedStatement를 기본적으로 활용한다.
  • 크게 SQL MapperORM으로 나뉜다.

JDBC, SQL Mapper, ORM의 공통점

  • 영속성(Persistence): 데이터를 프로그램이 종료되더라도 영구히 저장하는 특성을 가진다.

SQL Mapper

SQL Mapper는 직접 작성한 SQL의 실행 결과와 객체(Object)의 필드를 매핑하여 데이터를 객체화한다. 대표적인 SQL Mapper로는 Spring JDBC Template, MyBatis가 있다.

Spring JDBC Template

  • Spring Framework에서 제공하는 JDBC 작업을 단순화하고 개선한 유틸리티 클래스이다.
JDBC Template의 장점
  1. 데이터베이스 연결이 간편하다.
    • JDBC 설정을 yml 또는 properties 파일로 쉽게 할 수 있다.
  2. 기본적으로 Prepared Statement를 사용한다.
  3. 예외 처리와 리소스 관리가 자동으로 이루어진다.
  4. 결과 집합(ResultSet) 처리 기능이 있어 데이터를 자바 객체로 변환하기 쉽다.
  5. 배치 처리 작업을 지원해 일정 시간에 반복 수행되는 쿼리 처리에 유리하다.

MyBatis

  • SQL 쿼리를 XML 파일로 분리하여 코드와 SQL을 관리할 수 있도록 한다.
    • SQL과 Java Code의 분리가 핵심이다.
MyBatis의 장점
  1. Connection 관리를 자동으로 처리해 JDBC의 중복 작업을 줄인다.
  2. DB 결과 집합을 자바 객체로 매핑할 수 있다.
  3. 동적 쿼리 작성이 쉬워, 상황에 따른 분기처리(IF)를 통해 SQL을 유연하게 변경할 수 있다.
  4. 관심사 분리로, SQL을 따로 관리하여 코드가 간결하고 유지보수성이 향상된다.
  5. 쿼리 결과를 캐싱하여 성능을 최적화할 수 있다.

SQL Mapper의 한계

  1. SQL을 직접 다루어야 한다.
  2. 특정 DB에 종속되기 쉬워, DB마다 다른 SQL 문법과 함수를 사용해야 한다.
  3. 테이블마다 유사한 CRUD SQL과 DAO(Data Access Object)를 반복적으로 작성해야 한다.
  4. 테이블 필드가 변경되면 관련된 모든 DAO의 SQL문과 객체 필드 수정이 필요하다.
  5. SQL에 의존적이 되어 객체와의 관계가 사라지고 DB 처리에 집중하게 된다.

관계형 DB와 객체지향 패러다임 불일치 문제

  • 객체지향은 캡슐화, 추상화, 상속, 다형성 등 객체 중심으로 설계되지만, 관계형 DB는 데이터 중심의 구조이다.
  • 패러다임이 달라, 객체지향으로 설계된 것을 관계형 DB에 저장하거나, 다시 객체화하기 어렵다. 이를 해결하기 위해 ORM이 등장하게 된다.

요약

  1. JDBCSQL Mapper(JDBC Template, MyBatis)ORM(JPA Hibernate) 순으로 발전했다.
  2. Persistence Framework는 내부적으로 JDBC API를 사용한다.
  3. SQL Mapper와 ORM은 Prepared Statement를 기본적으로 사용한다.
  4. SQL Mapper와 ORM은 데이터베이스 연결 등의 리소스 관리를 자동으로 처리한다.
  5. Persistence Framework는 저장소와의 상호작용을 단순화한다.

0개의 댓글