JPA

Jaeyoung·2022년 7월 24일
0
post-thumbnail

개요

JPA를 사용하기 이전에는 jdbc API를 직접 이용해서 사용 했다고 한다 하지만 CRUD SQL에 대한걸 일일히 다 작성해주는게 개발자에게는 정말 귀찮고 시간소모가 컸다고 한다. 그래서 그걸 좀 줄일 수 있는 mybatis, jdbc templete 과 같은 SQL Mapper를 사용하면서 그 부담을 줄였는데 반복적인 것을 더 줄일 수 없을까 싶어서 만든게 JPA(ORM)라고 한다. ORM 이란 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해 주는 Framework다. 그래서 JPA를 사용하는 사용자 들은 SQL을 직접 작성하는게 아니라 어떠한 SQL이 실행될지 생각만 하면 된다. 왜냐면 JPA가 자동으로 객체 모델링을 해주기 때문이다. 또한 SQL이 아닌 객체 중심으로 설계가 되다보니 테스트랑 유지보수에 용이하게 되었다.

SQL를 직접 다루게 될 때 생기는 문제점

물론 JPA에서 해결하지 못하는 복잡한 SQL은 직접 SQL을 다뤄서 해야겠지만 간단한 이름과 아이디가 있는 멤버 객체를 만들어서 그걸 저장하고 찾는걸 SQL로 작성한다고 치자 그럼 멤버 객체를 일단 생성하고 조회, 저장 하는 쿼리를 작성해야한다. 근데 요구사항이 바뀌어서 전화번호를 추가해야한다고 한다. 그럼 또 멤버 객체에 전화번호를 추가하고 저장하는 쿼리에 전화번호를 저장하도록 수정 해야한다. 또한 조회하는 쿼리에도 전화번호를 조회할 수 있게 해야하니 또 쿼리를 수정해야한다. 또 그룹이라는 필드가 추가되어야한다고 하자 위와 같은 방법을 반복해야한다. 이처럼 필드하나 추가에도 많은 쿼리들을 수정해야한다. 그렇게 되면 실수에 대한 위험도가 높고 시간소모도 크다.

JPA를 통한 문제 해결

JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때, 개발자가 직접 SQL를 작성하는 것이 아니라 JPA 제공하는 API를 사용하면 된다. 그러면 JPA가 개발자 대신에 적절한 SQL을 생성해서 데이터베이스에 전달한다. 기본적으로 JPA가 제공하는 기능들을 보면 아래와 같다

  • 저장기능
    • jpa.persist 메소드를 사용하면 객체를 데이터베이스에 저장한다. 이 메소드를 호출하면 JPA가 객체와 매핑정보를 보고 적절한 INSERT SQL을 생성해서 데이터베이스에 저장한다.
  • 조회 기능
    • jpa.find 메소드를 사용하면 객체 하나를 데이터베이스에서 조회한다. JPA는 객체와 매핑정보를 보고 적절한 SELECT SQL을 생성해서 데이터베이스에 전달하고 그 결과로 해당 객체를 생성해서 반환한다.
  • 수정 기능
    • JPA는 수정 메소드를 따로 제공하지 않는다. 대신에 객체를 조회해서 값을 변경만 하면 트랜잭션을 커밋할 때 데이터베이스에 적절한 UPDATE SQL이 전달된다.
  • 연관된 객체 조회
    • JPA는 연관된 객체를 사용하는 시점에 적절한 SELECT SQL을 실행한다. 따라서 JPA를 사용하면 연관된 객체를 마음껏 조회할 수 있다.

이처럼 간단한 CRUD 기능들을 자동으로 해주기 때문에 SQL을 직접 다루게 될 때 보다 안전하게 사용할 수 있고 더 직관적으로 비즈니스 로직을 작성할 수 있다.

profile
Programmer

0개의 댓글