안녕하세요 오늘은 새로운 투다 백엔드 서버를 위한 DB 연결 방법에 대해 포스팅하려고 합니다. 대표적인 연결 방법인 jdbc와 jpa, 그리고 mybatis에 대해 알아보겠습니다.
출처 : https://thefif19wlsvy.tistory.com/249
우선 JDBC(Java DataBase Connectivity)란 Java와 데이터베이스를 연결하기 위한 Java 표준 인터페이스입니다. 여러 DB 드라이버를 제공하기 때문에 MySQL, MariaDB, PostgreSQL 등 다양한 DB와 연결이 가능하며 Java 표준이기 때문에 JVM 위에서 운영되는 에플리케이션에서 자유롭게 사용할 수 있습니다.
출처 : https://sowon-dev.github.io/2021/03/22/210323jpaVSjdbc/
JDBC는 쿼리를 실행하기 전과 후에 연결 생성, 명령문 등 많은 코드를 작성해야 하고, 커넥션 관리와 예외 처리 등에 불편함이 있어 이를 해결하기 위해 Spring JDBC가 나왔습니다. Spring JDBC에서는 DriveManager가 하는 일들을 SQL Mapper 중 하나인 JdbcTemplate에게 맡겨 커넥션 열고 닫기, Statement 준비하고 실행 및 닫기 등을 처리해주어 개발자는 DataSource만 제공해주기만 하면 된다는 장점이 있습니다.
여기서 SQL Mapper란 SQL 문장으로 직접 데이터베이스를 다루는 시스템으로 복잡한 쿼리 등을 작성하는데 더 효과적이지만 SQL이 Java 코드와 분리되어 있기 때문에 객체와 쿼리문 모두를 관리해주어야 한다는 단점이 있습니다.
출처 : https://thefif19wlsvy.tistory.com/249
MyBatis란 SQL Mapper의 한 종류로 JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 결과 매핑을 대신해줍니다. 위에서 설명드린 Spring JDBC와 유사하지만 MyBatis의 경우 SQL 쿼리를 Java 코드에 직접 작성하는 것이 아닌 xml 파일에 별도로 관리하여 인터페이스로 매핑하여 관리됩니다. 또한 Sprinb JDBC에서는 커넥션을 자동으로 관리해주는데 비해 SQL 쿼리 실행 전 SqlSession을 열고 실행한 수 이를 닫는 과정을 수행합니다. 따라서 MyBatis는 쿼리와 Java 코드가 분리되어 가독성 및 유지보수가 편해지나, 세션을 오픈하고 닫고 하는 과정과 인터페이스로 관리하는 부분에서 번거로움이 존재합니다.
출처 : https://thefif19wlsvy.tistory.com/249
JPA(Java Persistent API)란 Java ORM 기술에 대한 API 표준 명세로 Java에서 제공하는 API입니다. 즉 JPA는 ORM을 사용하기 위한 표준 인터페이스를 모아둔 것입니다. JPA 역시 내부적으로는 JDBC를 사용하지만 JDBC와의 큰 차이점은 쿼리를 통해 접근하는 것이 아닌 ORM 기술을 이용하여 객체를 통해 간접적으로 데이터베이스를 다룹니다.
ORM이란 에플리케이션 클래스와 RDB의 테이블을 매핑하는 기술이며, 객체 간의 관계를 바탕으로 RDB 테이블에 자동으로 영속화하여 SQL Mapper와 달리 쿼리로서 관리하지 않아도 된다는 장점이 있습니다. 하지만 ORM 기술의 경우 복잡한 SQL을 수행하기 힘들고 쿼리 성능의 최적화가 어렵다는 단점이 있습니다.
따라서 저는 Spring JDBC를 통해 DB와의 연결을 진행하려고 합니다. 현재 로직을 수행 중인 쿼리가 존재하고, RDS 모니터링 결과에 따라 쿼리의 최적화 작업도 같이 병행해야 하기 때문에 JPA 방식은 현실적으로 불편할 것이라 판단하였고, MyBatis의 경우 xml에 쿼리를 따로 기입하고 커넥션을 일일히 열고 닫는 과정이 불편하여 관련 기능을 자동적으로 제공해주는 Spring JDBC를 이용할 계획입니다. 추후 성능 부족 문제가 발생할 경우 JDBC를 튜닝하여 더 나은 성능을 이끌어낼 수 있는 방법 역시 진행해 볼 예정입니다. 이상으로 긴 글 읽어주셔서 감사합니다!
출처
https://thefif19wlsvy.tistory.com/249
https://blog.neonkid.xyz/223
https://sowon-dev.github.io/2021/03/22/210323jpaVSjdbc/