Language 13

멀티스레드 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

Kotlin Coroutine 핵심 키워드 & 함수 정리

✅ 1. 키워드(예약어)키워드설명suspend일시 중단 가능한 함수 정의. 코루틴 내부에서만 호출 가능* “이 함수는 중간에 멈췄다가, 나중에 다시 이어서 실행할 수 있어” 라고 선언하는 것.✅ 2. 코루틴 빌더 함수함수설명runBlocking현재 스레드를 블로킹하며 코루틴 실행 (main/test 진입점에 사용)launch결과 없이 코루틴 실행. fire-and-forget 작업에 적합asyncDeferred 결과 반환. await()으로 값 획득 가능✅ 3. 스코프 관련 함수함수설명coroutineScope모든 하위 코루틴이 끝날 때까지 기다림. 예외 전파됨supervisorScope하위 코루틴 예외가 다른 코루틴에 영향을 주지 않음CoroutineScope코루틴 실행 환경(Context)을 정의하는..

Language/Kotlin 2025.06.06

[1] 왜 코루틴을 써야 할까? – Kotlin이 선택한 비동기 방식

Coroutine Document Coroutines | Kotlin kotlinlang.orghttps://github.com/Raconer/kotlin_study/tree/main/src/main/kotlin/coroutine kotlin_study/src/main/kotlin/coroutine at main · Raconer/kotlin_studyContribute to Raconer/kotlin_study development by creating an account on GitHub.github.com Kotlin 코루틴은 비동기 코드를 동기처럼 깔끔하게 작성할 수 있도록 도와주는 경량 스레드 기반의 논블로킹 구조입니다.✅ 코루틴이란?실행을 중단(suspend) 했다가 다시 재개(resume) ..

Language/Kotlin 2025.06.06

검색이 빠른 자료구조

O(1) > O(log n) > O (n) > O(n log n) > O(n^2) > O(n^3) > O(2^n) > O(n!) HashMap 단건 검색 시간 복잡도 : O(1) 범위 탐색 시간 복잡도 : O(N) 전방 일치 탐색 불가 ex) like 'AB%' List 정렬되지 않은 리스트 탐색 시간 복잡도 : O(N) 정렬된 리스트 탐색 시간 복잡도 : O(logN) 정렬 되지 않은 리스트 정렬 시간 복잡도 : O(N) ~ O(N * logN) 삽입/삭제 비용이 매우 높다 Tree 트리 높이에 따라 시간 복잡도 결정 트리의 높이를 최소화 하는 것이 중요! 한쪽으로 노드가 치우치지 않도록 균형을 잡아 주는 트리 사용 ex) Red-Black Tree, B+Tree B+Tree 삽입/삭제시 항상 균형을 ..

Language/Java 2023.07.12

버퍼링(Buffering)과 스트림(Stream)

버퍼링(Buffering)과 스트림(Stream)데이터를 효율적으로 처리하기 위한 두 가지 개념입니다.📌 버퍼링 (Buffering)정의: 데이터를 임시로 저장하는 메모리 공간(버퍼)을 활용하여 데이터 전송을 효율화함역할:데이터를 작게 나누어 여러 번 처리하는 대신, 한 번에 묶어 처리하여 성능 향상I/O 횟수를 줄여 리소스 절약✅ 특징입력/출력 시 작은 데이터를 모아 한 번에 처리Java에서는 다음과 같은 클래스로 지원:BufferedReader, BufferedWriterBufferedInputStream, BufferedOutputStream📌 스트림 (Stream)정의: 데이터를 연속된 흐름(순차적)으로 처리하는 개념유형:바이트 스트림: InputStream, OutputStream문자 스트림..

Language/Java 2023.07.01

JVM 메모리 구조

소개 JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신입니다. 이 블로그 포스트에서는 JVM의 메모리 영역 구조와 각 영역의 역할에 대해 자세히 알아보겠습니다. 메서드 영역 (Method Area 또는 Class Area) JVM이 시작될 때 생성되며, 모든 스레드가 공유하는 영역입니다. 클래스 파일의 정보, 상수, 메서드 코드 등이 저장됩니다. 클래스 로더에 의해 로딩된 클래스들의 정보와 정적 변수(static variables)가 할당됩니다. PermGen 영역이라고도 불리며, Java 7 이전 버전에서는 PermGen 영역에 존재했지만, Java 8부터는 Metaspace 영역으로 대체되었습니다. 힙 (Heap) 객체 인스턴스와 배열이 동적으로 할당되는 영역입..

Language/Java 2023.06.10

TypeScript 설치 방법 및 프로젝트 생성

1. TypeScript 설치 하기 npm 사용하기 npm install -g typescript2. 프로젝트 생성 express --no-view backend 명령은 Express.js 애플리케이션을 생성하는 명령어입니다. 이 명령을 실행하여 애플리케이션을 생성하면 JavaScript로 작성된 애플리케이션이 생성됩니다. 그러나 TypeScript를 사용하여 Express.js 애플리케이션을 작성하려면 다음과 같은 추가적인 단계가 필요합니다. 1. 프로젝트 생성 기본 Directory 구조 root/ ├── dist/ ├── node_modules/ ├── src/ │ ├── controllers/ │ ├── models/ │ ├── routes/ │ ├── app.ts │ └── index.ts ├─..

Language/TypeScript 2023.04.29

클래스(class), 객체(object), 인스턴스(instance) 차이

Object_객체 Class의 Instance나 Array를 말한다. 즉 어떤한 것을 정의 할수 있는 모든 것을 뜻한다. 자동차, 컴퓨터, 사람, 개념 등 Class_클래스 객체를 정의 하는 틀 또는 설계도 이다. Instance_인스턴스 Class 타입의 Object를 인스턴스 라고 합니다. 메모리에 할당된 객체 // 클래스 public Class Earth{ private String name; private int width; } // obj -> 인스턴스 Object obj = new Earth();참고 -- 코딩하는 보디 빌더 Java/Study

Language/Java 2023.04.16