Spring 7

빈약한 도메인 모델 vs 풍성한 도메인 모델

빈약한 도메인 모델 (Anemic Domain Model)특징VO(또는 엔티티): 데이터를 담는 역할만 함. (getter/setter 중심)비즈니스 로직은 서비스 계층에 존재.장점객체가 단순하고 테스트하기 쉬움.서비스 계층에서 로직을 한눈에 파악 가능.단점도메인 객체가 비즈니스와 분리됨 → 로직 응집도가 낮아짐.도메인 객체의 사용 의도가 불명확할 수 있음.풍성한 도메인 모델 (Rich Domain Model)특징도메인 객체가 데이터를 담고 비즈니스 로직도 포함.서비스 계층은 도메인의 비즈니스 메서드를 호출하여 작업 위임.장점도메인 객체가 비즈니스 로직을 캡슐화 → 높은 응집도.도메인 중심 설계(DDD)에 적합.단점설계 복잡도 상승.객체 간 의존성이 증가할 가능성 있음.VO와 DTO의 역할 구분VO (V..

Spring 2024.12.19

ServletResponse.isComitted(), FilterChain (with GPT)

ServletResponse.isCommitted()ServletResponse.isCommitted() 메서드는 Java의 Servlet API에서 응답(Response)이 클라이언트로 전송되었는지 확인하는 메서드임.역할 및 동작isCommitted() 메서드는 응답의 헤더 또는 본문 내용이 이미 클라이언트로 전송되었는지 여부를 boolean 값으로 반환함.응답이 커밋되었으면 true, 아직 클라이언트로 전송되지 않았다면 false를 반환함.주요 특징커밋의 의미:HTTP 응답이 커밋된다는 것은 응답 헤더와 상태 코드가 클라이언트로 전송되었다는 것을 의미함.일반적으로, 첫 번째 바이트가 응답 본문에 기록되면 응답이 커밋됨.또는 flushBuffer() 메서드가 호출되면 강제로 커밋됨.커밋 후 작업 제한:..

Spring 2024.12.19

(지피티 선생님의) 람다와 일급 객체, FP 특강

🍱  말밥: 람다와 일급 객체람다를 이렇게 생각해봐. ‘코드를 바로 손에 들고 쓸 수 있는 작은 조각’ 같은 거야. 한 번, 이런 상상을 해보자:🍳 요리사 이야기요리사가 있는데, 이 사람은 특별한 레시피 없이도 음식을 만들 수 있는 대단한 실력자야. "이 재료로 이렇게 해줘!"라고만 말하면 바로 요리를 시작하지. 이게 바로 람다야. **필요한 재료(인자)**를 주고, **어떻게 요리할지(동작)**를 간단히 정의하면 끝.람다를 쓰면 긴 레시피(함수 정의)를 생략하고, 짧고 귀여운 한 줄로 '작업 지시서'를 적을 수 있는 것이지!🎩 일급 객체란?이제 무대로 넘어가 보자. 일급 객체는 VIP!이 VIP는 다른 '일반적인 값'처럼 놀 수 있는 아주 멋진 자격을 가진 존재야. 예를 들어 함수나 람다를 말이지..

Spring 2024.12.12

WebFlux 첨들어봄

Spring 5에서 도입된 비동기 및 논블로킹(non-blocking) 웹 프레임워크 기존의 동기/블로킹 방식인 Spring MVC와 대조적으로, WebFlux는 Reactive Streams 표준을 기반으로 동작하며, 더 많은 요청을 효율적으로 처리할 수 있도록 설계됨 Spring MVC (기존 방식) 비유:식당 모델:서버(종업원)가 손님(요청)을 처리합니다.종업원은 한 번에 한 손님의 주문을 받고, 요리를 완전히 제공할 때까지 기다립니다.손님이 많으면 종업원 수를 늘려야 합니다. 결국, 종업원이 너무 많아지면 공간(서버 리소스)이 부족해집니다. Spring WebFlux (WebFlux 방식) 비유:패스트푸드 매장 모델:손님이 주문을 하고, 번호표를 받습니다.손님은 음식이 준비될 때까지 기다리지 않고..

Spring 2024.12.10

Spirng AOP

객체 지향 프로그래밍은 r-s-c 같은 수직적인 로직은 잘 분리하지만, 수평적인. 즉, 같은 단계의 로직 분리나, rsc에서 각 계층이나 여러 클래스에 걸쳐 중복되는 코드가 발생할 수 있음 이러한 oop의 해결책으로 aop가 등장함. 비즈니스 로직에서 공통 기능을 모듈화하여 코드 중복을 제거하여 핵심 비즈니스 로직에 집중할 수 있게 해줌. 예를 들어 rsc가 3단계에서 모두 동일한 로직을 수행하는 상황에서는 굳이 3단계 모두에서 중복되는 코드를 작성할 필요 없이 한 단계에만 해당 로직을 작성하면 되고, rsc가 여러 계층이나 클래스에 걸쳐 중복되는 코드 같은 경우에는 공통 기능을 모듈화하여 코드 중복을 제거해 핵심 비즈니스 로직에 집중할 수 있음. 이러한 aop는 * 메서드 실행시간이나 파라미터, 반환 ..

Spring 2024.09.03

Spring MVC 설정 파일 이해하기 : web.xml & dispatcher-servlet.xml

web.xml는 서블릿 컨테이너에 대한 전반적인 설정을 담당한다.1. DispatcherServlet 정의2. URL 패턴과 DispatcherServlet 매핑3. Spring 설정 파일 위치 지정4. ContextLoaderListener 등록 (필요한 경우) dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/dispatcher-servlet.xml 1 dispatcher /  dispatcher-servlet.xml은 Spring MVC의 구체적인 설정을 담당한다. 1. 컴포넌트 스캔 범위 지정2. MVC 관련 어노테이션..

Spring 2024.09.03

ModelAndView vs @ResponseBody

ModelAndView:ModelAndView는 스프링 MVC에서 주로 사용되는 객체로, 컨트롤러에서 처리한 데이터(Model)와 그 데이터를 표시할 뷰(View)를 함께 반환예를 들어, 컨트롤러에서 데이터를 처리한 후, 그 데이터를 JSP 파일과 같은 뷰 템플릿에 넣어서 완성된 HTML 페이지를 클라이언트에게 반환클라이언트는 이 HTML 페이지를 받아서 브라우저에 표시@ResponseBody:@ResponseBody는 데이터를 뷰 템플릿을 거치지 않고 직접 클라이언트에 반환하는 역할을 함이 어노테이션을 사용하면 컨트롤러 메서드는 데이터를 JSON, XML 등의 형식으로 변환하여 HTTP 응답의 본문(body)에 직접 작성클라이언트는 이 JSON 데이터를 받아서 브라우저에서 표시하거나, JavaScrip..

Spring 2024.09.02