Aspectran은 JVM 기반의 경량 고성능 프레임워크로, 요청 지향적(Request-Oriented) 아키텍처와 환경 추상화 메커니즘을 바탕으로 웹(Web), 명령행 셸(Shell), 백그라운드 데몬(Daemon), 임베디드(Embedded) 등 다양한 실행 환경에서 단일하고 일관된 프로그래밍 모델을 제공합니다.
이 문서는 Aspectran의 내부 구조와 핵심 동작 원리를 9가지 관점(계층 구조, 요청 처리 파이프라인, 개념 모델, 패키지 의존성, 런타임 생명주기 및 AOP 등)에서 시각화한 다이어그램 모음입니다. 각 다이어그램은 특정 아키텍처 측면을 조명하여, 개발자와 아키텍트가 프레임워크의 설계 철학과 상호작용 메커니즘을 입체적으로 이해할 수 있도록 돕습니다.
주요 핵심 컴포넌트 개요
- 어댑터 (Adapters): 웹(Web), 명령행 셸(Shell), 백그라운드 데몬(Daemon), 임베디드 API 등 서로 다른 실행 환경의 입력 및 출력을 표준 인터페이스로 추상화하여, 일관된 방식으로
Activity에 요청을 전달하고 응답을 반환합니다. - 액티비티 (Activity): 단일 요청의 전체 생명주기를 통제하고 실행하는 엔진입니다. 요청 진입부터 컨텍스트 접근, 트랜슬릿 탐색 및 실행, 뷰 렌더링, 응답 전송 및 자원 해제까지의 전 과정을 총괄합니다.
- 트랜슬릿 (Translet): 하나의 요청을 처리하기 위한 선언적 실행 규칙의 단위입니다. 어떤 조건에서 어떤
Action들을 순차적·조건부로 실행하고, 최종 결과를 어떤View템플릿으로 디스패치할지를 정의합니다. - 액션 (Actions): 비즈니스 로직을 구체적으로 실행하는 최소 단위입니다. 자바 빈(Bean)의 메서드를 호출하거나(InvokeAction), 조건에 따라 실행 경로를 분기하거나(ChooseAction), 다른 트랜슬릿 또는 뷰로 제어를 전달합니다.
- 코어 컴포넌트 (Core Components): 프레임워크의 토대를 이루는 기반 서비스들로, IoC/DI 빈 컨테이너, AOP 프록시 엔진, AsEL(Aspectran Expression Language), 세션 관리자(Session Manager), 스케줄러(Scheduler) 등을 포함합니다.
- 뷰 및 응답 (View & Response): 액션들의 실행 결과를 최종 클라이언트 응답 형태로 표현하고 전달하는 계층입니다.
- View Dispatcher: FreeMarker, Pebble, Thymeleaf, JSP 등 다양한 템플릿 엔진과 연동하여 동적 UI 화면을 렌더링합니다 (
<dispatch>). - Data Transformation: JSON, XML, APON, Plain Text 등 최신 REST API 및 데이터 교환 규격으로 결과를 자동 직렬화·변환합니다 (
<transform>). - Redirect & Forward: 클라이언트 리다이렉트(
RedirectResponse) 및 서버 측 내부 포워딩(ForwardResponse)을 지원합니다.
- View Dispatcher: FreeMarker, Pebble, Thymeleaf, JSP 등 다양한 템플릿 엔진과 연동하여 동적 UI 화면을 렌더링합니다 (
- 서비스 (Services): 프레임워크의 생명주기(
ServiceLifeCycle)를 관리하고 특정 실행 환경을 부트스트랩하는 컨테이너입니다. 최상위CoreService를 기반으로WebService,ShellService,DaemonService등이 파생되어 시스템을 구성합니다.
1. 모듈화 계층형 아키텍처 (Modular Layered Architecture)
Aspectran의 전체 구성 요소를 기능적 계층별로 나누어 표현한 다이어그램입니다. 외부 요청(HTTP, CLI, Daemon Trigger, Embed API)이 진입하여 어댑터 계층(Adapter Layer)을 통해 표준화되고, 통합된 액티비티 & 트랜슬릿 계층(Activity & Translet Layer)에서 요청 생명주기 및 처리 파이프라인이 조율되며, 코어 계층(Core Layer / ActivityContext)의 인프라 기능과 뷰 & 응답 계층(View & Response Layer)으로 유기적으로 연결되는 4대 계층 아키텍처를 보여줍니다.
- Adapter Layer: 웹, 셸, 데몬, 임베디드 등 다양한 프로토콜과 진입 환경의 차이를 추상화하여 공통 요청 규격으로 변환합니다.
- Activity & Translet Layer: 요청 단위의 생명주기를 총괄하는 실행 엔진(
Activity)과 요청 처리 규칙의 청사진인Translet이 유기적으로 결합되어, 비즈니스 액션(Actions)의 실행 흐름을 조율하고 관리합니다. - Core Layer (ActivityContext): 프레임워크의 심장인
ActivityContext를 중심으로 IoC/DI 빈 컨테이너, AOP 엔진, AsEL 표현 언어, 세션 관리자, 스케줄러 등 핵심 인프라 역량을 제공합니다. - View & Response Layer: 비즈니스 로직의 수행 결과를 최종 클라이언트에게 전달하는 출력 계층입니다. 템플릿 엔진 기반의 동적 화면 렌더링(
ViewDispatcher), RESTful API를 위한 데이터 포맷 직렬화(TransformResponse- JSON, XML, APON, Plain Text), 그리고 흐름 제어(Redirect & Forward)를 모두 포괄합니다.
flowchart TB
%% Styles
classDef layer stroke:#2a4b8d,stroke-width:1px
classDef core stroke:#1e7f5c,stroke-width:1px
classDef adapter stroke:#b23a3a,stroke-width:1px
classDef note stroke:#aaa
%% Entrypoints
Clients((External Requests)):::note
DaemonTrig["Daemon Trigger"]:::note
Clients ---|HTTP| Web
Clients ---|CLI| Shell
Clients ---|Embed API| Embed
DaemonTrig --> DaemonAdp
%% Adapter Layer
subgraph Adapters[Adapter Layer]
Web["Web Adapter"]:::adapter
Shell["Shell Adapter"]:::adapter
DaemonAdp["Daemon Adapter"]:::adapter
Embed["Embed Adapter"]:::adapter
end
%% Activity & Translet Layer
subgraph ActivityProcessing[Activity & Translet Layer]
Activity["Activity (Lifecycle & Execution Engine)"]
Translet["Translet (Request / Content / Response Rules)"]
Actions["Actions (Invoke, Choose, Transform, ...)"]
Activity -->|orchestrates & executes| Translet
Translet -->|executes steps| Actions
end
%% Core Capabilities
subgraph Core[Core Layer / ActivityContext]
ActCtx["ActivityContext (Central Hub)"]:::core
Beans["IoC/DI Bean Container"]:::core
AOP["AOP Engine"]:::core
AsEL["AsEL"]:::core
SessionMgr["Session Manager"]:::core
Sched["Scheduler"]:::core
ActCtx --- Beans & AOP & AsEL & SessionMgr & Sched
end
%% View & Response Layer
subgraph ViewLayer[View & Response Layer]
ViewDispatcher["View Dispatcher<br>(Thymeleaf, FreeMarker, Pebble, JSP)"]:::layer
TransformResponse["Data Transformer<br>(JSON, XML, APON, Plain Text)"]:::layer
RedirectForward["Flow Controller<br>(Redirect, Forward)"]:::layer
end
%% Wiring
Adapters -->|dispatch request| Activity
Activity -.->|accesses context| ActCtx
Actions --> Beans
Actions --> AsEL
Actions --> AOP
Actions --> SessionMgr
Actions --> Sched
Actions -->|dispatch view| ViewDispatcher
Actions -->|serialize data| TransformResponse
Actions -->|redirect / forward| RedirectForward
%% Notes
Note1["Adapter: 실행 환경 추상화"]:::note
Note2["Activity & Translet: 요청 생명주기 및 처리 파이프라인 조율"]:::note
Note3["View & Response: UI 템플릿, REST API 데이터, 흐름 제어"]:::note
Note1 --> Adapters
Note2 --> ActivityProcessing
Note3 --> ViewLayer
2. 계층 구조 상세 (Detailed Layered Structure)
Aspectran Runtime 컨테이너 내부의 세부 모듈 그룹과 그들 간의 상호작용 구조를 상세하게 보여주는 다이어그램입니다. 서비스 계층(Services)이 환경별 서비스(CoreServices, SchedulerServices, WebServices, DaemonServices, ShellServices, EmbedServices)를 부트스트랩하고 총괄하며, 어댑터로부터 유입된 요청이 Activity -> Translet -> Actions 순으로 전개되면서 코어 역량(Beans, AOP, AsEL, Session, Scheduler)을 유기적으로 활용하고 뷰 디스패처, 데이터 변환(Transform), 리다이렉트 등 다양한 응답 채널로 전달되는 전 과정을 입체적으로 조망할 수 있습니다.
flowchart TB
subgraph Runtime["Aspectran Runtime"]
subgraph Core["Core"]
Beans["IoC Container (Beans)"]
AOP["AOP (Aspects, Proxies)"]
AsEL["AsEL (Expression Language)"]
Scheduler["Scheduler"]
SessionMgr["Session Manager"]
end
subgraph ActivityLayer["Activity Processing"]
Activity["Activity"]
Translet["Translet (Request/Content/Response)"]
Actions["Actions (Invoke, Choose, Dispatch, ...)"]
end
subgraph ViewLayer["View & Response"]
ViewDispatcher["ViewDispatcher (Thymeleaf/FreeMarker/Pebble/JSP)"]
TransformResponse["TransformResponse (JSON/XML/APON/Text)"]
RedirectForward["Redirect & Forward"]
end
subgraph Adapters["Execution Adapters"]
Web["Web Adapter"]
Shell["Shell Adapter"]
DaemonAdp["Daemon Adapter"]
Embed["Embed Adapter"]
end
subgraph Services["Services"]
ServicesHub["Services"]
CoreSvc["Core Services"]
SchedSvc["Scheduler Services"]
WebSvc["Web Services"]
DaemonSvc["Daemon Services"]
ShellSvc["Shell Services"]
EmbedSvc["Embed Services"]
end
end
Client["Client (HTTP/CLI)"]
DaemonTrig["Daemon Trigger"]
Embedded["Embedded API"]
Client -->|HTTP| Web
Client -->|CLI| Shell
DaemonTrig -->|Startup/Signal| DaemonAdp
Embedded --> Embed
Web --> Activity
Shell --> Activity
DaemonAdp --> Activity
Embed --> Activity
Activity -->|exec plan| Translet
Translet -->|steps| Actions
Actions --> Beans
Actions --> AsEL
Actions --> AOP
Actions --> SessionMgr
Actions --> Scheduler
Actions -->|dispatch| ViewDispatcher
Actions -->|transform| TransformResponse
Actions -->|redirect/forward| RedirectForward
ServicesHub -.-> CoreSvc
ServicesHub -.-> SchedSvc
ServicesHub -.-> WebSvc
ServicesHub -.-> DaemonSvc
ServicesHub -.-> ShellSvc
ServicesHub -.-> EmbedSvc
classDef title stroke:#567,stroke-width:1px,color:#123
classDef group stroke:#999,stroke-width:1px
class Core,ActivityLayer,ViewLayer,Adapters,Services group
class Runtime title
3. 파이프라인 중심 뷰 (Pipeline-Centric View)
요청이 발생하여 최종 응답이 반환될 때까지의 처리 흐름을 파이프라인 형태로 표현한 다이어그램입니다. 각 실행 환경의 진입점(HTTP, CLI, Daemon, Embedded, Scheduler)으로부터 유입된 요청이 전용 어댑터(WebActivity, ShellActivity, DaemonActivity 등)를 거쳐 일원화된 요청 처리 파이프라인(RequestAdapter → Activity → Translet → Advice/Actions → ResponseAdapter)으로 연결되는 데이터 및 제어 흐름을 명확하게 보여줍니다.
DefaultCoreService가ActivityContext를 생성하여 빈, AOP 애스펙트, 트랜슬릿 규칙, 메시지, 프로필 환경을 파이프라인에 공급합니다.- 스케줄러 서비스는
ActivityLauncherJob을 통해 정기적/주기적 작업을 동일한 액티비티 파이프라인으로 구동시킵니다.
flowchart LR
%% Clients / Triggers
subgraph Entrypoints[Entrypoints]
HTTP[HTTP Clients]
CLI[Shell]
Daemon[Daemon]
Embedded[Embedded API]
Scheduler[Scheduler Triggers]
end
%% Environment Adapters -> Activities
subgraph Adapters[Execution Adapters]
WA[WebActivity]
SA[ShellActivity]
DA[DaemonActivity]
EA[EmbeddedActivity]
end
%% Core Service & Context
subgraph Core[Core Layer]
DCS[DefaultCoreService]
AC[ActivityContext]
Beans[Beans / IoC Container]
AOP[Aspects / Advice]
Translets[Translet Rules]
Msg[Messages]
Env[Profiles & Properties]
end
%% Pipeline
subgraph Pipeline[Request Processing Pipeline]
Req[RequestAdapter]
Act[Activity]
TL[Translet Execution]
Adv[Advice]
Res[ResponseAdapter]
end
%% Extensions
subgraph Ext[Extensions]
Sch[SchedulerService]
AJ[ActivityLauncherJob]
end
%% Flows from entrypoints to adapters
HTTP --> WA
CLI --> SA
Daemon --> DA
Embedded --> EA
Scheduler --> Sch
%% Adapters run pipeline
WA & SA & DA & EA --> Req
%% Core service builds context
DCS --> AC
AC --> Beans & AOP & Translets & Msg & Env
%% Pipeline interacts with context
Req --> Act --> TL
TL -- uses --> Beans & Adv
Adv -- triggers --> AOP
Act --> Res
%% Scheduler triggers Activities
Sch --> AJ --> Act
%% Styling
classDef core stroke:#2a4b8d,stroke-width:1px;
classDef pipe stroke:#aa7a00,stroke-width:1px;
classDef adapt stroke:#1e7f5c,stroke-width:1px;
classDef ext stroke:#5a3e9b,stroke-width:1px;
class DCS,AC,Beans,AOP,Translets,Msg,Env core
class Req,Act,TL,Adv,Res pipe
class WA,SA,DA,EA adapt
class Sch,AJ ext
4. 파이프라인 축약 뷰 (Simplified Pipeline View)
파이프라인 중심 뷰의 복잡성을 간소화하여 핵심 요청 처리 흐름만을 압축해 표현한 다이어그램입니다. 개발자가 Aspectran의 요청-응답 멘탈 모델을 직관적으로 형성할 수 있도록 4대 핵심 축(Entrypoints → Execution Adapters → Request Pipeline → Core Context)의 연결 고리를 직관적으로 보여줍니다.
flowchart LR
subgraph Entrypoints[Entrypoints]
HTTP[HTTP]
CLI[Shell]
DTRIG[Daemon Trigger]
EMB[Embedded API]
end
subgraph Adpt[Execution Adapters]
WA[WebActivity]
DA[DaemonActivity]
SA[ShellActivity]
EA[EmbeddedActivity]
end
subgraph Pipe[Request Pipeline]
Req[RequestAdapter]
Act[Activity]
TL[Translet Execution]
Adv[Advice]
Res[ResponseAdapter]
end
subgraph Ctx[Core Context]
Beans[Beans]
AOP[AOP]
EL[AsEL]
Sess[SessionMgr]
Sch[Scheduler]
end
HTTP --> WA
CLI --> SA
DTRIG --> DA
EMB --> EA
WA & SA & DA & EA --> Req
Req --> Act --> TL
TL -- uses --> Beans & EL & Sess & Sch
TL -- triggers --> Adv
Adv --> AOP
Act --> Res
5. 핵심 개념 맵 (Core Concept Map)
Aspectran을 구성하는 5가지 핵심 개념(Activity, Translet, Bean, Action, Aspect)과 뷰 템플릿(Template / View) 간의 유기적 관계와 역할을 도식화한 다이어그램입니다.
- Activity: 모든 요청의 통합 실행 엔진이자 생명주기 관리 컨텍스트입니다.
- Translet: Activity가 참조하여 실행하는 요청 처리 규칙의 설계도입니다.
- Bean: IoC/DI 컨테이너에 의해 생명주기 및 의존성이 관리되는 컴포넌트입니다.
- Action: Translet의 실행 계획에 따라 실제 비즈니스 로직을 수행하는 단위입니다.
- Aspect: 로깅, 보안, 트랜잭션 등 횡단 관심사를 Activity와 Bean에 투명하게 적용하는 AOP 모듈입니다.
- Template / View: 액션 수행 결과를 동적으로 렌더링하여 사용자에게 표현하는 출력 계층입니다.
flowchart TB
A[Aspectran Core Concepts]
A --> ACT[Activity]
ACT --> ACT1[모든 요청의 실행 엔진]
ACT --> ACT2[요청 생명주기 관리 컨텍스트]
ACT --> ACT3[웹/셸 등 모든 요청 일관 처리]
A --> TR[Translet]
TR --> TR1["처리 규칙의 설계도 (요청, 응답, 액션 등)"]
TR --> TR2[Activity가 참조하여 실행]
TR --> TR3[재사용 가능한 서비스 단위]
A --> BEAN["Bean (IoC/DI)"]
BEAN --> BEAN1[컨테이너가 생명주기 관리]
BEAN --> BEAN2["의존성 주입 (DI)"]
BEAN --> BEAN3[스코프: singleton, prototype, request, session]
A --> ACTN[Action]
ACTN --> ACTN1[Translet의 일부로 규칙 정의]
ACTN --> ACTN2[비즈니스 로직 수행]
ACTN --> ACTN3["계층적 결과로 후속 처리 및 뷰 렌더링 결정"]
A --> ASP["Aspect (AOP)"]
ASP --> ASP1["횡단 관심사 분리 (로깅, 트랜잭션, 보안)"]
ASP --> ASP2[AOP 프록시 성능 최적화]
ASP --> ASP3[비동기 실행 지원]
A --> TPL[Template / View]
TPL --> TPL1[Translet 처리 결과 렌더링]
TPL --> TPL2[FreeMarker, Pebble, Thymeleaf 등 지원]
TPL --> TPL3[동적인 UI/UX 구성]
ACT -- 참조 --> TR
TR -- 실행 계획 --> ACTN
ACTN -- 의존성 주입/사용 --> BEAN
ASP -- 적용 --> ACT
ASP -- 적용 --> BEAN
ACTN -- 결과 전달 --> TPL
classDef concept stroke:#ff5544,stroke-width:3px
class ACT,TR,BEAN,ACTN,ASP,TPL concept
6. 코어 패키지 관계 (Core Package Relationships)
프레임워크의 주요 패키지 간 의존성 구조와 핵심 클래스들의 상호작용 관계를 보여주는 다이어그램입니다. 상위 레벨의 실행 환경 모듈(daemon, shell, web)과 서비스 확장(scheduler)이 하위의 코어 서비스 패키지(core.service)를 통해 코어 기능과 결합되며, 코어 서비스는 액티비티(core.activity) 및 컨텍스트(core.context) 패키지를 유기적으로 총괄합니다.
CoreService는 요청을 처리할Activity를 생성합니다.Activity는ActivityContext를 참조하여 선언된Translet을 실행합니다.
graph TD
subgraph ExecEnv [Execution Environments]
direction LR
DAEMON[com.aspectran.daemon]
SHELL[com.aspectran.shell]
WEB[com.aspectran.web]
end
subgraph SvcExt [Service Extensions]
direction LR
SCHED[com.aspectran.scheduler]
end
subgraph CorePkgs [Core Packages]
direction LR
CORE_SVC[com.aspectran.core.service]
CORE_ACT[com.aspectran.core.activity]
CORE_CTX[com.aspectran.core.context]
end
ExecEnv --> SvcExt
SvcExt --> CorePkgs
DAEMON & SHELL & WEB --> CORE_SVC
SCHED --> CORE_SVC
CORE_SVC --> CORE_ACT
CORE_SVC --> CORE_CTX
CORE_ACT --> CORE_CTX
subgraph KeyClasses [Key Class Interactions]
direction LR
cs[CoreService]
act[Activity]
tr[Translet]
ac[ActivityContext]
cs -- creates --> act
act -- executes --> tr
act -- uses --> ac
end
CORE_SVC -.-> cs
CORE_ACT -.-> act & tr
CORE_CTX -.-> ac
class DAEMON,SHELL,WEB,SCHED,CORE_SVC,CORE_ACT,CORE_CTX pkg
7. 요청 생명주기 시퀀스 (Request Lifecycle Sequence)
클라이언트의 요청이 발생했을 때부터 최종 응답이 전달될 때까지, 각 핵심 컴포넌트 간의 상호작용을 시간 순서에 따라 추적하는 시퀀스 다이어그램입니다.
- 요청 진입 (1~3단계): 클라이언트 요청이 실행 어댑터(Web/Shell 등)에 도달하면 코어 서비스에 액티비티 수행을 요청하고,
Activity인스턴스가 생성 및 초기화됩니다. - 규칙 탐색 및 실행 (4~5단계):
Activity가 요청 URI 및 조건에 매칭되는Translet규칙을 탐색하고 실행을 시작합니다. - 액션 및 비즈니스 빈 호출 (6~9단계):
Translet에 정의된 액션(Action)들이 실행되며, 비즈니스 빈의 메서드를 호출하고 결과(ActionResult)를 반환받습니다. - 뷰 렌더링 분기 (10~12단계): 응답 디스패치(
dispatch) 설정이 되어 있는 경우ViewDispatcher를 호출하여 적절한 템플릿 엔진을 통해 뷰를 렌더링합니다. - 응답 반환 및 종료 (13~15단계):
Translet실행이 완료되면Activity가 어댑터를 통해 최종 응답을 클라이언트에게 안전하게 전송합니다.
sequenceDiagram
autonumber
actor Client
participant Adapter as "실행 어댑터<br>(Web/Shell...)"
participant CoreService as "코어 서비스"
participant Activity as "액티비티"
participant Translet as "트랜슬릿"
participant Action as "액션"
participant Bean as "비즈니스 빈"
participant ViewDispatcher as "뷰 디스패처"
Client->>Adapter: 1. 요청 (Request)
Adapter->>CoreService: 2. 액티비티 수행 요청
CoreService->>Activity: 3. Activity 생성 및 초기화
activate Activity
Activity->>Activity: 4. 요청에 해당하는 Translet 탐색
Activity->>+Translet: 5. Translet 실행
Translet->>+Action: 6. Action 실행
Action->>+Bean: 7. 비즈니스 로직 호출
Bean-->>-Action: 8. 로직 수행 결과 반환
Action-->>-Translet: 9. Action 결과 (ActionResult) 반환
alt 뷰 렌더링이 필요한 경우 (dispatch)
Translet->>+ViewDispatcher: 10. 뷰 렌더링 위임
ViewDispatcher->>ViewDispatcher: 11. 템플릿 엔진 선택 및 실행
ViewDispatcher-->>-Translet: 12. 렌더링된 뷰(응답) 반환
end
Translet-->>-Activity: 13. Translet 처리 완료
Activity->>Adapter: 14. 최종 응답 생성
deactivate Activity
Adapter->>Client: 15. 최종 응답 전송
8. 빈 생명주기 및 스코프 (Bean Lifecycle & Scopes)
Aspectran IoC 컨테이너가 빈(Bean)을 생성, 관리, 소멸시키는 전체 생명주기와 다양한 스코프(Scope)의 라이프사이클 정책을 보여주는 다이어그램입니다.
- Application Startup: 컨테이너가 구동될 때 XML, APON 설정 파일 및 애너테이션 기반 컴포넌트 자동 스캔을 통해 빈 정의 메타데이터를 수집합니다.
- Singleton Bean Lifecycle: 싱글톤 빈은
인스턴스화(Instantiation)→의존성 주입(DI)→초기화 콜백 실행(InitializableBean, @Initialize)순서로 준비를 완료하고 런타임에 재사용됩니다. - Application Runtime Scopes:
request스코프: 각 요청(Activity)이 시작될 때 생성되고 요청 종료 시 함께 소멸합니다.session스코프: 사용자 세션이 생성될 때 생성되고 세션 만료 시 소멸합니다.prototype스코프: 컨테이너에 요청할 때마다 새로운 인스턴스가 생성됩니다.
- Application Shutdown: 애플리케이션 종료 신호를 수신하면
소멸 콜백(DisposableBean, @Destroy)을 호출하여 자원을 안전하게 정리하고 소멸합니다.
graph TD
subgraph "Application Startup"
A[애플리케이션 시작] --> B{IoC 컨테이너 초기화};
B --> C["빈 설정 정보 스캔<br>(XML/APON) 및<br>컴포넌트 자동 스캔"];
end
subgraph "Singleton Bean Lifecycle"
C --> D{싱글톤 빈 생성};
D --> E["1. 인스턴스화 (Instantiation)"];
E --> F["2. 의존성 주입 (DI)"];
F --> G["3. 초기화 콜백 실행<br>(e.g., InitializableBean, @Initialize)"];
G --> H((사용 준비 완료));
end
subgraph "Application Runtime"
H --> I{애플리케이션 실행};
I -- "요청 발생 시" --> J{"'request' 스코프 빈<br>생성 및 소멸"};
I -- "세션 생성 시" --> K{"'session' 스코프 빈<br>생성 및 소멸"};
I -- "호출 시마다" --> L{"'prototype' 스코프 빈<br>생성 (소멸은 관리 안 함)"};
end
subgraph "Application Shutdown"
I --> M{애플리케이션 종료};
M --> N["4. 소멸 콜백 실행<br>(e.g., DisposableBean, @Destroy)"];
N --> O((싱글톤 빈 소멸));
end
style H stroke:#155724
style O stroke:#721c24
9. AOP 작동 방식 (AOP Mechanism)
Aspectran의 AOP 프록시(AOP Proxy)가 비즈니스 메서드 호출을 가로채어 트랜잭션, 로깅, 보안 등 횡단 관심사(Cross-cutting Concerns)를 투명하게 적용하는 메커니즘을 보여주는 시퀀스 다이어그램입니다. 정상 실행 흐름뿐만 아니라, 대상 로직에서 예외가 발생했을 때의 예외 처리(Exception Thrown) 흐름까지 명확하게 제어합니다.
실행 흐름 구분
- 사전 처리 (Before Advice): 클라이언트가 대상 빈을 호출하면 동적 프록시가 이를 가로채고, 매칭된 애스펙트(Aspect)의
Before어드바이스를 먼저 실행합니다. (예: 트랜잭션 시작, 파라미터 유효성 검증, 실행 시작 로깅) - 대상 메서드 실행 (Target Execution): 사전 처리가 완료되면 실제 대상 빈(Target Bean)의 원본 메서드를 호출하여 핵심 비즈니스 로직을 수행합니다.
- 분기 1: 정상 실행 완료 (Normal Flow)
- After Advice: 비즈니스 로직이 성공적으로 완료되면
After어드바이스가 실행되어 결과 가공이나 트랜잭션 커밋을 수행합니다. - Finally Advice: 성공/실패 여부와 무관하게 항상 실행되어 데이터베이스 세션 닫기 등 리소스를 안전하게 해제합니다.
- 최종 정상 결과를 클라이언트에게 반환합니다.
- After Advice: 비즈니스 로직이 성공적으로 완료되면
- 분기 2: 예외 발생 시 처리 (Exception Thrown Flow)
- After 건너뜀 (Skip): 비즈니스 로직 수행 도중 예외가 발생하면
After어드바이스는 즉시 건너뜁니다. - Thrown Advice:
Finally단계보다 먼저 실행되어, 리소스가 해제되기 전에 트랜잭션 롤백, 에러 로깅, 관리자 알림을 안전하게 수행합니다. - Finally Advice: 롤백 처리가 완료된 후 항상 실행되어 연결 세션이나 메모리를 안전하게 정리합니다.
- 예외를 상위로 전파(Exception Re-throw)하거나 정의된 에러 응답을 클라이언트에게 전달합니다.
- After 건너뜀 (Skip): 비즈니스 로직 수행 도중 예외가 발생하면
sequenceDiagram
autonumber
actor Client
participant Proxy as "AOP 프록시"
participant Aspect as "애스펙트"
participant Target as "대상 빈 (Target)"
Client->>Proxy: 메서드 호출
activate Proxy
Proxy->>Aspect: Before 어드바이스 실행
note right of Aspect: 전처리 로직 수행 (e.g., 트랜잭션 시작, 유효성 검증, 로깅)
Aspect->>Target: 원본 메서드 호출
note right of Target: 핵심 비즈니스 로직 수행
alt 정상 실행 (Normal Flow)
Target-->>Aspect: 정상 실행 결과 반환
Aspect->>Aspect: After 어드바이스 실행
note right of Aspect: 정상 완료 후처리 (e.g., 트랜잭션 커밋, 결과 가공)
Aspect->>Aspect: Finally 어드바이스 실행
note right of Aspect: 자원 정리 (e.g., 커넥션/세션 종료)
Aspect-->>Proxy: 최종 결과 반환
Proxy-->>Client: 최종 결과 반환
else 예외 발생 (Exception Thrown Flow)
Target-->>Aspect: 비즈니스 예외 발생 (Exception Thrown)
note over Aspect: After 어드바이스 건너뜀 (Skip)
Aspect->>Aspect: Thrown 어드바이스 실행
note right of Aspect: 예외 처리 로직 수행 (e.g., 트랜잭션 롤백, 오류 로깅, 알림)
Aspect->>Aspect: Finally 어드바이스 실행
note right of Aspect: 자원 정리 (e.g., 롤백 후 커넥션/세션 안전하게 해제)
Aspect-->>Proxy: 예외 전파 (Exception Re-throw) 또는 에러 응답
Proxy-->>Client: 예외 전파 또는 에러 응답 반환
end
deactivate Proxy
이 다이어그램들은 Aspectran의 핵심 설계 사상과 내부 동작 메커니즘을 입체적으로 이해하고, 안정적이고 확장성 높은 시스템을 설계·개발하는 데 든든한 기준이 될 것입니다.