본문 바로가기
728x90

Programming/Spring25

OSIV 해결하기 문제점 Constroller에서 Lazy Loading이 실패하고 no Session 에러 발생 문제진단 현재 open in view 옵션은 기본값인 true이다 즉, 원래라면 open in view가 동작하는 것이 맞다 하지만 실제로 영속석 컨텍스트가 열리는 곳은 @Transactional 어노테이션이 붙은 곳 부터 시작한다 1. 컨트롤러 시작 2. 영속성 컨텍스트(=세션) 오픈 3. 트랜잭션 시작 4. 서비스 진입 5. 서비스 반환 전 6. 영속성 컨텍스트(=세션) 닫음 7. 컨트롤러 재진입 a.a.b.d.conversion.InspectionFeedbackController [findByInspector] - =====>> 검수 컨트롤러 시작 org.hibernate.internal.SessionI.. 2022. 1. 26.
[리액티브 프로그래밍] WebFlux의 동시성 Thread per request 모델 스레드 하나당 하나의 요청을 처리 멀티 코어 환경에서 여러개의 스레드가 여러개의 요청을 처리할 수 있다 단점 하지만 하나의 요청(스레드)이 한시간 짜리 IO를 만나게 되면 여전히 block된다. 자바에서 사용하는 native 스레드는 context switching(스레드간 스위칭)할 때 비용이 매우 크다 요청이 많아지게되면 thread per model을 효율적이지 않다. Reactive Programming 모델 data flow(데이터 흐름)와 propagation(전파)를 사용한다 완전한 non blocking 환경을 보장한다 기존의 방법과 다른 스레드 사용법을 이용한다 데이터베이스에게 read 요청을 보내면, 데이터를 가져오는 동안 스레드를 block하지 .. 2021. 3. 25.
[리액티브 프로그래밍] Reactor 3 살펴보기 Publisher 생성 @DisplayName("Flux와 Mono를 생성한다") @Test void create() { Flux flux1 = Flux.just("foo", "bar", "foobar"); Flux flux2 = Flux.fromIterable(Arrays.asList("foo", "bar", "foobar")); Flux flux3 = Flux.range(5, 3); // 5, 6, 7 Mono mono1 = Mono.empty(); // empty여도 타입을 가진다 Mono mono2 = Mono.just("foo"); } Subscriber를 Subscribe /** * lambda interface (consumer)를 사용하여 subscriber를 subscribe한다 */ @.. 2021. 3. 23.
[리액티브 프로그래밍] Publisher, Subscriber 그리고 Subscription - 2 Publisher, Operator, Subscriber의 용어가 익숙하지 않다면 이전 글인 [리액티브 프로그래밍] Publisher와 Subscriber 을 참고하시기 바랍니다. Publisher(생산자)가 Subscriber(소비자)를 subscribe(등록)한다. 동시에 Subscriber(소비자)가 Subscription(전달자)을 onSubscribe(등록)한다 Subscriber(소비자)는 필요할 때 Subscribe(전달자).request(요청)을 통해 Publisher에게 데이터를 요청한다. Publisher(생산자)는 요청을 받으면 생성한 데이터를 보낸다 Subscriber는 onNext로 데이터를 받는다. 모든 요청이 성공적으로 완료되면 onComplete을 호출하고 흐름을 종료한다. .. 2021. 3. 18.
[리액티브 프로그래밍] Publisher와 Subscriber - 1 Publisher 생산자 데이터를 생산 생산된 데이터를 소비할 소비자(Subscriber)가 등록(subscribe)될 때까지 아무일도 일어나지 않는다. (매우중요) Operator 체인 연산자 연산자(Operator)는 새로운 생산자(Publisher)를 반환한다 Subscriber 소비자 데이터를 소비 데이터 가지고 무엇을 할 건지 결정 예제 Flux flux = Flux.range(1, 10); flux.subscribe(number -> System.out.println(number)); 예제를 설명하기 앞서 먼저 용어를 정리하면 다음과 같다. Publisher = Flux = 생산자 = 데이터를 생산 Operator = range = 연산자 = Publisher를 반환 Subscriber = S.. 2021. 3. 17.
[QueryDsl] Can not find symbol 에러 해결 회사에서 QueryDSL을 사용하고 있는데 몇일전부터 위의 Can not find symbol에러가 나왔다. 언제쯤부터인지는 모르겠으나 새로 빌드를 할 때 위의 에러가 나왔는데 한번 살펴보려고 한다 1. Can not find symbol은 무슨 뜻이지? 먼저 Can not find symbol에서 symbol의 의미를 알아야 문제를 해결할 수 있을 것 같았다. Can not find symbol의 의미는 컴파일 단계에서 컴파일러가 symbol을 이해하지 못할 때 발생한다. 여기서 symbol은 보통 우리가 선언한 변수 등을 가르킨다. 예를들어 아래와 같은 코드가 있을 때, message라는 변수의 타입을 지정하지 않으면 컴파일 단계에서 Can not find Symbol에러가 발생한다. class Ma.. 2021. 3. 15.
728x90