전체 글 225

멀티스레드 vs 버추얼 스레드 vs 코루틴: 실패와 중지 처리는 어떻게 다를까?

동시성과 병렬성을 구현할 때 스레드나 코루틴을 사용할 수 있지만, 실무에서는 단순 실행만큼 중요한 것이 있습니다.바로 작업 도중 실패했을 때 어떻게 중단하고 복구할 수 있느냐입니다.이 글에서는 Java의 전통적인 멀티스레드, Java 21의 버추얼 스레드, 그리고 Kotlin의 코루틴에서 **실패 처리(예외 처리, 중단, 롤백)**를 어떻게 다루는지 구조적으로 비교합니다.✅ 1. 전통 멀티스레드의 실패 처리특징OS 레벨 스레드중단: Thread.interrupt() 호출 → 내부에서 체크해야 함실패 처리: try-catch 사용, 직접 제어 필요자동 롤백 없음 (DB 트랜잭션, 상태 복구는 별도로 구현)예시Thread t = new Thread(() -> { try { for (int ..

Language/Kotlin 2025.07.14

Kotlin 코루틴은 멀티스레드 안에서 비동기 처리가 되는 걸까

코루틴을 처음 접할 때 가장 흔히 드는 의문 중 하나는 다음과 같습니다.“멀티스레드 위에서 비동기로 실행된다면, 결국 그냥 멀티스레드 아닌가?”“멀티스레드, 코루틴, 버추얼 스레드 각각은 어떻게 다르고 언제 써야 하지?”이 글에서는 Kotlin의 코루틴이 멀티스레드 환경에서 어떻게 비동기 처리를 수행하는지, 그리고 전통적인 멀티스레드나 Java의 버추얼 스레드와 어떤 차이가 있는지를 실무적인 관점에서 입체적으로 정리합니다.✅ 코루틴의 등장 배경: 왜 필요했을까?Java의 전통적인 멀티스레드는 다음과 같은 한계가 있습니다.스레드 하나당 약 1MB의 메모리 소비컨텍스트 스위칭 비용이 큼 (OS가 직접 관리)수천 개 이상의 동시 작업 처리 시 리소스 한계이런 제약을 극복하기 위해 등장한 것이 경량 스레드(Li..

Language/Kotlin 2025.07.14

Kotlin/Java 컬렉션 구조 비교: Stack vs Queue vs ArrayDeque

스택과 큐는 모든 프로그래머가 한 번쯤은 접해보는 대표적인 선형 자료구조입니다. Java 및 Kotlin에서도 다양한 구현체가 제공되지만, 실제로 어떤 자료구조를 써야 할지 헷갈릴 수 있습니다. 특히 Stack, Queue, ArrayDeque는 모두 삽입/삭제 연산을 제공하면서도 구조와 성능, 사용 목적이 다르기 때문에 정확한 이해가 필요합니다.이 글에서는 각 자료구조의 특징과 차이점을 비교하고, 어떤 상황에 어떤 자료구조를 선택해야 하는지 실용적인 가이드를 제공합니다.기본 개념 요약Stack (스택)LIFO (Last In, First Out) 구조가장 나중에 삽입된 요소가 가장 먼저 제거됨Java의 Stack 클래스는 Vector를 상속 → 동기화 처리됨 (synchronized)Kotlin에서도 ..

Language/Kotlin 2025.07.07

Spring Batch 실행 순서 정리

Spring Batch는 Job → Step → Reader/Processor/Writer 구조로 구성되며, 실행 시 각 컴포넌트가 정의된 순서와 스프링 컨텍스트 초기화 흐름에 따라 동작합니다. 이 글에서는 클래스 단위 기준으로 실행 순서를 정리합니다.✅ 실행 순서 흐름 (클래스 단위)BatchApplication└─ BatchConfig ← @Configuration: Job, Step, Reader 등 Bean 등록└─ UserJobLauncher ← @Component: JobLauncher로 수동 Job 실행 └─ ImportUserJob ← BatchConfig에서 정의된 Job ..

Spring Boot 어노테이션 실행 순서 정리

Spring Boot 애플리케이션이 실행될 때, 다양한 어노테이션들이 어떤 순서로 처리되는지 정확히 이해하는 것은 설정과 초기화 과정을 설계하는 데 매우 중요합니다. 이 글에서는 애플리케이션 구동 시 어노테이션이 처리되는 순서를 정리합니다.✅ 전체 흐름 요약Spring Boot는 SpringApplication.run(...) 실행 시 다음과 같은 단계로 어노테이션을 처리합니다:1. @ComponentScan2. @Configuration3. @Enable* / @Import4. @Component / @Service / @Repository / @Controller5. @Autowired / 생성자 주입6. @PostConstruct7. @ApplicationRunner / @CommandLineRun..

BackEnd/Spring Boot 2025.06.24

K6란? 성능 테스트 도구 소개 및 실습 결과 분석

웹 서비스의 안정성을 확보하기 위해선 사전에 성능 테스트가 필수입니다. 특히 많은 요청이 몰릴 때 서버가 어떻게 반응하는지를 미리 확인하고 병목을 찾는 작업이 중요합니다. 이 글에서는 K6란 무엇인지, 기존 성능 도구(ab, JMeter 등)와의 차이점, 그리고 실제 부하 테스트 예시 및 결과 분석까지 정리합니다. ✅ K6란?K6는 Grafana Labs에서 만든 모던 부하 테스트 도구입니다. 주요 특징은 다음과 같습니다:코드 기반 테스트 (JavaScript)CLI 기반 실행 (스크립트 파일로 실행)HTTP 기반 API 테스트에 최적화고성능 (Go 기반)장점항목설명✅ 코드 중심테스트 시나리오를 JavaScript로 작성, 조건 분기와 반복도 가능✅ DevOps 친화적CI/CD에 쉽게 통합 가능 (Git..

BackEnd 2025.06.20

[WebFlux_2] @RestController vs @Component

✅ Spring WebFlux의 핵심 구조: DispatcherHandler와 그 내부 구조앞에서 @RestController와 @Component 방식의 차이를 다뤘다면, 이번에는 이 둘이 내부적으로 어떤 구조에서 동작하며, 왜 그 차이가 발생하는지를 정리해본다.🔸 DispatcherHandler란?DispatcherHandler는 Spring WebFlux의 중앙 진입점이다. Spring MVC에서의 DispatcherServlet과 역할이 동일하며, HTTP 요청을 받아 핸들러를 찾고 실행한 뒤 결과를 반환하는 흐름을 제어한다. WebFlux는 논블로킹 환경에서 동작하기 때문에 DispatcherHandler도 내부적으로 Mono와 Flux를 사용해 모든 처리를 리액티브하게 실행한다.🔸 Rest..

Kafka + Spring Boot 완전 연동기: Apache Kafka 실패부터 Bitnami Kafka 성공까지

Kafka를 처음부터 끝까지 Docker 기반으로 설정하고 Spring Boot 애플리케이션과 연동하는 과정을 공유합니다.특히 Apache Kafka 이미지로 고생한 뒤 Bitnami Kafka로 전환해 성공한 내용을 기록합니다.✅ 1. Spring Boot로 Kafka 연동하기Spring에서는 spring-kafka 의존성만 추가하면 Kafka를 쉽게 연동할 수 있습니다.// build.gradle.ktsimplementation("org.springframework.kafka:spring-kafka")Kafka 설정은 application.yml로 구성하며, 기본적인 Consumer/Producer 설정은 다음과 같습니다:spring: kafka: bootstrap-servers: localh..

BackEnd 2025.06.19

[WebFlux_1] @RestController vs @Component

Spring WebFlux를 사용할 때 가장 먼저 마주치는 애노테이션 중 하나가 @RestController입니다. 그런데 같은 스프링 빈으로 등록되는 @Component와 무엇이 다른 걸까요? 이 글에서는 @RestController와 @Component의 차이를 기본 개념부터 실무 사용 포인트, 내부 동작까지 정리합니다. 1️⃣ WebFlux란?Spring WebFlux는 Spring 5부터 도입된 리액티브 논블로킹 웹 프레임워크입니다.서블릿 기반 대신 Netty, Undertow 등 리액티브 서버를 기반으로 동작주요 리턴 타입: Mono, Flux (Project Reactor 기반)비동기 스트림 처리에 최적화2️⃣ @RestController vs @Component 기본 차이 항목@RestCon..

[MQ]메시지 큐 3개 비교: Amazon SQS vs Apache Kafka vs RabbitMQ

비동기 메시지 처리와 마이크로서비스 통신이 일반화되면서, **메시지 큐(MQ)**는 필수 인프라가 되었습니다.그중에서도 가장 널리 사용되는 세 가지: ☁️ Amazon SQS🪵 Apache Kafka🐇 RabbitMQ 이 글에서는 이 세 가지 MQ 시스템을 기능, 구조, 사용 목적, 실무 적용 방식 기준으로 정리하고 비교합니다. 🧾 기본 개요 비교 항목Amazon SQSApache KafkaRabbitMQ설계 목적완전 관리형 큐대용량 스트리밍유연한 라우팅 기반 큐메시지 저장 방식Queue로그 (토픽/파티션)Queue (Exchange 기반)프로토콜HTTP(S)자체 프로토콜AMQP (표준)설치 방식AWS 관리형직접 설치 (또는 클라우드)직접 설치 (또는 클라우드) 📦 메시지 처리 구조 비교항목Am..

BackEnd 2025.06.17