기술 면접(MyBatis)

유요한·2024년 2월 23일
0

기술면접

목록 보기
7/27
post-thumbnail

JDBC란?

JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API로 Plain JDBC와 Spring JDBC가 있다. Spring JDBC 접근 방법 중 하나로 많이 사용되는 JdbcTemplate은 내부적으로 Plain JDBC API를 사용하지만 다음과 같은 문제점이 있어 JdbcTemplate을 사용할 경우 핵심 로직에 집중할 수 있다는 장점이 있다.

문제점
1. 쿼리 실행 전과 후에 많은 코드를 작성해야 한다.
2. 데이터베이스 로직에서 예외 처리 코드를 수행해야 한다.
3. 트랜잭션을 처리해야 한다.
4. 이러한 모든 코드를 반복하기 때문에 비효율적이다.

여기서 도움을 주는 것이 DBCP입니다.


DBCP란?

DBCPDataBase Connection Pool의 약자이며, 데이터베이스와 애플리케이션을 효율적으로 연결하는 커넥션 풀 라이브러리를 말합니다. 이러한 DBCP는 WAS가 실행되면서 미리 일정량의 DB Connection 객체를 생성하고 Pool이라는 공간에 저장합니다. 저장된 DB Connection 객체는 요청에 따라 필요할 때마다 Pool에서 가져다 쓰고 반환할 수 있습니다. 따라서 요청할 때마다 DB Driver에 로드하여 물리적인 Connection 객체를 생성하는 비용이 줄어들어 앞서 말씀드린 문제를 해결할 수 있게 됩니다. DBCP는 주로 JDBC (Java Database Connectivity)를 기반으로 한 원시적인 데이터베이스 작업을 위해 사용됩니다.

DBCP 사용이유

데이터베이스에서 원하는 데이터를 얻어올 때 가장 비용이 큰 부분은, 서버가 물리적으로 DB서버에 최초로 연결되어 Connection을 생성하는 부분입니다. 이 문제는 DBCP를 사용하면 해결할 수 있습니다.


MyBatis

객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거 합니다. Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있습니다.

SQL이 짧고 간결한 경우에는 어노테이션을 이용해서 쿼리문을 작성해 준다. SQL이 복잡하거나 길어지는 경우에는 어노테이션보다 XML을 이용하는 것이 좋다. MyBatis-Spring의 경우 Mapper 인터페이스와 XML을 연동해서 동시에 이용할 수 있다. 인터페이스객체.메소드()를 호출하는 순간 해당하는 인터페이스의 경로를 namespace로 가지고 있는 XML 파일로 찾아가서 메소드명과 동일한 id를 가지고 있는 쿼리문을 수행하여 결과로 돌려준다.

객체와 관계형데이터베이스를 매핑하는 퍼시스턴스 프레임워크

퍼시스턴스(persistence, 영속성)란?
프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다. RDBMS 혹은 파일 시스템 등 별도 데이터베이스에 영구적으로 저장하여 데이터가 영속성을 가지는 것을 말한다.

💡MyBatis 특징

복잡한 쿼리나 다이나믹한 쿼리에 강하다. 반대로 비슷한 쿼리는 남발하게 되는 단점이 있다. 프로그램 코드와 SQL 쿼리의 분리로 코드의 간결성 및 유지보수성 향상 resultType, resultClass등 Vo를 사용하지 않고 조회결과를 사용자 정의 DTO, MAP 등으로 맵핑하여 사용 할 수 있다. 빠른 개발이 가능하여 생산성이 향상된다.

  • SQL 실행 결과를 Map 객체에 매핑
  • SQL을 소스 코드가 아닌 XML로 분리하여 작성
  • 데이터 소스 기능과 트랜잭션 처리 기능을 제공

MyBatis 작동원리

  1. SqlSessionFactoryBuilder는 SqlSessionFactory를 생성하기 위한 MyBatis 구성파일을 읽는다.

  2. 클라이언트(개발자)가 응용 프로그램에 대한 프로세스를 요청한다.

  3. Application은 SqlSessionFactoryBuilder를 사용하여 빌드된(build) SqlSessionFactory 에서 SqlSession을 가져온다.(openSession)

  4. Application이 SqlSession에서 Mapper 인터페이스 구현 개체를 가져온다.

  5. Application이 Mapper 인터페이스의 메소드를 호출한다.

  6. Mapper 인터페이스의 구현 객체가 SqlSession 메소드를 호출하고 SQL문 실행을 요청한다.

  7. SqlSession은 Mapping 파일에서 실행할 SQL문을 가져와서 실행한다.

profile
발전하기 위한 공부

0개의 댓글