[Thread] 스프링 톰캣 스레드 덤프 파헤치기: 상태값과 구조 분석
·
유용한 개발지식/스레드(Thread)
안녕하세요. 개발자 stark입니다.오늘 구독 중인 개발 블로그의 글을 살펴보던 중 망나니개발자님께서 적어주신 스프링 tomcat의 스레드 덤프 분석글을 읽은 후 저도 스레드 덤프를 분석해보고 싶다는 생각이 들어서 내용을 보며 분석을 시도해 봤습니다. 망규님께서 좋은 설명들을 적어주신 덕분에 직접 따라 해 보면서도 그 내용도 쉽게 분석하며 이해할 수 있었습니다.  이렇게 열심히 덤프 분석을 따라 하던 중 궁금한 점이 생겼습니다. 덤프 안에는 생전 처음 보는 Poller, Acceptor, RMI 스레드가 있어서 무엇인지 알고 싶었으며 각 스레드는 상태를 가지고 있었는데 그중 WAITING과 TIMED_WAITING라는 상태의 차이점을 자세히 알고 싶었습니다. 또한 어떻게 WAITING 상태였던 스레드가 ..
[자료구조] 힙 정렬의 시간복잡도 O(n log n) 이해하기
·
유용한 개발지식/알고리즘
안녕하세요. 개발자 stark입니다!이번 포스팅은 알고리즘입니다. 저는 최근 기본기를 다지기 위해 다시 알고리즘을 공부하고 있는데 heap 정렬을 공부하던 중 n개의 숫자를 힙에 삽입하는 시간복잡도가 O(n log n)인 이유가 궁금해서 공부를 했고 이것을 단계별로 설명해 보고자 합니다.  힙 구조 살펴보기먼저 힙의 구조를 생각해 보겠습니다. 힙은 아래와 같은 완전 이진트리(complete binary tree) 형태를 가지며, 각 노드는 자식 노드들보다 큰 값(최대 힙의 경우)을 가져야 합니다.  100 레벨 0 (루트) / \ 85 95 레벨 1..
[Java] serialVersionUID와 직렬화 호환성 관리
·
유용한 개발지식
안녕하세요. 개발자 stark입니다!오늘은 제가 kafka 소스코드를 살펴보다 발견한 serialVersionUID에 대해서 얘기해보고자 합니다. 실제로 Kafka에서 사용되는 예외 클래스(WakeupException)를 예시로 들어 직렬화/역직렬화 과정에서 serialVersionUID가 어떤 영향을 미치는지 더 자세히 보여드리겠습니다.  1. 초기 버전의 Kafka 관련 예외 클래스먼저 오픈소스 프로젝트인 Kafka 소스코드에 있는 예외 클래스를 확인해 봅시다.필드에 serialVersionUID = 1L이 선언되어 있습니다.package org.apache.kafka.common;public class KafkaException extends RuntimeException { private s..
[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..