본문 바로가기

Spring15

순수 자바로 스프링 구현 (2) - 빈 생성, 의존성 주입 요즘 바빠서 글을 쓰는게 늦었다.지난 편에는 컴포넌트 스캔을 구현해서 메타데이터를 BeanDefinition에 넘겨주는 것까지 했다. 아래가 지난 편이다.https://jaeiktech.tistory.com/222 순수 자바로 스프링 구현 (1) - 컴포넌트 스캔아래에는 글쓰기 컨트롤러 글조회 컨트롤러가 있다.public class PostSearchController extends HttpServlet { private final PostService postService; public PostSearchController(PostService postService) { this.postService = postService; } @Ovjaeiktech.tistory.com 2편을 시작해보자public.. 2026. 4. 1.
순수 자바로 스프링 구현 (1) - 컴포넌트 스캔 아래에는 글쓰기 컨트롤러 글조회 컨트롤러가 있다.public class PostSearchController extends HttpServlet { private final PostService postService; public PostSearchController(PostService postService) { this.postService = postService; } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { Post post = postService.getPost(1L); System.out.println(post.toStrin.. 2026. 3. 8.
스프링 빈이 만들어지는 과정 2026. 2. 15.
빈 스코프 스코프란 생명주기싱글톤 : 스프링의 생성부터 종료프로토타입 : 요청시 생성 주입 후 관리X리퀘스트 : HTTP 요청과 나갈때까지 유지 됨 각각의 요청마다 별도의 인스턴스세션 : HTTP 세션과 동일한 생명주기 세션마다 별도의 인스턴스애플리케이션 : 서블릿 컨텍스트와 동일웹 소켓 : 웹 소켓과 동일 리퀘스트에서 의존관계주입시 HTTP요청이 없어 빈이 안만들어져 스프링이 안켜질수도있음 그때 프로바이더 쓰면 됨의존관계 조회를 사용함 필요할때 빈이 제공됨 또한 프록시모드 사용가능 일단 CGILB로 가짜 투입해서 의존관계 맞추는 방법임 그리고 요청시점에 찾아서 동작 컨테이너에도 프록시가 등록 됨 프로토타입 :요청시 빈 생성 의존관계주입 초기화까지만 해줌반환하고 관리는 안함요청시 생성되서 싱글톤아님 @프리디스트로.. 2026. 2. 15.
스프링 AOP 주의점2 - 프라이빗 프라이빗에서는 적용이안됨 CGILB는 오버라이딩방식을 사용해서 프록시만드는데 프라이빗은 오버라이딩 불가JDK동적프록시는 인터페이스방식을 사용하는데 프라이빗은 인터페이스정의불가 final도 마찬가지다 2026. 1. 23.
스프링 AOP 주의점1 - 내부 호출과 대안 내부호출AOP 적용하려면 프록시를 통해서 대상 객체를 호출해야함프록시에서 먼저 어드바이스를 호출하고 이후에 대상 객체 호출프록시 안거치고 대상 객체 직접호출하면 AOP 적용 X 스프링에서는 AOP대상은 프록시를 스프링빈으로 등록해서 직접 호출은 거의 안일어남근데 대상 객체 내부에서 메서드 호출 발생하면 프록시를 안거치고 대상 객체 직접 호출하게 됨그러니까 프록시가 타겟의 메서드 호출하면 그 타겟이 타겟안에 있는 메서드호출하면 적용이안됨 자바에서 메서드 앞에 별도의 참조가 없으면 this로 자기자신의 인스턴스를 가리킴결과적으로 자신의 내부 메서드를 호출하게 되는데 여기서 this는 실제 대상 객체의 인스턴스라 AOP가 적용이안되는 것 대안1 자기자신 주입this가 아니라 자기자신을 주입해서 다시 프록시로 .. 2026. 1. 23.
빈 후처리기와 스프링이 프록시를 등록하는 방법 스프링은 보통 빈이나 컴포넌트스캔으로 대상 객체를 스프링 컨테이너 내부의 빈 저장소에 등록함근데 객체를 빈 저장소에 등록하기 직전에 객체를 조작하고싶으면 빈후처리기 사용 빈을 생성한 이후 무언가 처리하는 용도로 사용 객체 생성이후 @PostConstruct같은 초기화가 발생하기 이전이냐 이후냐에 따라 조절가능스프링은 빈 후처리기를 통해 프록시를 생성함 스프링AOP는 포인트 컷을 사용해서 프록시 적용 대상 여부를 체크포인트컷은 결과적으로 두 곳에 사용됨1. 프록시 적용 대상 여부를 체크해서 필요한 곳에만 프록시 적용 (빈 후처리기 - 자동 프록시 생성)2. 프록시의 어떤 메서드가 호출 되었을 때 어드바이스를 적용할지 판단 (프록시 내부) aop를 빌드글레이들에 등록하면 자동프록시생성기가 빈으로 등록됨자동으.. 2026. 1. 23.
Aspect 부가기능과 부가 기능을 어디에 적용할지 선택하는 기능을 합친 하나의 모듈이 에스펙트다어드바이저도 어드바이스오 포인트컷을 가지고 있어 개념상 하나의 에스팩트에스팩트는 관점이라는 뜻 횡단 관심사와 관련 애스팩트를 사용한 방식을 관점지향프로그래밍 AOP다AOP는 OOP를 대체하는게 아니라 OOP의 부족한 부분을 보조함 에스팩트J는 AOP의 구현으로 스프링도 AOP를 지원하지만 결국 대부분 에스팩트J의 문법을 쓰고 에스펙트J의 일부기능만 지원부가기능과 부가 기능을 어디에 적용할지 선택하는 기능을 합친 하나의 모듈이 에스펙트다어드바이저도 어드바이스오 포인트컷을 가지고 있어 개념상 하나의 에스팩트에스팩트는 관점이라는 뜻 횡단 관심사와 관련 애스팩트를 사용한 방식을 관점지향프로그래밍 AOP다AOP는 OOP를 대체하는.. 2026. 1. 23.
프록시팩토리 어드바이스는 프록시에 적용하는 부가기능 로직임 인터페이스가 있을땐 JDK동적프록시 없을땐 CGLIB를 사용하고싶으면 어떻게할까 JDK동적프록시의 invocationhandler나 CGLIB의 methodintercetor는 Advice를 호출한다프록시 팩토리를 사용하면 어드바이스를 호출하는 전용 invocationhandler, methodintercetor를 내부에서 사용 프록시 팩토리가 프록시를 만들때 JDK동적프록시면 어드바이스인보케이션핸들러를만들고 CGLIB면 어드바이스메서드엔터셉터를 만든다 우리는 어드바이스만 호출하면 됨 프록시 팩토리에서 프록시를 생성할때 타겟정보를 프록시팩토리로 넘겨버리기 때문에 다른 프록시들과 달리 타지정을할필요없다 proxyFactory.setProxyTarg.. 2026. 1. 23.
스프링 애노테이션 @Controller@Controller안에는 @Component가 들어있고 @Component는 컴포넌트 스캔의 대상이된다.따라서 컴포넌트 스캔의 대상이되서 빈으로 인식한다.또한 애노테이션 기반 컨트롤러로 인식한다. 즉 매핑정보로 인식이 되는 @RequestMapping 요청정보를 매핑한다. RequestMappingHandlerMapping은 스프링 빈중에서 @RequestMapping @Controller가 클래스레벨에 붙어있는경우 매핑정보로 인식한다. 2026. 1. 5.
스프링 MVC MVC는 애플리케이션 설계 패턴이다.Model = 데이터View = 화면Controller = 요청 처리을 뜻한다. 과거에는 웹 애플리케이션에는 MVC의 역할이 분리되지 않았다. 예를들면 자바의 서블릿이 있다. 그러나 웹 서비스가 복잡해 지면서 로직과 UI가 뒤섞인 서블릿만으로는 코드 가독성과 유지 보수의 어려워졌고 웹 애플리케이션에 MVC패턴을 도입하자는 의견이 생겨났다. 그리하여 JSP같은 템플릿엔진이 등장했고 JSP가 View, 비즈니스 데이터를 표현하는 도메인 객체가 Model, 서블릿이 Controller를 담당하게 되었다. 그러나 여전히 서블릿의 컨트롤러에는 요청 처리 뿐만아니라 비즈니스 로직도 함께 녹아있다는 한계가 있었다. 스프링 MVC는 프론트 컨트롤러 패턴을 사용하여 이 문제를 해.. 2026. 1. 4.
의존관계 주입 구체적인 의존 오브젝트와 그것을 사용할 주체라고 불리는 오브젝트를 런타임시에 연결해주는것 3가지를 충족해야함 1. 클래스나 코드에는 런타임 시저의 의존관계가 드라나지않음 인터페이스에 의존해야함 2. 런타임 시점 의존관계나 컨테이너와 팩토리같은 제3의 존재가 결정 3. 의존관계는 상용할 오브젝트의 참조를 외부에서 제공해줌 의존관계 주입은 다양한 형태로 적용할 수 있다di의 가장 중요한 개념은 제 3자의 도움을 통해 두 오브젝트 사이의 유연한 관계가 설정되도록 만드는것이 개념만 따른다면 di를 이루는 오브텍트와 구성요소의 구조나 관계는 다양하게 만들수있음일반적으로 di는 의존관계에 있는 두개의 오브젝트와 이 관계를 동적으로 설정해주는 오브젝트 팩토리(di 컨테이너) 그리고 이를 사용하는 클라이언트라는 4개.. 2025. 12. 21.