Java 21 새로운 기능(1) - main에 이어 Preview 인 7개의 feature를 알아보자. String Templates String을 간단하게 사용하기 위해 이미 많은 언어에서 String Templates을 사용하고 있다. Stirng Templates은 String을 쉽게 표현해서 Java 코드 작성을 간단하게 한다. 이로 인해 text와 expressions의 가독성이 향상된다. C# $"{x} plus {y} equals {x + y}" Visual Basic $"{x} plus {y} equals {x + y}" Python f"{x} plus {y} equals {x + y}" Scala s"$x plus $y equals ${x + y}" Groovy "$x plus $y eq..
전체 글
2023.09.19에 LTS 버전인 Java 21이 출시될 예정이다. Preview를 포함해서 총 15개의 feature가 포함된다. 이번 시간에는 정식 릴리즈된 feature들을 살펴보고, 다음 시간엔 Preview를 살펴보도록 하자. Virtual Threads Virtual Threads는 높은 처리량의 동시 애플리케이션을 작성, 유지 관리, 모니터링하는데 드는 비용을 획기적으로 줄여주는 경량 스레드이다. Thread Per Reuqest 스타일로 작성된 서버 애플리케이션을 최적의 하드웨어로 확장할 수 있다. 또한 `java.lang.Thread API`를 사용하는 기존 코드를 최소한의 변경으로 가상 스레드를 사용할 수 있게 하위호환성을 잘 유지한다. 예제 // 기본 Thread new Thread..
Web applications and Project Loom를 번역한 글입니다. 소개 Project Loom은 "간편한 사용성(easy-to-use), 높은 처리량(high-throughput), 가벼운 동시성(lightweight concurrency)"을 JRE에 제공하는 것을 목표로 합니다. Project Loom이 도입한 기능 중 하나는 Virtual thread입니다. 이 블로그 게시물에서는 Apache Tomcat에서 배포한 몇 가지 간단한 웹 애플리케이션을 사용하여 Virtual thread가 웹 애플리케이션에 어떤 의미를 주는지 살펴보겠습니다. 높은 처리량 / 경량화 첫 번째 실험은 Tomcat 표준 Thread pool 사용에 따른 overhaed와 Virtual thread(Loom) ..
lombok.config에서 사용할 수 있는 옵션은 lombok jar를 다운로드한 다음 아래 명령어를 작성하면 얻을 수 있다. 문서에 있을 법한데... java -jar lombok.jar config -g --verbose 그러나 직접 jar를 다운로드하고, 위의 명령어까지 치기에는 번거롭기에 정리해보려 한다. v1.18.26, v1.18.24 위 두 버전은 변경 사항이 없다. ## ## Key : checkerframework ## Type: checkerframework-version ## ## If set with the version of checkerframework.org (in major.minor, or just 'true' for the latest supported version),..
Spring Batch 4.0에서 약 5년의 세월이 흘러 Spring Batch 5.0으로 메이저 버전이 업데이트되었다. 어떤 기능들이 개선되고, 생겼는지 알아보도록 하자. 의존성 Spring Batch5는 Spring framework 6을 의존하기 때문에 최소 Java 17이 필요하다. 그 외에 3rd Party 의존성은 다음과 같다. Spring Framework 6 Spring Integration 6 Spring Data 3 Spring AMQP 3 Spring for Apache Kafka 3 Micrometer 1.10 다양한 JobParemeter Type 드디어(?) 다양한 JobParemeter type을 제공한다. 4.x 버전까지는 4개의 Type(Long, Double, String..
Spring AOP를 활용하여 CircuitBreaker를 구현해 보자. Annotation 기반의 AOP를 활용하기 위해 Annotation과 Aspect를 다음과 같이 만들어주자. @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface CircuitBreaker {} @Aspect @Component public class CircuitBreakerAspect { @Around("@annotation(com.ms.circuitbreaker.CircuitBreaker)") public Object round(ProceedingJoinPoint joinP..
환경설정 필자는 gradle을 사용했고, 아래와 같이 webflux, actuator, prometheus 등의 dependency 설정이 필요하다 dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-webflux' runtimeOnly 'io.micrometer:micrometer-registry-prometheus' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementa..
오랜만에 쓰는 회고글이다. 2022년을 의미 있게 보냈고, 2023년을 맞이하기 위해 회고글을 작성하기로 했다. 이를 계기로 내년엔 블로그 작성에 좀 더 신경써보려한다. 본인확인기관 라이센스 취득 회사에서 본인확인기관 / 전자서명인정사업자 라이센스를 취득하기 위해 준비가 한창이었고, 팀장님의 소소한 프로젝트라는 말에 속아(?) 서버 개발에 참여하게 되었다. 서버 개발은 나를 포함한 두 명이서 진행하게 되었고, 팀원 한분이 입사한 지 얼마 안 되어 필자가 리딩을 하게 되었다. 막상 참여해보니 코딩 자체가 양이 많거나 난이도가 있다기 보단 전반적인 프로세스를 이해하는데 애를 많이 먹었다. 회원가입, 기기변경, 계좌개설, 회원탈퇴 등의 굵직한 로직에 자연스레 녹아들어 가야 했기 때문이다. 또한 리딩의 경험이 ..