[ 국비학원수료! 근데 JPA를 안 배웠네? ] SQL 중심적 개발의 문제점과 JPA를 사용해야 하는 이유

JYS·2023년 12월 31일
0
post-thumbnail

🤔Why ?

국비학원 커리큘럼을 따라 공부하며 계속 드는 생각이 있었다.
💡 이거 너무 불편한데?
💡 더 편한 방법은 없을까?

📌 첫 프로젝트

JDBC api를 사용해서 query문을 정확하게 한땀한땀 입력하여 처리했다

📌 두번째 프로젝트

sql Mapper(MyBatis)를 사용하여 개발 코드는 줄었지만 query문에 집중되어있고, 생산성이 떨어진다는 점은 같았다.


프로젝트를 진행하며 많은부분을 맡게되어 다양한 기능을 구현하다보니 하나의 기능을 수행하기 위해 무언가 절차가 많다는 생각이 들었다.

우연히 JPA소개 강좌를 듣게되었고 이렇게 편하게? 이렇게 빨리? 개발을 할 수 있다는 설레임에 바로 강의를 수강하게되었다.

수강강좌
💻 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한님)

✔ SQL 중심적인 개발의 문제점

  • SQL에 의존적인 개발
    반복 ( java객체 -> sql객체 -> java객체 -> ... 이러한 과정을 반복 )
  • 테이블에 맞춘 객체 모델링 문제점 ( 다른 객체의 참조가 아닌 Id값을 가지고있다 )
  • 객체다운 모델링의 문제점 ( 다른 객체의 참조로 연관관계를 맺는다 )
    코드가 번잡해지고, 등록과 수정이 까다롭다.
    객체는 자유롭게 객체그래프를 탐색할 수 있어야 한다, 처음 실행한 sql에 따라서 탐색 범위가 결정되기 때문에 계층형 아키텍처 관점에서 다음 계층을 믿고 쓸 수 있어야 하는데 그렇지 못하 게 되어 신뢰도가 깨진다.

✔ JPA - Java Persistence API

JPA는 표준 명세

  • 인터페이스의 모음
  • 표준 명세를 구현한 3가지 구현체 - 하이버네이트, EclipseLink, DataNucleus

JPA를 왜 사용해야 하는가?

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성, 유지보수
  • 패러다임의 불일치 해결 ( 상속, 연관관계, 객체 그래프 탐색, 비교 )
  • 성능
  • 데이터 접근 추상화와 벤더 독립성
  • 표준

JPA의 성능 최적화 기능

  1. 1차 캐시와 동일성(identity)보장
    같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상

    	String memberId = "100";
        Member m1 = jpa.find(Memeber.class, memberId); //SQL
        Member m2 = jpa.find(Memeber.class, memberId); //캐시
        m1 == m2 // true
  2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
    트랜잭션을 커밋할 때까지 INSERT SQL을 모음
    JDBC BATCH SQL기능을 사용해서 한번에 SQL 전송

    transaction.begin(); // 트랜잭션 시작
    em.persist(memberA);
    em.persist(memberB);
    em.persist(memberC);
    //여기까지 INSERT SQL을 데이터베이스에 보내지 않는다.
    
    //커밋하는 수간 데이터베이스에 INSERT SQL을 모아서 보낸다.
    transaction.commit(); // 커밋

    한번에 모았다가 네트워크로 보내기 때문에 네트워크 통신 비용을 줄일 수 있다.

  3. 지연 로딩과 즉시 로딩
    지연 로딩 : 객체가 실제 사용될 때 로딩
    즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회
    📌 개발시 지연로딩으로 세팅 후 성능 고려하여 즉시로딩으로 부분 세팅

ORM ? - Object-relational mapping(객체 관계 매핑)

JPA Process ( 저장, 조회 )

java application 과 jdbc API 사이에서 동작
기존에는 개발자가 jdbc api를 직접 사용했다면 JPA가 사용


📌요약

JPA를 사용함으로써 기존의 SQL에 의존적인 개발 방식에서 좀 더 비지니스 로직에 집중하고 JPA표준이 제공하는 다양한 이점들과 성능최적화 기능들을 사용함으로써 개발 생산성과 유지보수성을 증대시킬 수 있기 때문에 JPA를 배우고 사용 해야한다.


📚 참고 및 자료 출처 : 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한)

profile
go

0개의 댓글