목록Spring (20)
개발 기록
☞ protype scope : 해당 특정 Bean에 대한 요청이 이루어질 때마다 해당 Bean 의 새 인스턴스를 생성☞ singleton scope : Spring 컨테이너에서 한 번 생성 되며, 컨테이너가 종료 시 해당 bean 제거 싱글톤 Bean이 다른 싱글톤 Bean 을 참조하거나 싱글톤이 아닌 Bean이 다른 싱글톤이 아닌 Bean을 참조하는 경우 일반적으로 하나의 Bean을 다른 Bean의 특성으로 정의하여 종속성을 처리한다. 이 때 Bean 간의 수명주기가 다르면 문제가 발생하는데 예로 들면 싱글톤 Bean A가 프로토타입 Bean B를 사용해야 한다고 가정했을 때이다. 아래에서 살펴보자 1. 프로토 타입 빈 종속성을 갖춘 싱글톤 빈 prototype scope bean 이 single..
■1. 출석체크 서비스에 이벤트, 트랜잭션 분리, 비동기 처리 적용 (1) 서비스 시나리오 ▶단계 / 회차별 출석체크 시 포인트와 스탬프를 제공하는 서비스 ◀ ☞ 단계별 1회차 200P, 2회차 350P, 3회차 450P☞ 단계별 3회차 모두 출석체크 시 스탬프 1개 제공ex. 총 3단계 / 9회차 모두 출석체크 성공시 -> 스탬프 3개 + 3000P ☞ 조건: 출석체크는 단계 시작일자 기준 연속으로 해야한다.ex. (1단계 1회차 시작일: 1/1) => (1단계 2회차 출석체크 1/3) => 결과 : 1단계 실패 (2) 설계 출석체크시 포인트 적립, 스탬프 적립 등을 해야 한다면 아래 코드처럼 짤 수있다 @RequiredArgsConstructor@Service..
■1. 이벤트 동기/비동기 개요 스프링 이벤트는 기본적으로 동기 방식으로 동작한다. 이벤트를 발행하는 스레드와 이벤트를 소비하는 스레드 아이디를 확인하면, 스레드 아이디가 일치하는 것을 확인 할 수 있다. 동기 방식으로 동작하는 것이 중요한 이유는 트랜잭션이 하나의 범위로 묶일 수 있기 때문이다. 만약 이벤트를 발행하는 곳에서 트랜잭션이 시작된 상태라면 이벤트를 구독하는 곳에서도 동일한 트랜잭션을 공유하게 된이벤트를 비동기 방식으로 동작시키는 것은 이벤트 발행를 발행하기 전/후가 더 이상 하나의 트랜잭션으로 묶일 수 없다는 것을 의미하기도 한다. 따라서 정밀하게 트랜잭션을 사용하는 경우라면 이러한 부분을 반드시 염두해두어야 한다. ■2. 이벤트 비동기 처리 방법 이벤트를 비동기로 처리하기 위해서는..
1. 개요 빈 범위를 재정의하여 확장할 수 있지만, 싱글톤 과 프로토타입 빈은 재정의 할 수 없을 뿐더러 일반적으로 범위를 재정의 하는 것은 지양하고 있다. 하지만 추가 기능을 요구하는 상황도 있기 때문에 Spring 2.0 부터는 사용자 정의 Spring Bean 범위를 정의할 수 있을 뿐만 아니라 기존 Spring Bean 범위(싱글톤 및 프로토타입 범위 제외)를 수정할 수도 있다. 1. Custom Scope 구현 빈의 범위는 스레드로 하여. 즉, 각 스레드에 대해 하나의 빈이 사용자 정의 스레드 범위 빈에 따라 생성되도록 해본다.*Spring 3.0에는 SimpleThreadScope 라는 스레드 범위 클래스가 포함되어 있다. (1) Scope 인터페이스 구현scope 인터페이스의 정의..
1. 개념 Bean 이 존재할 수 있는 범위. 기본적으로 스프링의 빈 범위는 싱글톤이다. (1) Spring 기본 스코프 scope설명singleton Spring IoC 컨테이너당 단일 빈 정의에 대해 하나의 인스턴스만 생성되며 해당 빈에 대한 각 요청에 대해 동일한 객체 공유prototype 해당 Bean에 대한 요청이 이루어질 때마다 단일 Bean 정의에 대한 새 인스턴스 생성request 단일 Bean 정의에 대해서 하나의 HTTP request 라이프사이클 안에 단 하나의 객체만 존재한다. - 각각의 HTTP request는 자신만의 객체를 가진다. - 해당 Bean에 대해 HTTP 요청이 이루어질 때마다 단일 Bean 정의에 대한 새 인스턴스가 생성session 단일 Bean 정의에 대해..
환경java 17spring version 6.0.11 spring boot version 3.1.3 ■1. 개념 이벤트는 트리거가 작동하면 시작되는 동작 혹은 사건을 말한다. 예를 들어서 영상을 업로드 시, 구독자에게 메일과 알림을 발송하는 서비스를 만든다고 생각해보자.아래 코드를 보면 영상을 업로드 하는 기능에, 메일발송기능, 알람발송기능이 결합된 것을 볼 수 있다. @Service@Requiredargsconstructorpublic class VideoService { private final VideoRepository videoRepository; private final EmailService emailService; private final NotieServ..
ThreadLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함→ ThreadLocal: Thread마다 할당된 고유 공간( Thread 공유X) ->다른 Thread로부터 안전하다.인증이 완료되면 HttpSession에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다. ■1. 전체 흐름 ☞ 1 사용자가 Request 요청 ☞ 2 SecurityContextHolderFilter 수행 ☞ 2-1 HttpSecurityContextRepository.loadDeferredContext() 실행 ※ HttpSecurityContextRepository: SecurityContext 객체를 생성, 조회 하는 역할을 하는 클래스 ☞ 2-1 HttpSecurityHolderStrategy..
1. 캐시(Cache) : 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.2. 캐싱(Caching) : 이전에 처리(검색/계산) 되었던 데이터를 효과적으로 재사용하는 기법3. CacheManager : Ehcache/Redis/Memcached [1] Ehcache 개념 ㉮ Spring 에서 사용할 수 있는 Java 기반 오픈소스 로컬 캐시라이브러리 ㉯ javax.cache API (JSR-107 : 자바의 표준 캐시 스펙이자 java 객체의 메모리 캐싱에서 사용할 API에 대한 기준) ㉰ key-value 형태로 데이터를 저장한다. ㉱ EhCache VS Redis : Redis 와 달리 Spring 내부적으로 동작하여 네트워크 지연 혹은 단절같은 이슈에서 자유롭다.㉲ ..