Java(62)
-
Java 21
Virtual Threads가상 스레드 기능이 정식 기능으로 변경되었습니다.Sequence CollectionsCollection 인터페이스에 순서를 명확하게 정의하는 새로운 기능들이 추가되었습니다.ex) getFirst(),getLast(),reversed()문자열 템플릿(Preview)변수와 표현식을 문자열에 더 쉽고 안전하게 포함할 수 있는 새로운 방법이 나왔습니다.String name = "Joan";String info = STR."My name is \{name}";// 결과: My name is JoanRecord PatternsJava20 - Record Patterns 프리뷰로 나왔던 Record Patterns가 정식 기능으로 변경되었습니다.Pattern Matching for swit..
2025.08.07 -
Spring boot 3.1
Spring Boot 3.1은 개발 및 테스트 환경의 자동화와 편의성에 초점을 맞춘 릴리스입니다.Docker Compose 지원(개발환경)docker-compose.yml파일을 프로젝트 루트에 두면, 개발 환경에서 Spring Boot 애플리케이션을 실행할 때 Docker Compose가 자동으로 실행됩니다. 이로 인해 개발자가 로컬에서 DB나 Redis 같은 외부 서비스를 수동으로 설치하고 실행할 필요 없이, docker-compose up과 동일한 효과를 애플리케이션 실행만으로 얻을 수 있습니다.Testcontainers 지원 강화통합 테스트시 Testcontainers 사용이 훨씬 간편해졌습니다. @ServiceConnection 어노테이션을 통해 지금까지 수동으로 작성해주었던 연결 정보 코드들을 ..
2025.07.22 -
Java 20
Java20은 기능적인 변화보다는 프리뷰와 Incubator API 위주로 변경점이 존재합니다. 즉 당장 사용되기보다는 추후 버전에서 정식 기능으로 구현하기 위해 준비하는 단계입니다.Scoped Values(Incubator)Scoped Values는 주로 다중 스레드 환경에서 변경 불가능한 값을 스레드 간에 안전하게 공유하기 위해서 사용됩니다. 특히 Virtual Thread와 함께 사용될 때 강력한 성능과 구조적 병렬성을 제공합니다.기존 Thread Local의 문제점메모리 누수 위험값 변경이나 삭제를 잊으면 문제가 발생특징특정 작업 범위(scope) 내에서만 사용할 수 있습니다.불변이며 Thread Local보다 더 안전하고 성능이 좋습니다.import java.lang.ScopedValue;pub..
2025.07.20 -
Spring Boot 3.0 변경점
Java 지원 버전 변화Spring Boot 3.0부터는 Java 17버전 이상만 지원합니다.Java EE -> JakartaEE로 대체GraalVM기반의 Spring Native 공식 지원AOT 컴파일 지원: 기존의 JIT Compiler는 런타임에 바이트코드를 기계어로 변환하지만 AOT 컴파일로 빌드 타임에 정적 컴파일링어플리케이션 시작 시간과 메모리 사용량 감소OS에 맞는 기계어를 빌드타임에 컴파일하기 때문에 독립 실행 파일로 배포/실행 가능(JVM 불필요)'/api/hello'와 '/api/hello/'가 이제 불일치로깅 Datetime의 Default format 변경Logback 및 Log4j2의 default 로그 DatetimeFormatdl ISO-8601 표준에 맞게 변경됩니다.yyyy..
2025.07.17 -
Synchronized & ReentrantLock
SynchronizedSynchronized란 현재 데이터를 사용하고 있는 해당 스레드를 제외하고 나머지 스레드들은 데이터에 접근할 수 없도록 막기 위해 사용하는 키워드입니다.Synchronized 특징스레드가 Synchronized 키워드가 붙은 메서드에 진입하려면 해당 객체의 락을 획득해야합니다.락을 획득하지 못한 스레드는 RUNNABLE 상태에서 BLOCKED 상태로 전환됩니다. 락을 획득할 때까지 대기하며, 이 동안 CPU 실행 스케줄링에서 지외됩니다.여러 스레드가 대기 중일 경우, 락 획득 순서는 보장되지 않습니다.Synchronized 블록 안에서는 변수의 메모리 가시성 문제가 자동으로 해결되므로 별도의 volatile 선언이 필요하지 않습니다.Synchronized의 단점BLOCKED 상태의..
2025.07.15 -
Java Virtual Thread
Virtual ThreadJava 21에서 정식으로 도입된 Virtual Thread는 기존의 Kernel-level thread와 User-level thread를 1:1 매핑하여 사용하는 JVM 스레드 모델을 개선한 여러 개의 가상 스레드를 하나의 네이티브 스레드에 할당하여 사용하는 방법입니다.Java ThreadJava thread는 ExecutorService를 두어 JVM 내부에서 스레드를 관리/실행합니다. 이렇게 ExecutorService를 통해 스케줄링되는 Thread는 JVM을 통해 커널 스레드를 만들어 실행합니다.Virtual Thread란Virtual Thread는 기존 Kernel thread(1) : User thread(1)의 구조가 아니라 Kernel thread(1): Use..
2025.07.12