기본 콘텐츠로 건너뛰기

[정보공유] Working with Virtual Threads in Spring 6 - baeldung blog

최근 Baeldung 의 Author 들이 활발하게 활동을 하고 있습니다. 그만큼 최근에 여러가지 이슈들이 많이 있다는 것을 의미하는 것도 같습니다. 최근 Jdk 의 앞으로의 방향에 대한 포스트나 유튜브를 보다가 관심이 갔던 부분 중 하나가 Virtual Threads  부분이었습니다. 특히나 Spring Framework 의 TaskExecuteor에 어떤 식으로 포함이 될 지 궁금하면서도 찾아보지는 않았네요.(게으른것도 있지만 요즘 프로그램 기초편을 다시 공부중이라 정신이 없네요) Baeldung Team 에서 뭔가 해주지 않을까 했는데 드디어 Post가 올라왔습니다. 해당 포스트로 넘어가는 링크 보기 전에 잠시 Virtual Thread에 대해서 알아볼께요. Java Virtual Threads (JVTs) JVTs 는 Java 19 에서 새롭게 포함된 새로운 기능입니다. Platform Threads의 대안으로 등장했고, Platform Threads 보다 경령의 Thread로서 제안되었는데, 이 프로젝트는 Project Loom에 의해서 발전하고 있습니다. JVTs는 자바 가상 머신 (JVM)에서 관리되는 Thread model로 특정 OS Threads 에 바인딩되어 동작하지 않기 때문에 Platform Thread 보다 훨씬 효율적이고 확장 가능하다는 설명입니다. 일단 스펙 설명만으로 보면 Threads의 생성(created)과 소멸(destroyed)이 On-demand 로 동작하기 때문에 좀 더 Scalable하다고 합니다. 이는 높은 병렬처리(High-concurrency) application 즉 대규모 threads 가 필요한 application에 적합하다고 하네요.  또한 JVTs는 연속성(continuations) 및 가상스택 프레임(virtualized stack frames)과 같은 다른 기능을 포함한다고도 하는데 이 부분은 무슨 이야기인지 잘 모르겠습니다.  다만, 아직 실험(experiment) 수준으로 앞으로의 행보를 잘 따
최근 글

Null Object Pattern 과 Optional 사용

오늘 정리해 보고자 하는 건 누구나 다 아는 패턴 중 하나일 Null Object Pattern 에 대해서 한번 생각해 보려고 한다. 일단은 글작성 동기는 어떻게? 퇴사를 얼마 안남기고 막내 프로그래머(경력상 막내지만 착실한 친구)에게 Optional 을 설명해 주고 있었는데, 뭔가 부족한 설명을 한 것 같은 느낌이라 좀 더 어딘가에 정리를 해 놓고 싶었습니다.  Optional 을 설명하다 보면 참 많이 돌아가게 되더구요. 전혀 생각도 못했습니다. 시스템 내에서 NullPointerException 이 어떤 의미로 다가왔었는가 Null Check 로직이 많아지면 얼마나 코드를 읽기 어렵게 만들어 주는가 이런 체크 로직이 많은 상황에서 새로운 다향성 객체가 만들어질 때 얼마나 많은 수정이 일어난는가 등등 그런 이유로 Optional 이 생겨나긴 했는데 일단 그 장점과 위험성은 정리해 놓은 분들이 많으니 블로그를 검색해봐라로 마무리 되었습니다. 그런데 말이죠 예전에도 Null Object Pattern 은 빈번하진 않아도 꽤 사용이 되었던 패턴입니다. 그 정의는 매우 단순합니다. 우선 ChatGPT 가 알려주는 Null Object Pattern 은 이렇습니다. "Null Object Pattern is a design pattern in object-oriented programming that allows the use of a special null object to represent the absence of an object. Instead of returning a null reference from a method or property, the null object pattern provides a substitute object that behaves in a predictable and consistent way with the rest of the system. This can help to reduce the amount of nu

[영상공유] Spring for the Architecturally Curious Developer by Oliver Drotbohm

