백엔드 프로젝트를 본격적으로 시작하기 전 꼭 알아야 하는 JPA의 기본 개념에 대해 정리해보려고 한다.
📌 JPA (Java Persistence API)란?
Java 애플리케이션에서 데이터베이스와 상호작용하는 표준 인터페이스
쉽게 말해, SQL 없이 객체만으로 데이터베이스를 조작할 수 있도록 도와주는 기술이다!
Java 객체를 데이터베이스 테이블과 매핑(Mapping)하는 기술
- SQL을 직접 작성하지 않아도 되기 때문에 객체만 다루면 된다.
- Hibernate 같은 구현체가 JPA의 기능을 실제로 제공하며 자동으로 SQL을 생성하고 실행한다.
즉 내 손으로 SQL문을 작성할 필요가 없다- 데이터베이스가 바뀌어도 코드 수정이 거의 없다.
📌 JPA vs JDBC
SQL 직접 작성 여부 | 객체 매핑 | 학습 난이도 | 유지보수
JDBC - 직접 작성해야 함 | 없음 | 쉬움 | 어려움
JPA - 자동 생성 (필요 시 직접 작성 가능) | 완전 지원 (ORM) | 어려움 | 쉬움
➡ JDBC는 SQL을 직접 작성해야 하지만, JPA는 SQL을 자동으로 생성하고 실행함!
이제 JPA의 동작 방식에 대해 알아보자.
JPA에서 데이터베이스의 테이블과 매핑되는 클래스이다.
이렇게 말하면 잘 감이 안올테니, 하나의 객체라고 생각하면 된다.
JPA에서는 database가 아닌 entity, 즉 객체 중심의 개발을 하는 것이다.
따라서 객체지향 프로그래밍 을 한다는 말이다!
객체지향 프로그래밍과 절차지향 프로그래밍에 대한 내용은 다음 포스팅에 ....
@Entity // JPA가 관리하는 엔티티임을 표시
@Table(name = "member") // 테이블명 설정 (생략 가능)
public class Member {
@Id // PK 설정
@GeneratedValue(strategy = GenerationType.IDENTITY) // 자동 증가 (AUTO_INCREMENT)
private Long id;
@Column(nullable = false, length = 100) // DB 컬럼 설정
private String name;
private int age;
}
엔티티 매니터 팩토리란?
- 엔티티 매니저 인스턴스를 관리하는 주체이다.
사용자로부터 요청이 오면 여기에서 앤티티 매니저를 생성한다.
그렇다면, 엔티티 매니저란 무엇일까?
엔티티 매니저란?
- 엔티티 매니저란 내부적으로 영속성 컨텍스트에 접근해 엔티티에 대한 데이터베이스 작업을 제공하는 것을 말한다.
다음은 영속성 컨텍스트에 대해 알아보자.
JPA가 엔티티를 관리하는 공간, 즉 엔티티를 영구 저장하는 환경이다.
엔티티를 데이터베이스에서 가져오거나 변경 사항을 감지하고 반영하는 역할을 한다.
예시 코드를 보면, SQL을 직접 작성하지 않아도 persist()를 호출하면 자동으로 INSERT 문이 실행된다는 것을 볼 수 있다.
EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); // 트랜잭션 시작
Member member = new Member();
member.setName("홍길동");
member.setAge(25);
em.persist(member); // INSERT 자동 실행
em.getTransaction().commit(); // 트랜잭션 커밋
다음으로 spring data jpa에 대해 알아보도록 하자.
Spring Data JPA란?
JPA를 더 쉽게 사용할 수 있도록 도와주는 라이브러리이다
기본적인 CRUD 기능을 자동으로 제공한다.
public interface MemberRepository extends JpaRepository<Member, Long> { List<Member> findByName(String name); // 메서드 이름만으로 쿼리 자동 생성 }SQL을 직접 작성하지 않아도 findByName()을 호출하면 자동으로 SELECT * FROM member WHERE name = ? 실행된다.
📌 정리
- JPA는 SQL을 자동으로 생성하고 실행하는 기술
- 객체(Entity) 중심으로 개발할 수 있어 유지보수가 쉬움
- Spring Data JPA를 활용하면 더 간단하게 CRUD 구현 가능
JPA를 사용하면 SQL을 직접 작성하지 않고도 객체 지향적인 방식으로 데이터베이스를 조작할 수 있어 훨씬 편리하고 유지보수도 쉬워진다!