-
Spring 스프링 MyBatis 와 JPA-Hibernate프로그래밍/서버 프로그래밍 2018. 12. 18. 16:32
현재 인턴을 진행하고 있는 곳에서 스프링과 MyBatis를 처음으로 경험해보았습니다.
이전까지는 학교 수업중에 실습으로 JDBC를 사용하여 데이터베이스를
CREATE, READ, UPDATE, DELETE
해본게 전부 였지만 확실히MyBatis
를 이용한 데이터의 접근 및 초기 설정이 더 편리하다는 느낌을 받았습니다.이후 혼자 공부를 해오던 와중에 Spring JPA 혹은 Hibernate라고 불리우는 기술이 많이 쓰이고 있고 개발 속도도 더 빠르다는 점이 흥미로워 공부 겸 글을 작성해보려 합니다.
MyBatis
MyBatis
를 처음 공부할 당시에는iBatis
라는 단어가 구글 검색 결과에 항상 같이 나와서 의아했습니다. 알고보니iBatis
는MyBatis
가 Google Code로 이전하기 이전에 Apache Foundation 소유일 때의 이름이었다고 합니다.둘의 차이점은
MyBatis
에서는JDK 1.5, Annotation
다이나믹 SQL 지원
등의 차이점이 있다고 합니다.
MyBatis
는 SQL Mapper를 이용하여 자바의 객체를 SQL문과 연결하여 빠르고 편리하게 데이터베이스에 접근할 수 있게 해줍니다.MyBatis
를 프로젝트에 적용하는 방법은- XML파일을 이용하는 방법
- Annotaion을 이용하는 방법
이 있습니다. 보통 복잡한 쿼리는 XML을 이용하는 방법이, 간단한 쿼리는 Annotation을 이용한 방법이 더 적합합니다.
JPA, Hibernate
JPA를 사용하는 건 ORM 을 사용한다는 것이라고 합니다. Node JS로 치면 Sequalize 라이브러리와 같은 역할이라고 일단은 이해했습니다. (
Sequalize를 사용한 경험이 없는 분은 이해가 어려울지도....)이러한 ORM을 사용하면 쿼리문을 보통 직접 작성할 일이 거의 없습니다. 그래서
MyBatis
에 익숙한 사람들에게는 뭔가 추상적이고 부정적으로 느껴질수도 있을 것 같지만 실제로 사용해보면MyBatis
에 비해 생산 속도가 매우 빠르다고 합니다. 아무래도MyBatis
에서는 XML 파일을 넘나들면서 Mapper를 모두 작업해줘야 하기 때문인 것 같습니다.(저도 아직 사용은 안해봐서...추측입니다 )하지만 이런 JPA에도 단점은 있습니다. 대표적 단점으로는
성능
대부분의 ORM이 그러하듯 실제 SQL문을 직접 작성하는 것보다는 성능이 비교적 떨어질 수 있습니다.
세밀함
복잡한 상황에서 데이터를 조작하기에 어려움이 있습니다. 이를 보완하기 위해 직접 SQL문을 작성할 수도 있고, JPQL이라는 것도 지원하고 있기는 합니다.
한국과 중국에서는
MyBatis
보다는 비교적 사용되지않는 듯....??!대부분의 블로그 및 사이트를 검색해본 결과 , 한국/중국/인도를 제외한 외국에서는
JPA
를MyBatis
보다 많이 사용하고 있다고 합니다. 이유가 뭔지는 정확히는 모르지만 다양한 의견들이 있는 것 같습니다.
정리
ORM 을 사용하는 것이 무작정 좋다고 할 수는 없지만 생산성도 좋고, 외국에서도 많이 사용한다고 하니 한번쯤은 꼭 배우고 넘어가는 것이 좋겠다는 생각이 들었습니다.
아직
MyBatis
도 부족한 부분이 많지만 미래에 제가 입사할 회사(어디가 될지는 모르지만...)에서는 무엇을 사용하게 될지 아무도 모르는 일이니 한번 배워보는 것이 좋을 것 같습니다.다음에는 JPA를 적용하는 방법에 대하여 포스팅을 해보겠습니다.........................아마도....?!
Hibernate
와MyBatis
의 사용에 대한 외국 친구들의 생각은[]: https://stackoverflow.com/questions/1984548/hibernate-vs-ibatis
여기를 참고해주시고, 우리나라 분들의 의견은
[]: https://okky.kr/article/286812
를 참고해주세요!
아직 모르는게 많아 게시글에 잘못된 정보가 있을 수 있습니다. 혹시 잘못된 정보가 있다면, 댓글 혹은 메일로 알려주시면 최대한 빨리 수정하겠습니다!
'프로그래밍 > 서버 프로그래밍' 카테고리의 다른 글
@Valid 에서 받은 Errors를 Serialize해서 ResponseEntity에 담자! (0) 2019.02.19 스프링 시큐리티 요청 URI별 권한 처리할 때 문제상황 해결! (0) 2019.02.19 Spring boot 스프링 부트에서 request Validation 요청값 검증하기 (0) 2019.02.18 DTO란 (0) 2019.02.15 Spring Boot JPA 사용법 (0) 2018.12.20