본문 바로가기

개발공부/Java(JPA)

JPA 란?

 

📌 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