📌퍼시스턴스 프레임워크(Persistence Framework)란?
자세한 설명에 앞서 단도직입적으로 말하면 퍼시스턴스 프레임워크(persistence framework)를 사용하면 직접 JDBC API를 호출하지 않고도 DB에 있는 데이터를 다룰 수 있다. 퍼시스턴스 프레임워크(persistence framework)가 JDBC API를 대신 호출해주기 때문에 개발자가 JDBC 프로그래밍으로부터 해방되게 해준다.
💡퍼시스턴스(Persistence)
퍼시스턴스(Persistence)는 데이터의 지속성을 의미한다. 즉 애플리케이션을 종료하고 다시 실행하더라도 이전에 저장한 데이터를 다시 불러올 수 있는 기술이다.
💡프레임워크(Framework)
'라이브러리(Library)'가 개발에 필요한 도구들을 단순히 나열해 놓은 것이라면, '프레임워크(framework)'는 동작에 필요한 틀(frame)을 어느 정도 완성해 놓고 채워넣기만 하면 되는 반제품 형태의 도구이다. 프레임워크를 사용하면 약간의 학습만으로 안정적인 시스템을 빠르게 개발할 수 있기 때문에 대부분의 프로젝트들은 프레임워크를 기반으로 개발을 진행하고 있다.
💡퍼시스턴스 프레임워크(Persistence Framework)
퍼시스턴스 프레임워크(persistence framework)를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 DB와 연동되는 시스템을 빠르게 개발할 수 있고, 직접 JDBC API를 호출하는 것보다 안정적인 구동이 보장된다.
📌퍼시스턴스 프레임워크(Persistence Framework)의 종류
퍼시스턴스 프레임워크(Persistence Framework)에는 SQL문장으로 직접 DB 데이터를 다루는 'SQL 맵퍼(mapper)'와 Java 객체를 통해 간접적으로 DB 데이터를 다루는 '객체 관계 맵퍼(Object-Relational mapper)'가 있다. SQL 맵퍼의 대표 주자로 'mybatis'가 있고, 객체 관계 맵퍼의 대표 주자로 'Hibernate'와 'TopLink'가 있다.
💡객체 관계 맵퍼
객체 관계 맵퍼는 프레임워크에서 제공하는 API와 전용 객체 질의어를 사용하여 데이터를 다룬다. 프레임워크에서 제공하는 객체 질의어는 SQL보다는 단순하여 배우기 쉽다. 예를 들어 Hibernate는 'HQL(Hibernate Query Language)'이라는 객체 질의어를 제공한다. 객체 질의어를 사용하면 SQL을 몰라도 되기 때문에 개발자의 부담이 줄어들고, 실행 시에 DBMS에 맞추어 SQL문을 자동 생성하기 때문에 특정 DBMS에 종속되지 않는 애플리케이션을 만들 수 있다.
💡객체 관계 맵퍼의 한계
위 객체 관계 맵퍼의 특징을 살펴보면 SQL 맵퍼 보다 객체 관계 맵퍼를 사용하는 것이 더 좋아보인다. 하지만 실무에서는 SQL 맵퍼를 더 많이 사용하는데 그 이유는 무엇일까?
객체 관계 맵퍼를 사용하려면 DB의 정규화가 잘 되어 있어야 한다. 그래야 테이블을 객체와 연결하기 쉽고, 객체를 통해 테이블의 데이터를 다루기가 쉽다. 시스템을 개발하는 초기 단계에서는 데이터 모델링이라는 과정을 수행하기 때문에 정규화가 잘되어 있다. 하지만 문제는 프로젝트가 끝난 이후 이다. 프로젝트가 유지보수 단계에 들어가게 되면 잦은 기능 변경과 추가로 DB의 구조가 변경이 된다. 그렇게 되면 코드가 복잡해지고 덩달아 DB 구조도 복잡해지면서 오히려 개발 비용이 증가하게 되고 DB의 정규화도 흐트러지게 된다.
객체 관계 맵퍼의 두 번째 단점은 DB의 특징에 맞추어 최적화를 할 수 없다는 것이다. 보통 DB들은 실행 성능을 높이고 데이터 처리를 쉽게 해주는 자신만의 특별한 기능을 갖고 있다. 이런 기능을 활용할 수 있도록 DB 전용 SQL을 제공한다. 그러나 객체 관계 맵퍼에서는 SQL문을 직접 작성하지 않기 때문에 이런 특별한 기능(장점)들을 활용할 수 없다.
이러한 이유들로 객체 관계 맵퍼보다 SQL 맵퍼를 주로 사용한다.
다음 포스팅은 SQL 맵퍼의 대표 주자인 mybatis에 관하여 설명하도록 하겠다.
'MyBatis' 카테고리의 다른 글
MyBatis 동적 SQL 사용 (예시. 항목 별 정렬) (0) | 2022.07.21 |
---|---|
[mybatis] mybatis 설정 파일 (0) | 2022.07.21 |
[mybatis] SQL mapper(맵퍼) 파일 (0) | 2022.07.21 |
[mybatis] mybatis 적용 (0) | 2022.07.20 |
[mybatis] mybatis(마이바티스)란? (mybatis 환경세팅) (0) | 2022.07.20 |