📌 JPA(Java Persistence API)란?
JPA는 Java 객체와 데이터베이스 간의 매핑을 쉽게 해주는 ORM(Object-Relational Mapping) 기술입니다.
즉, SQL을 직접 사용하지 않고 자바 객체(Entity)를 통해 DB를 조작할 수 있도록 도와줍니다.
🔹 JPA = Java ORM 표준 인터페이스
- JPA는 인터페이스이며, 이를 구현한 프레임워크(라이브러리)가 Hibernate, EclipseLink, OpenJPA 등이 있음.
- Spring Boot에서는 보통 Hibernate를 사용함.
📌 JPA의 주요 개념
1. 엔터티(Entity)
- 데이터베이스의 테이블과 매핑되는 자바 클래스
- @Entity 어노테이션을 사용하여 선언
java
복사편집
import jakarta.persistence.*;
@Entity // JPA가 관리하는 엔터티 클래스
@Table(name = "users") // 매핑할 테이블 이름 지정
public class User {
@Id // 기본 키(PK) 지정
@GeneratedValue(strategy = GenerationType.IDENTITY) // 자동 증가(Auto Increment)
private Long id;
@Column(nullable = false, length = 50)
private String name;
@Column(unique = true)
private String email;
// 기본 생성자 필수
protected User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getter & Setter
}
2. 리포지토리(Repository)
- JPA를 사용하면 SQL을 직접 작성하지 않고도 데이터 저장, 조회, 수정, 삭제가 가능
- JpaRepository 인터페이스를 활용
java
복사편집
import org.springframework.data.jpa.repository.JpaRepository;
// User 엔터티의 CRUD 메서드 자동 제공
public interface UserRepository extends JpaRepository<User, Long> {
// 이메일로 사용자 조회하는 메서드 추가 (자동 쿼리 생성)
User findByEmail(String email);
}
3. 서비스(Service)
- 엔티티를 비즈니스 로직에서 활용
java
복사편집
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 새로운 사용자 저장
@Transactional
public User saveUser(String name, String email) {
return userRepository.save(new User(name, email));
}
// 모든 사용자 조회
public List<User> getAllUsers() {
return userRepository.findAll();
}
}
📌 JPA의 장점
✅ SQL을 직접 작성하지 않아도 데이터베이스 조작 가능
✅ 객체 중심으로 개발 가능 (객체와 DB 간 매핑)
✅ DB 변경 시 유지보수가 쉬움 (스키마 자동 생성 가능)
✅ 캐싱을 통한 성능 최적화 가능
JPA는 Spring Boot + Hibernate 환경에서 가장 많이 사용되며,
SQL 대신 객체 중심의 개발을 가능하게 해주는 강력한 도구입니다! 🚀
JPA (Java Persistent API)
- ORM (Object Relational Mapping)으로, RDB 데이터 베이스의 정보를 객체 지향으로 손쉽게 사용할 수 있도록 도와주는 라이브러리다.
- Object (자바 객체)와 Relation(관계형 데이터베이스)의 맵핑을 통해 보다 손쉽게 적용할 수 있는 기술을 제공해준다.
- 쿼리보다 객체에 집중하게 해준다.
- https://velog.io/@adam2/JPA는-도데체-뭘까-orm-영속성-hibernate-spring-data-jpa
- JPA 개념 설명
- mysql 연동
build.gradle
dependencies {
compile('mysql:mysql-connector-java')
compile("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
application.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# properties
spring.datasource.url=jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
# db response name
spring.datasource.username=root
# db response password
spring.datasource.password=root
'개발공부 > Java(JPA)' 카테고리의 다른 글
[JPA] JPA에서 동기(Synchronous) vs 비동기(Asynchronous) (0) | 2025.02.17 |
---|---|
[Java] String VS StringBuilder 차이점 (0) | 2025.02.17 |
Entity (0) | 2025.02.13 |
Repository (0) | 2025.02.13 |
JPA 연관 관계 설정 (0) | 2023.06.18 |