자바 스레드 풀(Thread Pool)의 원리와 스프링 @Async 비동기 처리

자바 스레드 풀(Thread Pool)의 원리와 스프링 @Async 비동기 처리

지난 글에서는 멀티스레드 환경에서 발생하는 동시성 문제와 이를 해결하기 위한 동기화 기법들을 알아보았습니다. 자바 백엔드 애플리케이션은 수많은 사용자 요청을 처리하기 위해 멀티스레드를 활용하지만, 요청이 들어올 때마다 스레드를 새로 생성하고 바꾸는 것은 서버에 엄청난 부담을 줍니다. 실무에서는 이러한 자원 낭비를 막고 대량의 요청을 효율적으로 관리하기 위해 ‘스레드 풀(Thread Pool)’을 사용합니다. 또한, 스프링 프레임워크에서는 이를 기반으로 무거운 … 더 읽기

자바 동시성(Concurrency)과 멀티스레드 환경의 동기화 문제

자바 동시성(Concurrency)과 멀티스레드 환경의 동기화 문제

자바 백엔드 개발자라면 실무에서, 혹은 대기업 기술 면접에서 반드시 마주치게 되는 핵심 주제가 있습니다. 바로 ‘동시성(Concurrency)’과 ‘멀티스레드(Multi-Thread)’입니다. 스프링 프레임워크(Spring Framework) 기반의 백엔드 서버는 기본적으로 수많은 사용자의 요청을 멀티스레드 방식으로 처리합니다. 즉, 우리가 작성한 코드가 여러 스레드에 의해 동시에 실행된다는 뜻입니다. 이때 동시성 문제를 제대로 제어하지 못하면 데이터가 유실되거나 결제 오류가 발생하는 등 치명적인 금융·비즈니스 장애로 … 더 읽기

Java 가비지 컬렉션(Garbage Collection) 작동 원리와 알고리즘

Java 가비지 컬렉션(Garbage Collection) 작동 원리와 알고리즘

지난 글에서는 JVM의 핵심 메모리 영역인 스택(Stack)과 힙(Heap) 영역의 구조에 대해 알아보았습니다. new 연산자를 통해 생성된 객체들은 모두 힙 영역에 저장된다고 설명해 드렸는데요. 그렇다면 이 힙 영역에 쌓이는 객체들은 언제, 어떻게 메모리에서 해제될까요? C나 C++ 같은 언어에서는 개발자가 직접 free() 같은 함수를 호출해 메모리를 해제해야 합니다. 반면, 자바(Java)에서는 가비지 컬렉터(GC, Garbage Collector)가 더 이상 사용되지 … 더 읽기

Java JVM의 기본 구조 – JVM Stack과 Heap 메모리 영역

Java JVM의 기본 구조 - JVM Stack과 Heap 메모리 영역

자바(Java) 백엔드 개발자로서 애플리케이션을 안정적으로 운영하고 성능을 최적화하기 위해서는 자바 가상 머신(JVM, Java Virtual Machine)의 메모리 구조를 명확히 이해해야 합니다. 우리가 작성한 코드가 실행될 때 메모리에서 어떤 일이 일어나는지 모른다면, 실무에서 자주 발생하는 OutOfMemoryError나 성능 저하 문제를 해결할 수 없습니다. 본 글에서는 JVM의 핵심 메모리 영역인 런타임 데이터 영역(Runtime Data Area)의 구조를 살펴보고, 그중에서도 가장 … 더 읽기

[프로그래머스] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 (Java)

[프로그래머스] 특정 문자열로 끝나는 가장 긴 부분 문자열 찾기 (Java)

문제 설명 문자열 myString과 pat가 매개변수로 주어집니다. myString의 부분 문자열 중 pat로 끝나는 가장 긴 부분 문자열을 찾아서 return 하는 solution 함수를 완성해 보세요. 제한 사항 입출력 예 myString pat result “AbCdEFG” “dE” “AbCdE” “AAAAaaaa” “a” “AAAAaaaa” 입출력 예 설명 문제 해결 과정 이 문제의 핵심은 pat이 마지막으로 등장하는 위치를 찾아내는 것입니다. 프로그래머스 코드 (Java) … 더 읽기

[프로그래머스] 최댓값 만들기 (2) (Java)

[프로그래머스] 최댓값 만들기 (2) (Java)

문제 설명 정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소 중 두 개를 곱해 만들 수 있는 최댓값을 return하도록 solution 함수를 완성해주세요. 제한 사항 입출력 예 numbers result [1, 2, -3, 4, -5] 15 [0, -31, 24, 10, 1, 9] 240 [10, 20, 30, 5, 5, 20, 5] 600 입출력 예 설명 문제 해결 과정 이 … 더 읽기

[프로그래머스] 짝수는 싫어요 (Java)

[프로그래머스] 짝수는 싫어요 (Java)

문제 설명 정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요. 제한 사항 입출력 예 n result 10 [1, 3, 5, 7, 9] 15 [1, 3, 5, 7, 9, 11, 13, 15] 입출력 예 설명 문제 해결 과정 이 문제의 핵심은 결과 배열의 정확한 크기를 먼저 파악하고, 홀수만 골라내는 … 더 읽기

[프로그래머스] 아이스 아메리카노 (Java)

[프로그래머스] 아이스 아메리카노 (Java)

문제 설명 머쓱이는 추운 날에도 아이스 아메리카노만 마십니다. 아이스 아메리카노는 한 잔에 5,500원입니다. 머쓱이가 가지고 있는 돈 money가 매개변수로 주어질 때, 머쓱이가 최대로 마실 수 있는 아메리카노의 잔 수와 남는 돈을 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요. 제한 사항 입출력 예 money result 5,500 [1, 0] 15,000 [2, 4000] 입출력 예 설명 문제 … 더 읽기

[프로그래머스] 양꼬치 (Java)

[프로그래머스] 양꼬치 (Java)

문제 설명 머쓱이네 양꼬치 가게는 10인분을 먹으면 음료수 하나를 서비스로 줍니다. 양꼬치는 1인분에 12,000원, 음료수는 2,000원입니다. 정수 n과 k가 매개변수로 주어질 때, 양꼬치 n인분과 음료수 k개를 먹었다면 총 얼마를 지불해야 하는지 return 하도록 solution 함수를 완성해보세요. 제한 사항 입출력 예 n (양꼬치) k (음료수) result 10 3 124,000 64 6 768,000 입출력 예 설명 문제 … 더 읽기

[프로그래머스] 점의 위치 구하기 (Java)

[프로그래머스] 점의 위치 구하기 (Java)

문제 설명 사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를 매깁니다. 점의 좌표를 담은 정수 배열 dot이 매개변수로 주어질 때, 점 dot이 속하는 사분면의 번호를 return 하도록 solution 함수를 완성해주세요. 제한 사항 입출력 예 dot result [2, 4] 1 [-7, 9] 2 문제 해결 과정 이 문제는 if-else … 더 읽기