Spring
-
[Spring] AOP 알아보기 - Spring AOP 프록시 매커니즘Spring 2025. 12. 27. 20:16
Spring AOP는 순수 자바 기반의 프록시(Proxy) 기술을 사용하여 동작합니다. 이 문서는 Spring이 프록시를 생성하는 두 가지 전략(JDK Dynamic Proxy, CGLIB)과 프록시 방식이 갖는 구조적 한계인 '내부 호출(Self-Invocation)' 문제 및 해결책을 다룹니다.1. 프록시 생성 전략 (Proxying Mechanisms)Spring AOP는 타겟 객체의 상태(인터페이스 구현 여부)에 따라 다음 두 가지 방식 중 하나를 자동으로 선택하여 프록시 객체를 생성합니다.① JDK 동적 프록시 (JDK Dynamic Proxy)지위: Spring AOP의 기본(Default) 전략입니다.기술: 표준 JDK의 java.lang.reflect.Proxy를 사용합니다.조건: 타겟 객..
-
[Spring] AOP 알아보기 - Spring AOP의 특징Spring 2025. 12. 27. 16:19
1. Spring AOP의 기술적 특징"순수 자바로 구현되었으며, 특별한 설정이 필요 없습니다."Pure Java: Spring AOP는 순수 자바로 구현되어 있습니다.핵심 원리 (프록시 패턴): Spring AOP의 핵심은 "동적 프록시(Dynamic Proxy)"입니다.Spring은 내부적으로 자바 표준 라이브러인 java.lang.reflect.Proxy (인터페이스 기반)나, 오픈소스 라이브러리인 CGLIB (클래스 상속 기반)를 사용하여 런타임에 가짜 객체(Proxy)를 만들어냅니다.이 모든 과정이 표준 Java 언어 스펙 안에서 이루어지기 때문에, Java가 돌아가는 어떤 환경에서든 똑같이 동작합니다.Spring AOP는 C++ 같은 네이티브 코드를 쓰거나, 복잡한 외부 JVM 에이전트를 강제..
-
[Spring] AOP 알아보기 - AOP 개념Spring 2025. 12. 27. 15:55
1. 핵심 AOP 용어 정리1) Aspect (관점)정의: 여러 클래스에 걸쳐있는 관심사(Concern)의 모듈화입니다.예시: 트랜잭션 관리가 대표적입니다.구현: 일반 클래스(스키마 기반) 또는 @Aspect 어노테이션이 붙은 클래스(@AspectJ 스타일)로 구현합니다.2) Join point (조인 포인트)정의: 프로그램 실행 중의 특정한 지점입니다. (예: 메서드 호출 시점, 예외 발생 시점 등)Spring에서의 특징: 매Spring AOP에서 조인 포인트는 항상 "메서드 실행(Method Execution)" 시점만을 의미합니다. (필드 값 변경 등은 지원하지 않음)3) Advice (어드바이스)정의: 특정 조인 포인트에서 Aspect가 취하는 실제 "행동(Action)"입니다.동작: "Inter..
-
[Spring] AOP 알아보기 - AOP 소개Spring 2025. 12. 27. 15:41
관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)은 애플리케이션 전반에 공통적으로 적용되어야 하지만, 핵심 비즈니스 로직과는 분리되어야 하는 기능(트랜잭션, 로깅, 보안 등)을 하나의 관점(Aspect)으로 모듈화하고, 이를 선언적으로 여러 지점에 적용할 수 있도록 지원하는 프로그래밍 패러다임입니다. AOP는 코드의 중복을 줄이고 관심사의 분리를 강화함으로써, 비즈니스 로직을 보다 명확하고 순수하게 유지하는 것을 목표로 합니다.1. AOP와 OOP의 관계관점 지향 프로그래밍(AOP)은 객체 지향 프로그래밍(OOP)을 대체하는 것이 아니라, 보완하여 프로그램 구조를 바라보는 또 다른 방식을 제공합니다.OOP의 핵심 단위: 클래스(Class)AOP의 핵심 단위: 관점(Aspe..
-
[Spring] 서비스(Service) 레이어의 본질적인 역할과 책임Spring 2025. 12. 20. 19:57
백엔드 개발자에게 @Service 어노테이션은 굉장히 많이 사용하는 것 중 하나입니다. 하지만 "서비스의 역할이 정확히 무엇인가?"라는 질문에 명확하게 답하기란 의외로 쉽지 않습니다. 단순히 컨트롤러와 리포지토리 사이를 연결하는 접착제일까요? 아니면 비즈니스 로직 전체를 의미할까요?도메인 주도 설계(DDD) 관점에서 바라본 서비스(Application Service)의 역할은 명확합니다. 그것은 바로 '도메인 모델의 협력자'입니다. 구체적으로는 다음 세 가지 흐름을 제어하는 것이 서비스의 핵심 책임입니다.Load: 리포지토리를 통해 도메인 객체를 로드합니다.Delegate: 도메인 객체나 도메인 서비스에 실제 비즈니스 행위를 위임합니다.Save: 로직 수행 후 변경된 상태를 영구 저장소에 반영합니다.이번..
-
[스프링] 안티패턴: 완화된 레이어드 아키텍처Spring 2025. 12. 19. 15:59
백엔드 개발자라면 코드를 작성하다가 한 번쯤 이런 '유혹'에 빠져본 적이 있을 것입니다. 아주 단순한 조회 로직이나, 별다른 비즈니스 처리가 필요 없는 데이터를 다룰 때 다음과 같은 의문이 듭니다."이걸 굳이 서비스(Service) 계층을 거쳐야 하나?"오늘 이야기할 주제인 '완화된 레이어드 아키텍처(Relaxed Layered Architecture)'를 본격적으로 소개하기에 앞서, 여러분께 질문을 하나 던져보겠습니다.Q. 컨트롤러(Presentation)가 리포지토리(Infrastructure)를 직접 사용하는 것은 괜찮을까요?우리는 보통 Controller -> Service -> Repository로 이어지는 견고한 흐름에 익숙해져 있습니다. 하지만 종종 아래와 같은 구조로 코드를 작성하고 싶은 ..
-
[스프링] 안티패턴: 양방향 레이어드 아키텍처Spring 2025. 12. 19. 01:20
백엔드 개발자, 특히 Spring 프레임워크를 사용하는 개발자들에게 가장 익숙한 아키텍처 패턴을 꼽으라면 단연 '레이어드 아키텍처(Layered Architecture)'일 것입니다. 관심사를 분리하고 유지보수성을 높이기 위해 우리는 습관처럼 Controller, Service, Repository로 계층을 나누곤 합니다.하지만 프로젝트 규모가 커지고 비즈니스 로직이 복잡해지다 보면, 처음에 의도했던 깔끔한 단방향 흐름이 조금씩 어긋나는 순간이 찾아옵니다.이번 글에서 다룰 주제는 바로 '양방향 레이어드 아키텍처(Bidirectional Layered Architecture)'입니다.이는 정식 아키텍처 패턴이 아닌, 레이어드 아키텍처를 지향하는 프로젝트에서 빈번하게 발생하는 대표적인 안티패턴(Anti-pa..
-
[스프링] 안티 패턴: 스마트 UISpring 2025. 12. 16. 17:00
이번에는 스프링을 개발하면서 만날 수 있는 안티패턴들 중 스마트 UI에 대해서 알아보겠습니다.1. 스마트 UI(Smart UI)란 무엇인가?'스마트 UI'라는 용어는 에릭 에반스(Eric Evans)의 저서 『도메인 주도 설계(Domain-Driven Design)』에서 소개되며 널리 알려진 안티패턴입니다. 도메인 주도 설계 | 에릭 에반스 - 교보문고도메인 주도 설계 | 소프트웨어의 복잡성을 다루는 지혜『도메인 주도 설계』. 이 책은 독자에게 도메인 주도 설계에 대한 체계적인 접근법을 제공하고 폭넓은 우수 설계 실천법과 경험을 토대product.kyobobook.co.kr 이름만 들으면 UI가 지능적으로 알아서 척척 처리해 주는 좋은 기술처럼 들릴 수 있습니다. 하지만 아키텍처 관점에서 볼 때, UI가..