StudyRepository
article thumbnail
Published 2023. 7. 10. 16:56
JDBC & JPA Spring
728x90

 

JDBC

 

JDBC란 DB에 접근(Connectivity)할 수 있도록 Java에서 제공하는 API이다.

 

JDBC API가 있고 JDBC DriverManager가 DB제품에 따른 드라이버를 생성하여 JDBC API에 맞게 동작할 수 있게 처리해준다.
따라서 우리는 JDBC API 변경없이 JDBC 드라이버만 바꿔주면 어떤 제품의 DB든 연결할 수 있다.

 

쿼리를 실행하기 전과 후에 연결 생성, 명령문, ResultSet 닫기등과 같은 많은 코드를 작성해야한다.
또 connection 관리, 예외처리등에 불편함이 있어 나온게 Spring JDBC이다.

 

 

Spring JDBC

 

-핵심 : JdbcTemplate-

 

Spring JDBC는 JDBC에서 DriveManager가 하는 일들을 JdbcTemplate에게 맡긴다. 따라서 개발자는 메서드에 쿼리를 직접 매핑한다.
쿼리작성이 줄어들고(여전히 쿼리를 적지만…) 불편한 점들을 추상화시켜놓았다.
SQL Query 직접 사용하여 데이터 조작하므로 JdbcTemplate은 SQL Mapper 중 하나이다.

 

 

 

SQL Mapper와 ORM은 저번시간에 다루었으니 넘어가도록 하겠다.

 

 

MyBatis

MyBatis도 SQL Mapper 중 하나이다.
MyBatis는 Plain JDBC의 문제점을 Spring JDBC와 다르게 보았다.
MyBatis는 자바코드에서 SQL을 쓰는 것을 문제라고 생각했고 SQL을 분리하고자했다.

따라서 SQL쿼리를 Java에서 XML로 옮겼서 적는다.

 

Mybatis는 쿼리가 수정되어 데이터 정보가 바뀌면 그에 사용되고있던 DTO와 함께 수정해주어야하는 불편함이 생긴다.

즉, 물리적으로 분리시켜놨지만 논리적으로는 서로 강한 의존관계가 있다.
이 불편함을 해결하기 위해 나온 것이 ORM이다.
ORM은 객체만 바꾸어주면 된다. 즉, 객체 중심으로 개발가능해진다.

 

 

JPA

직접적인 SQL 문을 사용하지 않고 자바 코드를 사용해서 DB에 접근, 조작할 수 있는 기술이다. JPA 역시 내부적으로 JDBC를 사용한다.

  • 자바 ORM 기술에 대한 API 표준 명세로, Java에서 제공하는 API이다.
  • 장점
    • SQL문을 직접 java application내에서 적을 경우가 적어짐
      • 기본적인 CRUD 쿼리를 반복적으로 작성하지 않아도 됨
      • 수정사항이 발생하였을 때 수정해야 할 코드가 적음
    • SQL구조를 java application내에서 적용하지 않아도 됨. 어노테이션을 사용한다 EX) @Id, @ManyToOne …등 -> SQL 의존성 줄어듬. 객체지향적으로 데이터 관리 가능
  • 단점
    • 메서드 호출로 쿼리 실행은 직접 SQL을 호출하는 것보다 성능이 떨어질 수 있음
    • 복잡한 통계 분석 쿼리를 메서드 호출로 처리하는 것음 어려움 -> 로직이 복잡하거나 불필요한 쿼리가 발생할 수 있음
    • 러닝커브가 높음

JPA를 쓰는데 EntityManager를 쓴 적 없다면 그것은 Spring Data JPA를 사용했기 때문일 것이다.



Spring Data JPA

Spring Data JPA는 JPA를 쓰기 편하게 만들어놓은 모듈이다.
Spring Data JPA의 핵심은 Repository이다.
JpaRepository를 뜯어보면 안에 EntityManager가 있다는 것을 알 수있다.

 

 

 

 

JPA를 쓰면 왜 비즈니스 로직이 복잡해질까?

 

비즈니스 로직이란 업무에 필요한 데이터처리를 수행하는 것을 의미한다.
예를 들어 DB에서 휴대전화 데이터를 가져와 웹에서 마스킹한 형태로 출력할 때 그 가공 과정을 비즈니스 로직이라고 한다.

JPA를 사용하면 제공되는 메소드로 복잡한 SQL를 수행하려할때 비즈니스 로직이 길어질 수 밖에 없다.

JPA는 통계 쿼리처럼 복잡한 SQL을 수행하기 힘들기 때문에, 비즈니스에 따라 Mybatis를 사용할 지 Hibernate를 사용할 지 상황에 맞는 선택이 중요할 것입니다.
처음에 살펴본 구글 트렌드를 볼 때 우리나라는 대부분 Mybatis를 사용하고 있는데, 그 이유는 우리나라 시장 대부분이 SI, 금융 시장이기 때문입니다.
비즈니스가 매우 복잡하고, 안정성을 중요시 하는 서비스일 경우에는 JPA보다 SQL을 작성하는 것이 더 좋다는 의도일 것입니다.
이미 SQL을 사용하여 개발된 애플리케이션이라면 JPA로 바꾸는 일도 쉽지 않기 때문에, 우리나라에서는 JPA가 많이 사용되지 못하는 것 같습니다.
출처: https://victorydntmd.tistory.com/195

728x90

'Spring' 카테고리의 다른 글

JPA  (0) 2023.07.12
[JUnit5] 기본 Annotation  (0) 2023.07.11
DAO, DTO, VO  (0) 2023.07.02
트랜잭션 문제점  (0) 2023.07.01
트랜잭션  (0) 2023.06.29
profile

StudyRepository

@Minseo26262

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!