스프링

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

JANNNNNN 2024. 3. 15. 16:27

목표

  • 자바진영의 ORM(Object Relational Mapping) 표준인 JAP 기술 이해
  • Spring Boot를 이용한 웹 개발 학습

ORM(Object Relational Mapping) : 객체 관계 매핑 

ORM

  • ORM의 역할 : 자바 클래스와 데이터베이스의 table을 Entity로 매핑 

데이터베이스에는 객체지향 개념이 없기 때문에, 데이터베이스에 맞춰서 자바에서 추구하는 객체지향의 간극을 채워주는 존재!

JPA (JAVA Persistence API)

  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 자바 진영의 ORM 표준

  • 인터페이스에는 구현체가 존재해야한다.
    • 즉, JPA에 대한 구현체는 대표적으로 위 사진처럼 3가지가 존재하는데 대부분 Hibernate를 사용한다.

  • JPA도 결국 JDBC를 사용한다.
    • MySQL or Oracle을 쓰던 JPA에 안에 드라이버가 다 내장되어있기 때문에 JPA에서 적절하게 변환해준다.
  • 즉, Java Application에서는 데이터베이스가 어떤 것을 사용하는지에 상관없이 사용가능하다.

JPA 사용 시 장점

  • CRUD(기본쿼리) 자동 생성 및 실행
    • 저장 - persist(엔티티) : insert문이 실행
    • 조회 - find(엔티티 타입, 식별자- PK) : select 문 실행
    • 수정 - 특정 메소드 없이 자동으로 변경 감지 후 update - update문 실행
    • 삭제 - remove(엔티티)
  • DB 벤더에 따른 SQL생성(방언) 
    • MySQL-> limit, Oracle -> rownum
  • JPA는 Dialect이라는 추상화된 방언 클래스와 각각의 구현체를 제공한다.

  • 즉, 데이터베이스가 변경되더라도 로직을 재정의하며 SQL을 수정할 필요 없이 JPA 설정만 변경하면 된다.

=> 범용성을 제공

  • Auto DDL 기능을 이용하여 테이블 자동 생성 
  • => 즉, 객체 정의 후 테이블을 자동으로 생성해줘서 편의성을 제공함.
  • SQL을 모아서 한번에 보내므로 성능 상 이점
  • 가장 큰 장점은 객체지향 프로그래밍의 설계 원칙을 지키도록 도와준다.

JPA의 단점

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

Spring Data JPA

  • 스프링 데이터 JPA는 JPA를 편하게 사용하도록 만든 모듈
  • CRUD 처리를 위한 공통 인터페이스 제공
  • 사용자는 아래와 같이 JpaRepository를 상속하는 인터페이스만 정의