Spring Boot JPA/이론정리

JPA기초 이론 정리

qoeka 2025. 1. 9. 10:02

 

 

JPA(Java Persistence API)는 자바에서 데이터베이스와 상호작용하기 위한 표준 ORM(Object-Relational Mapping) 기술입니다. 엔티티(Entity) 클래스와 관계(Relationships)를 정의하여 데이터베이스의 테이블과 자바 객체를 매핑하고, 이를 통해 데이터베이스의 데이터를 객체로 다루도록 합니다. 주로 Entity, Repository, Service 계층으로 구성되며, @Entity, @Id, @GeneratedValue와 같은 어노테이션을 사용하여 데이터를 자동으로 매핑하고 관리합니다.

 

 

Entity이란?

  1. @Entity 어노테이션 사용:
    • JPA에서 해당 클래스를 데이터베이스의 테이블로 매핑할 때 사용한다.
  2. @Id와 @GeneratedValue 사용:
    • @Id는 기본 키(Primary Key)를 설정하는 데 사용하며, @GeneratedValue는 자동으로 값이 증가하도록 설정한다.
  3. @Column 어노테이션 사용:
    • 각 필드를 데이터베이스의 열(Column)과 연결한다.
    • name, nullable 같은 옵션을 사용해 세부 설정이 가능하다.
  4. 클래스 예시 (User 엔터티):
     
  5. 데이터베이스와 매핑 관계:
    • User 클래스의 id, name, email 필드가 각각 데이터베이스의 user 테이블의 열로 매핑된다.
java
@Entity public class User
{ @Id @GeneratedValue private Long id;
@Column(name = "name", nullable = false) 
private String name; 
@Column(name = "email", unique = true) 
private String email; // Getter, Setter }

이와 같이 @Entity와 관련 어노테이션을 사용하여 Java 객체를 데이터베이스 테이블과 매핑할 수 있다.

 

 

1. Repository란? 

 

  • Repository는 데이터베이스와 직접적으로 상호작용하는 계층입니다.
  • JpaRepository 또는 CrudRepository를 상속받아 데이터베이스의 데이터를 조회, 저장, 수정, 삭제할 수 있습니다
  • JpaRepository를 상속받아 사용합니다.
  • @Repository 어노테이션을 사용하거나, Spring Data JPA에서 자동으로 관리해줍니다.
java
@Repository public interface UserRepository extends JpaRepository<User, Long> { }
  • User 엔터티를 관리하고, Long은 User 엔터티의 기본 키 타입입니다.

3. 주요 메서드

  • save(entity) → 엔터티 저장 또는 업데이트
  • findById(id) → 특정 ID로 엔터티 조회 (Optional 반환)
  • findAll() → 모든 데이터 조회
  • deleteById(id) → ID 기준 데이터 삭제
  • existsById(id) → ID 기준 데이터 존재 여부 확인

4. 커스텀 쿼리 작성 (메소드 네이밍)

  • 메소드 이름만으로도 JPA가 자동으로 쿼리를 생성해줍니다.
java
public interface UserRepository extends JpaRepository<User, Long>
{ List<User> findByName(String name);// 이름으로 검색
Optional<User> findByEmail(String email); // 이메일로 검색
boolean existsByEmail(String email); // 이메일 존재 여부 확인 }

 

 

 

JPA 장점:

  • 데이터베이스와 객체 지향 프로그래밍을 쉽게 연결할 수 있다.
  • ORM(Object-Relational Mapping)을 지원하여 SQL 작성 없이 데이터 조작이 가능하다.
  • 데이터베이스 테이블과 자바 객체를 자동으로 매핑한다.

JPA 단점:

  • 복잡한 쿼리에 대해서는 퍼포먼스가 저하될 수 있다.
  • 학습 곡선이 가파르고, 설정이 복잡하다.

JDBC 장점:

  • SQL을 직접 작성할 수 있어 복잡한 쿼리 최적화가 가능하다.
  • 간단한 데이터베이스 조작에서 높은 성능을 제공한다.

JDBC 단점:

  • SQL을 직접 작성해야 하므로 코드가 장황해질 수 있다.
  • 수동으로 데이터베이스와 자바 객체를 매핑해야 한다.

이와 같이 JPA는 코드의 간결함과 생산성을, JDBC는 성능과 직접적인 제어를 중점으로 한다.