-
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