🔹 Bean 등록과 조회 규칙[ Bean 등록 ]Spring은 기본적으로 메서드/클래스의 이름을 Bean의 이름으로 사용한다.@Beanpublic DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy();}@Beanpublic DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy();} 개발자가 직접 빈의 이름을 지정할 수도 있다.@Bean("fixDiscountPolicy")public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy();}@Bean("rateDiscountPolicy"..
🔹 Bean Scope스프링에서 빈은 기본적으로 싱글톤 스코프로 생성된다.특정 타입의 빈을 하나만 만들어 두고 공유해서 사용하기 위함인데, 이러한 이유로 빈에 상태를 저장하는 코드를 작성하는 것은 동시성 문제를 유발하여 위험한 상황을 초래할 수 있다.하지만 요구사항과 구현 기능 등의 필요에 따라 비싱글톤이 필요한 경우도 많다. 그리고 이를 명시적으로 구분하기 위해 Scope라는 키워드를 제공한다. 🔹 Scope 종류1. 싱글톤스프링 프레임워크에서 기본이 되는 스코프스프링 컨테이너의 시작과 종료까지 한 개의 객체로 유지된다.가장 넓은 범위의 스코프이다.2. 프로토타입프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프요청이 들어오면 항상 새로운 인스턴스를 생..
🔹 Spring Transaction의 세부 설정Spring에서 @Transactional 세부 설정할 때, 지원하는 주요 속성은 다음과 같다.전파 속성 (Propagation)격리 수준 (Isolation Level)읽기 전용 여부 (Read-Only Flag)제한 시간 (Timeout)트랜잭션 롤백 예외 설정 (Rollback For, No Rollback For) [ 전파 속성 (Propagation) ]Spring이 제공하는 선언적 트랜잭션(@Transactional)의 장점 중 하나는 여러 트랜잭션의 적용 범위를 하나로 묶어, 큰 트랜잭션 경계를 만들 수 있다는 점이다.트랜잭션이 어떻게 동작할지 결정하려면 전파 속성 (Propagation)을 설정해야 하며, 이를 통해 새로운 트랜잭션을 시작할..
🔹 Transaction[ 트랜잭션(Transaction)의 필요성 ]데이터베이스에서 데이터를 수정하는 과정에서 예외가 발생하면, 데이터가 불완전한 상태로 남지 않도록 수정 이전의 상태로 되돌린 후, 다시 수정 작업이 이루어져야 한다. 이렇게 여러 작업을 수행하다 문제가 발생했을 때, 이전 상태로 되돌리는 롤백(Rollback) 기능을 제공하는 것이 트랜잭션(Transaction)이다. 트랜잭션은 하나의 논리적인 작업 단위로, 반드시 Commit(커밋) 또는 Rollback(롤백)으로 마무리되어야 한다. 즉, 트랜잭션이 정상적으로 완료되면 커밋을 수행하여 변경 사항을 확정하고, 도중에 오류가 발생하면 롤백을 수행하여 변경 사항을 취소한다.예를 들어, 새로운 데이터를 추가하는 도중에 문제가 생긴다면, 해..
🔹 Transaction이란 ?[ Transaction 탄생 배경 ]복잡한 프로그램을 개발하다 보면 쿼리 한 줄로 해결할 수 없는 로직을 처리해야 하는 경우가 많다.여러 개의 쿼리가 처리되는 상황에서 문제가 생겨버린다면 시스템에 큰 결함을 남기게 된다. 예를 들어, 쇼핑몰 서비스를 구현할 때, 아래와 같은 로직은 한 줄로 처리하는 것이 불가능하다. 먼저 쇼핑몰에서 상품을 구매할 때, 회원의 잔여 금액이 충분한지 확인하고 잔여 금액이 상품 가격보다 높을 때 구매 로직으로 넘어가야 한다. 그리고 상품의 재고가 있는지 확인 후에 회원의 잔여 금액에서 상품 금액만큼 감소시키고 로직을 종료해야 한다. 그런데 선택 상품 구매 단계에서 Exception()이 발생하여 상품이 없음에도 불구하고 상품이 있다고 판단하거..