Language/JAVA

JDBC, SQL Mapper, ORM

idleday 2023. 5. 1. 23:19

4월30일자 인프라스터디에서 나온 주제 정리

  • 예, 일반적으로 SQL 매퍼 프레임워크를 사용하려면 JDBC가 있어야 합니다. JDBC는 관계형 데이터베이스와 상호 작용하기 위한 표준 Java API로, 데이터베이스에 연결하고, 데이터베이스에 SQL 문을 전송하고, 결과를 검색하기 위한 인터페이스 및 클래스 집합을 제공합니다.

    SQL 매퍼 프레임워크는 JDBC를 기반으로 구축되어 Java 코드로 SQL 문을 작성하는 작업을 간소화하기 위한 추가 기능을 제공합니다. 일반적으로 개발자는 이 프레임워크를 사용하여 Java 코드에서 SQL 문을 하드코딩하는 대신 외부 XML 또는 주석 기반 파일에서 SQL 쿼리를 정의할 수 있습니다. 그러면 SQL 매퍼 프레임워크가 SQL 문을 생성하고 JDBC를 사용하여 데이터베이스에서 실행합니다.

    따라서 JDBC를 사용하여 Java 코드에서 직접 SQL 문을 실행할 수 있지만, SQL 매퍼 프레임워크는 SQL 문 작업을 위한 상위 수준의 API를 제공하므로 SQL 쿼리를 더 쉽게 작성하고 유지 관리할 수 있으며 작성해야 하는 상용구 코드의 양을 줄일 수 있습니다.
  • 기본적으로 ORM : 객체 이용해서 sql 쿼리 작성 / SQL Mapper : 직접 쿼리 입력 
    (EX) sql mapper : select * from 테이블명 / orm : find()
    -> 둘 다 개발자가 db 제어를 쉽게 하게끔 만들어주는 것
     
    원래라면 DB가 있는 곳과의 네트워크 연결하는 코드 , DB의 테이블 접근하는 코드 등 개발자가 다 하나하나.. .만들어야 하는데

     ORM, SQL Mapper는 그런건 다 자기들이 다 처리하고 개발자는 DB ip, 계정, 비밀번호만 입력하면 자동으로 DB와 연결됨 코드 안짜도 됨.. 
  • JAVA 는 태초에 JDBC가 존재했음. ORM , SQL Mapper 이전에 하드코딩으로 DB 연결하게 만드는 표준 API가 존재 
  • C언어는 또 다른 표준 API 가 존재하고 그 걸 바탕으로 ORM , SQL Mapper 적으로 만든 라이브러리가 독자적으로 존재 

  •  데이터베이스 시스템 연결에 관한 계층 설명

    <추상화 계층 살펴보기>

    1. 저수준: 데이터베이스 드라이버
    - TCP패킷을 수동생성하여 데이터베이스를 전달하는 최소한의 과정을 제외한 가장 낮은 수준의 추상화 계층
    - 데이터베이스 드라이버에서는 DB연결(풀링)을 처리한다. 이 레벨에서는 raw sql 쿼리를 작성하여 데이터베이스를 넘기고, 데이터베이스로부터 응답을 받게 된다
    - node.js에서 쓰이는 데이터베이스 드라이버 예시) mysql.js, node-postgres, node-sqlite3
    - 위 라이브러리들에서는 기본적으로 데이터베이스 인증정보를 가져오고, 새 DB 인스턴스를 만들고, 연결하고, 문자열형식으로 쿼리를 전송하고, 결과를 비동기적으로 처리한다.

    2. 중간수준: 쿼리 빌더
    - 데이터베이스 드라이버 모듈과 ORM 사이의 중간 수준. 
    - 예시) Knext -> 문자열형식의 SQL쿼리보다 더 편리한 방식으로 동적 쿼리 생성 가능

    3. 고수준: ORM
    - 가장 높은 수준의 추상화
    - RDB데이터를 애플리케이션 객체(클래스 인스턴스)에 매핑하는 방식으로, 애플리케이션 코드단에서 이러한 객체의 구조와 관계를 정의해야 함
    - 예시) sequelize, bookshelf, waterline, objection.js
    - ORM 사용시에 보통 사전설정에 많은 시간이 걸림

 

  • <ORM 사용시 주의할 점>

    1. ORM은 꽤 복잡한 라이브러리로서 배우기 쉽지않다. SQL문보다 ORM구문이 더 복잡할 수도 있음. 서로다른 ORM구문 익히는 것보다 그냥 SQL구문 배워라
    2. ORM 호출의 비효율성. 그냥 SQL문 날리는것보다 쿼리비용이 더 많이 들 수 있다.
    3. ORM은 만능이 아니다. 일부 쿼리작업은 ORM으로 처리할 수 없어서 결국 SQL쿼리를 직접 작성해야한다.

 

  • <저수준 데이터베이스 드라이버 특징>

    1. 쿼리를 손수 작성하기 때문에, 쿼리생성시 오버헤드를 일으키지 않는다.
    2. 전반적인 프로젝트 의존성 최소화
    3. 동적쿼리 생성하는게 귀찮을 수 있다. -> 중간수준 쿼리빌더 추천
  • Mybatis 같은 SQL매퍼는 결국 직접 쿼리문을 작성하기에 RDB종류에 종속적이란 단점이 있음
    JPA같은 ORM을 쓰면 더 편리하고, SQL쿼리를 직접 작성할 필요가 없다. SQL의존적이지 않기에  생산성이 높아지고 유지보수하기 좋음. 

 


ref)

 

 

JPA란 무엇인가? Mybatis와 차이점 (+기초 무료 인강 추천)

JAVA/Spring을 공부하거나 사용한 개발자라면 JPA를 사용해 보거나, 많이 들어봤을 것이다. 요새 많은 곳에서 사용하는 기술 중 하나이다. 레거시 서비스가 아닌 서비스를 제공하는 곳이라면 개발을

developsd.tistory.com

 

 

Home

yceffort

yceffort.kr

 

'Language > JAVA' 카테고리의 다른 글

[Java] Request Parameter 출력  (0) 2024.01.15
[JAVA] 반복문에서 배열요소 삭제  (2) 2023.11.02
[JSTL] c:forEach 역순  (0) 2023.09.25
JAVA 오픈소스 프레임워크 Netty  (0) 2023.04.19
JSON 과 JSONP  (0) 2022.12.12