[Advanced-4] JdbcTemplate
·
Spring/DB
0. 한 눈에 보는 JdbcTemplate 핵심 요약 기술 명칭 핵심 특징 실무 활용 포인트 JdbcTemplate기본 SQL 실행기, 반복 코드 제거단순한 Native SQL 실행 시 사용NamedParameter...이름 기반 파라미터 바인딩실무 표준. 파라미터 순서 버그 방지 (권장)SimpleJdbcInsertINSERT 쿼리 자동 생성SQL 직접 작성 없이 저장할 때 편리RowMapperDB 결과(ResultSet) → 객체 변환조회 결과를 DTO나 엔티티로 바꿀 때 사용1. JdbcTemplate 소개와 설정SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate은 아주 좋은 선택지이다. JdbcTemplate은 JDBC를 매우 편리하게 사용할 수 있게 도와준다.1.1. ..
[Advanced-3] 트랜잭션 전파(2): 활용
·
Spring/DB
1. 트랜잭션 전파 활용1 - 예제 프로젝트 시작1.1. 비즈니스 요구사항회원을 등록하고 조회한다회원에 대한 변경 이력을 추적할 수 있도록 회원 데이터가 변경될 때 변경 이력을 DB LOG 테이블에 남겨야 한다여기서는 예제를 단순화 하기 위해 회원 등록시에만 DB LOG 테이블에 남긴다1.2. 엔티티와 리포지토리Member 엔티티package hello.springtx.propagation;import lombok.Getter;import lombok.Setter;import javax.persistence.*;@Entity@Getter @Setterpublic class Member { @Id @GeneratedValue private Long id; private String u..
[Advanced-2] 트랜잭션 전파(1): 기본
·
Spring/DB
트랜잭션이 둘 이상 있을 때 어떻게 동작하는지 자세히 알아보고, 스프링이 제공하는 트랜잭션 전파(propagation)라는 개념도 알아본다. 트랜잭션 전파를 이해하는 과정을 통해서 스프링 트랜잭션의 동작 원리도 더 깊이있게 이해할 수 있다. 먼저 간단한 스프링 트랜잭션 코드를 통해 기본 원리를 학습하고, 이후에 실제 예제를 통해 어떻게 활용하는지 알아본다.1. 스프링 트랜잭션 전파1 - 커밋, 롤백간단한 예제 코드로 스프링 트랜잭션을 실행해본다.1.1. BasicTxTestpackage hello.springtx.propagation;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import org.springframework.be..
[Advanced-1] 예외와 트랜잭션 커밋, 롤백
·
Spring/DB
서론: 이전 학습과의 차별점지금까지 스프링 트랜잭션의 기본적인 사용법과 예외 처리의 기초를 다뤘다. @Transactional 애노테이션을 사용하는 방법, 체크 예외와 언체크 예외의 차이, 예외 전환과 추상화, JdbcTemplate을 통한 반복 코드 제거 등을 배웠다.이번 글에서는 그 기초 지식을 바탕으로 더 깊이 있는 주제를 다룬다. 예외가 발생했을 때 트랜잭션이 실제로 어떻게 동작하는지, 스프링이 예외 종류에 따라 자동으로 커밋과 롤백을 결정하는 원리, 그리고 실무에서 마주치는 다양한 예외 상황에 대한 처리 전략을 심층적으로 살펴본다.이전 내용과의 가장 큰 차별점은 트랜잭션의 '자동' 동작 메커니즘을 이해하는 것이다. 단순히 @Transactional을 붙이는 수준을 넘어, 예외 발생 시 실제로 어..
[Basic-6] 스프링과 문제 해결 - 예외 처리, 반복
·
Spring/DB
1. 체크 예외와 인터페이스1.1. 서비스 계층의 순수성 유지 필요성서비스 계층은 비즈니스 로직을 담당하는 핵심 계층으로, 가능한 한 특정 구현 기술에 의존하지 않고 순수하게 유지해야 한다. 이전까지 해결한 트랜잭션 문제와 더불어, 예외 처리에 대한 의존성도 해결해야 완전한 순수성을 달성할 수 있다.현재 문제 상황:public class MemberServiceV3_3 { @Transactional public void accountTransfer(String fromId, String toId, int money) throws SQLException { // ❌ SQLException에 의존 bizLogic(fromId, toId, money); }}서..
[Basic-5] 자바 예외 이해
·
Spring/DB
1. 예외 계층 구조1.1. 예외 계층도 이해하기자바의 예외는 객체지향적 계층 구조를 가지고 있다. 이 구조를 이해하는 것이 예외 처리를 효과적으로 하는 첫걸음이다.계층 구조 상세 설명1. Object모든 자바 객체의 최상위 클래스예외도 객체이므로 Object를 상속받음2. Throwable예외와 오류의 최상위 클래스getMessage(), printStackTrace() 같은 공통 메서드 제공하위에 Error와 Exception 두 가지 주요 카테고리 존재3. Error시스템 수준의 심각한 오류애플리케이션에서 복구 불가능개발자가 잡아서 처리하면 안됨예시: OutOfMemoryError, StackOverflowError, VirtualMachineError// Error 예시 - 처리하면 안됨!publ..
[Basic-4] 스프링과 문제 해결 - 트랜잭션
·
Spring/DB
서론 데이터베이스 트랜잭션은 현대 애플리케이션 개발에서 핵심적인 개념이다. 여러 데이터베이스 작업을 하나의 논리적 단위로 묶어서, 모두 성공하거나 모두 실패하도록 보장하는 기능이다. 그러나 실제로 트랜잭션을 제대로 구현하고 관리하는 것은 생각보다 복잡한 문제를 내포하고 있다. 이 글에서는 순수 JDBC를 사용할 때 발생하는 트랜잭션 관련 문제점들을 살펴보고, 스프링이 어떻게 이러한 문제들을 우아하게 해결하는지 단계별로 탐구해본다. 처음 스프링을 접하는 개발자도 이해할 수 있도록 매우 자세히 설명하겠다.1. 애플리케이션 구조와 문제점들1.1. 계층형 아키텍처의 중요성대부분의 현대 애플리케이션은 관심사의 분리(Seperation of Concerns) 원칙에 따라 계층형 구조로 설계된다. 가장 일반적인 3계..
[Basic-3] 트랜잭션 이해
·
Spring/DB
1. 트랜잭션이란? [Lock-1][Optimization] 트랜잭션의 정의와 ACID 원칙1. 들어가며: 왜 Lock을 배우기 전에 트랜잭션을 알아야 하는가? 데이터베이스에서 Lock(잠금)은 특정 자원에 대해 여러 요청이 동시에 들어올 때 데이터의 일관성을 지키기 위한 장치이다. 하지만receiver40.tistory.com 2. Lock이란? [Lock-3][Optimization] Lock: 격리성 수준(Isolation Level) 심층 분석 및 실습1. 들어가며: 격리 수준은 왜 필요한가? 이전 포스팅에서 다중 트랜잭션 환경에서 데이터베이스의 가장 큰 숙제는 데이터의 정합성(Consistency) 유지와 시스템 성능(Performance)의 최적화 사이에서 균receiver40.tistory...