이번 포스팅에서는 자바 코드로 작성된 예시의 문제점을 파악하고 Spring 프레임워크의 강력한 장점 중 하나인 의존성 주입(Dependency Injection, DI)을 활용하여 문제점을 해결하여 Spring이 이를 지원하는 이유에 대해서 알아보겠습니다. DI (Dependency Injection) Spring 프레임워크는 3가지 핵심 프로그래밍 모...
저번 포스팅에서 DI의 필요성을 순수한 자바 코드로 살펴보고 이를 스프링에서 제공하는 DI로 리팩토링하였습니다. 이번 포스팅에서는 스프링에서 제공하는 DI를 사용하였을 경우 얻는 장점 중 하나인 싱글톤(Singleton)에 대해서 알아보겠습니다. 싱글톤 패턴 (Singleton Pattern) 싱글톤이 무엇인지 그리고 중요성을 알아보기 위해 스프링으로 ...
DI (Dependency Injection) 저번 포스팅에서 언급했다시피 DI(Dependency Injection)란, 객체 간의 의존 관계를 개발자가 직접 코드 내에서 명시적으로 생성하고 관리하는 대신, 스프링 컨테이너가 객체를 생성하고 필요한 의존성을 주입해 주는 방식입니다 DI의 3가지 방식 의존성 주입의 종류로는 필드 주입(Field Inje...
DI (Dependency Injection) 저번 포스팅에서 언급했다시피 DI(Dependency Injection)란, 객체 간의 의존 관계를 개발자가 직접 코드 내에서 명시적으로 생성하고 관리하는 대신, 스프링 컨테이너가 객체를 생성하고 필요한 의존성을 주입해 주는 방식입니다 DI의 3가지 방식 의존성 주입의 종류로는 필드 주입(Field Inje...
이번 포스팅에서는 스프링에서 자주 사용되는 디자인 패턴 중 템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴에 대해서 알아보도록 하겠습니다. 미리 간단하게 설명하자면 위 3가지 디자인 패턴은 변하는 부분과 변하지 않는 부분을 분리하는 것이 목적입니다. 위 예제 코드를 보면 logic1() 과 logic2()는 시간을 측정하는 부분과 비즈니스 로직을 실...
이번 포스팅에서는 스프링의 핵심 디자인 패턴 중 프록시 패턴과 데코레이터 패턴에 대해서 알아보겠습니다. 프록시 패턴과 데코레이터 두 패턴 모두 프록시라는 개념을 사용하는 패턴이기 때문에, 프록시에 대해서 먼저 알아보고 두 패턴의 특징에 대해서 설명하겠습니다. 프록시 (Proxy) 우리가 일반적으로 알고 있는 클라이언트와 서버와의 관계에서 클라이언트가 ...
저번 포스팅에서 프록시 패턴과 데코레이터 패턴을 사용하여 프록시를 코드로 구현하는 방법을 알아보았습니다. 하지만 해당 디자인 패턴을 사용할 경우 프록시 클래스를 적용 대상의 숫자만큼 만들어야 한다는 단점이 존재합니다. 이러한 문제를 해결하는 기술이 동적 프록시입니다. 동적 프록시는 말 그대로 런타임 시점에 프록시를 자동으로 만들어서 적용해 주는 기술을 의...
이전 포스팅에서 언급한 한계점들을 해결하기 위해서 스프링에서는 빈 후처리기라는 기능을 제공하고 있습니다. 이번 포스팅에서는 스프링이 제공하는 빈 후처리기 기능에 대해서 알아보겠습니다. 들어가기에 앞서 해당 블로그 내용의 이해를 돕기 위해 AOP에서 자주 등장하는 용어에 대해서 정리를 하고 알아보도록 하겠습니다. 조인 포인트, 어드바이스, 포인트 컷, 어...
이전 포스팅에서는 스프링이 제공하는 빈 후처리기인 AnnotationAwareAspectJAutoProxyCreator에 대해 알아보았습니다. 간략하게 요약하자면, 스프링 컨테이너의 빈 저장소에 실제 객체 대신 프록시를 등록하려면 대상 클래스들과 어드바이저를 빈으로 등록하면 됩니다. 그러면AnnotationAwareAspectJAutoProxyCreato...
이번 포스팅에서는 AOP의 개념과 @Aspect 어노테이션을 활용하여 스프링에서 AOP를 사용하는 예시를 통해 AOP의 동작 과정을 이해해 보도록 하겠습니다. AOP 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있습니다. 핵심 기능은 해당 객체가 제공하는 고유의 기능입니다. 예를 들어서 OrderService의 핵심 기능은 주문 로직입...
저번 포스팅에서 AOP의 개념과 간단한 예제 코드를 통해 동작방법과 흐름에 집중해서 알아보았습니다. 이번 포스팅에서는 AOP를 사용하여 Logging을 구현해 보고 동작원리 또한 자세하게 알아보겠습니다. AOP를 이용하여 Logging 구현 1. 의존성 추가 2. @EnableAspectJAutoProxy 추가 3. LoggingAspect.ja...
저번 AOP 포스팅에선 메소드 이름, 파라미터, 반환값을 로깅하는 작업을 구현해 보았습니다. 이번 포스팅에선 AOP의 또 다른 대표 예시인 예외처리를 @RestControllerAdvice 어노테이션을 사용해서 전역적으로 발생하는 예외를 한곳에서 처리하는 작업을 구현해 보겠습니다. AOP를 이용하여 Global Exception Handling 구현 E...
필터 (Filter) 필터 (Filter)는 말 그대로 요청과 응답을 거르는 역할을 합니다. 자세하게 말하자면 필터는 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리할 수 있는 기능을 제공합니다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로,...
DTO (Data Transfer Object) DTO(Data Transfer Object)란 데이터 전송 객체를 의미하는 패턴으로 계층 간 데이터 전송을 위해 도메인 모델 대신 사용되는 객체입니다. > ❓ 데이터를 교환할 때 Entity 대신 DTO를 이용하는 이유는 뭘까? DTO를 사용하는 이유 데이터 보호 : DTO는 민감한 정보의 노출을...
Spring Spring은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크입니다. DI(Dependency Injection) DI란, Spring에서 객체 간의 의존성을 객체 내부에서 개발자가 직접 호출하는 대신 Spring 컨테이너에서 객체를 생성해서 넣어주는 방식입니다. IoC(Inversion of Control) IoC는 컨트롤의 제...