-
비동기 처리의 스레드와 일반 스레드Java 2024. 7. 23. 23:43
1. 개발을 하다가 아래와 같은 궁금증이 생겼다.CompletableFuture를 비동기 처리할 때는 ForkJoinPool의 스레드를 공유해서 사용한다는 특징이 있다. (물론, 스레드 미지정시 기본적으로 자바에서 제공해주는 ForkJoinPool을 사용)그렇다면, 클라이언트에서 요청을 보냈을 때 할당해주는 스레드와 ForkjoinPool은 무엇이 다를까? 2. 기본적으로 클라이언트에서 요청을 보냈을 때, 톰캣에서 생성하는 스레드 풀이 할당된다.아래의 그림과 같이 http-nio-8080-exec-4,5,main 라고 명시돼 있는 부분이 톰캣에서 생성하는 스레드 풀이다.별도의 설정값 없이 실행을 하니, 10개의 스레드 풀이 생성된 것을 확인할 수 있고 설정된 값보다 더 많은 스레드가 필요시 되면, MAX..
-
컨테이너로 Hello World 실행하기IT 서적/도커 교과서 2024. 7. 22. 22:30
1. 도커 파일 및 실습용 파일을 설치한 이후에 맥의 터미널 환경에서 아래 명령어를 실행해본다.docker container run diamol/ch02-hello-diamol이름이 diamol/ch02-hello-diamol인 도커 애플리케이션 패키지를 내려받고 컨테이너로 애플리케이션을 실행해 메시지를 출력한다.docker container run 명령은 컨테이너로 애플리케이션을 실행하라는 도커 명령이다.이 컨테이너 패키지(도커에서는 이를 '이미지'라고 한다.)의 이름은 diamol/ch02-hello-diamol 이다. 그리고 지금 입력한 명령이 이미지를 이용해 컨테이너를 실행하는 도커 명령이다. 2. 위의 과정을 토대로 도커의 워크플로의 핵심을 볼 수 있다.애플리케이션을 컨테이너에서 실행할 수 있..
-
Caffeine Cache 적용기Java 2024. 7. 3. 22:24
Caffeine Cache 적용 방법 - 왜 사용할까?자주 빈번하게 조회되는 데이터를 DB에 접근하여 가져오게 되면 DB의 리소스가 낭비가 될 확률이 높다.그래서 자주 그리고 변경이 적은 데이터를 DB에서 계속 접근하여 가져오는 것이 아니라 캐시와 같은 저장소에 저장해두고 사용하여 성능의 이점을 위해 사용한다. 1. Dependencyimplementation group: 'com.github.ben-manes.caffeine', name: 'caffeine', version: '3.1.8'2. 캐시 사용하기 - 3가지 전략Manual Populating캐시에 수동으로 데이터를 적재하고, 사용하는 방법결과 ==> Person{name='테스트', age=33, weight='76kg', height='1..
-
Transactional - noRollbackFor 옵션 이슈에러 히스토리 2024. 6. 14. 20:43
# noRollbackFor 동작 이슈 - DB는 postgreSql를 사용 - 아무리 롤백과 특정 예외일 경우에는 롤백이 안되게끔 테스트를 수행해도 동작하지 않음. - current transaction is aborted commands ignored until end of transaction block 발생 - postgreSql은 기본적으로 현재의 트랜잭션에서 에러가 발생한 쿼리가 존재할 경우, 다음 쿼리를 수행할 때 잘못된 쿼리를 가지고 있는 트랜잭션으로 인식하고 에러를 발생시킴.
-
MyBatis와 JPA 함께 사용할 때 설정Spring Boot/JPA 2024. 6. 14. 20:38
# Configuration 등록아래와 같이 @Configurateion에 @Bean으로 등록해서 함께 사용 가능하다. package com.bookMngr.common.config.mybatis;import lombok.RequiredArgsConstructor;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.type.JdbcType;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.SqlSessionTemplate;import org.mybatis.spring.annotation.MapperScan;import org.springfr..
-
메소드 레퍼런스(Method Reference)Java 2024. 4. 27. 17:30
1. 메소드 레퍼런스란?메서드 표현식을 조금 간결하게 사용하는 기술예시 : (Car car) -> car.getCarName() 이 표현식을 Car::getCarName로 표현할 수 있다. 2. 대표 유형1) ClassName :: static method 유형예시코드cryptoCurrencies.stream() .map(r -> StringUtils.uppercase(r)) .map(StringUtils::upperCase) 2) ClassName :: instance method 유형예시코드cryptoCurrencies.stream() .map(r -> r.uppercase(r)) .map(St..
-
Mac에서 Mysql 설치시 오류 발생에러 히스토리 2024. 3. 18. 21:55
# 에러 내용 ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/gimseonghun-yeongiui-MacBookAir.local.pid). # 해결방법 해당 디렉토리 경로에 대한 권한이 없는 문제로 판단돼 'sudo chmod 777 [디렉토리]'에 권한을 부여하여 해도 안됐었다. 결국 아래와 같은 방법으로 해결! 아래 명령어를 실행한다. sudo chown -R _mysql:_mysql mysql sudo chmod 777 /usr/local/var/mysql brew uninstall mysql 명령어를 실행한다. PC를 껏다가 다시 킨다. brew install mysql을 실행한다. 아래와 같이 'mysql.se..
-
Cold Sequence와 Hot SequenceIT 서적/스프링으로 시작하는 리액티브 프로그래밍 2024. 2. 24. 14:11
Cold Sequence Seuqnece는 Publisher가 emit하는 데이터의 연속적인 흐름을 정의해 놓은 것으로 코드로 표현하면 Operator 체인 형태로 정의됩니다. Cold Sequence는 Subscribe가 구독할 때마다 데이터 흐름이 처음부터 다시 시작되는 Sequence입니다. 즉, Subsriber의 구독 시점이 달라도 구독을 할 때마다 Publisher가 데이터를 emit하는 과정을 처음부터 다시 시작하는 데이터의 흐름을 Cold Sequence라고 부릅니다. public static void main(String[] args) throws InterruptedException { Flux coldFlux = Flux.fromIterable(Arrays.asList("KOREA",..
-
Reactor 개요IT 서적/스프링으로 시작하는 리액티브 프로그래밍 2024. 2. 20. 20:22
Reactor란? 리액티브 스트림즈의 구현체로 리액티브 프로그래밍을 위한 라이브러리이다. 세부 구성요소 Flux: Publisher의 두 가지 타입 중 하나이다. Flux[N]은 N개의 데이터를 emit한다는 것을 의미한다. Mono[0|1]: Mono 역시 Reactor에서 지원하는 Publisher 타입인데, Mono가 데이터를 한 건도 emit하지 않거나 단 한 건만 emit하는 단발성 데이터 emit에 특화된 publisher이기 때문이다. Backpressure-ready network: Reactor는 Publisher로부터 전달받은 데이터를 처리하는 데 있어 과부하가 걸리지 않도록 제어하는 BackPressuer를 지원한다. Flux 예시 소스 @SpringBootApplication pub..
-
리액티브 스트림즈(Reactive Streams)IT 서적/스프링으로 시작하는 리액티브 프로그래밍 2024. 2. 16. 17:10
# 리액티브 스트림즈란? 리액티브 라이브러리를 어떻게 구현할지 정의해 놓은 별도의 표준 사양이 있는데, 이것을 리액티브 스트림즈라고 부른다. 한마디로, 데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하기 위한 리액티브 라이브러리의 표준 사양이라고 표현할 수 있다. # 리액티브 스트림즈의 컴포넌트인 Publisher와 Subscriber 간에 데이터가 전달되는 동작 과정 그림상으로는 Publisher와 Subscriber가 마치 같은 스레드에서 동기적으로 상호작용하는 것처럼 보이지만 실제로 Publisher와 Subscriber는 각각 다른 스레드에서 비동기적으로 상호작용하는 경우가 대부분이다. Publisher의 속도가 빠르다면 Subscriber에서 데이터를 처리하는 속도가 느려지..