본문 바로가기

JAVA

(32)
[JAVA] Java 21 Virtual Thread와 Kotlin Coroutine 비교해보기 구분Java 21 가상 스레드Kotlin 코루틴동시성 모델JVM이 관리하는 가벼운 스레드로, 자바의 스레드 모델에 직접 매핑되어 자원 사용과 컨텍스트 전환 비용을 줄임.구조적 동시성으로, Kotlin 런타임에서 관리하는 가벼운 스레드. 작업을 차단하지 않고 중단 및 재개 가능.통합기존 Java 코드 및 라이브러리와 원활하게 통합.Kotlin 언어 기능 및 특정 라이브러리 필요 (예: kotlinx.coroutines).성능메모리 오버헤드가 적고 JVM의 네이티브 지원으로 수백만 개의 스레드 처리 가능.수천 개의 코루틴을 효율적으로 관리하지만 중단 지점과 코루틴 전용 구조 필요.Code로 비교해보기Kotlin 코루틴import kotlinx.coroutines.*fun main() = runBlocking..
[JAVA] Java 21 새로운 기능 - Virtual Thread란 무엇인가? Java 21에서는 Virtual Threads라는 중요한 기능이 도입되었습니다. 이 기능은 특히 동시성 프로그래밍을 단순화하고 성능을 크게 향상시킬 수 있습니다. 아래에 Virtual Threads를 사용하는 예시와 함께 이 기능의 개념과 장점을 설명하겠습니다.Virtual Threads 개념Virtual Threads는 Java의 기존 쓰레드 모델을 확장하여, 운영체제의 물리적 쓰레드와는 별개로 JVM 레벨에서 관리되는 경량 쓰레드입니다. 이는 수천에서 수백만 개의 쓰레드를 효율적으로 생성하고 관리할 수 있게 합니다.주요 기능:메모리 사용량 감소: 가상 스레드는 약 10KB의 메모리를 사용하며, 기존 스레드는 2MB를 사용합니다.컨텍스트 스위칭 비용 감소: 가상 스레드는 컨텍스트 스위칭 비용이 적어 ..
[JAVA] WebClient 사용법 알아보기! 간단 예제 포함! Spring Boot에서 WebClient는 비동기식 HTTP 요청을 처리하기 위해 사용되는 클라이언트입니다. WebClient는 Spring 5에서 도입된 새로운 HTTP 클라이언트로, RestTemplate의 대체제로 설계되었습니다. WebClient는 비동기 및 동기 방식 모두를 지원하며, 더 유연하고 강력한 기능을 제공합니다.WebClient 기본 설정Spring Boot 프로젝트에서 WebClient를 사용하려면 먼저 의존성을 추가해야 합니다. build.gradle 또는 pom.xml 파일에 다음을 추가하세요.Gradledependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux'}Maven ..
[JAVA] RestTemplate 개념 알아보기! 간단 예제 포함! RestTemplate은 스프링 프레임워크에서 제공하는 HTTP 클라이언트 템플릿 클래스입니다. RESTful API를 소비하는 데 유용한 도구로서, 다음과 같은 다양한 기능을 제공합니다.구분내용간편한 HTTP 요청 및 응답 처리RestTemplate을 사용하면 HTTP 요청 헤더, 본문 및 URL을 쉽게 설정하고, 응답 상태 코드 및 본문을 추출할 수 있습니다.자동 메시지 변환RestTemplate은 기본적으로 JSON, XML, 바이너리 데이터 등 다양한 형식의 메시지를 자동으로 변환합니다.인증 지원기본 인증, 다이제스트 인증, OAuth 등 다양한 인증 방식을 지원합니다.편리한 예외 처리RestTemplate은 HTTP 오류를 처리하고 예외를 발생시켜 응용 프로그램 코드를 간결하게 유지하는 데 도움..
자바 성능 튜닝 정보 알아보기! 구분 내용 -Djava.awt.headless 그래픽 사용자 인터페이스 (GUI)를 지원하는 환경에서 Java 애플리케이션을 실행할 때 사용됩니다. 이 설정은 화면이 없는 서버 환경에서 Java 애플리케이션을 실행할 때 유용합니다. java.awt.headless 시스템 속성을 true로 설정하면, Java 애플리케이션은 그래픽 환경이 없는 "헤드리스" 모드로 실행됩니다. 이 모드에서는 그래픽 화면이 없기 때문에 그래픽 관련 작업을 수행할 수 없습니다. 대신, 이 모드에서는 그래픽 작업을 대신할 수 있는 대체 수단을 사용하게 됩니다. 이러한 설정은 주로 웹 서버, 배치 프로세스 또는 백그라운드 작업과 같이 그래픽 환경이 필요하지 않은 Java 애플리케이션을 개발하고 실행할 때 유용합니다. 이렇게 설정을 ..
JPA + Hibernate 설치 및 구성 알아보기! JPA 구현체로 하이버네이트를 사용하기 위해 필요한 lib는 아래와 같다. 구분 내용 gradle 참고용 hibernate-core 하이버네이트 라이브러리 * hibernate-entitymanager를 라이브러리로 지정하면 hibernate-core도 함께 내려 받는다. hibernate-entitymanager 하이버네이트가 JPA 구현체로 동작하도록 JPA 표준을 구현한 라이브러리 implementation group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.5.2.Final' hibernate-jpa-2.1-api JPA 2.1 표준 API를 모아둔 라이브러리 * hibernate-entitymanager를 라이브러리로 지정하..
[Reactive Java] Spring WebFlux에서 Error 다루기 애플리케이션을 설계하고 개발할 때 다양한 케이스의 예외 상황을 고려해야 하는 것처럼, 리액티브 애플리케이션을 설계할 때도 모든 종류의 예외 상황을 처리 할 수 있어야 한다. 우리가 알고 있는 onError 시그널은 리액티브 스트림 스펙의 필수 요소여서 예외를 처리할 수 있는 경로로 전파 할 수 있다. 그러나 최종 구독자가 onError 시그널에 대한 핸들러를 정의하지 않으면 onError는 UnsupportedOperationException을 발생 시킨다.그리고 리액티브 스트림에서는 onError가 스트림이 종료되었다고 정의하고 있다. 그렇기 때문에 onError 시그널을 받으면 시퀀스가 실행을 중지하게 된다. 아래 onError 시그널을 처리할 수 있는 다양한 방법을 살펴보자.1. subscribe ..
[JAVA8] 람다 표현식을 조합할 수 있는 유용한 메서드 알아보기 1.Comparator - Comparator.comparing : comparing은 Comparator의 정적 메서드로 Function을 인자로 받는다. Comparator c = Comparator.comparing(Test::getTest); - reversed : 역정렬 Comparator.comparing(Test::getTest).reversed(); - thenComparing : 첫 비교결과가 동일할 경우 다음 비교 Function을 설정할 수 있다. Comparator.comparing(Test::getTest).reversed().thenComparing(Test::getScore()); 2. Predicate - negate : 기존 Predicate을 반전 시킬때 Predicate..