Spring/Spring JPA / / 2024. 3. 13. 15:30

JPA란?

설명

Java Persistence API(JPA)는 자바 애플리케이션에서 관계형 데이터베이스를 사용하여 데이터를 영구적으로 저장(영속성)하는 방법을 정의하는 자바 진영의 표준 API입니다. 이 표준은 데이터의 영구적 저장을 관리하는 편리한 방법을 제공함으로써, 개발자가 데이터 중심의 애플리케이션을 보다 쉽게 개발할 수 있도록 돕습니다.

JPA의 주요 목적은 애플리케이션 내의 객체와 데이터베이스 테이블 간의 매핑을 쉽게 만드는 것이며, 이를 통해 개발자는 데이터베이스 작업을 보다 직관적으로 처리할 수 있습니다.

영속성이란?

영속성은 데이터를 생성한 프로그램이 종료되어도 사라지지 않고 지속적으로 저장되는 데이터의 특성을 의미합니다. 이는 데이터를 영구적인 저장소(주로 관계형 데이터베이스)에 저장하여, 애플리케이션이나 시스템이 종료된 후에도 해당 데이터에 접근할 수 있도록 하는 기능을 말합니다.

ORM(Object-Relational Mapping)

JPA는 자바 진영의 ORM(Object-Relational Mapping) 표준으로, 객체 지향 프로그래밍 언어인 자바와 관계형 데이터베이스 간의 패러다임 불일치를 해결합니다. ORM은 객체의 관점에서 데이터베이스를 관리할 수 있게 해주며, 이는 객체 지향 프로그래밍과 관계형 데이터베이스 간의 불일치를 극복하고 데이터베이스 작업을 보다 직관적으로 만드는 데 큰 도움을 줍니다.

 

패러다임의 불일치

상속

객체 지향 언어는 상속과 다형성을 통해 코드의 재사용성과 확장성을 향상시킵니다. 반면, 관계형 데이터베이스는 상속 구조를 직접적으로 지원하지 않습니다.
JPA는 @Inheritance 어노테이션을 사용하여 상속 구조를 매핑할 수 있습니다. 여러 전략(SINGLE_TABLE, TABLE_PER_CLASS, JOINED)을 사용하여 객체의 상속 구조를 데이터베이스 스키마에 맞게 표현할 수 있습니다. 이를 통해 객체 지향적인 상속 구조를 관계형 데이터베이스에 효과적으로 반영할 수 있습니다.

동일성과 동등성

객체 지향 프로그래밍에서는 두 객체의 동일성(identity)과 동등성(equality)을 구분합니다. 하지만, 데이터베이스에서는 주로 동등성(equality)을 기반으로 레코드를 비교합니다.
JPA는 @Id 어노테이션을 사용하여 객체의 식별자를 명시하고, 이 식별자를 사용하여 데이터베이스 레코드의 동등성을 관리합니다. 이를 통해 애플리케이션 내에서 객체의 동일성과 데이터베이스의 동등성 사이의 불일치를 해결할 수 있습니다.

그래프 탐색과 연관 관계

객체 지향 프로그래밍에서 객체들은 서로 참조를 통해 그래프 형태로 복잡한 관계를 형성할 수 있습니다. 하지만 관계형 데이터베이스에서는 테이블 간의 관계가 외래 키를 통한 정적인 연결로만 표현되며, 객체 간의 동적인 그래프 탐색을 직접 지원하지 않습니다.
JPA는 @OneToMany, @ManyToOne, @OneToOne, @ManyToMany 등의 어노테이션을 사용하여 객체 간의 관계를 매핑하며, 이러한 매핑 정보를 바탕으로 필요한 SQL을 자동으로 생성합니다. 이를 통해 개발자는 객체 지향적인 방식으로 그래프 탐색을 구현할 수 있으며, JPA가 관계형 데이터베이스의 제한을 추상화해 줍니다.

데이터 로딩 전략

객체 지향 프로그래밍에서는 필요할 때 언제든지 객체를 로드할 수 있지만, 관계형 데이터베이스에서는 연관된 객체(테이블)를 미리 로드하거나 지연 로드하는 전략 사이에서 선택해야 합니다.
JPA는 지연 로딩(LAZY)과 즉시 로딩(EAGER)을 어노테이션을 통해 설정할 수 있게 합니다. 이를 통해 개발자는 비즈니스 요구사항에 맞게 데이터 로딩 전략을 세밀하게 제어할 수 있으며, 불필요한 데이터베이스 접근을 줄이고 성능을 최적화할 수 있습니다.

 

JPA의 장점

  • 반복적인 CRUD 작업의 코드를 줄여줌으로써 개발 시간을 단축시킵니다.
  • 객체 중심의 개발이 가능해지므로, 비즈니스 로직에 더 집중할 수 있고 코드의 가독성 및 유지보수성이 향상됩니다.
  • 지연 로딩, 쓰기 지연, 더티 체킹, 1차 캐시 등 JPA가 제공하는 다양한 성능 최적화 기능을 활용할 수 있습니다.
  • JPA는 표준 인터페이스를 제공하므로, 구현체를 변경해도 애플리케이션 코드를 크게 수정할 필요가 없습니다.

JPA를 사용함으로써, 개발자는 객체 지향적인 방식으로 데이터를 관리할 수 있으며, 데이터베이스 작업을 효율적이고 효과적으로 처리할 수 있게 됩니다. 이는 소프트웨어 개발의 생산성과 품질을 높이는 데 크게 기여합니다.

'Spring > Spring JPA' 카테고리의 다른 글

JPA 영속성 컨텍스트  (0) 2024.03.14
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유