Spring 10

리플렉션 2트

리플렉션(Reflection) 요약 정리리플렉션은런타임 시점에클래스, 메서드, 필드, 생성자 등의 메타데이터를 조회하거나 조작할 수 있는 기능이다.컴파일 시점에 뭐 하는 게 아니고,런타임에 .class 파일을 읽어서클래스의 메타정보(클래스명, 메서드, 필드, 생성자 등) 를 조사하거나 조작하는 것.그러니까 "코드를 실행 중"에,클래스 이름을 알고 있다면해당 클래스의 메서드, 필드, 생성자 등에 접근해서동적으로 메서드 호출, 객체 생성, 필드 읽기/수정 등을 할 수 있다.리플렉션이란, 실행 중인 프로그램 안에서 클래스의 구조(메타데이터)를 조사하고, 그 구조를 기반으로 메서드 호출, 필드 접근, 객체 생성을 동적으로 수행하는 기술이다.흐름상컴파일할 때는 그냥 .class 파일만 만들어진다. (메타데이터 포..

Spring 2025.04.28

빈과 리플렉션

빈과 리플렉션, 그리고 스프링 동작 정리스프링이 실행될 때 (앱 시작 시점에)@Component, @Service, @Repository, @Controller 같은 걸 쭉 스캔해서클래스 메타정보(어떤 클래스, 어떤 생성자, 어떤 필드) 를 싹 읽어놓고빈으로 등록할 대상을 결정한다 (IoC Container에 등록)나중에 실제 서비스 객체를 사용할 때필요한 의존성 (ex: 레포지토리, 다른 서비스 등)을리플렉션을 이용해서 필드 주입, 생성자 주입, 메서드 주입 해준다서비스 객체는 그냥 "그게 어디서 만들어졌는지" 신경 안 쓰고 바로 쓰기만 하면 된다공식 용어 :개념설명스프링이 스캔해서 메타정보를 모으는 것컴포넌트 스캔(Component Scan)메타정보를 기반으로 객체를 관리하는 것IoC (Inversi..

Spring 2025.04.28

시큐리티 요청 흐름 with GPT

시큐리티는 완존히 문외한이라 뭔 얘길 해도 알아먹을 수가 없다공부...를 ... 해야... 한...다..... 틀릴 수도 있음... 1. 클라이언트 요청사용자가 애플리케이션에 요청(예: /profile 경로).2. FilterChain을 통한 요청 처리요청은 Spring Security의 FilterChain을 통과주요 필터:SecurityContextPersistenceFilter: 기존 SecurityContext를 복원UsernamePasswordAuthenticationFilter: 사용자 인증 처리(예: 로그인 요청 처리).기타 필터: 권한 확인, 세션 관리, CSRF 보호 등 추가 작업 수행.3. AuthenticationProvider를 통한 인증AuthenticationManager가 Au..

Spring 2024.12.25

빈약한 도메인 모델 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