Home JPA를 사용하며 느낀 장점
Post
Cancel

JPA를 사용하며 느낀 장점

프로젝트에서 JPA를 사용하며 느꼈던 장점에 대해 작성해 보겠습니다. 크게 영속성, 자동화, 객체지향적 사고, 컴파일러의 도움 정도의 장점이 있었는데, 이를 하나씩 살펴보겠습니다. 기술을 사용하며 느꼈던 점이기 때문에 저런 시각으로 볼 수도 있구나 정도로 이해해 주시기 바랍니다.

image









1. 영속성


첫 번째 느꼈던 장점은 영속성을 활용할 수 있다는 점입니다. 영속성은 우리 눈에는 보이지 않는 레이어 사이의 중간 계층인데, 이를 통해 캐싱, 지연로딩과 같은 다양한 최적화 기법을 사용할 수 있습니다.


image







영속성 덕분에 한 번 조회된 데이터는 같은 트랜잭션의 범위 내에서는 동일성을 보장받으며, 이를 다시 조회하더라도 추가 쿼리가 발생하지 않습니다. 아래와 같이 한 번 엔티티를 찾아오면 동일한 값을 여러번 조회하더라도 데이터베이스까지 가지 않는 것입니다.

image







또한 지연로딩으로 한 번 데이터를 조회할 때 모든 데이터를 찾아오는 것이 아닌, 필요한 시점에 필요한 데이터를 조회할 수 있기 때문에 조회를 효율적으로 할 수 있습니다.

image









2. 쿼리 자동화 및 편리 기능


두 번째 장점은 자동화 입니다. 대표적으로 쿼리 자동화가 있는데, 개발자가 직접 쿼리를 작성하지 않더라도 간단한 쿼리부터 복잡한 조인, in절과 까지 다양한 최적화된(?) 쿼리를 자동으로 작성해줍니다. 이를 통해 개발자는 비즈니스 로직에만 집중할 수 있게 됩니다.

image







복잡한 쿼리나 쿼리를 직접 작성해야 할 경우, JPQL을 통해 객체를 대상으로 직접 쿼리를 작성할 수도 있으며, JPARepository를 활용하면 메서드 네이밍(Query Method)만으로도 그에 적합한 쿼리를 작성해줍니다.

image

너무 많은 자동화를 해주기 때문에 이는 단점으로 볼 수도 있습니다.







또한 Native Query가 필요할 경우 @Query 어노테이션의 nativeQuery 설정을 통해 직접 SQL문을 작성할 수도 있습니다.

image









3. 객체지향적 사고


세 번째 장점은 객체지향적 사고를 할 수 있다는 점입니다. 개인적으로 이 부분이 가장 큰 장점이라고 생각되는데, JPA에서 엔티티는 반대편 테이블의 외래키를 나타냅니다. MyBatis나 Jdbc 템플릿을 사용하면 외래키가 Integer, Long 등의 단순 값이지만 JPA에서는 객체가 되기 때문에 객체끼리 소통/협력을 할 수 있게 됩니다.

image







객체는 각자에 맞는 상태(데이터)와 행위(메서드)를 가지기 때문에 역할과 책임을 분리하고, 각 객체별로 나눠서 복잡한 문제를 효율적으로 해결할 수 있습니다.

image

이를 통해 도메인 모델 패턴을 효율적으로 적용할 수 있게 됩니다.









4. 컴파일러의 도움


마지막으로 컴파일 시점에 오류를 알 수 있다는 장점이 있습니다. 이를통해 내가 작성중인 쿼리가 올바른지, 틀린지를 컴파일 시점에 알 수 있으며 런타임 시점에 마음놓고(?) 이를 사용할 수 있습니다. **물론 조인 방향이 잘못되었거나 없는 데이터를 조회하는 등 잘못된 방식, 없는 데이터를 조회하게되면 런타임 시점에도 오류가 발생할 수 있습니다.

image









5. 정리


JPA를 사용하면 크게 영속성, 자동화, 객체 지향적인 사고, 컴파일러의 도움을 받을 수 있다는 장점이 있습니다. 이중 두드러지는 장점은 객체를 중심으로 사고할 수 있다는 점자동화인데, 이를 통해 개발자가 해결하고 싶은 문제에 온전히 집중할 수 있게 됩니다.


This post is licensed under CC BY 4.0 by the author.

JPA를 사용하며 느낀 단점

팔로잉/팔로워를 구현하며 마주친 동시성 이슈