반응형
서론
더보기
매번 프로그래밍하면서 문득 이런 생각이 들었다.
데이터베이스를 연동할 때 쓰는 것은 많은데 이게 대체 뭘까?...
사용하기 급급해서 이해 자체를 제대로 못한 체 여태 사용만 한 것 같아서 찾아보았다.
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문에 걸쳐 트랜잭션을 관리할 수 있는 트랜잭션 관리 기능 제공 |
캐시 관리 | 데이터베이스 액세스 수를 줄임으로써 성능을 향상시키는 캐싱 메커니즘 제공 |
참고
반응형