[Test] HTTP 부하 테스트 도구 'hey'를 사용한 성능 측정
·
스레드(Thread)
http 테스팅 툴 hey 사용하기 1. hey가 뭘까?hey는 Go 언어로 개발된 간단한 HTTP 부하 테스트 도구다. 원래 rakyll/boom으로 알려졌지만, 이후에 hey로 이름이 변경되었다. 이 도구는 웹 서버의 처리 능력을 테스트하고 성능 병목 현상을 식별하는 데 유용하다. 깃허브 주소아래 깃허브에 소스코드가 공개되어 있다. README를 읽어보는 것도 도움이 될 것이다. GitHub - rakyll/hey: HTTP load generator, ApacheBench (ab) replacementHTTP load generator, ApacheBench (ab) replacement. Contribute to rakyll/hey development by creating an account o..
[Thread] 코루틴(Coroutine)의 동시성 제어
·
스레드(Thread)
코루틴의 동시성 제어 방식을 알아보자.📌 서론코루틴은 비동기 프로그래밍을 간편하게 만들어주는 강력한 도구다. 하지만 여러 코루틴이 동시에 실행되면서 공유 자원에 접근할 때는 동시성 문제(concurrency issues)가 발생할 수 있다. 이번 포스팅에서는 코루틴에서 동시성을 안전하게 관리하기 위한 주요 방법들을 실전에 유용한 예제와 함께 쉽게 이해할 수 있도록 설명할 예정이다. 1. 뮤텍스(Mutex)와 동기화뮤텍스의 개념과 필요성멀티스레드 환경에서 여러 스레드가 동시에 공유 자원에 접근하면 데이터 일관성 문제가 발생할 수 있다. 코루틴도 마찬가지로 여러 코루틴이 동시에 동일한 자원에 접근할 때 동기화가 필요하다. 이를 위해 뮤텍스(Mutex)를 사용하여 임계 구역을 보호할 수 있다.Mutex의 기..
[Thread] 코루틴(Coroutine)의 예외처리
·
스레드(Thread)
코루틴의 예외처리 방법을 알아보자. 1. 테스트 환경언어Kotlin (Java21)프레임워크SpringBoot3.x.x라이브러리코루틴(core, reactor), retrofit, gsonIDEIntelliJAI toolChatGPT 4o, Claude3.5 Sonnet마음가짐호기심, 참을성, 노력SpringBoot: build.gradle 설정코루틴 설정과 retrofit 설정은 꼭 추가해 줘야만 끝까지 실습을 함께할 수 있다.plugins { kotlin("jvm") version "1.9.25" kotlin("plugin.spring") version "1.9.25" id("org.springframework.boot") version "3.3.3" id("io.spring.dependency-ma..
[Thread] 4. Kotlin의 코루틴(Coroutine)이란?
·
스레드(Thread)
이번 편에서는 코루틴이 무엇인지 알아보자.📌 서론이전 스레드 시리즈에서는 '일반 스레드와 스레드풀'을 사용하여 성능 비교를 했었다.두가지 테스트만으로도 충분히 흥미로운 결과를 얻을 수 있었으며 내가 지금까지 개발하면서 생각하지 못했던 스레드를 활용한 성능 개선 방법에 대해 배울 수 있었다. 사실 내가 처음 이 시리즈를 작성하게 된 이유는 단순히 스레드의 성능이 궁금해서가 아니다. 동시성에 대한 테스트를 하다보니 스레드에 대해서 알아야겠다는 생각이 들었고 공부하다보니 공부할 것이 정말 많아서 정리를 해야겠다고 생각했기 때문이다. 그래서 열심히 세미나도 찾아보고 각종 문서, 블로그도 살펴봤다. 그랬더니 요즘은 '경량 스레드'를 사용하여 동시성을 제어하는 경우가 있다는 것도 알게 되었다. 그래서 이것에 대해..
[Thread] 3. 일반 스레드 vs 스레드풀 (I/O, CPU 성능 비교)
·
스레드(Thread)
스레드 vs 스레드풀 (성능 비교)📌 서론이전 1,2탄 포스팅에서 '일반 스레드'와 '스레드풀'을 사용했을 때 I/O, CPU 작업을 진행하면 어떤 성능을 보여줄지 테스트를 진행했다. 테스트를 통해 I/O 작업이 조금 더 스레드풀 설정에 민감하게(성능향상폭) 반응한다는 것을 알게 되었고 CPU작업은 스레드풀 설정에는 민감하지 않지만 제대로 설정하지 않으면 낭비되는 스레드가 많을 것이라는 생각을 하게 되었다.그래서 이번에는 조금 더 상세하게 각 스레드별로 테스트를 진행하고 분석을 해봤다. 이번 내용을 통해 우리가 일반적으로 사용하는 스레드의 성능과 최적화는 어떻게 하는게 좋을지 알아보자.테스트에 사용되는 코드는 하단의 1,2편에 모두 작성되어 있습니다. (전체 소스코드 깃허브도 이전 포스팅에 포함) [T..
[Thread] 2. 스레드풀의 I/O, CPU 성능 비교
·
스레드(Thread)
Kotlin(Java)을 사용하여 스레드풀의 성능을 비교해 보자📌 서론지난 포스트에서는 일반적인 스레드 환경의 I/O, CPU 스레드 성능을 비교해 봤다.이번 포스트는 Thread 시리즈의 2번째 포스트로서 만약 스레드풀을 사용한다면 어떤 성능을 보여줄지 테스트해 보고 이전 결과와 비교해 볼 예정이다.이 글을 확실하게 이해하기 위해 이전 포스트를 확인하는 것을 추천한다. 왜냐하면 이전 포스트에서 얻은 결과를 통해 이번 포스트에서 비교하기 때문이다.이전 포스트 (일반 스레드 성능 비교) [Thread] 1. 일반 스레드의 I/O, CPU 성능 비교Kotlin(Java)을 사용하여 일반 스레드의 성능을 비교해 보자📌 서론최근 나는 동시성 제어에 관심이 생겨 관련된 개념을 많이 찾아보고 생각하고 있다. 그..
[Thread] 1. 일반 스레드의 I/O, CPU 성능 비교
·
스레드(Thread)
Kotlin(Java)을 사용하여 일반 스레드의 성능을 비교해 보자📌 서론최근 나는 동시성 제어에 관심이 생겨 관련된 개념을 많이 찾아보고 생각하고 있다. 그래서 java의 동시성 제어 List, Map 등을 내부 구현까지 뜯어서 확인해보기도 하고 성능 테스트도 진행했다.이렇게 열심히 테스트를 하다 보면 동시성 제어가 이런 것이구나! 깨달음을 얻게 된다. 근데 나는 궁금한 게 많은 개발자다 보니 테스트를 하며 새로운 것들에 눈을 뜨게 되었다. 특히 locust결과를 보면 알 수 있는 RPS(Requests Per Second)에 대해서 많이 궁금한 점이 생겼다. RPS는 동시성 제어(synchronized, concurrentHashMap)에 따라 lock이 걸리며 결과가 다르게 나타나기도 하지만 스레..