본문 바로가기
728x90

Backend/Java19

[Java] RestTemplate 대신 WebClient를 선택하는 이유 [Java] RestTemplate 대신 WebClient를 선택하는 이유Spring Boot 기반 애플리케이션에서 외부 HTTP API 호출을 위해 오랫동안 RestTemplate을 사용해 왔습니다. 하지만 Spring 5부터 소개된 WebClient는 비동기·논블로킹 호출, 리액티브 스트림 기반 처리 등으로 마이크로서비스 아키텍처와 대용량 트래픽 환경에서 뛰어난 Spring Boot 성능 최적화를 제공합니다.이 글에서는 RestTemplate의 한계를 짚어보고, WebClient로 전환해야 하는 이유에 대해서 알아보고자 합니다. 1. RestTemplate의 한계1-1. 블로킹 I/O로 인한 스레드 낭비RestTemplate은 내부적으로 HttpURLConnection·Apache HttpClient.. 2025. 5. 25.
[Java] 파일 입출력의 진화: 전통 I/O에서 현대적 비동기·리액티브 방식까지 [Java] 파일 입출력의 진화: 전통 I/O에서 현대적 비동기·리액티브 방식까지Java는 출시 초기부터 지금까지 다양한 파일 입출력(File I/O) API를 제공해 왔습니다. 각 버전마다 성능, 사용 편의성, 비동기 처리 능력 등을 개선해 왔는데요, 이 글에서는 시간의 흐름에 따라 주요 변화를 짚어보고, 현재 어떤 방식으로 파일을 다루는지 살펴보겠습니다. 아래 코드들은 깃허브에 테스트 코드까지 구현해 놓았습니다. 필요하신분들은 참고하시길 바랍니다. 1. Java 1.x: java.io 전통 스트림 방식시기: Java 1.0~1.4주요 클래스: FileInputStream/FileOutputStream, FileReader/FileWriter, BufferedInputStream/BufferedOutp.. 2025. 5. 24.
[Java] CompletableFuture를 활용한 비동기 프로그래밍 [Java] CompletableFuture를 활용한 비동기 프로그래밍1. 기존 Future의 한계// ExecutorService + Future 사용 예시ExecutorService exec = Executors.newFixedThreadPool(4);Future future = exec.submit(() -> { simulate(); // 작업 수행 return "서버 응답 데이터";});String result = future.get(); // 블로킹: 호출 스레드가 여기서 멈춰 대기// Future 작업이 완료 된 후 이후 로직 실행 블로킹 호출: Future.get() 호출 시 작업이 끝날 때까지 스레드가 멈춥니다.콜백 구성 번거로움: 작업 완료 후 후속 로직을.. 2025. 5. 5.
[Java] ☕ Executor 프레임 워크 [Java] ☕ Executor 프레임 워크Executor 프레임워크는 Java에서 스레드를 생성하고 관리하는 표준화된 방법을 제공한다.전통적으로 우리는 new Thread()를 사용해 스레드를 하나하나 직접 만들었을 때 잘못사용하게 되면 다음과 같은 문제점들이 있었다.리소스 낭비 (새 스레드를 만들 때마다 메모리/CPU 소모)스레드 수 관리 실패 (수천 개 스레드가 생성되어 시스템 다운)코드 복잡도 증가 (어디서 누가 스레드를 돌리고 있는지 추적하기 힘듦)직접 만든 스레드는 작업이 끝나도 계속 살아있거나 제대로 종료되지 않아서 리소스를 점유한다.직접 만든 스레드에서는 예외를 잡기 어렵고, 작업 결과를 받아오기 힘듦 Executor 프레임워크는 이 모든 문제를 해결하기 위해 등장했다. Executor는 .. 2025. 4. 27.
728x90