이번 영상은 Oliver Drotbohm이 Spring Monolith에 대해서 설명하는 영상이다. 전체적으로 Josh Long 처럼 말이 빠르지 않아서 나 같은 사람도 꽤 알아들을 수 있었던 영상이다. 시간은 50정도지만 실제로 들어보면 그렇게 길게 느껴지지는 않는다. 2015년 즈음 Spring Boot 와 Spring Cloud  프로젝트가 본격화 되면서 Microservice Architecture(MSA)가 개발의 기본 아키텍처로 자리를 잡았고, 당시 거의 모든 개발자들이 MSA를 도입하려고 많은 노력을 해 왔다고 생각한다. 필자도 최근 몇개의 프로젝트(또는 회사)에서 프로젝트를 진행하면서 MSA를 변형해서라도 프로젝트에 도입해보고자 노력을 했던 것 같다. 그런데, 최근 Modular Monolith 라는 용어가 개발 커뮤니티에서 많이 보이고 있다. Monolith 가 다시 화두에 올라오고 있는 이유를 정확히 알수 있을 정도의 경험과 실력은 없지만 Simon Brown 이 유튜브 강의( 여기 에서 볼 수 있다)와 그 간의 경험을 바탕으로 약간 정리해볼까 한다. 일단은 모두가 MSA를 도입하려고 했던 이유부터 아주 간단하게 알아보면 다음과 같다.(사실은 필자가 MSA를 좋아했던 이유다) Monolith 는 회사 전체 시스템을 하나의 모듈로 보고 개발이 되다보니 개발 조직간의 협업의 어려움, 수평확장의 어려움과 비효율성 및 비용증가, 시스템이 커짐에 따라 발생하는 유지보수 문제성 등이 있었고 이로 인해 발전해 온 SOA의 경우는 무겁고 비싼 ESB를 기반으로 개발되다보니 비용적인 측면과 이후 거의 모두가 ESB 지옥을 경험하는 경험들이 발생했다. 그에 MSA는 SOA의 기본 이점을 유지하면서도 가볍고 클라우드 환경에 적합한 개발이 가능하다는 이점이 있었다. 서비스간 통신에 기본적이고 단순한 프로토콜(일반적으로는 Rest API)을 이용해서 통신하다보니 다른 서비스들이 특정 프레임워크나 언어에 구애받을 필요가 없었다. 병목지점이 될만한 서비스들만 확장을 할

[정보공유] Spring Boot 3.0.5 available now

 아래 내용의 원문은 여기 에서 보실 수 있습니다. 🐞  Bug Fix (40개 BugFix 주요 내용) Embeded Web Server 가 설정되어있지 않으면 EmbeddedWebServerFactoryCustomizerAutoConfiguration이 설정되지 않도록 수정. 관련이슈 #34189 관련이슈 #34659 StandardConfigDataResource 가 클래스패스에 ‘.’ 을 가지고 있을 경우 같은 파일이 두번 임포트 되는 버그 수정 관련이슈 #34212 관련이슈 #34617 SnakeYAML 2.0 을 사용하는 경우 application.yml 을 로딩할 때 NoSuchMethodError 를 발생시키는 버그 수정 관련이슈 #34405 관련이슈 #34515 @ConfigurationProperties annotation 이 mutable Kotlin data classes 에서 동작하지 않는 버그 수정 Gitter 에서 주로 논의가 되었던 부분으로 보이며 해당 내용은 아래에서 Close 되었음 관련이슈 #34500 podman 으로 build image 를 할때 image build pack 이 설정되어있으면 실패한다는 문제 수정 관련이슈 #34324 관련이슈 #34495 @ComponetScan 사용할 경우 AOT로 Native Image 를 만들려할때 Fail 현상을 수정 관련이슈 #34371 📙 Documentation JDK 20 지원. WebFlux 사용시 Custom error page 에 대한 부분 명확화 MavenRegistry에서 publishRegistry 를 Terminal Command 로 Configuration 하는 팁에 대한 보강 Old API 두개에 대한 업데이트 JdbcConfiguration  has been removed in this  commit .  setApplicationContextClass  has been removed in this  commit . JobLauncherApplicat

