[SPRING] DB 연결 변천과정

이정환·2023년 7월 25일

[CS] SPRING

목록 보기
14/22

1. JDBC, SQL MAPPER, ORM(JPA) == 어떻게 데이터베이스에 데이터를 저장할 것인가 == 어떻게 영속성 구현할 것인가

  • DB마다 연결방법, SQL, 응답 방법 등이 전부 다름.

  • JDBC API == java database connectivity == 일반적인 디비 접근 기술
    • java 진영의 DB 연결 표준 인터페이스 →드라이버 매니저를 통해 DB 종류에 맞춰 작동되도록.
    • 드라이버 매니저 → 연결 → statement → resultset
      • ⇒ 중복 코드가 많다, 커넥션 관리 계속해야한다(close 자원), sql 다뤄야 한다.

  • SQL MAPPER , 스프링의 JDBC
    • 이전의 불편한 점(중복코드)을 많이 추상화 시킴 (jdbc template)

  • 마이바티스 ,
    • 자바 코드와 SQL을 분리하자 → 쿼리를 java xml로 분리 (관심사의 분리)
    • 동적쿼리 가능

  • ORM == object relational mapping → JPA 인터페이스 생성, 하이버네이트 구현체 == 객체와 RDB 패러다임불일치 해소
    • 패러다임불일치 (연관관계(객체참조), 상속..)

  • 객체의 상속, 정보은닉, 추상화, 다형성 등으로 복잡한 세상을 추상화하자. 하는데 디비에는 이런게 없네? 게다가 물리적으로는 데이터 숨기는데 성공했을지몰라도, 논리적으로는 강한 의존관계를가진다(양쪽수정)
    - SQL vs 메소드
    - 아직도 SQL의 존적인 개발하네? 엔티티 값 추가되면 SQL 문 수정해야되네 ? → 메소드
    - 상속
    - 직접 SQL 쓴다면 부모와 자식에 대한 쿼리 각각 날려줘야함. → JPA가 알아서 관리해줌
    - 동일성 이 깨지는문제
    - AVA는 동일성, 동등성 비교하지만, 트랜잭션 내에서 하나의 객체는 같은 주소를 가짐. 동일하게 취급돼서 DB와의 싱크 맞춰줌
    - 연관관계
    - 데이터중심으로 코드짬(연관관계를 id) → 연관있는 객체들간 객체참조
    - 자바에서 관계가진 엔티티 멤버변수로 객체넣어도 테이블 매핑코드 JPA가 만들어줌. DB 외래키
    - 객체그래프 탐색시 sql은 join에 대한 연관 데이터 보장안되지만, JPA 쓰면 보장.
  • 스프링 데이터의 JPA에는 엔티티 매니저 복잡하니까 한단계 더추상화 해서 레포지토리 사용, 내부에 있음.

  • spring data JDBC == simple , 엔티티 매니저 감추자
    • DDD

0개의 댓글