목록IT/Java (38)
잡동사니
안녕하세요. yeTi입니다.이번에는 스프링 부트(Sprint Boot) 기반 개발 환경에서 기존의 스레드 풀(Thread Pool) 방식을 사용하던 애플리케이션을 자바 21에서 도입된 가상 스레드(Virtual Threads) 방식으로 전환하는 과정을 알아보겠습니다.서론스프링 부트는 임베디드 서버를 제공합니다.그 중 많이 사용하는 톰캣 서버는 스레드 풀을 활용하여 웹 요청을 처리하는 구조를 가집니다. 그러나 자바 21에서 도입된 가상 스레드는 더 높은 동시성으로 하드웨어 자원의 효율성을 제공하며, 특히 I/O 바운드 애플리케이션에서 큰 성능 향상을 기대할 수 있습니다. 이번 포스팅에서는 스레드 풀 방식에서 가상 스레드 방식으로 전환하는 과정을 살펴보고, 전환시 유의해야 할 점들을 공유해 보겠습니다.스레드..
안녕하세요. yeTi입니다.오늘은 클라우드 네이티브 애플리케이션에서 스레드 풀과 버추얼 스레드의 비교를 해보려고 합니다.서론소프트웨어 개발 분야에서 동시성과 병렬성 관리는 효율적이고 반응성 높은 애플리케이션을 구축하는 데 필수적입니다. 특히 클라우드 네이티브 애플리케이션에서는 확장성과 자원 최적화가 중요한데, 이러한 요구사항을 만족시키기 위해 적절한 동시성 모델의 선택이 매우 중요합니다.본 글에서는 자바에서 제공하는 두 가지 주요 동시성 모델인 스레드 풀(Thread Pool)과 버추얼 스레드(Virtual Thread)를 비교 분석합니다. 각 모델의 특징, 장단점, 그리고 클라우드 네이티브 애플리케이션에서의 적용 가능성을 살펴봄으로써 개발자들이 적절한 동시성 모델을 선택하는 데 필요한 인사이트를 제공하..
안녕하세요. yeTi입니다.오늘은 클라우드 네이티브 애플리케이션에서 버추얼 스레드의 역할과 이점을 알아보고자 합니다.버추얼 스레드는 전통적인 스레드 모델의 한계를 극복하고, 더 높은 동시성을 제공하기 위해 고안된 경량 스레드 모델입니다. 본 포스팅은 버추얼 스레드의 개념부터 시작하여, 클라우드 네이티브 애플리케이션에서의 실제 적용 사례와 함께 그 이점 및 한계까지 종합적으로 분석할 것입니다.클라우드 네이티브 애플리케이션의 특성먼저 클라우드 네이티브 애플리케이션이 가지는 특성을 정리하여 큰 맥락에서 바라볼 수 있도록 하겠습니다. 클라우드 네이티브 애플리케이션은 처리량, 병렬성, 동시성, 효율성의 관점에서 다뤄볼 수 있습니다.처리량(Throughput)처리량은 애플리케이션이 단위 시간당 처리할 수 있는 작업..
안녕하세요. yeTi입니다. 오늘은 어제(2023-09-19) 공식적으로 발표한 Java21의 스펙을 간략하게 살펴보고자 합니다. 개요 Core Java Library JEP 431: Sequenced Collections JEP 442: Foreign Function & Memory API (Third Preview) JEP 444: Virtual Threads JEP 446: Scoped Values (Preview) JEP 448: Vector API (Sixth Incubator) JEP 453: Structured Concurrency (Preview) Java Language Specification JEP 430: String Templates (Preview) JEP 440: Record ..
안녕하세요. yeTi입니다. 오늘은 백기선님의 인프런 강좌 중 하나인 이펙티브 자바 완벽 공략 1부 의 완주 후기를 공유하려고 합니다. 강의 수강 계기 앞서 백기선님의 이팩티브 자바 완주 후기 를 공유 했는데요. 유튜브 버전 강의는 맛보기 버전인데 그 동안 당연하게 사용하던 코드들의 시발점부터 장단점까지 알아가는 과정이 즐거웠어서 정식으로 인프런 강의를 보게 됐습니다. 배운점 객체 생성의 시점을 관리하고 유연하게 할 수 있는 방법 생성자는 다양한 매개변수 타입을 지원하려면 많은 수의 생성자를 만들어 둬야한다는 단점과 본인의 객체 타입만 반환할 수 있다는 제한이 있습니다. 이를 좀더 유연하게 대응하게 하기 위해 static 메소드를 활용하여 객체 생성을 할 수 있는데요. 이를 정적 팩토리 메소드라고 합니다..
안녕하세요. yeTi입니다. 오늘은 백기선님의 강의 중 자바의 열거 타입를 보다가 받은 숙제인 HashMap, HashSet과 EnumMap, EnumSet과의 차이점 확인해보고자 합니다. EnumSet의 구조 EnumSet 은 내부적으로 bit vector를 사용하기 때문에 메모리 효율이나 성능면에서 뛰어나고 64bit를 넘어가는 경우도 대응할 수 있습니다. 다만 thread-safe 하지 않기 때문에 multi-thread 환경에서 사용하려면 Collections.synchronizedSet() 을 사용하여야 합니다. 따라서 Bit 필드 사용해야될 경우 EnumSet 을 사용하면 효율이나 성능측면에서 득이 됩니다. public class Text { public enum Style { BOLD, IT..
안녕하세요. yeTi입니다. 오늘은 Java 의 Enum 을 지역 변수처럼 사용하려고 시도하면서 겪은 현상을 공유하고자 합니다. 현상 다음 테스트 코드와 같이 enum 을 여러 곳에서 지역 변수로 할당받아 Enum의 내부 변수(message)를 변경하는 작업을 수행했더니 의도와는 다르게 message 의 값이 이전 값을 계속 유지하는 버그가 나타났습니다. class EnumTest { @Test void constructor() { EnumType responseType1 = EnumType.INTERNAL_SERVER_ERROR; responseType1.changeMessage("yeti"); EnumType responseType2 = EnumType.INTERNAL_SERVER_ERROR; res..
안녕하세요. yeTi입니다. 오늘은 백기선님의 유튜브 강좌 중 하나인 이팩티브 자바 의 완주 후기를 공유하려고 합니다. 강의 수강 계기 지난 후기 이후로 요즘 너무 기초 강좌만 보고 있나 라는 생각이 들면서, 좀 더 발전적인 다른 무언가를 해야겠다는 생각을 막연하게 가지고 있었습니다. 그러던 차에 백기선님의 지금까지 만들었던 강의들은 결국 이 강의를 만들기 위한 준비 작업이었습니다. 라는 영상이 이목을 끌었고, 궁극의 강의의 주제는 무엇일까? 라는 궁금증으로 바로 영상을 보게 되었네요. 영상에서 이펙티브 자바 Effective Java 3/E - YES24 는 모든 자바개발자에게 권장하는 필독서중 하나 이지만 모든 개발자가 소화하기는 힘든 어려운 책 이라고 하는데요. 그래서 이펙티브 자바를 주제로 강의를..
안녕하세요. yeTi입니다. 오늘은 RestTemplate 으로 외부 연계시 간헐적으로 javax.net.ssl.SSLException 이 발생한 현상을 해결한 방법을 공유하고자 합니다. 증상 외부 서비스에 RestTemplate 으로 HTTP 요청시 대략 5건에 한건정도 아래와 같이 오류가 발생했습니다. javax.net.ssl.SSLException: Connection reset at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:349) ... Caused by: java.net.Socket..
안녕하세요. yeTi입니다. 오늘은 Java 입문 수업 (생활코딩) 을 완주한 후기를 기록하려고 합니다. 강의 수강 계기 9년넘게 자바라는 언어를 다루며 개발자라는 직업을 가져오고 있는데요. 그럼에도 자바를 잘하는가? 자바에 대해서 많이 아는가? 라는 질문에 감히 그렇다라는 대답을 할 수 없었습니다. 그래서 기회가 되면 기초 수업이라도 지속적으로 들으며 놓치고 있는 부분이 있진 않는지 점검을 하려고 합니다. 이번 생활코딩의 자바 입문 수업도 기초적인것을 놓치고 있는것이 있진 않는지 확인차 강의를 듣게 됐습니다. 배운점 객체 지향 프로그래밍 객체 지행 프로그래밍은 절차 지향 프로그래밍의 믄제를 해결하기 위해 나온 개념중 하나이다. 절차 지향 프로그래밍의 규모가 커질수록 유지보수하기가 힘들어졌고, 이를 해결..