부트캠프(65일차)

성준혁·2023년 1월 31일
post-thumbnail

오늘은 부트캠프 65일차이다. 오전에 JPA 심화를 강의를 들었다. 영속성과 JDBC Template과 MyBatis의 차이점 SQL Mapper와 ORM의 차이점 등 심화에 대해서 강의를 듣고 공부를 하였다. 확실히 심화라서 그런지 많이 어려웠지만 예전에 잠깐 스쳐 지나갔던 용어들에 대해서는 확실히 알고 가는 것 같애서 성취감도 있었다. 일단 개념들에 대해 최대한 이해하려고 노력하는 중이다.

오늘 배운 것

1. 영속성(Persistence)란?

  • 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
  • 객체지향 프로그램에서 객체의 상태는 단지 메모리에서만 존재하고 프로그램이 종료되면 휘발하는 형태
  • ex) 영속성을 가지지 않는 상태 / 객체의 상태를 DB에 저장하면서 객체에게 영속성을 부여함
  • Persistence 계층에서 Domain Model 계층에 영속성을 부여하는 역할을 한다.
  • JDBC, SQL Mapper로 Persistence Layer를 구현할 수 있다.

2. JDBC란?

  • Java Database Connectivity의 약자
  • 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API
  • 자바 애플리케이션에서 DBMS의 종류에 상관없이, 하나의 JDBC API를 이용해 DB 작업을 처리
  • 각각의 DBMS는 이를 구현한 JDBC 드라이버를 제공한다.

3. SQL Mapper란?

  • 자바 Persistence Framework 중 하나이다.
  • SQL을 직접 작성한다.
  • SQL 문과 객체(Object)의 필드를 매핑하여 데이터를 객체화
  • SQL Mapper에 속하는 대표적인 프레임워크로 Mybatis가 있다.

4. JDBC Template과 MyBatis의 차이점

  • JDBC Template은 스프링에 내장된 기능이고, 별도의 설정없이 사용할 수 있다는 장점이 있는 반면에 동적 쿼리 적용이 복잡하다.
  • MyBatis는 동적 쿼리를 매우 편리하게 작성할 수 있다는 장점이 있으나, 별도의 설정이 필요하다는 단점이 있다.

5. SQL Mapper와 ORM의 차이점

  • SQL Mapper와 ORM은 개발자가 직접 JDBC Programming을 하지 않도록 기능들을 제공해주는 Persistence Framework 종류이다.

5-1. SQL Mapper

  • Object와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술
  • 객체와 테이블간의 관계를 매핑하는 것이 아니라, SQL문을 직접 작성하고 쿼리 수행결과를 어떠한 객체에 매핑하여 줄지 바인딩하는법. 즉 SQL 의존적인 방법이다.
    ex) Jdbc Template, Mybatis

5-2. ORM(Object Relation Mapping)

  • Object와 DB 테이블을 매핑하여 데이터를 객체화하는 기술
  • CRUD 관련 메소드를 사용하면 자동으로 SQL이 만들어져 개발자가 반복적인 SQL을 직접 작성하지 않아도 되고, DBMS에 종속적이지 않다. 또한 복잡한 쿼리의 경우
    JPQL을 사용하거나 SQL Mapper를 혼용하여 사용할 수 있다.
  • Java ORM 기술에 대한 인터페이스 표준을 JPA라고 하고, 이를 구현한 대표적인 기술이 Hibernate이다.

6. MyBatis가 쿼리를 생성하는 방법

6-1. XML만을 이용한 SQL문을 설정, DAO에서는 XML을 찾아서 실행하는 코드로 작성

  • 장점 : SQL문은 별도로 XML로 작성되어 SQL문의 수정이나 유지보수에 적합
  • 단점 : 개발 시 코드 양이 많아지고, 복잡성이 증가

6-2. annotation과 인터페이스만을 이용하여 SQL문 설정

  • 장점 : 별도의 DAO 없이도 개발 가능하여 생산성이 크게 증가
  • 단점 : SQL문을 annotation으로 작성하므로, 매번 수정이 일어나는 경우 다시 컴파일 필요

6-3. 인터페이스와 XML로 작성된 SQL문의 활용

  • 장점 : 간단한 SQL문은 annotation으로 복잡한 SQL문은 XML로 처리하여 유연성이 좋음
  • 단점 : 개발자에 따라 개발 방식 차이로 인해 유지보수가 중요한 프로젝트에서는 부적합

7. 영속성 컨텍스트와 쓰기지연의 연관성

  • 영속성 컨텍스트에 변경이 발생했을 때, 바로 데이터베이스로 쿼리를 보내지 않고 SQL 쿼리를 버퍼에 모아놨다가, 영속성 컨텍스트가 flush하는 시점에 모아둔
    SQL 쿼리를 데이터베이스로 보내는 기능이다.

0개의 댓글