본문 바로가기

전체 글145

[Spring] 포인트컷, 어드바이스, 어드바이저 간단 정리 ≣ 목차 포인트컷( Pointcut )어디에 어떤 부가 기능(Advice)을 적용할지 결정하는 필터링입니다./** * Core Spring pointcut abstraction. * * A pointcut is composed of a {@link ClassFilter} and a {@link MethodMatcher}. * Both these basic terms and a Pointcut itself can be combined to build up combinations * (e.g. through {@link org.springframework.aop.support.ComposablePointcut}). * * @author Rod Johnson * @see ClassFilter * @see Me.. 2024. 9. 23.
[Spring] 스프링 프록시 팩토리 간단 정리 ≣ 목차 프록시 팩토리의 필요성: JDK 동적 프록시와 CGLIB의 한계JDK 동적 프록시와 CGLIB는 각각 인터페이스와 클래스 기반으로 작동하는 프록시 생성 방식으로, 각기 다른 사용 조건과 제한이 있습니다. JDK 동적 프록시는 인터페이스를 기반으로 하므로 반드시 인터페이스가 필요하며, final 메서드나 private 메서드에 대해서는 적용할 수 없는 제한이 있습니다. 반면, CGLIB는 바이트코드를 조작하여 클래스 기반의 프록시를 생성하지만, final 메서드는 오버라이드할 수 없고 성능 저하와 메모리 사용량 증가 등의 문제를 야기할 수 있습니다. 이러한 제안사항들 때문에 스프링은 JDK 동적 프록시와 CGLIB를 편리하게 사용할 수 있도록 추상화된 기술을 제공합니다. 스프링 프록시 팩토리는 이.. 2024. 9. 19.
JDK 동적 프록시와 CGLIB ≣ 목차데코레이터 패턴과 프록시 패턴의 문제데코레이터 패턴과 프록시 패턴은 객체의 기능을 동적으로 추가하거나 제어하는 데 유용하지만,  패턴들을 적용하기 위해서는 많은 클래스들을 새로 생성해야 하는 단점이 있습니다.예를 들어, 100개의 클래스에 패턴을 적용하려면 100개의 추가 클래스를 만들어야 하며, 프록시 체인이 복잡해질 경우 그 수는 더욱 늘어날 수 있습니다. 이러한 문제를 해결하기 위해 자바에서는 JDK 동적 프록시와 CGLIB라는 두 가지 방법을 제공합니다. JDK 동적 프록시JDK 동적 프록시는 Java에서 제공하는 기능으로, 인터페이스를 기반으로 한 동적 프록시를 생성합니다. 이 방식은 리플랙션 을 활용하여 실행 시점에서 프록시 객체를 생성하고 해당 프록시 객체를 통해서 메서드를 호출합니다.. 2024. 9. 18.
자바 리플렉션(Reflection) 간단 정리 ≣ 목차  리플렉션자바 리플렉션은 런타임 시점에서 클래스의 메타데이터를 분석하고, 객체의 속성이나 메소드를 동적으로 접근할 수 있는 기능을 제공합니다. 이를 통해 컴파일 시점이 아닌 실행 시점에 필요한 코드가 동적으로 생성되어 실행되도록 합니다.리플렉션의 장점유연성: 외부 라이브러리나 프레임워크 없이도 런타임에 클래스 정보를 얻고, 메소드를 호출하거나 속성을 변경할 수 있습니다.확장성: 새로운 기능을 추가하거나 변경할 때, 코드 수정 없이도 동적으로 처리할 수 있습니다.리플렉션의 단점성능 저하: 리플렉션을 사용하면 메소드나 필드에 접근하기 위해 추가적인 처리가 필요하기 때문에 일반적인 코드보다 느릴 수 있습니다.보안 문제: 내부 구현에 직접 접근하기 때문에 캡슐화를 위반할 수 있으며, 예상치 못한 에가 .. 2024. 9. 17.
프록시 패턴(프록시 패턴, 데코레이터 패턴) 정리 ≣ 목차프록시란?프록시는 두 가지 개념으로 존재합니다. 하나는 객체 안에서 사용되는 프록시이고, 다른 하나는 웹 서버에서 사용되는 프록시입니다. 세부적인 내용은 다르지만, 근본적으로 대리자 역할은 동일합니다. 즉, 프록시는 어떤 대상을 대신해서 작업을 수행하는 역할을 한다는 점에서 공통점이 있습니다.프록시 객체: 실제 객체에 대한 대리자로서 클라이언트의 요청을 대신 처리합니다.웹 서버 프록시: 네트워크 요청을 중계하여 보안, 캐싱, 접근 제어 등의 기능을 제공합니다. 프록시 객체의 역할프록시 객체는 실제 객체에 대한 대리자로서, 클라이언트의 요청을 대신 처리합니다. 중요한 점은 클라이언트가 서버에게 요청을 한 것인지, 프록시에게 요청을 한 것인지조차 몰라야 한다는 것입니다.   프록시를 사용한 디자인 패.. 2024. 9. 15.
[Spring] Spring Security 6.x버전 달라진 사항 ≣ 목차 Lambda DSL 방식의 도입 - Spring Security 5.7.0 이상 버전특히 주목해야 할 점은 Lambda DSL 방식이 도입되었다는 것입니다. 예를 들어, authorizeRequests() 메서드를 사용하여 특정 URL 패턴에 대한 접근 권한을 간단하게 정의할 수 있습니다. Lambda DSL 도입 전http.authorizeRequests().authorizeRequests() .antMatchers("/blog/**").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage(".. 2024. 9. 15.
전략(Strategy) 패턴 정리 ≣ 목차 전략 패턴이란?전략 패턴은 알고리즘의 전략을 정의하고 각 알고리즘을 별도의 클래스로 캡슐화하여 서로 교환 가능하게 만드는 행동 디자인 패턴입니다. 이를 통해 특정한 상황에서 어떤 알고리즘을 사용할지 선택할 수 있도록 해줍니다. 따라서 알고리즘이 여러 개일 때 전략 패턴을 사용하는 것이 적합합니다. 이러한 유연성 덕분에 필요에 따라 알고리즘을 쉽게 적용할 수 있습니다.예를 들어, 게임에서 캐릭터가 공격하는 방식이 여러 가지일 때, 각 공격 방식을 전략으로 정의하고 필요에 따라 변경할 수 있는 구조를 만들 수 있습니다.   전략 패턴 구조전략 패턴은 크게 세 가지 요소로 구성됩니다 Context, Strategy인터페이스, 그리고 ConcreteStrategy클래스들입니다.Context(문맥) : .. 2024. 9. 11.
템플릿 메소드(Template Method) 패턴 정리 ≣ 목차안녕하세요! 오늘은 소프트웨어 디자인에서 매우 중요한 개념인 템플릿 메소드(Template Method) 패턴에 대해 알아보겠습니다. 이 글을 통해 템플릿 메소드 패턴이 무엇인지, 어떻게 작동하는지, 그리고 실제 예제를 통해 이해해 보도록 하겠습니다. 😊 Template Method Pattern이란?템플릿 메소드는 공통으로 사용하는 메서드를 템플릿화하여 부모 클래스에 뼈대를 두고, 구체적인 사항은 자식 클래스에서 구현하는 방식입니다. 이를 통해 자식 클래스는 알고리즘의 전체 구조를 변경하지 않고 특정 부분만 재정의할 수 있습니다. 즉, 부모 클래스에서는 전체적인 흐름을 템플릿으로 정의하고, 자식 클래스에서는 필요한 부분만 오버라이드하여 사용할 수 있습니다. 템플릿 메서드 패턴 구조Abstrac.. 2024. 9. 10.
[Java] 쓰레드 로컬(ThreadLocal) ≣ 목차  스프링으로 개발을 하다가 보면 예상하지 못하는 동시성 문제가 발생할 수 있습니다. 스프링에서 스프링 빈은 기본적으로 싱글톤으로 등록됩니다. 이는 애플리케이션 컨텍스트 내에서 해당 빈의 인스턴스가 하나만 생성되고, 모든 요청이 한 개의 인스턴스를 공유하게 되어서 예상 못하는 동시성 문제가 발생할 수 있습니다.  동시성 문제란?동시성 문제는 여러 사용자가 동시에 같은 요청을 할 때 발생하는 문제로, 여러 스레드가 동시에 동일한 로직을 호출하게 되어 데이터의 일관성이 깨지거나 예기치 않은 결과가 발생하는 상황을 말합니다. 동시성 문제의 원인다중 사용자 이용: 여러 사용자가 동시에 시스템에 접근하여 동일한 자원에 대한 요청을 보낼 때스레드의 비동기 처리: 비동기적으로 실행되는 스레드들이 동일한 데이터.. 2024. 9. 8.
[Spring] 트랜잭션 전파 속성 정리 - propagation ≣ 목차트랜잭션 전파 속성(Propagation)이란? 작업을 하다보면 기존에 트랜잭션이 진행중일 때 추가적인 트랜잭션을 진행해야 하는 경우가 있습니다. 이미 트랜잭션이 진행중일 때 추가 트랜잭션이 어떻게 동작할지 결정하는 것을 트랜잭션 전파(propagation)옵션 입니다. 트랜잭션 전파 속성을 이해하기 전에 논리 트랜잭션과 물리 트랜잭션 개념에 대해서 아는 것이 좋습니다.물리 트랜잭션: 실제 데이터베이스에 적용되는 트랜잭션을 의미하며, 커넥션을 통해 트랜잭션을 시작하고, 커넥션을 통해서 커밋, 롤백하는 단위논리 트랜잭션: 스프링이 제공하는 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위논리 트랜잭션은 호출하는 메소드 간의 관계를 정의하는 개념인 반면, 물리 트랜잭션은 실제 데이터베이스 직접 상호작용.. 2024. 9. 2.