일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 이분탐색
- 브루트포스
- 알고리즘
- 자바
- 다이나믹프로그래밍
- AWS
- 분할 정복
- TCP
- BFS
- 역방향 반복자
- Spring
- 분할정복
- 그리드 알고리즘
- github action
- GIT
- 그래프
- CI/CD
- 재귀
- HTTP
- 그리드
- 자료구조
- 컴퓨터 네트워크
- 스프링
- 순열
- SQL
- 도커
- 트리
- dfs
- 다이나믹 프로그래밍
- 백준
- Today
- Total
코딩성장스토리
Mybatis와 JPA의 차이 본문
이번 글은 인턴하면서 느낀 나의 개발 회고록이다.
나는 주로 학교 프로젝트를 할 때 Jpa를 활용하면서 개발을 했다.
하지만 인턴 생활을 하면서 Mybaits를 사용해 Sql를 짜면서 Mybatis로 마음이 기울기 시작했다.
이제부터 나의 생각이 왜 바꼈는지 글을 작성해본다..(그냥 저의 사견일 뿐입니다..)
Jpa
장점
- 가독성이 좋다.
- 데이터베이스에 종속 되지 않는다.
- 간편하게 구현이 가능하다.
- 동일한 쿼리에 캐싱기능이 제공이 된다.
단점
- Sql 구현을 안해 JPA에 의존성이 늘어난다.
- 복잡한 설계에서는 구현하기 힘들다
- 공부량이 많다.
- 동적 쿼리 구현하기 위해 다른 것들을 활용해야한다.
Mybatis
장점
- 공부량이 적다 (sql문 공부하면 됨)
- sql과 자바의 분리
- 동적 쿼리도 간단하게 구현 가능(if문 이용해서)
- 복잡한 쿼리 작성시 용이하다
단점
- 반복된 쿼리 작성시 중복 작업이 생긴다.
- Sql에 의존적으로 개발하게 된다.
- 가독성이 Jpa에 비해 떨어진다
- 데이터베이스 변경시 로직도 수정해야한다.
나의 생각 정리
1. 테이블 설계는 절대 이상적으로 흘러가지 않는다.
추가 기능구현할 시 점점 테이블은 복잡해지기 마련이다.
엥? 그냥 테이블에 컬럼만 추가해서 하면 쉬운거 아닌가? 라고 생각할 수도 있지만 실제 운영되고 있는 데이터 테이블에 새로운 컬럼을 추가하는 것은 위험한 행동이다.
그 이유는 이미 테이블의 컬럼 순서대로 디스크에 저장이 되어있기 때문이다. 운영중인 디비에 새로 컬럼을 추가하면 추가된 컬럼만 다른 공간에 저장이 된다.
즉 테이블의 하나의 로우를 읽기위해 디스크 한블록만 읽으면 될 것을 새로 추가한 컬럼 때문에 다른 블록까지 참조해야하는 상황이 생길 수도 있다.
즉 어떤 상황이든 데이터베이스가 이상적으로 흘러가지 않을 가능성이 높다는 것이다.
2. 동적쿼리
Jpa에서 동적쿼리를 처리하기 위해 Jpql을 사용하기도 하고 QueryDsl을 사용하기도 한다.
하지만 내가 느끼기에는 해당 기술을 적용하는 거 자체가 이미 복잡하게 구현이 된다고 느낀다.
물론 다른 곳에서 편한 이점들이 있지만 어려운 개발에 대응하기가 mybatis보다 힘들다..
3. 복잡한 쿼리(with절, json_to_array 같은 문법 적용 및 서브쿼리 적용 )
Jpa의 명확한 한계라고 느낀 점이다.
생각보다 실무에서는 복잡한 쿼리를 작성하는 순간이 많다.
그럴 때마다 native 쿼리를 작성하면 굳이 Jpa를 사용한다는 느낌이 들었다. 오히려 다양한 툴을 사용해 복잡하게 된다고 생각한다.
4. Sql을 직접 구현 안한다.
sql을 직접 구현안한다는게 장점이지만 난 개인적으로 Sql을 직접 구현안해서 더 불안한 거 같다. (특히 복잡해질수록...)
JPA에게 제어를 뺏긴 기분이랄까..
5. 엔티티 주도 설계는 JPA가 좋은 거 같긴하다
확실히 가독성도 좋고 무엇보다 개발이 너무 편하다
최종 정리
아무튼 JPA나 Mybatis는 각각의 장단점이 있는 거 같다.
엔티티 주도 설계는 확실히 가독성이 좋은거 같고
JPA가 여기에 맞게 잘 사용할 수 있는 거 같다.
'백 엔드 > spring' 카테고리의 다른 글
Spring Batch 적용기 (2) | 2024.04.05 |
---|---|
spring 토이 프로젝트 -로그인 기능, 검증 기능 ,jpa (0) | 2022.06.01 |
스프링 - 필터 , 인터셉터 (0) | 2022.05.14 |
스프링 -쿠키,세션 (0) | 2022.05.13 |
스프링 Bean Validation (0) | 2022.05.09 |