Spring 5

[SPRING 고급] 프록시팩토리와 포인트컷,어드바이스,어드바이저

📍프록시 팩토리프록시 팩토리는 인터페이스가 있으면 JDK 동적 프록시를 사용하고, 구현 클래스만 있다면 CGLIB를 사용한다. 그리고 이 설정을 변경할 수도 있다스프링은 부가 기능을 적용할 때에 Advice라는 새로운 개념을 도입했다.개발자는 InvocationHandler나 MethodInterceptor를 신경쓰지 않고 Advice만 만들면 된다. 결과적으로 InvocationHandler나 MethodInterceptor는 Advice를 호출하게 된다.프록시 팩토리를 사용하면 Advice를 호출하는 전용 InvocationHandler, MethodInterceptor를 내부에서 사용한다. 특정 조건에 맞을 때 프록시 로직을 적용하는 기능도 공통으로 제공하기 위해서 Pointcut 이라는 개념을 ..

스터디/Spring 2024.12.29

[SPRING 고급] 프록시 패턴과 데코레이터 패턴

📍 프록시객체에서 프록시가 되려면, 클라이언트는 서버에게 요청을 한 것인지, 프록시에게 요청을 한 것인지 조차 몰라야 한다.서버와 프록시는 같은 인터페이스를 사용해야 한다. 그리고 클라이언트가 사용하는 서버 객체를 프록시 객체로 변경해도 클라이언트 코드를 변경하지 않고 동작할 수 있어야 한다.런타임(애플리케이션 실행 시점)에 클라이언트 객체에 DI를 사용해서 client->server에서 client->proxy로 객체 의존관계를 변경해도 클라이언트 코드를 전혀 변경하지 않아도 된다. 클라이언트 입장에서는 변경 사실 조차 모른다.DI를 사용하면 클라이언트 코드의 변경 없이 유연하게 프록시를 주입할 수 있다.프록시의 주요 기능1. 접근 제어-권한에 따른 접근 차단-캐싱-지연 로딩2. 부가 기능 추가-원래..

스터디/Spring 2024.12.24

[SPRING 고급] 템플릿 메서드와 전략 패턴, 템플릿 메서드 패턴

템플릿 메서드 패턴은 다형성을 사용해서 변하는 부분과 변하지 않는 부분을 분리하는 방법이다. -AbstractTemplate은 템플릿 메서드 패턴에서 부모 클래스이고, 템플릿 역할을 한다.  📍템플릿 메서드 패턴작업에서 알고리즘의 골격을 정의하고 일부 단계를 하위 클래스로 연기한다.템플릿 메서드를 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 단계를 재정의 할 수 있다.부모 클래스에 알고리즘의 골격인 템플릿을 정의하고 일부 변경되는 로직은 자식 클래스에 정의하는 것이다. 결국 상속과 오버라이딩을 통한 다형성으로 문제를 해결하는 것이다 하지만 템플릿 메서드 패턴은 상속을 사용한다따라서 상속에서 오는 단점들을 그대로 안고 간다. 특히 자식 클래스가 부모 클래스와 컴파일 시점에 강..

스터디/Spring 2024.12.21

[SPRING 고급] 동시성 문제와 ThreadLocal 사용

1. Thread-A는 userA를 nameStore에 저장했다.2. Thread-B는 userB를 nameStore에 저장했다3. Thread-A는 userB를 nameStore에서 조회했다.4. Thread-B는 userB를 nameStore에서 조회했다. 📍동시성 문제Thread-A 입장에서는 저장한 데이터와 조회한 데이터가 다른 문제가 발생한다.이처럼 여러 쓰레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제를 동시성 문제라고 한다.이런 동시성 문제는 여러 쓰레드가 같은 인스턴스의 필드에 접근해야 하기 때문에 트래픽이 적은 상황에서는 확률상 잘 나타나지 않고, 트래픽이 점점 많아질수록 자주 발생한다.특히 스프링 빈처럼 싱글톤 객체의 필드를 변경하며 사용할때 이러한 동시성 문제를 조..

스터디/Spring 2024.12.17

백엔드(Web, Spring) 기술 면접 대비

WAS와 WS의 차이WAS는 Web Application Server로 비즈니스 로직을 넣을 수 있으며 대표적인 예시로 Tomcat, PHP 등이 있다.WS는 Web Server로 비즈니스 로직을 넣을 수 없으며 대표적으로 Nginx 등이 있다. Spring Framework?스프링 프레임워크는 자바 개발을 편리하게 해주는 오픈소스 프레임워크입니다.경량 컨테이너로서 자바 객체를 직접 관리하기 때문에 객체의 생성부터 소멸까지 라이프 사이클을 관리합니다.제어의 역전을 통해 컨트롤러의 제어권이 사용자가 아닌 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출합니다.의존성 주입을 지원합니다.관점 지향 프로그래밍(AOP)를 지원하여 트랜잭션이나 로깅, 보안과 같이 공통적으로 사용하는 기능의 경우 해당..

스터디 2024.06.07