JPA (JAVA PERSISTENCE API) 란?


JPA (Java Persistent API)란?

자바 어플리케이션을 개발을 하면서 JDBC + myBatis 를 이용한 개발을 주로 다루었다. xml 에 쿼리를 작성 하고 entity 로 맵핑을 하고 메서드에서 객체를 가지고 로직을 구현 하는 것에 대부분의 개발 시간을 소요 하게 되었고 테이블이나 쿼리에 수정사항이 발생하면 xml에서 부터 메서드 까지 모든 부분을 수정 해야 했다.

이런 부분을 해결 하게 위해 자바 진영에서는 JPA 라는 ORM 기술 표준을 제공 한다. JPA 는 CRUD SQL 을 자동으로 처리 해주며 조회 결과를 객체로 매핑 하는 작업도 자동으로 제공 해주기때문에 반복적인 작업들을 많이 줄여 주게 된다.

하지만 JPA 를 정확히 알지 못하면 성능, 데이터관계 등의 문제 때문에 낭패를 보는 상황이 발생한다. 간단한 예제들을 통해서 JPA 를 다루어 보면서 학습 하도록 하자.

JDBC 개발과 JPA 의 비교

  • 요구사항 : 회원 관리 기능 개발
  1. JDBC 를 이용한 개발

    • 회원 entity 작성
     public class Member{
         private String id;
         private String name;
         private String adress;
         .....
     }
    
    • 회원 테이블 조회 쿼리 작성
        SELECT ID, NAME, ADDRESS FROM MEMBER WHERE ID = ?
    
    • 회원 DAO 작성
     public class MemberDao{
        public Member findMember(String id){
            ....
            ResultSet rs = stmt.executeQuery(sql);
               
            Member member = new Member();
            member.setId(rs.getString("ID"));
            member.setName(rs.getString("NAME"));
            member.setAdress(rs.getString("ADDRESS"));
            return Member;
        }
     }    
    
    • 회원 조회 기능 구현이 완료 되었다. 이제 회원 등록, 회원 탈퇴 기능도 추가 구현 해야한다.

    • 문제 발생

      • 회원 정보테이블에 전화번호 컬럼이 없어 추가해야 하는 상황이 발생 하였다. entity 수정 부터 시작해서 모든 쿼리를 다 수정 해야 하는 상황이 발생 하였다. JPA 에서는 이러한 문제점을 어떻게 해결 하였는지 살펴 보자.
  2. JPA 를 이용한 개발

  • JPA 는 SQL을 직접 작성 하는 것이 아니라 JPA API 를 사용 하면 된다.

    • 회원 entity 작성

      @Entity
      @Table(name="MEMBER")
        public class Member{
            @Id
            private String id;
            private String name;
            private String adress;
            .....
        }
      
    • 회원 조회

        public class MemberDao{
          public Member findMember(String id){
              .....
              Member member = jpa.find(Member.class, id);
              return member;
          }
      }
      
    • 회원 등록, 수정, 삭제

        public void addMember(member){
          .....
          jpa.persist(member);
      }
            
        public void updateMember(){
          .....
          Member member = jpa.find(Member.class, id);
          member.setName("수정");
      }
            
        public void deleteMember(Member member){
          .....
          jpa.remove(member);
      }
      

마무리

JPA 는 반복 작업이 많이 필요로 했던 부분들을 대신 해주고 비즈니스 로직에 더 집중을 할 수 있다.
다음 시간에는 JPA 개발 환경을 구성 해서 기본적인 기능 부터 살펴 보도록 하자.

Back to blog