
JPA(Java Persistence API)는 자바에서 데이터베이스와 상호작용하기 위한 표준 ORM(Object-Relational Mapping) 기술입니다. 엔티티(Entity) 클래스와 관계(Relationships)를 정의하여 데이터베이스의 테이블과 자바 객체를 매핑하고, 이를 통해 데이터베이스의 데이터를 객체로 다루도록 합니다. 주로 Entity, Repository, Service 계층으로 구성되며, @Entity, @Id, @GeneratedValue와 같은 어노테이션을 사용하여 데이터를 자동으로 매핑하고 관리합니다.
Entity이란?
- @Entity 어노테이션 사용:
- JPA에서 해당 클래스를 데이터베이스의 테이블로 매핑할 때 사용한다.
- @Id와 @GeneratedValue 사용:
- @Id는 기본 키(Primary Key)를 설정하는 데 사용하며, @GeneratedValue는 자동으로 값이 증가하도록 설정한다.
- @Column 어노테이션 사용:
- 각 필드를 데이터베이스의 열(Column)과 연결한다.
- name, nullable 같은 옵션을 사용해 세부 설정이 가능하다.
- 클래스 예시 (User 엔터티):
- 데이터베이스와 매핑 관계:
- 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는 성능과 직접적인 제어를 중점으로 한다.
'Spring Boot JPA > 이론정리' 카테고리의 다른 글
네트워크로 API 통신하는 라이브러리 (0) | 2025.01.11 |
---|---|
JPA에서 @OneToMany와 @ManyToOne의 관계 (0) | 2025.01.10 |
Java에서 벨리데이션 사용 방법 정리 (0) | 2025.01.09 |