개발 기록이
[Spring] JPA 개념 정리 (Hibernate, Spring Data JPA) 본문
JPA(Java Persistence API)란?
객체 지향 프로그래밍과 관계형 데이터베이스 간의 차이를 자동으로 연결해 주는 역할을 하며 다음과 같은 장점이 있다.
1. SQL 중심 -> 객체 중심 개발
JDBC API를 통해 직접 SQL 쿼리를 작성하는 경우, 프로젝트가 커지고 쿼리가 복잡해질수록 관리가 어려워질 수 있는데 JPA를 사용하면 SQL에 대한 의존도를 줄여주어, 복잡한 프로젝트에서도 객체 중심으로 효율적인 개발을 할 수 있다.
2. 생산성 증대
CRUD를 간단한 메서드를 통해 사용할 수 있다.
- 저장: jpa.persist(member)
- 조회: Member member = jpa.find(memberId)
- 수정: member.setName("변경할 이름")
- 삭제: jpa.remove(member)
JPA는 객체의 상태가 변경될 때, 자동으로 데이터베이스에 반영해 주는 자동 동기화 기능을 제공하여 개발자가 SQL 쿼리를 직접 작성할 필요가 없다.
3. 유지보수 용이
JPA를 사용하지 않는 경우, 데이터베이스 필드가 변경되면 모든 관련 SQL 쿼리도 수동으로 수정한다. 그러나 JPA를 사용하면, JPA가 SQL 쿼리를 자동으로 처리해 주기 때문에 필드의 변경이나 추가가 훨씬 간단해진다.
JPA, Hibernate, Spring Data JPA
- Application:
- 사용자가 사용하는 애플리케이션. 여기서 데이터베이스와 상호작용하는 비즈니스 로직이 수행됨.
- Spring Data JPA (Repository):
- 애플리케이션이 JPA를 쉽게 사용할 수 있도록 도와주는 Spring 프레임워크의 모듈.
- Repository 인터페이스를 사용하여 데이터베이스 접근을 추상화.
- 개발자는 복잡한 SQL 쿼리를 작성하지 않고도 데이터베이스와 상호작용할 수 있음.
- JPA (Java Persistence API):
- 자바 애플리케이션이 관계형 데이터베이스를 쉽게 다룰 수 있도록 하는 표준 API.
- EntityManager와 같은 인터페이스를 사용하여 데이터베이스 연산을 수행.
- 두 가지 접근 방법이 있음(Spring Data JPA를 통해 간접적으로 사용하는 방법, Raw JPA를 통해 직접 사용하는 방법)
- Hibernate:
- JPA의 구현체 중 하나로, ORM (Object-Relational Mapping) 프레임워크.
- 자바 객체를 데이터베이스 테이블에 매핑하여 객체 지향적으로 데이터베이스 연산을 수행할 수 있게 함.
- JDBC (Java Database Connectivity):
- 자바 애플리케이션이 데이터베이스와 통신하기 위해 사용하는 저수준 API.
- SQL 쿼리를 직접 작성하여 데이터베이스와 상호작용할 수 있음.
- Relational Database:
- 데이터가 저장되는 실제 데이터베이스.
- JDBC를 통해 Hibernate, JPA, Spring Data JPA가 데이터베이스와 통신함.
Spring Data JPA란?
Spring Data JPA는 JPA를 더 쉽게 사용할 수 있게 도와주는 Spring 모듈이다. 이 모듈을 사용하면 JPA를 직접 다루는 것보다 훨씬 간편하게 데이터베이스 작업을 수행할 수 있다.
Spring Data JPA는 Repository라는 특별한 인터페이스를 제공한다. 이 인터페이스를 사용하면 복잡한 SQL 쿼리를 직접 작성하지 않고도 데이터베이스에 접근할 수 있다. 개발자는 Repository 인터페이스에 간단한 메서드(findById, save, deleteById 등)를 정의하기만 하면, 나머지 복잡한 작업을 자동으로 처리해 준다.
내부적으로 Spring Data JPA는 EntityManager라는 도구를 사용하여 데이터베이스와의 모든 작업을 처리하기 때문에 개발자는 이 도구를 직접 다룰 필요 없이 훨씬 간편하게 데이터베이스 작업을 할 수 있다.
봄 로고 작가: Icons8
출처 : https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/
https://velog.io/@wnsdnjs70/Spring-ORM-JPA
OpenAI ChatGPT (https://openai.com)
'웹 개발 > Back-end' 카테고리의 다른 글
[JAVA] 서버 IP와 클라이언트 IP 값 가져오기 (0) | 2024.10.20 |
---|---|
[Spring] dofilter filterchain 이란? (0) | 2024.08.23 |
[JAVA] Math.random(), Random 클래스, SecureRandom 클래스로 난수 생성하기 (0) | 2024.07.10 |
[JAVA] QRCode 이미지 생성하기 (0) | 2024.06.02 |
[JAVA] 파일 다운로드 url 생성하기 (0) | 2024.05.25 |