[프로그래머스] 자연수 뒤집어 배열로 만들기
·
여러가지/알고리즘 & 자료구조
문제 설명자연수 n이 주어졌을 때, 이 숫자를 뒤집어 각 자리 숫자를 배열의 원소로 가지는 배열을 반환하는 문제입니다. 예를 들어 n = 12345라면, 배열 [5, 4, 3, 2, 1]을 반환해야 합니다.제한 조건n은 10,000,000,000 이하인 자연수입니다.입출력 예nreturn12345[5, 4, 3, 2, 1]문제 풀이이 문제는 주어진 자연수를 뒤집어 각 자릿수를 분리해 배열로 만드는 문제입니다. 이를 해결하기 위한 두 가지 접근 방법은 문자열로 변환하여 처리하거나, 수학적 계산을 이용하는 방식입니다.1. Python 코드 풀이방법 1: 문자열 변환 후 리스트로 변환def solution(n): return [int(digit) for digit in str(n)[::-1]]# 테스트 ..
[프로그래머스] 문자열 내 p와 y의 개수
·
여러가지/알고리즘 & 자료구조
문제 설명주어진 문자열 s에서 대소문자 구분 없이 문자 'p'와 'y'의 개수를 비교하여, 개수가 같으면 True, 다르면 False를 반환하는 문제입니다.또한, 'p'와 'y'가 모두 하나도 없는 경우에도 True를 반환해야 합니다.제한 사항문자열 s의 길이는 50 이하의 자연수입니다.문자열 s는 알파벳으로만 이루어져 있습니다.입출력 예sanswer"pPoooyY"true"Pyy"false입출력 예 #1: 'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 반환합니다.입출력 예 #2: 'p'의 개수 1개, 'y'의 개수 2개로 다르므로 false를 반환합니다.문제 풀이이 문제에서는 주어진 문자열에서 대소문자를 구분하지 않고 'p'와 'y'의 개수를 비교해야 합니다. 이를 위해 문자열을 모두 ..
[프로그래머스] 약수의 합
·
여러가지/알고리즘 & 자료구조
문제 설명정수 n이 주어졌을 때, n의 모든 약수를 더한 값을 반환하는 함수를 작성하는 문제입니다. 예를 들어, n = 12라면 약수는 1, 2, 3, 4, 6, 12이고, 이들의 합은 28입니다.제한 사항n은 0 이상 3000 이하인 정수입니다.입출력 예nreturn122856입출력 예 #1: 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.입출력 예 #2: 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.문제 풀이이 문제는 주어진 n의 약수를 구하고, 그 합을 반환하는 문제입니다. 앞서 설명한 것처럼, 약수는 대칭적으로 존재하기 때문에 모든 약수를 구하기 위해서는 1부터 √n까지만 확인하면 됩니다. 다만, n이 0일 경우 약수가 없기 때문에, 0에 대해서는 특..
[프로그래머스] 자릿수 더하기
·
여러가지/알고리즘 & 자료구조
문제 설명자연수 N이 주어졌을 때, N의 각 자릿수의 합을 구하는 문제입니다. 예를 들어 N = 123이라면, 1 + 2 + 3 = 6을 반환해야 합니다.제한 사항 N의 범위는 100,000,000 이하의 자연수입니다.입출력 예Nanswer123698724문제 풀이 이 문제는 주어진 자연수 N의 각 자릿수를 구해서 더하는 작업이 필요합니다. 이를 해결하는 방법은 두 가지로 나눌 수 있습니다:수학적 접근: 숫자를 10으로 나눈 나머지를 구해 각 자릿수를 추출한 뒤, 이를 반복해서 더하는 방식.문자열 접근: 숫자를 문자열로 변환한 뒤 각 자릿수를 순회하며 더하는 방식.1. Java 코드 풀이class Solution { public int solution(int n) { int sum ..
[프로그래머스] 짝수와 홀수
·
여러가지/알고리즘 & 자료구조
문제 설명정수 num이 주어졌을 때, 해당 숫자가 짝수면 "Even"을 반환하고, 홀수면 "Odd"를 반환하는 함수를 작성하는 문제입니다. 입력값 num이 0일 경우에도 짝수로 간주해야 합니다.제한 사항 num은 int 범위의 정수입니다.0은 짝수로 간주합니다.입출력 예 numreturn3"Odd"4"Even"문제 풀이이 문제는 숫자가 짝수인지 홀수인지 판별하는 간단한 조건문을 사용하여 해결할 수 있습니다.짝수는 2로 나눈 나머지가 0인 숫자를 의미합니다. 즉, num % 2 == 0이면 짝수이고, 그렇지 않으면 홀수입니다. 1. Java 코드 풀이class Solution { public String solution(int num) { return (num % 2 == 0) ? ..
[프로그래머스] x만큼 간격이 있는 n개의 숫자
·
여러가지/알고리즘 & 자료구조
문제 설명정수 x와 자연수 n이 주어졌을 때, x부터 시작해 x씩 증가하는 숫자를 n개 반환하는 문제입니다. x는 양수, 음수, 또는 0일 수 있으며, 결과 리스트는 x의 배수로 채워져야 합니다.제한 사항x는 -10,000,000 이상, 10,000,000 이하인 정수입니다.n은 1 이상, 1,000 이하인 자연수입니다.입출력 예xn결과25[2, 4, 6, 8, 10]43[4, 8, 12]-42[-4, -8]문제 풀이1. Java 코드 풀이import java.util.Arrays;class Solution { public long[] solution(int x, int n) { long[] answer = new long[n]; // 결과를 담을 배열 for (int i..
[프로그래머스] 평균 구하기
·
여러가지/알고리즘 & 자료구조
평균 구하기 - 알고리즘 문제 풀이 (Java & Python)이번 글에서는 정수로 이루어진 배열 arr의 평균값을 구하는 문제를 풀어보겠습니다. Java와 Python으로 문제를 해결해보고, 각각의 풀이 방법에 대한 시간 및 공간 복잡도를 분석한 후, 다양한 Java 풀이 방법과 그에 대한 비교를 설명드리겠습니다.문제 설명정수를 담고 있는 배열 arr의 평균값을 반환하는 solution 함수를 구현하세요.제한사항arr은 길이 1 이상, 100 이하인 배열입니다.arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.입출력 예arr결과[1, 2, 3, 4]2.5[5, 5]5입출력 예 #1: [1, 2, 3, 4]의 평균값은 (1 + 2 + 3 + 4) / 4 = 2.5입니다.입출력 예 #2: ..
[프로그래머스] 나머지가 1이되는 수 찾기
·
여러가지/알고리즘 & 자료구조
문제 설명주어진 자연수 n을 어떤 자연수 x로 나눈 나머지가 1이 되는 가장 작은 자연수 x를 찾는 문제입니다.1. Java 코드 풀이class Solution { public int solution(int n) { for (int x = 2; x 설명:x = 2부터 시작해서 n-1까지 반복문을 돌며, n % x == 1이 되는 가장 작은 x를 찾습니다.첫 번째로 조건을 만족하는 x가 가장 작은 값이므로 즉시 반환합니다.2. Python 코드 풀이def solution(n): for x in range(2, n): if n % x == 1: return x# 테스트print(solution(10)) # 출력: 3print(solution(12)) ..
[프로그래머스] 뒤에서 5등까지
·
여러가지/알고리즘 & 자료구조
뒤에서 5등까지 - 알고리즘 문제 풀이 (Java & Python)이번 글에서는 정수로 이루어진 리스트 num_list에서 가장 작은 5개의 수를 오름차순으로 반환하는 문제를 풀어보겠습니다. Java와 Python으로 문제를 해결해보고, 각각의 풀이 방법에 대한 시간 및 공간 복잡도를 분석한 후, 다양한 Java 풀이 방법과 그에 대한 비교를 설명드리겠습니다.문제 설명정수로 이루어진 리스트 num_list가 주어집니다. 이 리스트에서 가장 작은 5개의 수를 오름차순으로 담은 리스트를 반환하는 solution 함수를 구현하세요.제한사항6 ≤ num_list의 길이 ≤ 301 ≤ num_list의 원소 ≤ 100입출력 예num_list결과[12, 4, 15, 46, 38, 1, 14][1, 4, 12, 14..
[프로그래머스] 원소들의 곱과 합
·
여러가지/알고리즘 & 자료구조
원소들의 곱과 합을 비교하는 알고리즘 문제 풀이 (Java & Python)이번 글에서는 정수 리스트 num_list가 주어졌을 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을, 크면 0을 반환하는 알고리즘 문제를 Java와 Python으로 풀어보겠습니다. 이 문제는 간단한 산술 연산과 조건문을 활용한 문제로, 배열의 원소들 간의 관계를 파악하는 좋은 연습이 될 것입니다. 자바와 파이썬의 코드 예시와 함께, 다양한 풀이 방법과 각 풀이 방법의 시간 및 공간 복잡도에 대해 설명해 보겠습니다.문제 설명정수 리스트 num_list가 주어졌을 때, 리스트의 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 반환하고, 그렇지 않으면 0을 반환하는 함수를 구현하세요.제한사항num_lis..
[프로그래머스] 마지막 두 원소
·
여러가지/알고리즘 & 자료구조
배열의 마지막 두 원소에 따라 값을 추가하는 알고리즘 문제 풀이 (Java)이번 글에서는 배열의 마지막 두 원소를 비교하여 값을 추가하는 간단한 알고리즘 문제를 Java로 풀어보겠습니다. 문제는 배열의 마지막 원소와 그 이전 원소를 비교한 결과에 따라 배열에 새로운 값을 추가하는 방식으로 해결됩니다. 이 과정에서 다양한 배열 복사 및 확장 방법도 함께 알아보겠습니다. 이 글을 통해 배열을 효율적으로 확장하고 복사하는 여러 가지 방법에 대해 이해하고, 각 방법의 장단점을 파악하여 적절하게 사용할 수 있도록 해보겠습니다. 이 글이 여러분이 배열을 더 깊이 이해하고, Java를 통해 효율적으로 배열을 다루는 방법을 배우는 데 도움이 되기를 바랍니다.문제 설명정수 리스트 num_list가 주어질 때, 마지막 원..
[프로그래머스] 수 조작하기1
·
여러가지/알고리즘 & 자료구조
수 조작하기 1 - 알고리즘 문제 풀이 (Java와 Python 코드)문제 설명이 문제에서는 주어진 정수 n과 문자열 control에 따라 n의 값을 변경하는 간단한 알고리즘을 작성하는 문제입니다. control은 "w", "a", "s", "d"로 구성된 문자열로, 각 문자는 다음과 같은 방식으로 n을 변경합니다:"w": n이 1 커집니다."s": n이 1 작아집니다."d": n이 10 커집니다."a": n이 10 작아집니다.문자열 control의 문자를 앞에서부터 하나씩 처리하여, 해당 문자에 맞는 연산을 적용한 후 마지막 n의 값을 반환하는 것이 목표입니다.제한사항-100,000 ≤ n ≤ 100,0001 ≤ control의 길이 ≤ 100,000control은 "w", "a", "s", "d"로만..
접속자 대기열 시스템 #9- 테스트
·
프레임워크/자바 스프링
waiting-web은 9000포트, waiting-api 9010포트로 각 서버를 실행합니다.터미널 혹은 콘솔을 2개 띄어줍니다. 그리고 하나는 redis 모니터링을 하도록합니다.그리고 남은 하나는 users:queue:default:wait, users:queue:default:proceed 큐에 몇개의 데이터가 있는지 1초마다 sleep하고 이후 무한히 반복됩니다.JMeter를 이용하여 테스트를 진행합니다.아래 이미지와 같이 세팅해줍니다.1. Thread Group 설정Number of Threads (Users): 30명으로 설정되어 있으며, 이는 30명의 가상 사용자가 동시에 요청을 보낸다는 의미입니다.Ramp-up Period (Seconds): 10초 동안 점진적으로 30명의 가상 사용자를 ..
접속자 대기열 시스템 #8- 대기열 이탈
·
프레임워크/자바 스프링
이번 단계에서는 접속 대기열 시스템에서 사용자의 이탈을 관리하고, 이를 테스트하는 방법을 다룹니다. 이를 통해 사용자가 대기열에서 벗어나거나 접속을 유지하는 로직을 구현하고 검증할 수 있습니다.1. UserQueueControllerUserQueueController는 사용자의 대기열 정보를 처리하고, 쿠키를 사용해 접속 정보를 유지합니다.touch 메서드@GetMapping("/touch")Mono touch( @RequestParam(name = "queue", defaultValue = "default") String queue, @RequestParam(name = "user_id") Long userId, ServerWebExchange exchange) {..
접속자 대기열 시스템 #7- 대기열 스케줄러 개발
·
프레임워크/자바 스프링
접속자 대기열 시스템 #7 - 대기열 스케줄러 개발이번 단계에서는 대기열에서 사용자를 자동으로 허용하는 스케줄러를 구현합니다. 이 스케줄러는 주기적으로 대기열을 확인하고, 일정 수의 사용자를 허용 목록으로 이동시키는 역할을 합니다. 이를 통해 대기열 시스템을 자동화하고 효율성을 높일 수 있습니다.1. UserQueueService 클래스UserQueueService 클래스는 대기열과 관련된 비즈니스 로직을 담당하며, 스케줄러를 통해 대기열 관리 작업을 수행합니다.스케줄러 메서드: scheduleAllowUser@Slf4j@Service@RequiredArgsConstructorpublic class UserQueueService { private final ReactiveRedisTemplate r..
접속자 대기열 시스템 #6- 접속 대기 웹페이지 개발
·
프레임워크/자바 스프링
접속자 대기열 시스템 #6 - 접속 대기 웹페이지 구현 및 순번 조회이번 단계에서는 접속 대기 웹페이지를 개발하고, 사용자가 대기열에 등록된 순번을 확인할 수 있도록 하는 기능을 구현합니다. 이를 위해 사용자 순번을 조회하는 API와 대기 페이지를 제공하는 컨트롤러를 작성하며, 테스트를 통해 올바르게 동작하는지 검증합니다.1. UserQueueController - 순번 조회 APIUserQueueController는 사용자 대기 순번을 조회할 수 있는 API를 제공합니다.@GetMapping("/rank")public Mono getRankUser( @RequestParam(name = "queue", defaultValue = "default") String queue, @R..
접속자 대기열 시스템 #5- Redis를 이용한 대기열 관리 및 웹페이지 진입 API 구현
·
프레임워크/자바 스프링
이번 포스팅에서는 사용자 접속 대기열 시스템을 구축하기 위한 API 구현을 다룹니다. 목표는 사용자들이 웹페이지에 진입할 수 있는지 여부를 확인하고, 대기열 관리 로직을 통해 접속을 허용하거나 대기시킵니다. 이를 위해 Redis의 SortedSet 데이터 타입을 활용하여 사용자 대기열을 관리하고, 접속이 허용된 사용자들은 허용 목록에 추가합니다.1. 대기열 관리 로직 설계대기열 등록: 사용자가 접속 대기열에 등록될 때, Redis의 SortedSet에 userId를 Unix 타임스탬프와 함께 추가합니다.접속 허용: 일정한 수의 사용자가 대기열에서 제거되며, 이 사용자는 접속이 허용된 목록에 추가됩니다.접속 가능 여부 확인: 사용자가 접속이 허용된 상태인지 확인하고, 대기열에서 진입이 허용된 경우에는 대기..
접속자 대기열 시스템 #3- 셋업
·
프레임워크/자바 스프링
접속자 대기열 시스템 #3 - 셋업이번 포스팅에서는 waiting-web과 waiting-api 두 개의 서버를 구축하는 방법을 소개합니다. 이 두 서버는 각각 예매 웹페이지와 대기열 처리를 담당하며, Spring Boot를 사용하여 간단하게 셋업할 수 있습니다.1. 프로젝트 개요waiting-web: 대기열에서 성공적으로 빠져나온 사용자를 예매 웹페이지로 리디렉션하여 서비스합니다.waiting-api: 대기 페이지를 제공하고 대기열 처리와 관련된 API 정보를 관리합니다.이 두 서버는 분리된 서비스로 운영되어, 대기열 처리와 실제 웹페이지 서비스 로직을 독립적으로 관리할 수 있도록 합니다.2. 프로젝트 셋업두 개의 Spring Boot 프로젝트를 각각 설정하여 시작하겠습니다.2.1. waiting-we..
접속자 대기열 시스템 #4- 대기열 등록 API 개발
·
프레임워크/자바 스프링
핵심 코드 분석1. UserQueueController - 대기열 등록 API@RestController@RequestMapping("/api/v1/queue")@RequiredArgsConstructorpublic class UserQueueController { private final UserQueueService userQueueService; @PostMapping public Mono registerUser( @RequestParam(name="queue", defaultValue = "default") String queueNm, @RequestParam(name="user_id") Long userId ){ retur..
BlockHound: Java 비동기 애플리케이션에서 블로킹 호출을 감지하는 도구
·
프레임워크/자바 스프링
BlockHound로 비동기 코드에서 블로킹 호출 감지하기Java에서 비동기 프로그래밍은 높은 성능과 확장성을 제공하는 강력한 방법입니다. 특히, Spring WebFlux와 Project Reactor 같은 비동기 프레임워크들은 적은 리소스로도 수많은 동시 요청을 처리할 수 있습니다. 하지만 비동기 코드에서 실수로 블로킹 호출을 사용하면, 이러한 비동기 프로그래밍의 장점을 잃어버릴 수 있으며 심각한 성능 저하가 발생할 수 있습니다.이 문제를 예방하고, 비동기 코드에서 블로킹 호출을 감지하는 데 도움을 주는 도구가 바로 BlockHound입니다.BlockHound란?BlockHound는 Java 애플리케이션에서 블로킹 호출을 탐지하는 Java Agent입니다. 특히 비동기 프로그래밍 환경에서 실수로 블로..
Spring MVC와 Spring Webflux 성능비교
·
프레임워크/자바 스프링
Spring MVC와 Spring WebFlux 성능 비교를 위한 프로젝트 구성이번 포스트에서는 Spring MVC와 Spring WebFlux를 사용해 간단한 웹 애플리케이션을 구현하고, 두 프레임워크의 성능을 비교하는 방법을 다룹니다. 이 글에서는 각 프로젝트의 설정 및 핵심 코드에 대해 자세히 설명하겠습니다. 특히 동기식과 비동기식 처리 방식의 차이를 이해하는 데 중점을 두겠습니다.1. Docker를 이용한 환경 구성성능 비교를 위해 MySQL과 Redis가 필요하므로, Docker를 사용하여 각각의 컨테이너를 설정합니다.MySQL과 Redis 컨테이너 실행docker run --name mysql-r2dbc -e MYSQL_ROOT_PASSWORD=r2dbc -e MYSQL_DATABASE=mvc..
Reactive Redis
·
프레임워크/자바 스프링
이미지에서 보여지는 구조를 바탕으로 분석한 결과, 이 시스템은 Spring WebFlux를 이용해 비동기적으로 API 서버 및 RDBMS와 통신하는 구조를 나타내고 있습니다. 주요 통신 경로를 살펴보면:Reactor-Netty (Async): 클라이언트와 Spring WebFlux 간의 통신은 Reactor-Netty를 통해 비동기적으로 이루어집니다. 이는 WebFlux의 기본 비동기 처리 방식입니다.WebClient (Async): Spring WebFlux는 API 서버와 WebClient를 이용해 비동기 통신을 하고 있습니다. 이 역시 논블로킹 방식으로 처리됩니다.R2DBC (Async): 관계형 데이터베이스(RDB)와의 통신은 R2DBC를 통해 비동기적으로 처리됩니다. 이를 통해 많은 양의 데이터..
webflux - R2DBC 실습
·
프레임워크/자바 스프링
이 이미지에서는 Spring WebFlux를 사용하는 서버가 클라이언트, API 서버, 그리고 관계형 데이터베이스(RDB)와 어떻게 통신하는지 설명하고 있습니다. 각 통신 과정에서 동기와 비동기 방식이 어떻게 적용되는지를 설명하는 흐름도입니다.1. 클라이언트 → Spring WebFlux (Reactor-Netty)비동기 통신: 클라이언트는 reactor-netty를 사용하여 Spring WebFlux 서버로 요청을 비동기 방식으로 전송합니다.Reactor-Netty: Spring WebFlux는 Reactor와 Netty를 기반으로 동작하며, 클라이언트로부터 들어오는 HTTP 요청을 비동기적으로 처리합니다. 클라이언트가 요청을 보내면, WebFlux 서버는 요청을 처리하는 동안 클라이언트의 연결을 유지..
Spring Webflux 실습 - 2
·
프레임워크/자바 스프링
간단한 spring boot 서버를 만들어 줍니다.`mvc` 서버라고 지칭하겠습니다.package com.example.mvc;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import java.util.Map;@SpringB..
Spring Webflux 실습 - 2
·
프레임워크/자바 스프링
간단한 spring boot 서버를 만들어 줍니다.`mvc` 서버라고 지칭하겠습니다.package com.example.mvc;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import java.util.Map;@SpringB..
Spring Webflux 실습 - 1
·
프레임워크/자바 스프링
Spring WebFlux를 이용한 서버 구성Spring Framework를 이용해 실제 서버를 구성하는 과정에서, 각각의 Controller, Service, Repository가 WebFlux 스타일로 어떻게 구현되는지 알아보겠습니다.ControllerSpring WebFlux에서는 컨트롤러를 구현하는 두 가지 방식이 있습니다:Functional EndpointAnnotation Endpoint프로젝트 설정 (application.yml)먼저, Spring Boot 애플리케이션의 설정을 application.yml에 정의합니다. 다음은 애플리케이션의 이름과 로그 레벨을 설정하는 코드입니다:spring: application: name: webflux1logging: level: root..
Webflux - reactor 실습
·
프로그래밍 언어/스프링부트
Reactor Core를 이용한 Flux와 Mono 실습Reactor는 자바 비동기 프로그래밍을 위한 라이브러리로, 주로 Flux와 Mono라는 두 가지 기본 타입을 사용하여 데이터 스트림을 처리합니다. 이번 글에서는 Flux와 Mono의 차이를 간략히 설명하고, 예제를 통해 그 동작을 살펴보겠습니다.라이브러리 설정Reactor와 Spring Boot를 활용한 프로젝트에서는 reactor-core 라이브러리를 추가하여 Flux와 Mono를 사용할 수 있습니다. 아래는 필요한 라이브러리를 포함한 build.gradle 설정 예시입니다.plugins { id 'java' id 'org.springframework.boot' version '3.3.3' id "io.spring.dependen..
Webflux - reactor
·
프레임워크/자바 스프링
Reactive Streams와 Spring WebFlux: 비동기 스트림 처리의 핵심 이해비동기 논블로킹 I/O는 현대 웹 애플리케이션에서 매우 중요한 기술입니다. 특히, Reactive Streams는 비동기 데이터를 효율적으로 처리하기 위한 표준을 정의하고, 이를 통해 고성능의 서버 애플리케이션을 구축하는 데 필수적인 역할을 합니다. 이번 포스트에서는 Reactive Streams, Reactor, Spring WebFlux의 개념을 이미지 기반으로 설명하고, 이들이 어떻게 비동기 스트림 처리를 구현하는지 살펴보겠습니다.1. Reactive Stream 계층 구조Reactive Streams는 비동기 스트림 처리에서 non-blocking 방식과 back pressure 메커니즘을 통해 데이터를 효..
Webflux - spring mvc vs webflux
·
프레임워크/자바 스프링
spring mvc와 webflux에 대한 비교를 해보겠습니다.reactive stack은 spring boot2 버전부터 지원되고 있습니다.Reactive StackReactive Stack은 비동기적이고 논블로킹 방식으로 작동하는 스택입니다. Spring WebFlux는 이 스택의 중심에 있으며, Reactive Streams API와 Reactor 라이브러리를 기반으로 구축되었습니다. Reactive Stack은 다음과 같은 특징을 가지고 있습니다:논블로킹 I/O: 여러 요청을 병렬적으로 처리할 수 있어, 대규모 트래픽 처리에 적합합니다.멀티코어 프로세서 활용: 다중 코어를 효과적으로 사용하여 고성능을 달성할 수 있습니다.Netty 및 Servlet 3.1+와 같은 비동기 컨테이너에서 실행되며, 동..
webflux - CPU Bound vs IO Bound
·
프로그래밍 언어/스프링부트
software 성능을 분석하는 관점에서 cpu bound, I/O bound로 분류를 할 수 있습니다. spring webflux는 대량의 I/O 요청에 용이하게 설계 되어 있습니다. 이는 I/O Bound 작업에 가깝습니다. --- CPU Bound - CPU :   - CPU란 computer process unit의 약자입니다. 명령어를 기반으로 계산을 처리하는 중앙처리 장치입니다.      컴퓨터의 모든 작업은 CPU를 사용하게 됩니다. CPU 바운드 작업이란 단순히 CPU를 사용한 다는 것이 아니라 CPU를 중점적으로 사용하는 것을 말합니다. 예를 들면, 암호화, 압축 알고리즘 계산, 다수의 데이터에 대한 집계도 그 예시가 됩니다. 주로 CPU성능에 작업이 크게 좌지우지 됩니다. 밑에서부터 하..