Devlog
article thumbnail

정말 그저 갓... 교수님의 강의를 발견하게 되었다...

교육에서 스프링 배우기 전에 예습하고 가야겠다 (아무래도 진도가 빠른 편이라)

그나저나 요즘은 웹프로그래밍에서 스프링과 JPA를 배우네... 부럽다...

 

 

 

 

위 글은 김성렬 교수님의  KOCW강의를 보고 작성한 글로 자세한 내용은 해당 강의를 통해 확인하시길 권장합니다.

http://www.kocw.net/home/cview.do?cid=5e6aec4a9ae2dd45 

 

스프링과 JPA를 이용한 웹개발

본 강의는 JPA와 스프링프레임워크를 이용한 웹 개발 방법을 설명하고 있습니다.

www.kocw.net

 

 

 

 

JPA: 자바 진영의 ORM(Object Relational Mapping) 표준인 JPA 기술

ORM: 객체 관계 매핑

Object는 자바의 Object

ORM으로 객체지향적인 프로그래밍과 관계형 데이터베이스의 상충하는 기술을 채워줄 수 있음

ORM의 역할: 자바 클래스와 데이터베이스 테이블을 매핑 (JDBC의 데이터 바인딩과는 다름)

 

 

JPA(Java Persistence API)

  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 
    • 인터페이스: ORM이 가져야 할 특징과 기능을 가진 명세서
  • 자바 진영의 ORM 표준

 

인터페이스에는 구현체가 존재해야 함

 

ORM이라 하면 Hibernate라 할 정도로 주로 많이 쓰며 대부분의 구조체에 해당함

 

 

자바 어플리케이션과 데이터베이스는 비종속적임

어떤 데이터베이스를 쓰던 신경쓰지 않고 개발 할 수 있게끔 함

 

 

JPA 사용시 장점

  • CRUD(기본 쿼리) 자동 생성 및 실행
    • 저장
      • persist(엔티티): insert문이 실행
    • 조회
      • find(엔티티 타입, 식별자): select문 실행
        • 식별자는 관계형 데이터베이스의 PK를 의미
        • 엔티티는 반드시 식별자를 가져야 함
        • 엔티티는 클래스를 의미
    • 수정
      • 특정 메소드 없이 자동으로 변경 감지 후 update: update문 실행
        • 이러한 매커니즘을 더티 체킹이라 함
        • 영속성 컨텍스트 체크
        • persist로 되어 있는 엔티티가 변경이 되는지 계속 모니터링 함
        • 트랜잭션이 종료되는 시점에 엔티티가 수정이 있었다 한다면 프로그래머는 엔티티를 변경, 즉 데이터 베이스 필드를 변형해야 한다는 의도를 가지고 있다고 JPA 스스로 해석함
          • 특정 필드만 update문이 실행됨
    • 삭제
      • remove (엔티티)
  • DB 벤더에 따른 SQL 생성 (방언)
    • ex) 페이징: MySQL ➡️ Limit, Oracle ➡️ rownum
    • JPA는 Dialect라는 추상화된 방언 클래스와 각각의 구현체를 제공함
    • 데이터베이스가 변경되어도 SQL 수정 없이 JPA 설정만 변경하면 됨 (= 유동적임)

 

  • Auto DDL 기능을 이용하여 테이블 자동 생성

 

  • SQL을 모아서 한 번에 보내므로 성능상 이점
  • 응용 레벨에서 Repeatable Read 수준의 격리 레벨 제공
  • 객체지향 프로그래밍의 설계 원칙을 지키도록 도움 (Spring을 사용하는 궁극적인 이유)

 

 

JPA 단점

  • 객체 응집력을 약화 시킴
  • 테이블에 매핑된 엔티티와 별개로 DTO 추가 정의 필요
  • 예상치 못한 SQL 발생 가능

 

 

Spring Data JPA

  • 스프링 데이터 JPA는 JPA를 편하게 사용하도록 만든 모듈
  • JPA(Hibernate)를 사용할 때 발생하는 보일러 플레이트 코드를 제거
  • JPA를 사용할 때 발생하는 관습적인 코드 제거
    • 순수 JPA를 사용할 경우, 게시글을 조회하는 findById라는 함수를 만들지만 이는 어쩌면 당연히 있어야 할 코드
  • CRUD 처리를 위한 공통 인터페이스 제공
  • 사용자는 아래와 같이 JpaRepository를 상속하는 인터페이스만 정의
public interface MemberRepository extends JpaRepository<Member, Long>

 

 

 

추가

  • N+1 문제: JPA의 성능 튜닝에서 가장 중요한 개념
  • JPQL
    • JPA가 제공해주는 기본 CRUD외에 통계성 쿼리 등 복잡한 쿼리를 위해 JPQL은 트랜잭션 내에서 곧바로 실행되는 특성이 있으며 이는 N+1 문제와 연관 있음
  • QueryDSL
    • 문자열의 덧셈 연산을 통한 쿼리 작성은 불편하고 오류 발생 가능성이 높음
    • 문자열의 덧셈 연산은 특히 동적 쿼리 작성 시 주로 사용
    • 동적 쿼리 작성을 간편하고 재사용성이 높은 코드를 만들기 위함

'강의 > etc' 카테고리의 다른 글

[Spring/JPA] JPA 기초지식  (0) 2022.04.20
[Spring/JPA] 환경설정  (0) 2022.04.19
[JS] 2022 30분 요약 강좌(1)  (0) 2022.03.15
[SwiftUI fundamental Tutorial] Redux  (0) 2021.10.16
[SwiftUI fundamental Tutorial] LazyVGrid  (0) 2021.10.07
profile

Devlog

@덩이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그