Java - 데이터베이스 표현에 대한 개념(ORM, JPA, MyBatis, SQLMapper)

반응형

서론

더보기

매번 프로그래밍하면서 문득 이런 생각이 들었다.

데이터베이스를 연동할 때 쓰는 것은 많은데 이게 대체 뭘까?...

사용하기 급급해서 이해 자체를 제대로 못한 체 여태 사용만 한 것 같아서 찾아보았다.


ORM (Object-Relational Mapping)

  • 객체 지향 프로그래밍 개념을 관계형 데이터베이스 모델에 매핑할 수 있는 프로그래밍 기술
    • 즉, 객체와 데이터베이스 간 변환을 처리하므로 객체를 사용하여 데이터베이스 상호작용
  • SQL문을 직접 작성하지 않고 객체로 작업할 수 있는 추상화 계층 제공
  • SQL 및 데이터베이스 스키마의 복잡성을 처리않고 객체 지향 방식으로 데이터 작업 수행
  • 데이터베이스 테이블을 나타내는 클래스와 해당 테이블의 행을 나타내는 객체 정의
  • 대표적인 프레임워크로는 하이버네이트(Hibernate), 이클립스링크(EclipseLink), OpenJPA
ORM 사용의 이점
개발 시간 단축 데이터베이스 코드를 작성하고 유지 관리하는데 필요한 시간과 노력을 줄일 수 있음
코드 품질 향상 데이터베이스 작업에 필요한 상용코드의 양을 줄여 보다 깨끗하고 유지 관리 가능한 코드로 이어 질 수 있음
플랫폼 독립성 데이터베이스 계층을 추상화하므로 데이터베이스 간 전환이 쉬움
보안 강화 자동으로 값을 이스케이프하고 준비된 SQL문을 사용하므로 SQL 주입 공격을 방지하는데 도움이 됨
테스트 용이성 객체 지향 방식으로 작성되기 때문에 일반적으로 단위 테스트를 작성하는 것이 더 쉬움

* SQL 주입 공격 : 응용 프로그램 보안 상의 허점을 의도적으로 이용해서 악의적인 SQL 문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법 (= SQL 삽입, SQL 인젝션, SQL Injection, SQL 주입)


JPA (Java Persistence API)

  • 자바에서 ORM을 구현하기 위한 규격
  • 객체를 관계형 데이터베이스 매핑하는 방법을 정의하는 일련의 인터페이스와 주석을 제공
    • 리파지토리, 엔티티 등
  • 자바 EE 플랫폼의 일부지만 독립형 자바 애플리케이션이나 다른 자바 프레임워크에서 사용 가능
  • 자바 개발자들에게 강력하고 유연한 ORM 솔루션 제공, 데이터베이스 작업에 널리 사용되는 기술
JPA 사용의 이점
객체-관계 매핑 자바 객체를 데이터베이스 테이블에 매핑, 객체 지향적인 방식으로 데이터 작업
쿼리 언어 SQL과 유사하지만 데이터베이스 테이블 대신 자바 객체에서 작동하는 JPQL 제공
트랜잭션 관리 데이터베이스에서 원자적 작업을 수행 할 수 있도록 기본 트랜잭션 관리 시스템 제공
캐시 관리 데이터베이스 액세스 수를 줄임으로써 성능을 향상시키는 캐싱 메커니즘 제공
독립적인 영속성 제공 특정 데이터베이스나 영속성 기술에 얽매이지 않고 JPA와 연동되는 코드 작성 가능

* JPQL(Java Persistence Query Language) : 자바 지속성(=영속성) 쿼리 언어, 플랫폼에 의존하지 않는 객체 지향 쿼리 언어


DataMapping Framework

  • 데이터베이스, 파일, 웹 서비스와 같은 서로 다른 데이터 소스 간 데이터를 매핑하는 프레임워크
  • 서로 다른 소스 간 데이터를 매핑하기 위한 표준 인터페이스를 제공하여 데이터 통합 프로세스 단순화
  • 일반적으로 데이터 매핑 규칙을 정의하기 위한 시각적 인터페이스 제공
  • 데이터 변환을 수행하고 서로 다른 형식 간에 데이터를 매핑하기 위한 라이브러리 세트 제공
  • 서로 다른 소스의 데이터를 단일 애플리케이션으로 통합하거나 서로 다른 시스템 간에 데이터를 변환 및 마이그레이션 하는데 사용

* 데이터 마이그레이션(Data Migration) : 데이터를 한 컴퓨터 스토리지 시스템에서 다른 컴퓨터 스토리지 시스템으로 영구적으로 전송하는 프로세스


SQLMapper

  • 프레임워크가 아닌 SQL문을 사용하여 데이터베이스 레코드를 응용 프로그램의 객체에 매핑하는 데이터 매핑 프레임워크 유형을 설명하는데 사용되는 용어
  • SQL을 사용하여 데이터베이스에서 데이터를 검색하고 이러한 쿼리의 결과를 응용 프로그램의 객체에 매핑
  • 데이터베이스를 네이티브 객체인 것과 같이 작업 가능
    • 이를 통해 데이터 통합 프로세스 단순화, 관계형 데이터베이스를 사용하는 응용 프로그램을 더욱 쉽게 작성 가능
  • SQLMapper 프레임워크에는 대표적으로 MyBatis, jOOQ, Spring JDBC

MyBatis

  • 자바 기반의 데이터 매핑 프레임워크
  • 하이버네이트와 같은 ORM 프레임워크의 대안을 제공
  • SQL문을 직접 사용
  • XML 파일에서 SQL문을 정의하며 주석 집합을 사용하여 객체에 매핑
  • 실행시 MyBatis에 의해 실행되며 트랜잭션 관리 및 예외 처리를 위한 API 집합 제공
  • 자바 개발자들을 위한 강력하고 유연한 데이터 매핑 프레임워크
MyBatis 주요 기능
SQL 매핑 XML 파일에서 SQL 문을 정의, 주석을 사용하여 자바 객체에 매핑
동적 SQL 생성 복잡한 SQL문을 프로그램 방식으로 생성할 수 있도록 지원하는 동적 SQL 생성도구 제공
유연한 쿼리 단일, 다중 행 쿼리 및 배치 업데이트를 포함한 다양한 쿼리 기술 지원
트랜잭션 관리 여러 SQL문에 걸쳐 트랜잭션을 관리할 수 있는 트랜잭션 관리 기능 제공
캐시 관리 데이터베이스 액세스 수를 줄임으로써 성능을 향상시키는 캐싱 메커니즘 제공

참고

 

 

반응형