JPA
JPA는 자바 진영의 표준 ORM 프레임워크입니다. ORM은 Object Relational Mapping으로 관계형 DB와 객체를 매핑한다는 의미입니다. 관계형 DB와 객체의 매핑의 의미는 별거 아닌 것처럼 보이지만 엄청난 의미를 가지는 것 같습니다. DB와 Object 사이에는 엄청난 패러다임의 불일치가 있기 때문인데요.
어떤 문제점들이 있었냐면 객체는 참조와 상속이 가능합니다. 반면 테이블은 상속과 참조의 개념이 없습니다. 또한 연관 관계의 방향에 대한 차이가 있습니다. 객체는 한쪽 방향으로 참조를 하게 되는데 DB 테이블은 키값을 통해 서로 연관관계를 찾을 수 있습니다. 이렇게 DB와 객체는 패러다임의 불일치 문제가 있는데 이를 해결해준 게 JPA입니다.
왜 JPA를 사용해야 할까
JPA는 SQL과 관련된 단순한 작업들을 메서드를 통해 쉽게 사용할 수 있는 기능을 제공합니다. 패러다임의 불일치가 해결되어 객체지향 언어의 장점을 살린 도메인 설계가 가능해져 유지보수에도 장점이 있습니다. 또한 DB를 교체해야 하는 상황이 생기면 Dialect를 변경해 DB vendor에 독립적인 프로젝트 설계가 가능해졌습니다. 또한 1차 캐시 등 다양한 최적화 기능을 통해 성능적인 측면에서도 장점이 있습니다.
JPA의 단점
신입 때부터 JPA를 사용했고 과거에 JPA를 잘 모르고 사용했을 때 경험들이 학습을 하면서 장점을 느끼게 하는 데는 큰 도움이 되었는데요. 단점은 아직까지는 크게 경험을 통해 체감하지는 못한 것 같습니다. 그렇지만 오픈 카톡이나 커뮤니티의 의견을 듣다 보면 통계 처리와 같은 복잡한 쿼리는 Mapper형식의 MyBatis가 좀 더 효율적인 것 같다는 의견을 듣게 되었는데요. Spring에서 둘 다 사용할 수 있으니 큰 단점일까 싶은 생각이 듭니다.
그리고 OOP와 관계형 DB 두 개를 모두 알고 설계적인 능력이 따라줘야 한다는 생각이 들었고, 이런 점들이 러닝 커브가 크다는 단점으로 이어지는 것 같습니다. 하지만 OOP와 관계형 DB는 개발자가 쌓아가야 하는 역량이라고 생각하기 때문에 큰 단점은 아니라고 생각합니다.
Wrap-up
JPA의 장점과 단점을 정리하고 왜 사용해야하는지, 체감할 수 있는 장점이 무엇인지 느끼면서 정리해봤습니다. 앞으로 JPA에 대해 학습하도록 하겠습니다 :)
댓글