본문 바로가기
기술면접준비

[기술면접준비] JPA는 언제 필요하고 언제 필요하지 않은지 설명해주실 수 있을까요?

by 민경현(John) 2024. 5. 24.

핵심키워드 : ORM, SQL, 영속성, 더티 채킹, 객체 지향

모범답안

JPA는 자바의 ORM 기술 표준으로, 데이터베이스와의 상호작용을 단순화하고 테이블 간 매핑을 지원하는 API입니다. JPA를 사용하면 SQL 쿼리 작성과 데이터 베이스 연동에 필요한 반복 작업을 줄일 수 있으며, JPQL을 사용하여 객체 지향적 쿼리 언어를 작성하여 데이터베이스를 다룰 수 있습니다. 또한 JPA는 트랜잭션을 관리하여 데이터 일관성 유지에 도움을 줍니다. 그러나 JPA가 제공하는 복잡한 매핑, 캐시 관리, 추적 등의 기능은 대용량 데이터를 다룰 때 성능을 저하시킬 수 있으며, 특정 프레임워크가 JPA보다 다른 ORM과 더 상호작용하기 좋을 수도 있습니다. 따라서 항상 JPA를 선택해야 하는 것은 아니며, 프로젝트의 규모와 복잡성, 성능 요구사항, 팀의 선호도에 따라 적절한 ORM을 선택해야 합니다.

JPA를 사용해야 하는 경우:

  1. 객체와 데이터베이스 매핑이 필요할 때: JPA는 복잡한 도메인 모델을 다룰 때 유용하며, Java 객체를 데이터베이스 테이블과 상호 변환할 때 사용됩니다.
  2. 데이터베이스 독립성이 필요한 경우: JPA는 추상화 수준을 제공하여 코드를 데이터베이스와 독립적으로 작성할 수 있도록 도와줍니다. 이것은 데이터베이스를 변경할 때 큰 변화없이 어플리케이션을 유지하는 데 도움이 됩니다.
  3. JPQL(Java Persistence Query Language: JPA는 JPQL을 제공하며, Java 엔터티를 기반으로 쿼리를 표현할 수 있습니다. 이것은 복잡한 데이터베이스 쿼리를 간소화할 수 있습니다.
  4. 데이터베이스 스키마 자동 생성: JPA 구현체는 주로 엔터티 클래스를 기반으로 데이터베이스 스키마를 자동으로 생성하는 기능을 제공합니다. 이것은 개발 및 테스트 중에 도움이 될 수 있습니다.
  5. 엔터티 캐싱 : JPA는 캐싱 메커니즘을 지원하며, 동일한 데이터에 자주 액세스할 때 데이터베이스 쿼리 횟수를 줄이는 데 도움이 될 수 있습니다.
  6. 트랜잭션 관리 : JPA는 트랜잭션 관리를 지원하여 데이터베이스에 대한 변경 사항이 원자적이고 일관적이며 격리되고 지속적이도록 보장합니다.

JPA를 사용하지 않아도 되는 경우:

  1. 가벼운 데이터 액세스가 필요한 경우: 어플리케이션이 주로 단순한 CRUD 작업을 수행하고 복잡한 객체-관계 매핑이 필요하지 않은 경우, JPA를 사용하는 것은 지나치게 복잡할 수 있습니다. 직접적으로 JDBC나 더 단순한 데이터 액세스 라이브러리를 사용하는 것이 더 적합할 수 있습니다.
  2. **성능이 중요한 어플리케이션 :**일부 고성능 시나리오에서는 원시 SQL 또는 더 가벼운 데이터 액세스 프레임워크를 사용하는 것이 더 적합할 수 있습니다. JPA의 추가적인 추상화는 성능에 일부 오버헤드를 초래할 수 있습니다.
  3. **비관계형 데이터베이스 사용 :**어플리케이션이 비관계형(NoSQL) 데이터베이스를 사용하고 JPA의 이점인 객체-관계 매핑이 필요하지 않은 경우 JPA는 적합하지 않을 수 있습니다.
  4. 간결한 요구사항: 프로젝트가 시간이 제한되어 있거나 간단한 코드베이스와 단순한 데이터 액세스 요구사항을 갖고 있는 경우, JPA를 배우고 구현하는 것은 불필요한 부담일 수 있습니다.

복잡한 객체-관계 매핑이 필요하거나 데이터베이스 독립성, JPQL, 캐싱, 트랜잭션 관리 등의 기능을 활용해야 할 때 JPA를 사용합니다. 반면에 어플리케이션이 간단하고 경량이며 주로 CRUD 작업에 중점을 둘 때에는 더 단순한 데이터 액세스 방식이나 프레임워크를 선택하는 것이 좋습니다.