[Spring DB] 스프링의 트랜잭션 추상화 – 트랜잭션 매니저, 동기화 매니저, 트랜잭션 템플릿, @Transactional
🧩 순수한 서비스 계층의 중요성과 문제점 애플리케이션을 설계할 때 일반적으로는 역할에 따라 세 가지 계층으로 나눈다.프레젠테이션 계층 (Controller)역할: UI 처리, 웹 요청 검증 및 응답사용 기술: 서블릿, 스프링 MVC서비스 계층 (Service) 역할: 비즈니스 로직 처리사용 기술: 특정 기술에 의존하지 않은 순수 자바 코드데이터 접근 계층 (Repository)역할: 데이터베이스 접근사용 기술: JDBC, JPA, File, Redis ⚠️ 이 구조에서 가장 중요한 것은 서비스 계층의 순수성을 유지하는 것이다.즉, 서비스 계층은 특정 기술(예: JDBC, JPA)에 종속되지 않고 순수 자바 코드로 작성되어,데이터 저장 기술이 바뀌거나 UI가 변경되어도 비즈니스 로직은 영향을 받지 않아야..
[Spring DB] 애플리케이션에 트랜잭션 적용 – 세션, 락, 자동 커밋, 커넥션 동기화
🧩 데이터베이스 세션(Session)과 락(Lock) 클라이언트가 데이터베이스 서버와 커넥션을 맺으면, 데이터베이스 서버는 내부에 해당 커넥션만을 위한 세션(Session)을 만든다.앞으로 해당 커넥션을 통한 모든 요청(트랜잭션 시작, SQL 실행, 커밋, 롤백 등)은 이 세션을 통해 이루어진다.사용자 → 클라이언트 (WAS, MySQL 워크벤치 등) → { 커넥션 } → 데이터베이스 서버 (세션)사용자가 클라이언트를 통해 SQL을 전달하면, 해당 커넥션에 연결된 세션이 실행한다.커넥션은 오로지 하나의 세션과 연결된다. (커넥션이 10개면 세션도 10개)세션 안에서 트랜잭션을 시작하고, SQL을 실행하고, 커밋 또는 롤백을 하고, 트랜잭션을 종료한다.클라이언트가 커넥션을 닫으면, 데이터베이스..