dev/백엔드

gdg on campus ewha - Spring WIL 6주차

wosrn 2024. 11. 17. 11:42

<스프링 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