<스프링 DAO와 JDBC 그리고 트랜잭션>
1. DAO
DAO : 데이터베이스에 접근하는 로직을 비즈니스와 별도로 분리 - SQL 실행, 예외처리 등을 분리하여 수행 -> 재사용성, 유지보수성을 위해
스프링 DAO의 필요성 : 코드 간소화, 예외처리 개선, 테스트 용이성
코드 간소화 : 스프링 DAO는 반복적인 JDBC 코드를 줄여줌 : 개발자가 핵심 비즈니스 로직에 집중 가능하도록
테스트 용이성 : 의존성 주입을 통해 DAO를 쉽게 모의 객체로 대체 가능 - 단위 테스트 용이
2. JDBC
JDBC 템플릿 : 템플릿 메서드 패턴(메소드의 구조를 정의하고, 일부 단계를 하위 클래스에서 구현)을 구현 / 콜백 사용 / 배치 작업 지원(batchUpdate)
JDBC 템플릿 사용법 : 의존성 추가 -> DataSource 설정(빈 정의 -> 연결 풀 설정 -. 프로퍼티 외부화) -> JdbcTemplate 설정 (DataSource 를 이용해 Jdbc 템플릿 객체 생성)
JDBC 템플릿 장점 : 자원관리 자동화(템플릿이 자원 연결 닫기,열기를 관리해줌), 예외 변환, 코드 간소화
JPA VS JDBC
JPA : 객체지향 데이터 모델링 및 영속성 관리를 제공하는 표준 API - 복잡한 SQL 쿼리 작성 자동화
JDBC : 데이터베이스와 직접 통신하는 JAVA API - SQL 쿼리 직접 작성하고 실행해야 하며, 개발자가 데이터베이스 관련 코드 직접 관리해야
3. 트랜잭션
트랜잭션의 개념 - DB에서 하나의 논리적 작업 단위
1) 원자성 : 트랜잭션의 모든 연산이 성공하거나 모두 실패해야
2) 일관성 : 트랜잭션 전후로 DB가 일관된 상태를 유지해야 하며 데이터 무결성을 보장해야
3) 격리성 : 동시에 실행되는 트랜잭션들이 서로 영향 주지 않게 해야(동시성 문제 방지)
4) 지속성 : 성공적으로 완료된 트랜잭션의 결과가 영구적으로 반영되어야
트랜잭션 관리의 중요성 - 데이터 일관성, 에러 복구, 동시성 제어
선언적 트랜잭션 관리 : 트랜잭션 관리자 설정(DataSourceTransactionManager 빈을 정의) -> @EnableTransactionManagement(설정 클래스에 이 어노테이션 추가해서 선언적 트랜잭션 관리 활성화) -> @Transactional 사용(트랜잭션이 필요한 메소드나 클래스에 이 어노테이션 사용)
트랜잭션 전파 : 어떤 트랜잭션이 동작중인 와중에, 다른 트랜잭션을 실행할 경우 어떻게 처리하는가에 대한 개념
트랜잭션 전파 속성
1) REQUIRED : 기존 트랜잭션이 있으면 참여하고, 없으면 새로 생성(가장 흔히 사용되는 기본 설정)
2) REQUIRES_NEW : 항상 새로운 트랜잭션을 시작(기존 트랜잭션은 일시중단)
3) NESTED : 기존 트랜잭션 내에서 중첩 트랜잭션 실행
4) SUPPORTS : 트랜잭션이 있으면 참여, 없어도 비트랜잭션으로 실행
'dev > 백엔드' 카테고리의 다른 글
스프링 스터디 4주차 (1) | 2024.11.10 |
---|---|
스프링 스터디 3주차 (0) | 2024.11.03 |
gdg on campus ewha - Spring WIL 4주차 (0) | 2024.10.06 |
스프링 스터디 2주차 (0) | 2024.10.05 |
스프링 스터디 1주차 (0) | 2024.10.04 |