[White Paper 공유] Josh Long 이 작성한 "Spring Boot 3 AOT" 소개

수퍼맨 Josh Long 이 Spring boot 3 의 AOT 에 대한 백서를 공개했습니다. 이 분은 정말 수퍼맨입니다. 도대체 그 많은 일을 어떻게 하는걸까요? 이 분의 하루는 120시간쯤 되나봅니다. 간단히 내용을 살펴보니 예제 몇가지와 그때의 동작 방식에 대해서 maven 기반으로 설명하고 있네요. 제목은 "Everything You Never Wanted to Know About Spring Boot 3 AOT" 입니다. 다운로드는 여기 에서 가능하고, 본인의 이메일 주소를 넣으시고 진행하시면 됩니다.

[영상 공유] Spring Boot 3 and Spring Framework 6...

2주전 IntelliJ IDEA by Jetbrains YouTube 채널에서 라이브로 진행된 Josh Long 의 Bootiful Spring Booot 3 라는 영상입니다. Spring Boot 3와 Spring Framework 6라고 되어있지만 실제로는 Spring Boot 3 와 향후 약 5년 정도의 방향성 같은 것들을 이야기하는 것 같습니다. 영어권 사람들도 말이 너무 빨라서 따라가는데 어려움을 느낄 정도로 굉장히 빠른 속도로 1시간 정도를 진행합니다. 영어 실력이 미천해서 자동 영어 자막을 켜놓고 겨우 몇 가지 포인트를 잡아냈습니다 . 다만 , GraalVM 은 자동 영어 자막에서는 계속 'Gravian' 등 으로 표기되네요^^ Spring Boot의 방향성이나 Spring Boot 3 에서의 주요 핵심 포인트 등에 관심이 있으신 분이라면 꼭 보시면 좋을 영상이라고 생각합니다. 단, Spring Boot 3 의 특징이 이게 다냐고 생각하시면 안됩니다. 이 영상에서 주요 포인트로 설명된 내용이 아래의 내용이라는 것이지요. Spring Boot 3 에 대한 더 자세한 내용이 궁금하신 분들은  Spring Boot 3 and Spring Framework 6.0 – What’s New (Baeldung)  을 참고하시면 됩니다. - JDK 17 의 사용   아직도 거의 JDK 8 또는 9 기반(물론 Gradle에는 JDK 11 설정이고, 실제 Docker Image도 JDK 11 이긴 했지만...)으로 프로그램을 하고 있는 저는 정말 부끄러워 몸둘바를 모르겠더군요. - Micrometer 그렇지 않아도 공부하려고 리스팅 해 놓긴 했었는데, 좀 더 자세히 봐야겠어요. 일단 짧은 설명에 의하면 기존의 Spring Cloud Sleuth 를 대체할 듯 합니다. 예전에 잠깐 본 바로는 단순 대체가 아니라 다양한 장점이 존재하는 것 같았습니다. 빠른 시간안에 살펴봐야 할 것 같아요. - GraalVM + AOT, B

숨비 아일랜드 새로운 출발...

오늘은 개발하는 카페 사장으로 카페 관련 글 한번 올릴까 합니다. 7년 전 친구가 홀로 시작한 카페를 제가 물려받은 후 벌써 2년이 지났더군요. 한 달 가까이 셀프 리모델링을 진행한 끝에 드디어 다시 새롭게 카페를 오픈했습니다. 새로운 카페의 분위기는 좀 더 느긋하고 여유롭게 변화했어요 ^^ 물론 작년부터 계속해 온 카페 내 사진관도 계속 함께 한답니다. 새롭게 시작하는 카페와 사진관을 사진으로 소개해 볼까 합니다. 혹시 제주도에서도 서귀포 동쪽을 지나가다 맛있는 음료와 디저트가 필요하신 분들은 들려주세요. 자세한 내용은 카페 인스타그램(sumbi_cafe) 과 사진관 인스타그램(169photocafe) 을 참고해 주세요^^ 숨비아일랜드 정보 보기(네이버 플레이스)