GitHub

https://github.com/Choidongjun0830

Spring

[JPA 기본편] SQL 중심적인 개발의 문제 + JPA 소개

gogi masidda 2024. 6. 14. 15:47

SQL 중심적인 개발의 문제

  • 지금 시대는 객체를 관계형 DB에 관리
  • CRUD, ... 무한 반복, 지루한 코드. 계속 쿼리를 작성해야
  • 객체에는 상속 관계가 있지만, 데이터베이스에는 상속 관계가 없음.
    • 슈퍼 타입, 서브 타입으로 설계해야함.
    • 조회 시에도 조인해서 해야함. => 객체를 테이블에 맞춰서 설계해야함.

 

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

  • 객체는 객체대로 설계
  • 관계형 데이터 베이스는 관계형 데이터베이스 대로 설계
  • ORM 프레임워크가 중간에서 매핑

JPA를 왜 사용해야 하는가

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성
  • 유지보수
  • 패러다임의 불일치 해결
  • 성능
  • 데이터 접근 추상화와 벤더 독립성
  • 표준 

저장: jpa.persist(member)

조회: Member member = jpa.find(memberId)

수정: member.setName("변경할 이름")

삭제: jpa.remove(member)

 

유지 보수 측면에서도 원래는 모든 쿼리를 변경해야 했지만, JPA는 필드만 추가하면 돼서 편하다.   

상속 문제도 JPA가 알아서 처리해준다.

연관 관계도 알아서 처리해준다.

 

JPA의 성능 최적화 기능

  • 1차 캐시와 동일성 보장
String memberId = "100"
Member m1 = jpa.find(Member.class, memberId); //SQL
Member m2 = jpa.find(Member.class, memberId); //캐시
  • 트랜잭션을 지원하는 쓰기 지연
    • 트랜잭션을 커밋할 때까지 insert문을 모아서 한번에 SQL 전송 
  • 지연 로딩
    • 지연 로딩: 객체가 실제 사용될 때 로딩
      • 연관된 것을 실제 사용될 때만 가져오기 
    • 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회

 

 

728x90