본문 바로가기

dev/java10

Building a SpringBoot Monorepo with Gradle 개요Gradle을 사용하여 프로젝트를 Monorepo로 관리하는 방법에 대하여 설명한다. MonorepoMongorepo와 multi-repo에 대하여 장단점이 있지만 어떤 기술이나 그렇지만 프로젝트 상황에 맞게 선택해서 사용하도록 한다.두 방법에 차이와 장담점에 대해서는 아래 링크에 잘 설명되어 있다.https://www.thoughtworks.com/insights/blog/agile-engineering-practices/monorepo-vs-multirepo 개인적인 생각으로는 프로젝트 인원이 적은 경우 Monorepo가 더 효율적이었고, 깃 브랜치 전략에 따라서도 프로젝트 상황에 맞게 선택하면 좋다.  프로젝트 구조Java 프로젝트로 구성할 예정이고 Gradle로 프로젝트를 구성한다. shop .. 2024. 11. 6.
Java 23 : Structured Concurrency 개요Structured Concurrency는 서로 다른 스레드에서 실행되는 관련된 작업 그룹을 하나의 작업 단위로 처리하여 오류 처리와 작업 취소를 간소화하고, 안정성을 향상하며, 관찰성을 강화하는 방식이다. Java에서는 Structured concurrency를 위한 API를 도입하여 동시성 프로그래밍을 간소화함을 목표로 한다. Kotlin에서는 코루틴 구문을 사용하여 Structured Concurrency(구조적 동시성)을 지원하지만 자바에서는 아직 Preview 상태이고 Java 23에서도 아직 Preview 상태다. 하지만 이후 버전에서는 정식 기능으로 나오기를 희망한다. Motivation개발자는 task를 여러 개의 subtask로 나눠서 복잡성을 관리한다. 일반적인 단일 스레드 코드에서.. 2024. 9. 28.
Java - ReentrantLock 개요There are two scenarios in which a virtual thread cannot be unmounted during blocking operations because it is pinned to its carrier:When it executes code inside a synchronized block or method, orWhen it executes a native method or a foreign function.Pinning does not make an application incorrect, but it might hinder its scalability. If a virtual thread performs a blocking operation such as I/.. 2024. 7. 19.
Generational ZGC in Java 21 개요Java 21은 2023 년 9월에 Generational ZGC의 도입과 함께 공개되었다. Highly scalable, low-latency GC 였던 ZGC는 https://openjdk.org/jeps/439를 통해 generational GC로 업데이트 되었다. 이 업데이트에서는 young / old 객체에 대하여 별도의 세대를 도입하여 메모리 관리를 최적화 하는것에 중점을 두었다. What is ZGC?ZGC는 최대 16TB 크기의 힙을 지원하면서도 밀리초 미만의 일시 정지 시간을 유지하며 높은 확장성을 갖도록 설계되었다. ZGC는 애플리케이션이 실행되는 동안 새로운 객체를 할당하고, 도달할 수 없는 객체를(unreachable object) 스캔하고, 힙을 압축하는 등의 작업을 수행하는데.. 2024. 7. 2.
Java Virtual Threads 사용 시 synchronized 주의 개요Virtual thread를 synchronized 구문과 함께 사용 시 주의 해야한다. Java 21 + tomcat + HttpComponents  조합으로 Virtural Therad를 활성화하여 사용하면 요청이 많은 경우 서버가 blocking되는 이슈가 발생할 수 있다.https://openjdk.org/jeps/444There are two scenarios in which a virtual thread cannot be unmounted during blocking operations because it is pinned to its carrier:When it executes code inside a synchronized block or method, orWhen it executes.. 2024. 6. 4.
Virtual Threads Summary높은 처치량의 동시성 애플리케이션을 개발하는데 사용하는 lighweight threads. HistoryJDK 19 미리보기 기능으로 제안되었고, 아래 변경사항을 포함하여 JDK 21에 추가될 예정thread-local variables 지원Thread API를 통해 직접 생성 가능Goalsthread-per-reqeust style로 하드웨어를 최대한 활용한 코드를 쉽게 작성 할 수 있게 해준다.java.lang.Thread API를 사용하여 최소한의 변경으로 가상 스레드를 적용할 수 있게 한다.기존 JDK 툴로 트러블 슈팅, 디버깅, 프로파일링을 가능하게 한다.Non-Goals전통적인 스레드 구현을 제거하거나, 가상 스레드 사용으 위해서 기존 애플리케이션을 마이그레이션하는 것이 목표가 아.. 2024. 6. 2.