반응형
- 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를 감싸고 있어서 캐싱 기능을 추가로 제공함
- 기본적으로 CachingExecutor는 SimpleExecutor를 감싸서 사용하며, 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) 설정:
- 데이터베이스 연결, 트랜잭션 관리 등과 관련된 환경 설정을 다룸
- Mapper 등록:
- 캐시
- 데이터나 값을 미리 복사해놓는 임시 장소
- 자주 사용되는 동일한 데이터 혹은 잘 변하지 않는 데이터를 메모리에 올려놓고 데이터가 필요한 순간 메모리에 올려놓은 데이터를 다시 사용함으로써 원래 데이터에 접근하는 시간을 절약할 때 사용
- 쿼리 조회 결과를 캐싱하고 같은 쿼리 조회를 반복하게 될 때 DB에 요청을 안날리고 캐시에서 값을 꺼내서 리턴하는 기능을 제공
- 캐시에 넣을 때는 무조건 넣는게 아니고, 트랜잭션 단위로 묶어서 한꺼번에 캐시에 넣거나 넣지 않거나가 가능 (TransactionalCache)
- session Configuration
- CacheEnable:
- true : CachingExecutor 사용
- false : 그냥 Executor 사용 (SimpleExecutor 같은 거)
- CacheEnable:
- Local cache
- 별도로 설정하지 않아도 항상 켜져있는 캐시
- 적용 범위만 조정 가능
반응형
'programming > Java' 카테고리의 다른 글
JAVA) MyBatis와 JPA의 차이 (1) | 2021.10.05 |
---|---|
JAVA) Object 클래스 - clone 메소드 (0) | 2021.01.25 |
JAVA) JNDI DB 연결 소스코드 (0) | 2021.01.06 |
JAVA) JDBC 동작 순서 및 DB 연결( 소스코드 포함 ) - 최종 (0) | 2021.01.06 |
JAVA) JDBC, DBCP, JNDI 차이점 (1) | 2020.12.31 |
댓글