3월의 마지막도 어느새 이틀을 남겨두고 있습니다. 옷차림이 가벼워지고 흩날리는 꽃잎이 마음을 산들거리게 하는 4월이 눈앞에 성큼 다가왔는데요, 일상을 벗어던지고 놀러가고 싶은 욕심을 한 번 꾸욱 눌러내는 게 어려운 요즘입니다. 하지만! 그럼에도 불구하고 성장을 향한 배움을 멈추면 안되겠죠? 오늘은 데이터 처리를 할 때 사용되는 프레임워크 두 가지, MyBatis와 JPA에 대해 알아보고자 합니다.
먼저, 본격적으로 MyBatis와 JPA에 대해 알아보기 전에 영속성(Persistence)을 알아보고, 영속성 프레임 워크인 SQL Mapper는 무엇인지, ORM 기술은 무엇인지에 대해 알아보겠습니다.
영속성이란 프로그램이 종료되어도 데이터가 사라지지 않는 특성을 말합니다. 영속성이 없는 데이터는 메모리에만 존재하기 때문에 프로그램이 종료되면 사라지게 되는데요, 이렇게 되면 프로그램을 사용하지 않을 때도 데이터를 유지하기 위해 물리적 리소스를 유지해야 하기 때문에 엄청난 낭비가 발생합니다. 따라서 데이터를 영속성을 가진 파일 시스템, 관계형 데이터베이스, 객체 데이터 베이스를 활용하여 구현합니다.
Spring에서 데이터의 영속성을 위해 사용하는 방법은 아래 3가지 입니다.
1. JDBC (Java)
2. Spring JDBC
3. Persistence Framework
이 중 우리가 오늘 알아볼 것은 Persistence Framework입니다. Persistemce Framework를 사용하면 간단하게 Spring과 데이터베이스를 연동해 사용할 수 있습니다. 개발자가 보다 빠르고 안정적으로 시스템을 개발할 수 있게 만들어주죠. 이 Persistence Framework에 속하는 기술로 ORM과 SQL Mapper가 있습니다.
SQL MAPPER는 Object와 SQL 필드를 매핑하여 데이터를 객체화하는 기술입니다.
SQL문을 직접 작성하고 쿠커리 수행 결과를 어떠한 객체에 매핑할 지 바인딩 합니다. DBMS에 종속적이라는 문제가 있습니다. JDBC Template, MyBatis가 여기 속합니다.
ORM은 Object와 DB 테이블을 매핑하여 데이터를 객체화하는 기술입니다. 개발자가 반복적인 SQL을 직접 작성하지 않아도 된다는 장점과, DBMS에 종속적이지 않다는 특징을 가지고 있습니다. 복잡한 쿼리의 경우 JPQL을 사용하거나 SQL Mapper를 혼용하여 사용할 수 있습니다.
MyBatis는 Object Mapping 기술입니다. 자바에서 SQL Mapper를 지원해주는 프레임워크 입니다. SQL문을 이용해서 관계형 데이터베이스에 접근하고 데이터를 객체화 합니다. 직접 쿼리를 작성하여 결과를 객체와 맵핑할 수 있습니다. 또한 쿼리문을 xml로 분리하여 관리 가능하고, 직접 쿼리를 작성할 수 있기 때문에 복잡한 쿼리문 작성도 가능해집니다. 데이터 캐싱 기능으로 성능을 향상시킬 수 있다는 장점을 가지고 있습니다.
하지만 객체와 쿼리문을 모두 관리해야 한다는 단점, CRUD 메소드를 직접 다 구현해야한다는 단점이 있으니 사용 시 고려해야 합니다.
JPA는 자바 ORM의 기술 표준입니다. 대표적인 오픈소스로 Hibernate를 사용합니다. CRUD 메소드를 기본으로 제공하기 때문에 쿼리문을 작성할 필요 없이, 바로 함수를 작성하여 데이터 생성, 조회, 삭제를 할 수 있습니다. 1차 캐싱, 쓰기 지연, 변경 감지, 지연 로딩을 제공합니다. 쿼리 수정으로 정보가 바뀌어도 객체만 바꾸기 때문에 객체 중심으로 개발 가능합니다.
하지만 복잡한 쿼리는 해결이 어렵다는 단점이 있습니다.
지금까지 영속성, SQL Mapper, ORM, JPA, MyBatis에 대해 간단하게 알아보았는데요, 프로젝트를 진행하다 보면 MyBatis와 JPA에 대해 알고 사용해야 할 순간이 옵니다. 실제로 두 가지 중 하나만 선택해서 사용해야 돼! 하는 경우는 없으니 쿼리의 복잡성에 따라 두 가지를 적절히 잘 사용한다면 보다 데이터 처리가 매끄러운 프로젝트가 탄생하겠죠? 그럼 이상으로 3월 기사를 마무리 하겠습니다. 읽어주셔서 감사합니다.
참고 블로그 ORM의 개념, JPA와 MyBatis 차이
[4월] :: 백엔드 탐구생활 :: 백엔드 직무 면접 질문 파헤치기 (0) | 2023.04.23 |
---|---|
[4월] 싸피 앰배서더 초청행사 현장 밀착 취재 : 싸피를 알고 싶어? 여기 모여봐 (0) | 2023.04.14 |
[3월] 삼성 임직원 멘토링 간담회 후기 - 백엔드 클라우드 (0) | 2023.03.19 |
[2월] :: 백엔드 탐구생활 :: 뭐 하고 계세요? Spring Security요 (0) | 2023.02.27 |
[2월] 배포 Tip 방출 : AWS 2차 비밀번호 설정하기 (0) | 2023.02.19 |