이번 장에서는 JDBC 프로그래밍으로부터 해방시켜 줄 퍼시스턴스 프레임워크에 대해 알아본다. 퍼시스턴스 프레임워크(Persistence Framework)를 사용하면 직접 JDBC API를 호출하지 않고도 데이터베이스에 있는 데이터를 다룰 수 있다. 사실은 개발자 대신 퍼시스턴스 프레임워크가 JDBC API를 호출하는 것이다.
- 퍼시스턴스(Persistence)
'퍼시스턴스'라는 용어는 개발 분야에서 많이 사용하는 용어이다. 퍼시스턴스는 데이터의 지속성을 의미한다. 즉 애플리케이션을 종료하고 다시 실행하더라도 이전에 저장한 데이터를 다시 불러올 수 있는 기술이다. 퍼시스턴스 프레임워크는 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다.
- 프레임워크(Framework)
'라이브러리(library)'가 개발에 필요한 도구들을 단순히 나열해 놓은 것이라면, '프레임워크(framework)'는 동작에 필요한 구조를 어느 정도 완성해 놓은 반제품 형태의 도구이다. 프레임워크를 사용하면 약간의 학습만으로 안정적인 시스템을 빠르게 개발할 수 있다. 이런 이유로 요즘 대부분의 프로젝트들은 프레임워크를 기반으로 개발을 진행하고 있다.
- 퍼시스턴스 프레임워크
퍼시스턴스 프레임워크를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있다. 안정적인 구동도 보장되므로 금상첨화가 아닐 수 없다.
퍼시스턴스 프레임워크에는 SQL 문장으로 직접 DB 데이터를 다루는 'SQL 맵퍼(mapper)'와 자바 객체를 통해 간접적으로 DB 데이터를 다루는 '객체 관계 맵퍼(Object-Relational mapper)'가 있다. SQL 맵퍼의 대표 주자로 'mybatis(이전 버전의 이름은 iBATIS)'가 있고, 객체 관계 맵퍼의 대표 주자로 '하이버네이트(Hibernate)'와 '탑링크(TopLink)'가 있다.
- 객체 관계 맵퍼
객체 관계 맵퍼는 프레임워크에서 제공하는 API와 전용 객체 질의어를 사용하여 데이터를 다룬다. 프레임워크에서 제공하는 객체 질의어는 SQL보다는 단순하여 배우기 쉽다. 하이버네이트는 'HQL(Hibernate Query Language)'이라는 객체 질의어를 제공한다. 객체 질의어를 사용하면 SQL을 몰라도 되기 때문에 개발자의 부담이 줄어든다. 실행 시에 DBMS에 맞추어 SQL 문을 자동 생성하기 때문에 특정 DBMS에 종속되지 않는 애플리케이션을 만들 수 있다.
- 객체 관계 맵퍼의 한계
이것만 놓고 보면 SQL 맵퍼보다 객체 관계 맵퍼가 더 나아 보인다. 하지만, 실무에서는 SQL 맵퍼를 더 많이 사용한다. 그 이유는 다음과 같다.
객체 관계 맵퍼를 사용하려면 데이터베이스의 정규화(normalized)가 잘되 있어야 한다. 그래야만 테이블을 객체와 연결하기 쉽고, 객체를 통해 테이블의 데이터를 다루기가 쉽다. 시스템을 개발하는 초기 단계에서는 데이터 모델링이라는 과정을 수행하기 때문에 정규화가 잘 되어 있다. 문제는 프로젝트가 끝난 이후이다. 유지보수 단계에 들어가면 잦은 기능 변경과 추가로 말미암아 초기의 잘 짜여진 데이터베이스 구조가 흐트러지게 된다. 그렇게 되면 이를 해결하기 위해 편법을 동원하게 되고, 이 때문에 코드가 복잡해져서 오히려 개발 비용이 증가하게 된다.
객체 관계 맵퍼의 또 다른 단점은 데이터베이스의 특징에 맞추어 최적화를 할 수 없다는 것이다. 보통 데이터베이스들은 실행 성능을 높이고 데이터 처리를 쉽게 해주는 자신만의 특별한 기능을 가지고 있다. 이런 기능을 활용할 수 있도록 데이터베이스 전용 SQL을 제공한다. 그러나 객체 관계 맵퍼에서는 SQL 문을 직접 작성하지 않기 때문에 이런 특장점을 충분히 활용할 수 없다.
- 수업의 방향
이러한 이유로 국내에서는 객체 관계 맵퍼보다 SQL 맵퍼를 주로 사용한다. 이 책에서도 SQL 맵퍼를 사용하는 방법에 초점을 맞출 것이다. SQL 맵퍼의 대표 주자인 mybatis를 사용하여 DAO를 개선해본다.
- 환경설정
실습에 들어가기에 앞서 동적 웹 프로젝트 'web07'을 생성한 뒤 기존 'web06' 프로젝트의 내용을 그대로 'web07' 프로젝트로 가져온다.
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr
'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글
103. mybatis 적용 (1) (0) | 2022.08.28 |
---|---|
102. mybatis 소개 (2) | 2022.08.27 |
100. 실력 향상 훈련 (6) (0) | 2022.08.24 |
99. 실력 향상 훈련 (5) (0) | 2022.08.24 |
98. 실력 향상 훈련 (4) (0) | 2022.08.23 |
댓글