JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다.
JPA는 객체와 관계형 데이터베이스 간의 매핑을 제공하여, 객체 지향 프로그래밍과 관계형 데이터베이스를 연결하는 데 도움을 준다. JPA는 엔티티(Entity)라는 개념을 사용하여 객체를 데이터베이스에 저장하고, 조회하고, 삭제할 수 있다.
JPA는 ORM 기술의 장점을 살려서, 개발자가 직접 SQL 쿼리를 작성하지 않고도 데이터베이스와 상호작용할 수 있다.
즉 개발자는 객체 지향적인 코드를 작성하면서도 데이터베이스와 효율적으로 상호 작용 할 수 있다.
JPA도 인터페이스를 정의한 것이며, 이를 구현한 클래스들이 JPA 구현체다. JPA 구현체는 JPA 표준을 준수하며, JPA가 제공하는 API를 구현하여 객체와 관계형 데이터베이스 간의 매핑을 수행할 수 있다.
JPA는 여러 구현체가 있으며, 가장 많이 사용되는 구현체로는 Hibernate, EclipseLink, OpenJPA 등이 있다.
구현체
구현체(Implementation)는 프로그래밍에서 인터페이스(Interface)를 구현한 구체적인 클래스(Class)이다.
인터페이스는 메서드 시그니처만을 정의한 추상적인 설계도이며, 실제 기능을 수행하는 코드는 인터페이스를 구현한 클래스에서 작성된다.
영속성 컨텍스트(Persistence Context)
JPA에서 사용되는 개념으로, 엔티티(Entity)를 영구 저장하는 환경을 말한다.
영속성 컨텍스트는 엔티티 매니저(Entity Manager)를 통해 사용한다. 엔티티 매니저는 영속성 컨텍스트를 생성하고, 엔티티의 추가, 수정, 삭제 등을 처리할 때 영속성 컨텍스트를 사용한다.
영속성 컨텍스트는 엔티티의 생명 주기를 관리하는데, 엔티티를 생성하고, 조회하고, 수정하고, 삭제할 때마다 해당 엔티티의 상태를 추적하고, 이를 데이터베이스에 동기화한다.
영속성 컨텍스트는 1차 캐시(First-level Cache)를 가지고 있다. 1차 캐시는 영속성 컨텍스트 내부의 캐시로, 엔티티를 저장하는 공간이다. 1차 캐시를 사용하면 같은 엔티티를 반복적으로 조회할 때 데이터베이스에 접근하지 않아도 되므로, 성능상 이점이 있다.
또한, 영속성 컨텍스트는 지연 로딩(Lazy Loading)과 즉시 로딩(Eager Loading)을 지원한다. 지연 로딩은 연관된 엔티티를 실제로 사용할 때 로딩하며, 즉시 로딩은 엔티티를 조회할 때 즉시 연관된 엔티티를 함께 로딩한다. 이를 통해 데이터베이스에 대한 불필요한 조회를 최소화할 수 있다.
JDBC(Java Database Connectivity)
자바에서 데이터베이스와 연결하여 데이터를 액세스하기 위한 자바 API다. JDBC API를 사용하여, Java 언어로 SQL 쿼리를 실행할 수 있으며, 데이터베이스와 연결하기 위한 일련의 인터페이스와 클래스를 제공한다.
JDBC를 사용하면, 데이터베이스와 연결하기 위한 드라이버를 로드하고, 커넥션을 생성하여 데이터베이스에 접속할 수 있다. 데이터베이스에 SQL 쿼리를 전달하고, 결과를 받아오는 과정은 JDBC 인터페이스와 JDBC 드라이버에 의해 처리된다.
JDBC를 사용하여 데이터베이스와 연결하는 과정은 다음과 같이 진행한다.
- JDBC 드라이버를 로드
- DriverManager.getConnection() 메서드를 사용하여 데이터베이스와 연결
- Connection 객체를 사용하여 Statement 객체를 생성
- Statement 객체를 사용하여 SQL 쿼리를 실행하고, 결과를 받아옴.
- 결과를 사용하여 자바 어플리케이션에서 필요한 처리를 수행.
- 사용이 끝난 Connection, Statement, ResultSet 등 리소스를 반드시 close() 메서드를 호출하여 해제
JDBC는 자바와 데이터베이스 간의 중간 계층을 제공하므로, 데이터베이스 종류에 상관없이 쉽게 데이터베이스와 연결하고, 데이터를 액세스할 수 있다.
'컴퓨터 공학' 카테고리의 다른 글
👉 [Python] Deque vs List (0) | 2022.08.10 |
---|---|
👉 [Infra] Nginx 기반 무중단 배포를 직접 만들어 보자. (0) | 2022.04.25 |
👉 [CS] Eager Loading vs Lazy Loading (0) | 2021.10.27 |
👉 [CS] CS 지식은 필요한가? (0) | 2021.07.18 |
👉 [CS] Layered Pattern 레이어드 패턴 구현 (0) | 2021.07.11 |