본문으로 바로가기

JPA란?

category 백엔드/Spring 2020. 6. 8. 00:57

패스트캠퍼스 온라인 자바 강좌를 보면서 JPA 기술에 대해 알게 되었다.

현재 국내에서는 아직 MyBatis를 쓰는 곳이 많지만 JPA를 쓰는곳도 점점 많아지고 있다고 한다.

 

 

자바에서 DB에 접근해서 트랜잭션 처리하는 방식은 크게 2가지 종류가 있다.

  • SQL Mapper 방식⇒ MyBatis, JdbcTemplate
  • ⇒ SQL문으로 직접 데이터를 조작함
  • ORM(Object-Relation Mapping)⇒ 객체간 관계를 바탕으로 SQL을 자동으로 생성한다
  • ⇒ JPA, Hibernate
  • ⇒ SQL을 사용하지 않고 Java 객체를 이용해서 데이터를 조작한다

JPA는 자바 ORM 기술에 대한 API 표준 명세로 Java에서 제공하는 API이다

단순한 인터페이스이며 구현체는 없다.

 

Hibernate는 JPA를 구현하는 구현체 중 하나이다.

 

그렇다면 Spring-Data-JPA는 무엇일까?

Spring-Data-JPA는 JPA를 쉽게 사용하기 위해 스프링에서 제공해주는 프레임워크이다.

추상화 정도는 Spring-Data-JPA ⇒ Hibernate ⇒ JPA 순이다.

 

SQL Mapper 방식과 ORM 약간씩 차이가 있지만 내부적으로 JDBC API를 사용한다는 건 변함이 없다.

(결국에는 SQL로 변환되기 때문에... 개발자가 직접 SQL을 작성하냐 안하냐 차이 정도인듯하다)

 

 

<간단한 JPA 사용법 예시(INSERT)>

 

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}

// UserRepository 인터페이스가 JpaRepository 인터페이스를 상속한다.

 

public class UserRepositoryTest extends StudyApplicationTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void create() {
        String account = "Test01";
        String password = "Test01";
        String status = "REGISTERED";
        String email = "Test01@gmail.com";
        String phoneNumber = "010-1111-2222";
        LocalDateTime registeredAt = LocalDateTime.now();
        LocalDateTime createdAt = LocalDateTime.now();
        String createdBy = "AdminServer";

        User user = new User();

        user.setAccount(account);
        user.setPassword(password);
        user.setStatus(status);
        user.setEmail(email);
        user.setPhoneNumber(phoneNumber);
        user.setRegisteredAt(registeredAt);
        user.setCreatedAt(createdAt);
        user.setCreatedBy(createdBy);
        
        // JpaRepository에 save라고 메소드가 이미 정의되어 있다, 우리는 이걸 그냥 가져다 쓰기만 하면 됌
        User newUser = userRepository.save(user);

        Assert.assertNotNull(newUser);
    }
}

 

+ 추가

JPA : 영속 계층 관련 트랜잭션을 자바로 처리할 수 있도록 만들어 놓은 인터페이스 모음

Hibernate : 인터페이스 단위인 JPA를 구현체로 만들어 놓은 라이브러리(실제 코드에서 org.hibernate 로 시작하는 라이브러리이다)

Spring-Data-JPA : JPA를 쉽게 사용할 수 있도록 스프링에서 만든 JPA 프레임워크이다.(실제 코드에서 org.springframework.data.jpa 로 시작한다)