📚 참고자료

  • 유튜브 채널 [우아한 Tect] - 10분 테코톡 아마찌의 ORM vs SQL Mapper vs JDBC

https://www.youtube.com/watch?v=VTqqZSuSdOk&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=66 

 

 


🤔 영속성(Persistence)이란?

  • 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
  • 객체지향 프로그램에서 객체의 상태는 단지 메모리에서만 존재하고 프로그램이 종료되면 휘발하는 형태
    => 영속성을 가지지 않은 상태
    => 객체의 상태를 DB에 저장하면서 객체에게 영속성을 부여함

 

 

  • 위 사진은 Mark Richards의 소프트웨어 아키텍처 패턴 => 이미지링크
  • Persistence 계층에서 Domain Model 계층에 영속성을 부여하는 역할을 합니다.
  • JDBC, SQL Mapper로 Persistence Layer를 구현할 수 있습니다.

 

 

 

 

 

⏺ JDBC만을 이용하여 Persistence Layer 구현하기

 

 

JDBC란?

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

 

 

JDBC의 단점

  • 간단한 SQL을 실행하는 데도 중복된 코드를 반복적으로 사용
  • Connection과 같은 공유 자원을 제대로 릴리즈(반환) 해주지 않으면 시스템의 자원이 바닥나는 버그 발생
  • DB에 따라 일관성 없는 정보를 가진 채로 Cheked Exception (SQLException)처리
    • Cheked Exception이란?
      => Checked Exception은 컴파일 단계에서 확인 가능한 예외이다.
      => 다른 말로는 "Compiletime Exception"이라고 한다.
      => Checked Exception은 try/catch로 감싸거나 throw로 던지는 처리를 반드시 해주어야 한다.
      => 예외처리를 컴파일러가 강제하는 것이다.

 

 

 

 

 

 

 

 

 

⏺ Persistence Framework로 Persistence Layer 구현하기

 

SQL Mapper란?

  • 자바 Persistence Framework 중 하나입니다.
  • SQL을 직접 작성합니다.
  • SQL 문과 객체(Object)의 필드를 매핑하여 데이터를 객체화

 

 

SQL Mapper의 장점

  • 쿼리 수행 결과와 객체의 필드를 맵핑 & RowMapper 재활용
  • JdbcTemplate가 JDBC에서 반복적으로 해야 하는 많은 작업들을 대신해줌

 

 

SQL Mapper에 속하는 대표적인 프레임워크로 MyBatis가 있습니다.

 

 

 

 

 MyBatis란?

  • 반복적인 JDBC 프로그래밍을 단순화합니다.
  • SQL 쿼리들을 XML 파일에 작성하여 코드와 SQL을 분리하여 관리합니다.
  • JDBC만 사용하면 결과를 가져와서 객체의 인스턴스에 매핑하기 위한 많은 코드가 필요하겠지만,
    마이바티스는 그 코드들을 작성하지 않아도 되게 해 줍니다.
  • 동적 쿼리를 작성할 수 있습니다.
    • 동적 쿼리란?
      => 

 

 

 

  • 위 이미지는 마이바티스가 데이터를 Access 하는 순서를 나타내는 것입니다.
  • 스프링 부트에서 구현할 때 보라색 부분인 Mapper Interface와 Mapping File을 구현하게 되면
    자연스럽게 객체의 필드와 SQL문이 매핑되게 됩니다.
  • Mapper Interface에 대한 구현체를 우리가 구현하지 않아도 마이바티스에서 자동으로 생성하게 됩니다.

 

 

 

마이바티스의 장점

  • 자동으로 Connection 관리를 해주면서 JDBC를 사용할 때의 중복 작업 대부분을 없애준다.
  • 복잡한 쿼리나 다이나믹하게 변경되는 쿼리 작성이 쉽다.
  • 관심사 분리
    • DAO로부터 SQL문을 분리하여 코드의 간결성 및 유지보수성을 향상할 수 있습니다.

 

 

 

😓 JDBC와 마이바티스의 단점

  • SQL을 직접 다룸으로 문제점이 생기게 된다.
  • 특정 DB에 종속적으로 사용하기 쉽습니다.
  • 테이블 마다 비슷한 CRUD SQL 작성은 DAO 개발이 매우 반복되는 작업입니다.
  • 테이블 필드가 변경될 시 이와 관련된 모든 DAO의 SQL문, 객체의 필드 등을 수정해야 합니다.
  • 코드상으로 SQL과 JDBC API를 분리했다 하더라도 논리적으로 강한 의존성을 가지고 있습니다.
  • SQL문을 직접 작성하면 SQL에 의존적인 개발을 하게 됩니다.
    • 데이터 베이스에 항상 의존 관계를 가지게 됩니다.

 

 

 

 

 

ORM이란?

  • 객체와 관계형 데이터베이스를 매핑하는 것
  • 객체간의 관계를 바탕으로 SQL문을 자동으로 생성하고 직관적인 코드(메서드)로 데이터를 조작 할 수 있습니다.'
    • SELECT * FROM user; -> user.findAll();
  • ORM의 대표적인 예로 JPA가 있습니다.

 

 

ORM의 장점

  • 패러다임 불일치 문제 해결
    => 객체지향 언어가 가진 장점을 활용할 수 있습니다.

  • 생산성
    => 지루하고 반복적인 CRUD 용 SQL을 개발자가 작성하지 않아도 됩니다.

  • 데이터 접근 추상화, 벤더 독립성
    => 데이터베이스 벤더마다 미묘하게 다른 데이터 타입, SQL을 손쉽게 해결
  • 유지보수
    => 필드 추가, 삭제 시 관련된 CRUD 쿼리를 직접 수정하지 않고, 엔티티를 수정하면 됩니다.

 

 

ORM의 단점

  • 복잡한 쿼리 사용이 어렵습니다.
    • JPA에서는 SQL과 유사한 기술인 JPQL을 지원합니다.
    • SQL 자체 쿼리를 작성할 수 있도록 지원합니다.
    • SQL Mapper와 혼용해서 사용도 가능합니다.

 

 


 

😃 느낀점

  • 현재(작성일) 사이드 프로젝트에서 SQL Mapper인 마이바티스를 사용하고 있습니다.
    • 직접 사용해보면서 장점과 단점을 생각해볼 예정입니다.
  • SQL Mapper를 사용하는 프로젝트를 끝낸 후에 JPA를 사용하는 프로젝트 진행
    • 부트캠프에서 Spring Data JPA를 사용했지만 너무 얕게 공부했다는걸 영상을 보고 알게되었습니다.
  • JPA를 김영한님 책과 인프런 강의를 보면서 공부할 예정입니다.

 

 

 

 

 

📝 해야할 것!

  • 사이드 프로젝트를 통해 SQL Mapper(마이바티스)의 장점과 단점을 사용하면서 알아가기
  • 사이드 프로젝트가 끝난 후에 JPA에 대한 공부를 진행
    • JPA 공부를 통해 ORM에 대한 개념을 이해하고 사용하는 이유와 장단점을 알아가기
    • JPA에서 SQL을 처리하는 구조를 공부하면서 사용해보기

 

 

 

 

반응형

+ Recent posts