[Java/Spring] JPA란?

SujiPark·2025년 2월 9일

Java

목록 보기
4/7

백엔드 프로젝트를 본격적으로 시작하기 전 꼭 알아야 하는 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의 동작 방식에 대해 알아보자.

1. Entity란?

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;
}

데이터베이스에 테이블을 만들고 이에 대응하는 클래스를 만들어 클래스 위에 @Entity 어노테이션 을 붙이면 이 클래스 자체가 엔티티가 되는 것이다.

  • @Entity: 해당 클래스를 JPA에서 관리하는 엔티티로 지정
  • @Id: 기본 키(PK) 설정
    PK와 FK, 연관관계 매핑에 대해서는 추후 포스팅에서 다루겠다.
  • @GeneratedValue(strategy = GenerationType.IDENTITY): 자동 증가(AUTO_INCREMENT)
  • @Column: 컬럼 설정 (nullable, length 등)

2. 엔티티 매니저 / 엔티티 매니저 팩토리

엔티티 매니터 팩토리란?

  • 엔티티 매니저 인스턴스를 관리하는 주체이다.
    사용자로부터 요청이 오면 여기에서 앤티티 매니저를 생성한다.

그렇다면, 엔티티 매니저란 무엇일까?

엔티티 매니저란?

  • 엔티티 매니저란 내부적으로 영속성 컨텍스트에 접근해 엔티티에 대한 데이터베이스 작업을 제공하는 것을 말한다.

다음은 영속성 컨텍스트에 대해 알아보자.

3. 영속성 컨텍스트란?

JPA가 엔티티를 관리하는 공간, 즉 엔티티를 영구 저장하는 환경이다.

엔티티를 데이터베이스에서 가져오거나 변경 사항을 감지하고 반영하는 역할을 한다.

  • persist() → 엔티티 저장
  • find() → 엔티티 조회 (1차 캐시 사용)
  • remove() → 엔티티 삭제
  • commit() → 변경 사항을 DB에 반영

예시 코드를 보면, 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을 직접 작성하지 않고도 객체 지향적인 방식으로 데이터베이스를 조작할 수 있어 훨씬 편리하고 유지보수도 쉬워진다!

0개의 댓글