Loading...
잠시만 기다려 주세요.
sealed 키워드(JDK 17+)는 클래스/인터페이스의 확장을 명시적으로 제한하여, 임의의 상속을 방지하고 통제된 설계를 가능하게 합니다. 🔒record 타입(JDK 14+)은 불변 데이터 운반체 생성을 간소화하여, 게터/세터와 같은 상용구 코드를 줄이고 데이터 무결성을 보장합니다. 🧊sealed interface Container를 기반으로 Search, Response, VO 세 가지 특정 데이터 전송 객체를 정의하여 각 아키텍처 계층의 목적에 맞는 타입 안전하고 명시적인 데이터 흐름을 제공합니다. 📦Search 컨테이너는 컨트롤러에서 서비스로 전달되는 인바운드 요청 데이터를 담으며, 요청 파라미터와 페이징 정보를 포함합니다. 🔍VO 컨테이너는 서비스 계층 내에서 리포지토리로부터 서비스로 데이터를 전달할 때 사용되며, 지속성 데이터(가급적 레코드 형태의 프로젝션)와 감사 및 페이징 정보를 캡슐화합니다. 📊Response 컨테이너는 최종 HTTP 응답을 위한 sealed interface로, Success와 Fail 두 가지 타입을 명시적으로 정의하며, ResponseHandler에 의해 자동으로 처리됩니다. ✅❌Container 및 Response 인터페이스의 sealed 특성은 허용된 타입을 명확히 선언하여 안티패턴을 방지하고 아키텍처 경계를 강화합니다. 🗣️ResponseHandler는 서비스의 반환 값을 자동으로 Success 또는 Fail Response 컨테이너로 묶어, 컨트롤러의 응답 로직을 간소화합니다. 🤖Search 컨테이너는 특정 스프링/잭슨 데이터 바인딩 문제로 인해 record 대신 final class로 구현되어, 해당 컨테이너의 불변성 보장에 제한이 있습니다. ⚠️VO 내에서 데이터베이스 프로젝션을 record로 강제하는 방법에 대한 추가 연구가 필요합니다. 🚀