Java LTS 25 변경사항 요약
·
Code/Java
1. 서론사이드 프로젝트를 새로 진행하며 Java / Spring 버전에 대한 스택을 정하려고 했는데요.최근 2025년 9월에 출시한 Java 25에 대한 내용을 정리 해봤습니다.25버전은 LTS 버전으로 출시되었으며, 스탠다드 라이브러리, API와 런타임에 대한 변경점이 있었습니다.2. JEP 506 - Scoped Values / ThreadLocal 대체기존에 ThreadLocal은 누수와 복잡한 라이프사이클 관리 문제가 있었다고 합니다. Java 25의 Scoped Values는 읽기 전용 컨텍스트 값을 블록 범위로 안전하게 전달하는 방식이라, 비동기·가상 스레드에서도 깔끔하게 동작한다고 하는데요. 아래의 예를 살펴보겠습니다.import java.lang.scoped.ScopedValue;publ..
HttpServletRequest Body를 여러번 읽을 수 없을까? - ContentCachingRequestWrapper
·
Code/Spring
Request Body에 대한 로그를 Filter 단계에서 찍고 싶을 때...API를 개발하다 보면 "어떤 데이터를 바탕으로 에러가 나지?"라는 생각으로 재현하고 싶을 때가 있습니다. 이때 가장 먼저 확인하고 싶은 것이 바로 Request Body(JSON) 의 내용입니다.하지만 그냥 로그를 찍으면 Stream Closed 에러가 발생하거나, 컨트롤러 계층에서 비어있는 요청이 전달되게 됩니다.오늘은 이 문제의 근본적인 원인인 HttpServletRequest의 특징부터 이를 해결할 수 있는ContentCachingRequestWrapper에 대해서 알아보겠습니다.1. HttpServletRequest에 대해서..가장 먼저 우리가 다루고 있는 객체, HttpServletRequest 에 대해 간단히 짚고 ..
아직도 Service에서 만든 DTO를 그대로 반환하시나요?
·
Code/Spring
Spring Boot를 사용하며 우리는 DTO를 통해 유저에게 반응을 전달하고, 레이어 간에 데이터를 이동시킵니다.우선 DTO에 대해서 자세히 알아보고, 평소에 우리는 어떻게 사용하는지 살펴봅시다.DTO(Data Transfer Object, 데이터 전송 객체)란?DTO는 말 그대로 데이터를 임시로 담고 있는 객체입니다. 계층과 계층 사이에서 데이터를 전송하기 위해서 사용됩니다.Client-Server 프로젝트에서는 각자 서로 다른 구조로 구성되는 경우가 있습니다. 각 영역에서는 중점으로 하는 점이 다른데요. Client Side에서는 사용자 친화적인 표현을 하기 위한 구조를 지향하고, 서버에서는 DB의 테이블 구조와 유사하거나, 성능이 뛰어난 방식을 선호하게 됩니다. 이러한 이유로 DTO는 같은 단어이..
Stream API를 무조건 쓰는 게 정답일까? (함수형 프로그래밍 with Java)
·
Code/Java
이 책을 읽기 전까지 저는 단순히 for 문을 Stream으로 전환하는 것이 '현대의 자바 같은 코드'라고 착각 했었습니다. 하지만 다 읽고서 기준을 스스로 세우게 되었습니다."람다는 고차 함수를 위한 도구이며, 이를 데이터 처리에 최적화한 것이 Stream API이다."서비스 로직 한복판에 람다식이 복잡하게 구성되어 있다면, 작성한 본인조차 일주일 뒤엔 해석할 수 없는 코드가 됩니다. 특히 사이드 이펙트가 필연적인 비즈니스 로직을 억지로 스트림 안에 구겨 넣는 건 코드를 간결하게 만드는 게 아니라 더욱 스파게티 코드로 만드는 길이었습니다.책에서 강조하는 함수형 프로그래밍의 핵심은 결국 '데이터 변환'입니다.Good: List 에서 List로 이어지는 명확한 변환 파이프라인Bad: 스트림 내부에서 외부..