JPA는 무엇인가요?
"JPA(Java Persistence API)는 자바 어플리케이션에서 관계형 데이터베이스를 운용하기 위한 표준 자바 API입니다. 주로 자바 객체와 데이터베이스 테이블 간의 연동을 용이하게 하는 ORM(Object-Relational Mapping) 기능을 제공함으로써, 개발자가 복잡한 SQL 쿼리 작성 없이도 객체 지향적 방식으로 데이터베이스를 조작할 수 있도록 지원합니다. 이러한 접근 방식은 개발 과정의 효율성과 코드의 유지 관리 용이성을 크게 향상시키며, 또한 다양한 데이터베이스 시스템에 대한 호환성을 제공하여 데이터베이스 이식성을 높입니다."
꼬리질문과 답변
> JPA가 제공하는 ORM 기능이란 무엇인가요?
"ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 프로그래밍 기술입니다. JPA를 사용하면 자바 객체와 데이터베이스 테이블 간의 매핑을 쉽게 정의할 수 있어, 개발자는 복잡한 SQL 대신 객체의 관점에서 데이터를 다룰 수 있습니다."
> JPA를 사용하는 이유는 무엇인가요?
"JPA를 사용하는 주된 이유는 개발 생산성과 유지보수성을 향상시키기 위함입니다. 복잡한 SQL 쿼리를 작성하고 관리하는 대신 객체 지향적 방식으로 데이터베이스를 다룰 수 있어, 개발 과정이 단순화되고 코드의 가독성이 높아집니다. 또한, 다양한 데이터베이스에 적용 가능하여 데이터베이스 이식성 또한 향상됩니다. "
> JPA를 사용할 때 고려해야 할 단점은 무엇인가요?
"JPA를 사용할 때의 단점으로는 학습 곡선, 성능 최적화의 어려움, 복잡한 쿼리 작성의 한계 등을 들 수 있습니다. 특히, 내부적인 작동 방식을 이해하지 못하면 예상치 못한 성능 문제가 발생할 수 있으며, 매우 복잡한 쿼리는 JPA만으로 처리하기 어려울 수 있습니다."
> JPA는 어떤 데이터베이스 시스템과 호환되나요?
"JPA는 다양한 관계형 데이터베이스 시스템과 호환됩니다. 표준화된 API를 제공하기 때문에, 개발자는 특정 데이터베이스에 종속되지 않고, MySQL, Oracle, PostgreSQL 등 다양한 데이터베이스에 동일한 코드를 적용할 수 있습니다."
> JPA의 주요 구현체는 무엇이 있나요?
"JPA의 주요 구현체로는 Hibernate, EclipseLink, OpenJPA 등이 있습니다. 이 구현체들은 JPA 스펙을 따르며, 각각의 특성과 성능 차이가 있어 프로젝트의 요구 사항에 맞게 선택할 수 있습니다. "
> JPA와 JDBC의 차이점은 무엇인가요?
"JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접근하기 위한 저수준 API를 제공하는 반면, JPA는 JDBC 위에 구축된, 보다 고수준의 추상화를 제공합니다. JPA는 객체 지향적 접근을 가능하게 하여 개발 생산성과 유지보수성을 향상시키지만, JDBC는 더 세밀한 제어가 가능하며 성능 최적화가 필요한 상황에서 유리할 수 있습니다."
> JPA의 캐싱 기능은 어떻게 작동하나요?
"JPA는 성능 최적화를 위해 1차 캐시와 2차 캐시를 제공합니다. 1차 캐시는 영속성 컨텍스트 내에서 자동으로 관리되며, 같은 트랜잭션 내에서 엔티티의 반복된 조회를 최적화합니다. 2차 캐시는 여러 영속성 컨텍스트 간에 공유되며, 애플리케이션 전반에 걸친 데이터 접근의 효율성을 높입니다."
> JPA에서 영속성 컨텍스트(Persistence Context)란 무엇인가요?
"영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 의미합니다. 이는 엔티티의 생명주기를 관리하며, 엔티티의 상태를 관리하고 JPA의 캐싱, 쓰기 지연, 변경 감지 등의 기능을 제공합니다."
> JPA에서 엔티티(Entity)란 무엇인가요?
" JPA에서 엔티티(Entity)는 데이터베이스 테이블에 저장되는 데이터의 자바 객체 표현입니다. @Entity 어노테이션을 사용하여 클래스를 엔티티로 선언하며, 이 클래스의 인스턴스는 데이터베이스의 레코드와 매핑됩니다."
> JPA에서 트랜잭션(Transaction) 관리는 어떻게 이루어지나요?
"JPA에서 트랜잭션 관리는 엔티티의 상태 변화를 데이터베이스에 반영하기 위해 필수적입니다. 개발자는 @Transactional 어노테이션을 사용하거나, EntityManager를 통해 직접 트랜잭션을 시작, 커밋, 롤백할 수 있습니다. JPA는 선언적 트랜잭션 관리를 지원하여, 코드에서 트랜잭션 관리 로직을 분리할 수 있게 합니다."
> JPA를 사용할 때 고려해야 할 성능 최적화 전략은 무엇인가요?
"JPA 성능 최적화를 위해, 적절한 캐싱 전략 설정, 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)의 적절한 사용을 통한 쿼리 최적화, 배치 처리, 연관 관계 매핑 최적화 등을 고려해야 합니다. 또한, 낙관적 락 또는 비관적 락을 통한 동시성 관리도 중요한 요소입니다."
> JPA의 낙관적(Optimistic) 락과 비관적(Pessimistic) 락의 차이는 무엇인가요?
"낙관적 락은 동시성 충돌이 드물다고 가정하고, 충돌 발생 시 예외 처리를 통해 대응하는 방식입니다. 반면, 비관적 락은 충돌을 미리 방지하기 위해 데이터에 대한 접근을 미리 제한하는 방식으로, 트랜잭션 동안 해당 데이터에 대한 접근을 잠급니다."
> JPA에서 지연로딩과 즉시로딩은 무엇인가요
"즉시 로딩은 엔티티를 데이터베이스에서 조회할 때, 연관된 모든 엔티티도 함께 즉시 로드하는 방식이고 지연 로딩은 엔티티를 조회할 때 연관된 엔티티를 즉시 로드하지 않고, 실제로 사용될 때까지 로드를 지연시키는 방식입니다. 지연 로딩은 필요한 시점에만 데이터를 로드하기 때문에 성능 최적화에 유리하지만, 연관된 데이터를 사용하기 위해 추가적인 쿼리가 실행되므로 그로 인한 성능 저하가 발생할 수 있습니다. 각각의 로딩 전략은 사용하는 상황에 따라 장단점이 있기 때문에, 애플리케이션의 요구 사항과 성능 요구 사항을 고려하여 적절히 선택해야 합니다."
'면접 (Java) > 기술면접' 카테고리의 다른 글
[면접] 기술 면접 - DI(Dependency Injection, 의존성 주입) (0) | 2024.03.13 |
---|---|
[면접] 기술 면접 - 객체지향 프로그래밍(Object-Oriented Programming, OOP) (0) | 2024.03.12 |
[면접] 기술 면접 - Java (6) (0) | 2024.03.11 |
[면접] 기술 면접 - Java (5) (0) | 2024.03.09 |
[면접] 기술 면접 - Java (4) (0) | 2024.03.09 |