Mybatis 배경지식

강민석·2022년 7월 31일
0

DB

목록 보기
1/4

글을 시작하면서

8월부터 짧은 내용의 학습내용, 업무이슈 등을 정리하고 공유하는 스터디를 하기로 했다.
이 스터디를 진행하는동안 이전부터 제대로 깊이 알지 못했지만 사용했던 프레임워크나 문법 그리고 제대로 짚고 넘어가지 못한 이슈들에 대해서 다루려고 한다.

먼저 첫 주제로는 입사 후로부터 계속 부족함을 느꼈지만, JAVA와 스프링에 밀려 학습하지 않았던 DB에 대해 학습해보려고한다.

현재 회사에서 다루는 프로젝트에서는 Mybatis3를 사용하고 있고, JAVA로 첫 입문한 프로젝트이였기 때문에 당연하다는 듯이 이를 사용해왔다. 어떤 방식으로 동작하는지, 또 다른 프로젝트의 사용방식과는 어떻게 다른지에 대해 생각해보고 개선할 부분이 있다면 개선하는 시간을 가져보려고한다.

다뤄볼 내용은 크게 아래와 같다.

  1. 어플리케이션은 어떻게 DB에 접근하고 쿼리를 수행하는가? 이 과정에서 프레임워크로부터 얻는 도움은 무엇인가?
  2. Batch를 사용하여 어플리케이션을 구성하는 방법과 유의할 점
  3. DB의 실행계획을 보고 분석하기 (가능하다면 개선까지 다루려고 한다)

Mybatis란?

Mybatis는 개발자가 지정한 SQL, 프로시저 그리고 고급 매핑등을 지원하는 Persistence Framework이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. - Mybatis 공식 홈페이지

Mybatis는 위의 공식 홈페이지에서 소개하는 것처럼 어플리케이션 단에서 개발자가 DB에 접근하고 조작하는 것을 도와주는 Framework이다. 위의 설명을 보면 JDBC가 무엇인가에 대한 의문이 들 것이다.

간단하게 JDBC(Java Database Connectivity)에 대해서 먼저 알아보자. JDBC는 자바 어플리케이션과 데이터베이스 사이의 인터페이스로, 중간에서 자바 객체와 데이터베이스 데이터의 번역을 해주는 역할을 한다. 때문에 실제 어플리케이션과 데이터베이스 종단 간의 구조는 다음과 같이 형성된다.

위의 구조에서 알 수 있듯 JDBC의 가장 큰 특징은 JDBC driver에 따라 다양한 데이터베이스를 지원할 수 있다는 점이다. 개발자는 자바 어플리케이션 코드의 변경없이 다양한 데이터베이스를 호환하는 개발을 진행할 수 있다.

실제로 자바 어플리케이션의 DB접근과 조작을 위해 개발된 API는 JDBC이며, Mybatis는 이런 JDBC를 캡슐화하고 개발자에게 편의와 부가적 기능을 제공하기 위해 만들어진 프레임워크이다.

학습에 앞서 되짚는 간단한 배경지식

Mybatis와 excecutor-type인 batch에 대해 알아보기전에 간단한 배경지식을 되짚고 가려고 한다.

트랜잭션(transaction)

로직의 수행을 위해 필요한 작업을 묶은 단위.

트랜잭션의 뜻은 거래로, 거래가 일어날때의 그 과정을 의미한다. 실제로 거래가 일어날 때의 상황을 가정해서 트랜잭션이란 단어의 정의 필요성을 생각해보자.

A와 B는 번개장터를 통해 거래를 하려고 한다. A는 본인의 상품인 에어팟2을 판매하려고 하고, B는 그 대가로 20만원을 지불하려고 한다. 거래의 순서는 다음과 같다.(설명에 불필요한 부분은 제거했음)

  1. B가 A에게 거래를 요청한다.
  2. B가 A에게 20만원을 지불하고 거래를 위한 정보를 제공한다.(거래 장소 혹은 배달을 받을 주소)
  3. A가 B에게 상품을 제공한다.

기본적인 중고거래의 형식은 다음과 같다. 그런데 이때 A가 B에게 거래 대상인 에어팟2가 아닌 에어팟1을 제공하면 어떻게 될까? B는 A에게 상품이 일치하지 않는다는 명목으로 환불을 요구할 것이다.
결국 상황은 다음과 같이 두가지가 있을 수 있다.

A - 성공적으로 거래되는 경우

  1. B가 A에게 거래를 요청한다.
  2. B가 A에게 20만원을 지불하고 거래를 위한 정보를 제공한다.(거래 장소 혹은 배달을 받을 주소)
  3. A가 B에게 에어팟2를 제공한다.
  4. 거래가 종료된다.

B - 상품이 일치하지 않아 거래가 취소되는 경우

  1. B가 A에게 거래를 요청한다.
  2. B가 A에게 20만원을 지불하고 거래를 위한 정보를 제공한다.(거래 장소 혹은 배달을 받을 주소)
  3. A가 B에게 에어팟1를 제공한다.
  4. B가 A에게 환불을 요청하여 20만원을 돌려 받는다.
  5. 거래가 종료된다.

우리는 상품이 일치하지 않는 것을 에러(Error)라고 표현하고, 환불을 롤백(Rollback)이라고 할 수 있다. 이처럼 진행중인 프로세스에서 에러가 발생했을 때, 진행되어왔던 작업을 취소하여 이전상태로 되돌리기 위해 트랜잭션이라는 단위를 정의하고 관리를 하게 되었다.

배치(batch)

로직을 특정시간대에 수행하거나, 작업처리의 효율을 위해 특정한 로직의 수행보다 더 큰 범위의 작업들을 묶어 처리하는 방식

배치는 특정시간대에 원하는 작업을 자동으로 수행하거나, 대량의 작업수행을 보다 효율적으로 하기위한 목적으로 사용된다. 배치가 어떤 것인지를 알기위해서는 배치의 수행방식에 대해 알면 편리하다.

  1. 수행할 쿼리를 적재
  2. 적재된 쿼리를 일괄수행

위의 수행방식을 보면 알 수 있듯이 배치의 쿼리는 사용자의 요청에 따라 실시간으로 이루어지는 것이 아닐 수 있다. 수행대상이 되는 쿼리를 적재하고 개발자가 의도한 시점에 쿼리를 일괄수행시키므로서 DB에 수차례 접근할때의 I/O Delay에서 벗어날 수 있게 된다.

Mybatis에서의 배치가 어떻게 이루어지는지는 이후의 포스팅에서 다룰 계획이다.

0개의 댓글