[BOOK_P] JDBC 및 MyBatis를 통한 DBMS 연결
MyBatis(SQL Mapper)와 JPA(ORM) 각각의 특징
- SQL Mapper
- 자바에서 SQL Mapper를 지원해주는 프레임워크
- SQL문을 이용해서 RDB에 접근, 데이터를 객체화 시켜줌
- 개발자가 직접 SQL 쿼리문을 작성
- 따라 세부적인 SQL 변경이 편리하고 원하는대로 최적화가 가능
- 복잡한 쿼리나 성능 튜닝이 필요한 경우 유용
- 어떤 DBMS를 사용하는지에 따라 문법이 달라지기 때문에 DBMS에 종속적
- 개발자가 쿼리와 객체를 직접 관리해주어야 함
- 자바에서 SQL Mapper를 지원해주는 프레임워크
- JPA
- 자바 ORM의 기술 표준
- 개발자가 직접 쿼리를 만들지 않아도 됨. CRUD 메소드 기본 제공
- 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑시켜 줌. 따라서 객체 중심적인 개발이 가능함
- 복잡한 쿼리의 경우 해결이 어렵고 직접 작성하는 것보다 성능이 떨어짐
- 초기에 러닝 커브가 존재 함
- 자바 ORM의 기술 표준
두 가지의 선택지 중 제가 진행하고자 하는 프로젝트와 저의 배경지식으로는 쿼리문을 다양하게 수정하고 적용해 볼 수 있는 방식이 적합하다고 판단되어 MyBatis를 선택하였습니다.
JDBC 및 MyBatis 연동
앞서 스프링부트를 사용하기로 결정 하였기에 스프링에서 지원하는 Spring JDBC를 사용하게 되었습니다.
스프링에서 마이바티스를 사용하기 위해 연동작업이 필요한데 이 역시 스프링에서 MyBatis-Spring 라이브러리를 지원하고 있고, MyBatis-Spring 라이브러리는 MyBatis와 Spring을 연동 후에 SqlSession을 구축, 빈 주입까지 진행해 주고 있습니다.
생성된 SqlSession을 사용해 데이터베이스에 접근하고 마이바티스를 사용하여 전달된 쿼리문이 스프링에서도 원활히 사용 될 수 있는 것입니다.
빌드 관리도구를 Maven으로 선택했기에 이에 맞추어 현재 가용 버전중 최신단계이고 안정화된 버전을 선택해 dependency를 적용해 주었습니다
<dependency> <groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
DBMS 선택
마이바티스를 선택했다면 DBMS도 구체적으로 결정해야 하는데, 지금 프로젝트의 의도에 맞는 MySQL로 결정하였습니다.
- MySQL의 장점
- 오픈 소스 라이선스이기에 자유롭게 사용하고 배포 및 수정할 수 있음 (단, 상업용은 유료)
- 현재 가장 널리 사용되는 관계형 데이터베이스 관리 시스템 중 하나이고, 지원 및 리소스를 제공하는 대규모 사용자 커뮤니티가 있음
- 거의 모든 운영체제 사용을 지원함
- 메모리 사용율이 낮아서 1MB 환경에서도 설치가 가능
- 오픈 소스 라이선스이기에 자유롭게 사용하고 배포 및 수정할 수 있음 (단, 상업용은 유료)
가장 대중화 된 Oracle과 MySQL간에 고민했지만 사이드프로젝트 특성과 지금 사용하고자 하는 범위 안에서는 MySQL이 더 일치한다고 느껴 MySQL를 사용했습니다.
최종적으로 결정 된 DBMS에 일치하는 종속성 및 DB정보도 프로젝트에 추가합니다.
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/book_p
username: root
password: root1234
결과 및 느낀점
- 선택한 JDBC 및 라이브러리와 MySQL 언어를 이용해 종속성 설치를 진행하고 DataSource를 설정하면서 api 테스트시 원활한 연동이 되어진 것을 확인 했습니다.
- MyBatis와 JPA에 대한 비교를 진행하면서 JPA 대한 언급도나 사용량이 점점 증가하고 있는 점이 매우 흥미로웠으며, 향후 JPA 프로젝트도 진행해보고 싶다는 생각을 하게 되었습니다.
- DB 연결을 하면서 Connection Pool을 사용해 보고싶어 Hikari 커넥션 풀 설치 및 정상연동까지 확인하였었으나, 현 시점에서 단순한 테스트 쿼리정도를 날려보는 정도로는 적용전후 차이가 눈에띄지않아 향후 어느정도 쿼리가 설계되고 api 테스트 등을 진행하면서 차이를 체득하고 적용하는것이 좋을 것같아 보류하였습니다. 설치시 참고한 공식git은 아래와 같으며 상세 포스팅은 이후 적용단계에서 진행하고자 합니다.
https://github.com/brettwooldridge/HikariCP