MyBatis
본문 바로가기
programming/Java

MyBatis

by 코딩하는 핑가 2024. 1. 16.
반응형
  • PreparedStatement
    • JDBC API에서 제공하는 인터페이스 중 하나
    • SQL문을 데이터베이스에 전송하기 전에 미리 컴파일하여 성능을 향상시키는데 사용됨
    • 주요 특징 및 메서드
      • 컴파일 및 재사용:
        • PreparedStatement는 SQL 문을 미리 컴파일하여 데이터베이스에 전송되기 전에 실행 계획을 생성하고 이렇게 함으로써 동일한 SQL 문이 여러 번 실행될 때 성능을 향상시킴
      • 파라미터 바인딩:
        • 동적인 값을 가지는 파라미터를 SQL 문에 바인딩할 수 있으며 이를 통해 SQL 쿼리의 일반화 및 재사용성을 높일 수 있음
      • SQL 인젝션 방지:
        • PreparedStatement를 사용하면 SQL 인젝션 공격으로부터 보호받을 수 있으며 사용자 입력값을 안전하게 쿼리에 삽입할 수 있도록 도와줌
      • Batch 처리:
        • 여러 개의 SQL 문을 한 번에 실행할 수 있는 배치 처리 기능을 지원
  • SqlSession
    • 해당 인터페이스를 통해 SQL 쿼리를 실행하고 결과를 가져올 수 있음
    • SQL 실행을 위해 Exeutor를 사용
    • Exeutor:
      • SQL을 실행하고 결과를 처리하는 역할
      • Xml, java 파일을 통해 Type을 지정할 수 있음
        • <configuration>
              <environments default="development">
                  <environment id="development">
                      <transactionManager type="JDBC"/>
                      <dataSource type="POOLED"/>
                      <!-- executorType을 지정하여 사용할 Executor를 설정 -->
                      <defaultExecutorType value="REUSE"/>
                  </environment>
              </environments>
          </configuration>
        • String resource = "mybatis-config.xml";
          InputStream inputStream = Resources.getResourceAsStream(resource);
          SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "development");
          SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.REUSE);
      • SimpleExecutor:
        • 각 SQL 문을 실행할 때마다 새로운 PreparedStatement를 생성
        • 쿼리마다 새로운 연결을 생성하므로 간단하지만 성능 측면에서는 비효율적일 수 있음
      • ReuseExecutor:
        • 이전에 생성한 PreparedStatement를 재사용
        • 동일한 쿼리를 여러 번 실행할 때 성능을 향상시킬 수 있음
        • 하지만, 트랜잭션 범위에서 커밋되기 전에 PreparedStatement를 재사용하므로 주의가 필요
      • BatchExecutor:
        • 배치 작업을 수행할 때 사용
        • 여러 개의 SQL 문을 한 번에 실행할 수 있어 효율적인 배치 작업을 지원
      • CachingExecutor:
        • 실행된 SQL 문과 그 결과를 캐싱하여 성능을 향상시키는 역할을 함
        • 내부적으로 실제 Executor를 감싸고 있어서 캐싱 기능을 추가로 제공함
        • 기본적으로 CachingExecutorSimpleExecutor를 감싸서 사용하며, SimpleExecutor는 각각의 SQL 문에 대해 새로운 PreparedStatement를 생성하여 실행
        • 이 결과를 캐싱하여 같은 SQL문이 여러 번 실행될 때 중복된 작업을 최소화하여 성능을 향상시킴
  • session configuration - org.apache.ibatis.session.Configuration
    • Mybatis의 전반적인 동작을 제어하고 설정하는데 사용
    • 역할 및 속성
      • Mapper 등록:
        • Configuration은 MyBatis에서 사용할 Mapper 인터페이스를 등록하는데 사용
        • XML 기반의 Mapper 파일이나 Java 어노테이션을 통해 Mapper를 등록할 때 Configuration이 관리
      • Type Aliases 및 Type Handlers 등록:
        • 자바 데이터 타입에 대한 별칭(Type Aliases)과 타입 변환을 담당하는 Type Handler 등을 등록
      • 캐시 설정:
        • SQL 실행 결과의 캐싱을 관리
        • MyBatis는 실행 결과를 캐시하여 동일한 SQL을 반복 실행할 때 성능을 향상시킬 수 있음
        • Configuration은 캐시에 대한 전반적인 설정을 담당
      • 전역 설정 및 환경 설정:
        • MyBatis의 전역적인 설정, 데이터 소스에 대한 설정, 트랜잭션 관리 등을 Configuration이 관리
      • Executor 설정:
        • SQL을 실행하는데 사용되는 Executor의 설정을 관리
        • Executor는 SQL을 어떻게 실행할지를 결정하는 핵심 컴포넌트
      • 구성 파일(MyBatis XML 파일) 파싱:
        • MyBatis의 구성 파일을 읽고 파싱하여 Configuration 객체를 초기화
      • 환경(Environment) 설정:
        • 데이터베이스 연결, 트랜잭션 관리 등과 관련된 환경 설정을 다룸

  • 캐시
    • 데이터나 값을 미리 복사해놓는 임시 장소
    • 자주 사용되는 동일한 데이터 혹은 잘 변하지 않는 데이터를 메모리에 올려놓고 데이터가 필요한 순간 메모리에 올려놓은 데이터를 다시 사용함으로써 원래 데이터에 접근하는 시간을 절약할 때 사용
    • 쿼리 조회 결과를 캐싱하고 같은 쿼리 조회를 반복하게 될 때 DB에 요청을 안날리고 캐시에서 값을 꺼내서 리턴하는 기능을 제공
    • 캐시에 넣을 때는 무조건 넣는게 아니고, 트랜잭션 단위로 묶어서 한꺼번에 캐시에 넣거나 넣지 않거나가 가능 (TransactionalCache)
  • session Configuration
    • CacheEnable:
      • true : CachingExecutor 사용
      • false : 그냥 Executor 사용 (SimpleExecutor 같은 거)
  • Local cache
    • 별도로 설정하지 않아도 항상 켜져있는 캐시
    • 적용 범위만 조정 가능
반응형

댓글