LoGin
article thumbnail
반응형

 

 

 

 

 

 

JPA

관계형 데이터베이스 영속성(db에 데이터를 넣어 영구적으로 관리하는 것)을 관리하기 위한 JAVA표준 인터페이스

 

 

Hibernate

가장 인기있는 JPA의 구현체, ORM(객체-관계 매핑) 프레임워크 중 하나.

 

 

ORM

객체 관계형 데이터베이스 간의 매핑을 자동화하는 기술. 이 기술로 개발자는 객체를 사요하여 데이터를 다루고, ORM프레임워크가 이를 데이터 베이스 테이블과 매핑시켜 준다. 그런 기술이다.

 

 

하이버네이트는 JPA의 구현체 중 하나로, 자바 애플리케이션에서 객체와 관계형 데이터베이스 간의 매핑을 쉽게 처리할 수 있게 해주는 도구입니다.

JPA는 객체 지향 프로그래밍 방식으로 데이터베이스와 상호 작용할 수 있도록 해줍니다. 이를 통해 개발자들은 SQL 쿼리를 직접 작서 아는 번거로움 없이 객체 지향 코드를 사용하여 데이터베이스와 소통할 수 있습니다.

 

DB와 백엔드를 개발해 보면 아시겠지만 둘을 매핑하고 유지보수하는 건 엄청난 시간과 비용일 필요합니다.

아마 많은 개발자가 '데이터를 객체에서 관리하면 어떨까?'라고 생각했을 겁니다. JPA가 나오고 개발자들이 프로젝트에 적용하기 시작했을 때 유지보수하던 시간을 DB와 비즈니스로직, 서비스를 개선하는데 시간을 쓸 수 있어서 좋다는 말이 나올 정도입니다.

 

 

 

하이버네이트 장점

객체 관계 매핑의 단순화

JPA를 사용하면 개발자들은 데이터 베이스 테이블과 자바 객체 사이의 매핑을 간단하게 정의할 수 있다. 이를 통해 개체 지향저인 설계를 유지하면서 데이터베이스와의 상호 작용을 수행할 수 있다.

 

표준화된 API

JPA는 자바 표준 API로서, 다양한 ORM 프레임워크에서 사용할 수 있는 공토 왼 인터페이스를 제공합니다. 이는 개발자들이 프로젝트에서 ORM을 교체하거나 여러 ORM으 함께 사용할 때 유용하다.

 

자동화된 쿼리 생성

JPA는 개발자가 직접 SQL 쿼리를 작성하지 않아도 데이터베이스와의 상호 작용을 처리할 수 있다. JPA는 자동으로 필요한 쿼리를 생성하고 실행하여 개발자의 생산성을 향상한다.

 

트랜잭션 관리

JPA는 트랜잭션 관리를 간편하게 해 줍니다. 개발자들은 애노테이션을 사용하여 메서드나 클래스에 트랜잭션을 적용하 수 있으며, JPA가 트랜잭션을 자동으로 관리해 줍니다.

 

 


JPA하이버네이트를 사용한 경우

import javax.persistence.*;

@Entity
@Table(name = "employees")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String firstName;
    private String lastName;
    private String email;

    // 생성자, 게터 및 세터는 생략하겠습니다.
}

 

하이버네이트를 사용하여 간단한 직원 엔티티를 정의하는 클래스입니다.

@Entity 애노테이션은 이 클래스가 JPA엔티티임을 나타내며, @Table 애노테이션은 해당 엔티티가 매핑될 데이터베이스 테이블의 이름을 지정합니다.

@Id와 @GeneratedValue 애노테이션은 엔티티의 기본 키를 나타내고 자동 생성 전략을 설정합니다.

속성은 데이터베이스 테이블의 열과 자동으로 매핑됩니다.

 

 

 

 

JPA하이버네이트를 사용하지 않은 경우

public class Employee {
    private Long id;
    private String firstName;
    private String lastName;
    private String email;

    // 생성자, 게터 및 세터는 생략하겠습니다.
}

 

하이버네이트를 사용하지 않는 경우에는 위와 같이 단순히 자바 클래스를 정의합니다. 데이터베이스와의 매핑은 직접 SQL 쿼리를 작성하여 처리해야 합니다. 이 경우에는 각 속성을 데이터베이스 테이블의 열과 수동으로 매핑해야 합니다.

 

그래서 데이터베이스 상호 작용을 위해 DAO(Data Access Object)를 직접 작성해야 합니다.

Dao는 데이터베이스와의 통신을 담당하는 계층으로, 데이터베이스와의 연결을 설정하고 쿼리를 실행하여 데이터를 읽거나 쓰는 역할을 합니다.

 

JDBC(Java Database Connectivity)를 사용해 보면

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class EmployeeDAO {
    private static final String URL = "jdbc:mysql://localhost:3306/employee_db";
    private static final String USERNAME = "사용자명";
    private static final String PASSWORD = "비밀번호";

    public void addEmployee(Employee employee) {
        String query = "INSERT INTO employees (first_name, last_name, email) VALUES (?, ?, ?)";

        try (Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
             PreparedStatement statement = connection.prepareStatement(query)) {
            statement.setString(1, employee.getFirstName());
            statement.setString(2, employee.getLastName());
            statement.setString(3, employee.getEmail());

            statement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    // 모든 직원 조회 메서드
    // 특정 직원 조회 메서드
    // 직원 삭제 메서드
    // 직원 업데이트 메서드
    // 등등
}

우선 CRUD 중 새로운 직원 추가 메서드만 작성한 모습입니다.

필요한 데이터 요청마다 저렇게 매핑하고 구현해줘야 합니다.

 

 

 

아무리 편리해도 JPA를 함부로 도입하거나 마이그레이션 하는 것은 추천드리지 않습니다.

ORM을 사용할 때에는 적절한 설정과 최적화가 필요합니다. 데이터베이스와 dto 최적화를 잘 이뤄내지 못하면 JPA는 개발을 편리하게 해 주는 것이 아니라 TimeKiller가 될 것입니다.

공부하고 시작하는 것을 권장합니다.

728x90
반응형
profile

LoGin

@LoGinShin

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!