Spring Framework(110)
-
Thread Pool
아파치 톰캣(Apache Tomcat) 서버의 스레드 풀(Thread Pool)은 서버가 동시에 여러 클라이언트의 요청을 효율적으로 처리할 수 있도록 하는 중요한 메커니즘입니다. 웹 서버는 다수의 클라이언트로부터 들어오는 요청을 처리해야 하는데, 스레드 풀을 사용하면 요청이 올 때마다 새로운 스레드를 생성하는 대신 미리 생성된 스레드들을 재사용함으로써 시스템 자원을 절약하고 성능을 최적화할 수 있습니다.스레드 풀의 개념스레드 풀(Thread Pool)은 일정 수의 스레드를 미리 생성해두고 요청이 발생할 때 이 스레드를 할당하여 요청을 처리한 후, 다시 스레드 풀로 반환하는 방식으로 동작합니다. 이를 통해 새로운 스레드 생성과 소멸에 따른 오버헤드를 줄일 수 있으며, 동시에 처리 가능한 요청의 수를 제한하..
2023.05.25 -
LockMin
다음은 Spring 테스트 스위트의 예시로, 한 개 이상의 객체에 다음 인터페이스를 도입한다고 가정합니다:public interface Lockable { void lock(); void unlock(); boolean locked(); }이는 믹스인(mixin)을 나타냅니다. 어드바이스된 객체를 Lockable로 캐스팅하고, 객체의 타입에 관계없이 lock 및 unlock 메서드를 호출할 수 있기를 원합니다. lock() 메서드를 호출하면 모든 setter 메서드가 LockedException을 던지도록 하고 싶습니다. 따라서 객체가 이를 전혀 인지하지 못한 상태에서 객체를 불변으로 만드는 기능을 추가할 수 있습니다. 이것은 AOP의 좋은 예입니다.먼저, 무거운 작업을 수행할 Intr..
2023.05.24 -
4. Aspect Instantiation Models, An AOP Example, Proxying Mechanisms
Aspect Instantiation Models이것은 고급 주제입니다. AOP를 처음 시작하는 경우, 나중에 이 내용을 안전하게 건너뛰어도 됩니다.기본적으로 각 aspect는 애플리케이션 컨텍스트 내에서 단일 인스턴스를 가집니다. AspectJ에서는 이를 싱글톤 인스턴스화 모델이라고 부릅니다. 하지만 다른 생명 주기를 가진 aspect를 정의하는 것도 가능합니다. Spring은 AspectJ의 perthis, pertarget, 및 pertypewithin 인스턴스화 모델을 지원하며, percflow 및 percflowbelow는 현재 지원하지 않습니다.@Aspect 애노테이션에서 perthis 절을 지정하여 perthis aspect를 선언할 수 있습니다. 다음은 그 예입니다:@Aspect("pert..
2023.05.24 -
3. Declaring Advice, Introductions
Declaring Advice어드바이스는 포인트컷 표현식과 연관되어 있으며, 포인트컷에 의해 매칭된 메서드 실행 전, 후 또는 실행 중에 실행됩니다. 포인트컷 표현식은 인라인 포인트컷이거나 named pointcut을 참조할 수 있습니다.Before Advice@Before 애노테이션을 사용하여 어드바이스를 선언할 수 있습니다.다음 예제는 인라인 포인트컷 표현식을 사용한 예제입니다:import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;@Aspectpublic class BeforeExample { @Before("execution(* com.xyz.dao.*.*(..))") public void d..
2023.05.23 -
Spring instrument library
spring-instrument는 Spring Framework에서 제공하는 라이브러리 중 하나로, 주로 Java 애플리케이션에서 AOP(Aspect-Oriented Programming)를 지원하거나 특정 기능을 추가하기 위해 사용됩니다. 특히, spring-instrument는 JVM(Java Virtual Machine) 레벨에서 클래스 로딩을 조작하거나, 프록시 객체를 생성하는 등의 기능을 수행할 수 있도록 도와줍니다.주요 사용 사례는 다음과 같습니다:Load Time Weaving (LTW):클래스가 JVM에 로드될 때 바이트코드를 변환하는 방식으로 AOP 기능을 적용하는 기법입니다. Spring AOP에서 런타임에 프록시 객체를 생성하지 않고, 클래스가 로드될 때 바이트코드를 변환하는 방식으로..
2023.05.22 -
2. @AspectJ support
@AspectJ@AspectJ는 애노테이션을 사용하여 일반적인 자바 클래스로 어드바이스를 선언하는 스타일을 의미합니다. @AspectJ 스타일은 AspectJ 5 릴리스의 일환으로 AspectJ 프로젝트에서 도입되었습니다. Spring은 포인트컷을 해석하고 매칭[match:연결]하기 위해 AspectJ에서 제공하는 라이브러리를 사용하여 동일한 애노테이션을 AspectJ 5처럼 해석합니다. 그러나 AOP 런타임은 여전히 순수한 Spring AOP로 동작하며, AspectJ 컴파일러나 위버(weaver)에 대한 의존성은 없습니다.AspectJ 컴파일러와 위버를 사용하면 전체 AspectJ 언어를 사용할 수 있으며, 이에 대한 내용은 "Using AspectJ with Spring Applications"에서..
2023.05.22