소개
Aspectran은 JVM 기반의 경량 고성능 프레임워크로, 단순한 명령줄 애플리케이션부터 복잡한 엔터프라이즈 웹 서비스에 이르기까지 다양한 유형의 애플리케이션을 효율적으로 구축할 수 있도록 설계되었습니다. 최소한의 종속성과 최적화된 리소스 사용을 통해 빠른 시작 시간과 낮은 메모리 점유율을 자랑하며, 이는 특히 마이크로서비스 아키텍처나 클라우드 환경에 적합합니다.
Aspectran은 개발자가 복잡한 프레임워크 내부 구조를 깊이 이해할 필요 없이, 일반 Java 객체(POJO)를 사용하여 비즈니스 로직에 집중할 수 있도록 직관적인 POJO 중심 프로그래밍 모델을 강조합니다. 제어의 역전(IoC), 의존성 주입(DI), 관점 지향 프로그래밍(AOP)과 같은 강력한 엔터프라이즈 패턴을 내장하여 코드의 모듈성, 재사용성 및 유지보수성을 극대화합니다. 또한, RESTful 웹 서비스 개발을 위한 최적화된 지원과 다양한 임베디드 웹 서버(Undertow, Jetty) 통합을 통해 현대적인 웹 애플리케이션 및 API 구축을 용이하게 합니다.
특히, 환경 추상화를 위한 어댑터 패턴은 Aspectran의 유연성과 개발 생산성을 높이는 핵심적인 강점입니다. 어댑터는 런타임 환경(웹, 콘솔, 데몬 등)의 차이를 추상화하여, 동일한 비즈니스 로직이 어떤 환경에서든 수정 없이 실행될 수 있도록 돕습니다.
아키텍처 개요
Aspectran은 모듈화된 계층형 아키텍처를 채택하여 유연성과 확장성을 제공합니다. 핵심은 aspectran-core 모듈에 구현된 Activity 기반의 요청 처리 메커니즘입니다. 각 계층은 명확한 역할을 가지며, 어댑터 패턴을 통해 다양한 실행 환경의 차이를 추상화하여 비즈니스 로직이 환경에 독립적으로 동작하도록 합니다.
- Activity Layer: 모든 외부 요청(웹, 셸 등)을 수신하고, 해당 요청을 처리하기 위한 Activity 컨텍스트를 생성합니다. 이 계층은 요청의 생명주기를 관리하고, 적절한 Translet을 찾아 정해진 처리 규칙에 따라 요청을 처리합니다.
Activity는 단일 요청 처리를 위한 중앙 실행 객체이며,ThreadLocal을 사용하여 멀티스레드 환경에서도 안정적인 요청 처리를 보장합니다. - Translet Layer:
Activity가 요청을 처리할 때 참조하는Translet규칙이 정의된 계층입니다.Activity는 이 계층에 정의된Translet의 규칙에 따라Action을 실행하고,Bean을 사용하며, 최종적으로View를 통해 응답을 생성하는 흐름을 제어합니다. Translet은 요청에 대한 “설계도”이자 엔진과 사용자 코드 사이의 “인터페이스” 역할을 합니다. - Bean Container Layer: IoC/DI를 담당하는 핵심 계층으로, 애플리케이션의 모든 빈(객체)을 관리합니다. 빈의 생성, 초기화, 소멸 및 의존성 주입을 처리하여 컴포넌트 간의 느슨한 결합을 보장합니다. 싱글톤, 프로토타입 외에도 요청(Request)이나 세션(Session) 스코프를 지원하여 객체의 생명주기를 세밀하게 관리합니다.
- AOP Layer: Aspectran의 AOP 엔진이 위치하는 계층입니다. Translet 실행 전후, Bean 메서드 호출 전후 등 특정 조인 포인트에 Aspect를 적용하여 횡단 관심사를 처리합니다. 런타임 동적 프록시를 통해 비즈니스 로직과 독립적으로 동작하며,
@Advisable등을 사용한 지능적인 최적화로 성능을 극대화합니다. - View Layer: 요청 처리 결과를 사용자에게 보여주기 위한 뷰를 렌더링하는 계층입니다. 다양한 템플릿 엔진(FreeMarker, Pebble, Thymeleaf 등)과의 통합을 통해 유연한 프레젠테이션 로직 구현을 지원합니다.
이러한 계층들은 서로 유기적으로 연결되어 요청 처리의 흐름을 구성하며, 각 모듈은 특정 기능 영역을 담당하여 전체 시스템의 모듈성을 강화합니다.
핵심 개념
Aspectran은 몇 가지 핵심 개념을 기반으로 동작하며, 이들은 프레임워크의 유연성과 강력함을 제공합니다.
- Activity (액티비티): Aspectran에서 모든 요청을 처리하는 실행 엔진이자 요청의 생명주기를 관리하는 컨텍스트입니다. 웹 요청, 셸 명령 등 모든 종류의 요청을 일관된 방식으로 처리합니다. 모든 실행 흐름의 중심에 있으며,
ActivityContext라는 중앙 컨테이너가 이들의 초기화와 설정을 조율합니다. - Translet (트랜슬렛): 특정 요청을 “어떻게 처리할 것인가”에 대한 처리 규칙의 집합 또는 설계도입니다. 요청/응답/예외 처리 규칙과 실행할 비즈니스 로직(Action)을 정의합니다.
Activity는 이 설계도에 따라 요청을 처리하며, 이 과정에서 생성된Translet인스턴스는Activity와 사용자 코드 간의 데이터 공유 및 제어를 위한 인터페이스 역할을 합니다. - Bean (빈): Aspectran의 IoC 컨테이너에 의해 관리되는 객체입니다. 애플리케이션의 구성 요소(서비스, DAO, 유틸리티 등)는 빈으로 등록되어 프레임워크에 의해 생명주기가 관리되고, 필요한 곳에 의존성 주입을 통해 제공됩니다. 싱글톤, 프로토타입, 요청, 세션 스코프를 지원하여 다양한 객체 생명주기 관리가 가능합니다.
- Action (액션):
Activity내에서 실행되는 개별적인 작업 단위로, 그 실행 규칙은Translet에 정의되어 있습니다. 데이터베이스 조회, 외부 API 호출, 비즈니스 로직 처리 등 특정 기능을 수행합니다.InvokeAction,AnnotatedAction,IncludeAction등 다양한 유형이 있으며, 이를 계층적으로 구성하여 복잡한 비즈니스 로직을 형성합니다. - Aspect (애스펙트): 관점 지향 프로그래밍(AOP)의 핵심 요소로, 로깅, 트랜잭션 관리, 보안, 예외 처리와 같은 횡단 관심사를 모듈화하여 관리합니다. 새로운 AOP 프록시 메커니즘은 성능을 최적화하고 비동기 실행 환경에서의 유연한 컨텍스트 관리를 지원합니다.
- Template (템플릿): Translet이 처리한 결과를 사용자에게 보여주기 위한 뷰(View)를 렌더링하는 데 사용됩니다. FreeMarker, Pebble, Thymeleaf 등 다양한 템플릿 엔진과의 통합을 지원하여 유연한 UI/UX 구현을 가능하게 합니다.
주요 기능
Aspectran은 현대적인 애플리케이션 개발을 위한 다양한 강력한 기능을 제공합니다.
- POJO 프로그래밍: Aspectran은 특별한 인터페이스 구현이나 특정 프레임워크 클래스 상속 없이 일반 Java 객체(POJO)를 사용하여 비즈니스 로직을 구현할 수 있도록 합니다. 이는 개발자가 프레임워크에 대한 학습 부담을 줄이고, 순수한 Java 코드로 비즈니스 문제를 해결하는 데 집중할 수 있게 합니다.
- 제어의 역전 (IoC): 프레임워크가 객체의 생성, 구성, 생명주기 관리를 담당합니다. 개발자는 객체를 직접 생성하거나 관리할 필요 없이, 프레임워크에 객체 생성을 위임함으로써 코드의 복잡성을 줄이고 테스트 용이성을 높일 수 있습니다.
- 의존성 주입 (DI): IoC 컨테이너의 핵심 기능으로, 객체가 필요로 하는 의존성(다른 객체)을 직접 생성하거나 찾지 않고, 프레임워크가 런타임에 자동으로 주입해 줍니다. 이를 통해 컴포넌트 간의 결합도를 최소화하고, 유연하고 재사용 가능한 코드를 작성할 수 있습니다.
- 관점 지향 프로그래밍 (AOP): 로깅, 트랜잭션, 보안, 캐싱 등 애플리케이션 전반에 걸쳐 반복적으로 나타나는 횡단 관심사를 모듈화하여 핵심 비즈니스 로직과 분리합니다. Aspectran의 AOP는 런타임에 동적으로 적용되어 코드의 중복을 제거하고 유지보수성을 향상시킵니다.
- 세션 관리: Aspectran은 웹, 셸, 데몬 등 다양한 실행 환경에서 일관된 방식으로 상태를 유지할 수 있도록 환경에 비종속적인 고성능 세션 관리 컴포넌트를 제공합니다.
- 교체 가능한 저장소: 파일 시스템이나 Redis 기반의 고성능 Lettuce 클라이언트를 사용한 세션 저장소 구현을 설정에 따라 선택할 수 있으며, 클러스터링 지원을 통해 엔터프라이즈급 기능을 갖추고 있습니다.
- 정교한 정책: 봇 방지를 위한 신규 세션 전용 타임아웃(
maxIdleSecondsForNew) 등 지능적인 세션 생명주기 관리 정책을 포함합니다.
- 힌트 메커니즘 (Hint Mechanism): 비즈니스 로직 실행 시 해당 메서드의 실행 환경이나 처리에 필요한 부가적인 정보를 프레임워크나 다른 모듈에 전달하는 매우 유연하고 강력한 도구입니다.
@Hint어노테이션을 사용하여 메서드에 “메모”를 남기듯이 선언하며, 정보는 APON 형식을 사용합니다.- 이를 통해 서비스 코드가 하위 모듈의 구체적인 설정을 직접 참조하지 않고도 캐시 적용, 레이아웃 제어, 보안 설정 등을 동적으로 지시할 수 있어 느슨한 결합(Loose Coupling)을 유지할 수 있습니다.
- 또한, 힌트의 전파(Propagation)와 격리(Isolation)를 지원하여 중첩된 메서드 호출 환경에서도 정교한 제어가 가능합니다.
- 프로필 및 환경 제어 (Profiles & Environment Management): 애플리케이션 설정을 특정 실행 환경(dev, test, prod 등)에 따라 동적으로 활성화하거나 비활성화할 수 있는 강력한 기능을 제공합니다.
aspectran.profiles.active등의 시스템 프로퍼티를 통해 프로필을 활성화하며, 논리 연산자(!,(),[])를 사용한 복잡한 활성화 조건 표현식을 지원합니다.- XML 설정의
<properties>,<append>요소나 자바 코드의@Profile어노테이션을 통해 환경별로 다른 데이터베이스 연결 정보나 빈 구성을 손쉽게 적용할 수 있습니다.
- 환경 설정 및 로딩: Aspectran은 APON(Aspectran Object Notation) 또는 XML 형식의 설정 파일을 통해 애플리케이션을 구성합니다.
- 고도화된
nodelet파싱 엔진을 사용하여 설정 파일을 매우 효율적으로 로딩하며, 중첩된 규칙을 동적으로 처리하는mount기능 등으로 파싱 속도를 극대화합니다. - 동적 리로딩 기능을 지원하여 개발 편의성을 높입니다.
- 고도화된
- 동적 핫 리로딩 (Hot-Reloading):
SiblingClassLoader라는 독자적인 클래스로더 메커니즘을 통해 JVM 재시작 없이도 설정이나 클래스 수정을 즉시 반영할 수 있습니다. “형제 우선(Sibling-First)” 위임 모델을 사용하여 모듈 간 클래스 공유 및 동적 교체를 유연하게 지원합니다. - AsEL (Aspectran Expression Language): Aspectran은 설정 파일 내에서 동적인 값을 처리하기 위해 자체 표현 언어인 AsEL을 제공합니다. AsEL은
${...}(파라미터),@{...}(속성),#{...}(빈 또는 빈의 속성)과 같은 토큰을 사용하여, 요청 데이터나 다른 빈의 속성 값을 런타임에 동적으로 참조하고 주입하는 강력한 기능을 지원합니다. 또한, 내부적으로 OGNL(Object-Graph Navigation Language)을 사용하여, 토큰 내에서 객체의 메소드를 호출하거나 속성을 탐색하는 등 복잡한 표현식도 처리할 수 있습니다. - 로깅: Aspectran은 SLF4J와 Logback을 기반으로 유연하고 강력한 로깅 시스템을 구축합니다.
LoggingGroupDiscriminator라는 독자적인 기능을 통해 서비스나 URI 경로별로 로그를 별도의 파일로 분리하여 관리할 수 있는 강력한 기능을 제공합니다. - 작업 스케줄링 (Job Scheduling): 애플리케이션 내의 특정 작업을 정해진 시간이나 주기에 따라 자동 실행할 수 있도록 Quartz 기반의 강력한 스케줄링 프레임워크를 내장하고 있습니다.
- 별도의 라이브러리 통합 없이 설정만으로 즉시 사용 가능하며, 실행할 작업 본체로 Aspectran의 핵심 컴포넌트인 Translet을 그대로 활용할 수 있다는 점이 큰 특징입니다.
simple트리거(간격 반복)와cron트리거(시간표 기반)를 모두 지원하며, XML 기반의 명시적 설정과@Schedule어노테이션 기반의 편리한 설정을 모두 제공합니다.ActivityJobReporter를 통해 잡의 시작, 성공, 실패 이벤트를 상세히 로깅하여 모니터링할 수 있습니다.
- RESTful 웹 서비스: Aspectran은 RESTful API 개발에 최적화된 기능을 제공합니다. 간결한 설정으로 HTTP 메서드(GET, POST, PUT, DELETE 등)에 따른 요청을 처리하고, JSON/XML/APON 등 다양한 형식으로 응답을 생성할 수 있습니다.
- 가장 구체적인 규칙을 우선하는 지능적인 검색 우선순위를 적용하여,
/users/*보다/users/info를 먼저 찾는 등의 합리적인 요청 매핑을 제공합니다.
- 가장 구체적인 규칙을 우선하는 지능적인 검색 우선순위를 적용하여,
- 빠른 개발 및 시작: 설정보다 관례(Convention over Configuration) 원칙을 적극적으로 활용하여 개발자가 작성해야 할 상용구 코드(boilerplate code)를 최소화합니다. 또한, 경량 설계와 최적화된 초기화 과정을 통해 애플리케이션의 시작 시간을 단축시켜 개발 및 배포 효율성을 높입니다.
- 운영 등급 애플리케이션: Aspectran은 안정성과 확장성을 고려하여 설계되었으며, 다양한 운영 환경에 유연하게 배포될 수 있습니다. 독립형 JVM 애플리케이션, 전통적인 서블릿 컨테이너(Tomcat, WildFly)의 웹 애플리케이션, 또는 다른 Java 애플리케이션에 임베디드되는 형태로 배포되어 안정적인 운영을 보장합니다. 환경 추상화를 위한 어댑터 패턴은 동일한 비즈니스 로직이 어떤 환경에서든 수정 없이 실행될 수 있도록 합니다.
모듈
Aspectran은 기능별로 세분화된 모듈을 제공하여 필요한 기능만 선택적으로 사용할 수 있도록 합니다.
aspectran-all: 모든 Aspectran 모듈과 그 종속성을 포함하는 단일 JAR 파일입니다. 개발 및 배포 편의성을 위해 모든 기능을 한 번에 포함하고자 할 때 유용합니다.aspectran-bom: Maven Bill of Materials (BOM)로, Aspectran 관련 모듈들의 일관된 버전 관리를 돕습니다. 프로젝트의pom.xml에 추가하여 종속성 버전 충돌을 방지할 수 있습니다.aspectran-core: Aspectran 프레임워크의 심장부입니다. Activity, Translet, Bean 컨테이너, AOP 엔진 등 프레임워크의 핵심 API와 구현을 포함하며, 모든 Aspectran 기반 애플리케이션의 기본이 됩니다.aspectran-daemon: Aspectran 애플리케이션을 Unix 계열 시스템의 백그라운드 데몬이나 Windows 서비스로 실행할 수 있는 기능을 제공합니다. 장시간 실행되는 서버 애플리케이션이나 배치 작업에 적합합니다.aspectran-embed: 다른 Java 애플리케이션 내에 Aspectran을 임베드하여 사용할 수 있도록 합니다. 기존 애플리케이션에 Aspectran의 강력한 기능을 추가하고자 할 때 유용하며, 별도의 컨테이너 설정 없이 통합이 가능합니다.aspectran-logging: Aspectran 애플리케이션의 로깅을 위한 유연한 인터페이스를 제공합니다. SLF4J와 Logback을 기본으로 사용하며, JCL, JUL, Log4j 등 다른 로깅 API의 브리지를 제공하여 기존 로깅 시스템과의 호환성을 보장합니다.aspectran-shell: 대화형 명령줄(CLI) 애플리케이션을 쉽게 구축할 수 있도록 지원합니다. 사용자 입력을 처리하고, Translet을 통해 비즈니스 로직을 실행하며, 결과를 콘솔에 출력하는 기능을 제공합니다.aspectran-shell-jline:aspectran-shell모듈을 JLine 3 라이브러리와 통합하여, 명령줄 자동 완성, 히스토리 관리, 색상 출력 등 더욱 풍부한 대화형 셸 환경을 제공합니다.aspectran-test: Aspectran 애플리케이션의 단위 테스트 및 통합 테스트를 지원하는 모듈입니다. JUnit 5와 통합되어 Aspectran 컨텍스트 내에서 빈(Bean)이나 Translet을 손쉽게 테스트할 수 있는 환경을 제공합니다.aspectran-utils: Aspectran 프레임워크 내부 및 외부에서 유용하게 사용될 수 있는 다양한 일반 유틸리티 클래스들을 모아놓은 모듈입니다.aspectran-web: Jakarta EE (구 Java EE) 서블릿 API를 기반으로 웹 애플리케이션을 구축하기 위한 기능을 제공합니다. 웹 요청 처리, 세션 관리, 필터 등 웹 개발에 필요한 핵심 요소와 더불어 WebSocket, CORS, ETag, 멀티파트 요청 처리 등 풍부한 웹 지원 기능을 포함합니다.aspectran-rss-lettuce: Redis 기반의 고성능 Lettuce 클라이언트를 사용한 세션 저장소 구현을 제공하여, 분산 환경에서 세션 데이터를 효율적으로 관리할 수 있도록 합니다.aspectran-with-jetty: 임베디드 Jetty 웹 서버를 Aspectran 애플리케이션에 통합합니다. 별도의 웹 서버 설치 없이 Aspectran 애플리케이션을 독립적으로 실행할 수 있게 하여 배포를 간소화합니다.aspectran-with-undertow: 임베디드 Undertow 웹 서버를 Aspectran 애플리케이션에 통합합니다. Undertow는 경량 고성능 웹 서버로, 빠른 시작과 낮은 리소스 사용이 필요한 환경에 적합합니다.aspectran-with-freemarker: FreeMarker 템플릿 엔진을 Aspectran의 View 계층과 통합합니다. 서버 사이드 템플릿 렌더링을 통해 동적인 웹 페이지를 생성할 수 있습니다.aspectran-with-pebble: Pebble 템플릿 엔진을 Aspectran과 통합하여, 유연하고 강력한 템플릿 기능을 제공합니다.aspectran-with-thymeleaf: Thymeleaf 템플릿 엔진을 Aspectran과 통합합니다. HTML5 친화적인 템플릿 작성을 지원하며, 웹 표준을 준수하는 뷰를 쉽게 만들 수 있습니다.aspectran-with-jpa: Jakarta Persistence API (JPA)와의 통합을 제공하여, 객체 관계형 매핑(ORM)을 통해 데이터베이스 작업을 효율적으로 수행할 수 있도록 합니다.aspectran-with-mybatis: MyBatis 영속성 프레임워크와의 통합을 제공합니다. SQL Mapper 기반의 데이터베이스 접근 방식을 선호하는 개발자에게 유용합니다.aspectran-with-logback: Logback 로깅 프레임워크의 종속성을 편리하게 관리하기 위한 POM 모듈입니다. 주로 다른 모듈의 빌드 및 테스트 환경에서 사용됩니다.
개발자는 프로젝트의 성격에 따라 필요한 모듈을 조합하여 최적의 환경을 구성할 수 있습니다 (예: core + web + with-undertow를 통한 고성능 마이크로서비스 구축).
지원되는 실행 환경
Aspectran은 다양한 환경에서 유연하게 배포 및 실행될 수 있도록 설계되었습니다.
- 명령줄 셸 (대화형 및 백그라운드 모드): Aspectran은 강력한 CLI 애플리케이션 개발을 지원합니다. 대화형 모드에서는 사용자 입력을 받아 실시간으로 명령을 처리하며, 백그라운드 모드에서는 데몬 형태로 장시간 실행되는 배치 작업이나 서버 프로세스로 활용될 수 있습니다.
- 임베디드 웹 서버 (Undertow, Jetty): 별도의 웹 서버 설치 없이 Aspectran 애플리케이션 자체에 웹 서버를 내장하여 독립적으로 실행할 수 있습니다. Undertow와 같은 고성능 네이티브 엔진을 직접 활용하면 서블릿 컨테이너의 오버헤드 없이 더욱 가볍고 빠른 웹 서비스를 구축할 수 있습니다.
- 서블릿 컨테이너 (Apache Tomcat, WildFly 등): 전통적인 웹 애플리케이션 배포 방식에 따라 Apache Tomcat, WildFly와 같은 표준 서블릿 컨테이너에 WAR 파일 형태로 배포될 수 있습니다. 이는 기존 인프라와의 호환성을 제공합니다.
주요 사용 사례
Aspectran은 그 유연성과 강력함 덕분에 다양한 유형의 애플리케이션 개발에 활용될 수 있습니다.
- RESTful API 서버: 경량의 고성능 특성과 RESTful 웹 서비스 지원을 통해 마이크로서비스 아키텍처의 핵심인 API 서버 구축에 매우 적합합니다.
- 웹 애플리케이션: 다양한 템플릿 엔진 통합과 웹 모듈을 통해 전통적인 MVC 기반의 웹 애플리케이션을 효율적으로 개발할 수 있습니다.
- 명령줄 도구 (CLI Tools): 강력한 셸 모듈을 활용하여 복잡한 시스템 관리 도구, 배치 스크립트, 데이터 처리 유틸리티 등 다양한 명령줄 애플리케이션을 구축할 수 있습니다.
- 백엔드 서비스: 데몬 모드를 통해 장시간 실행되는 백그라운드 서비스, 배치 처리 시스템, 데이터 동기화 서비스 등 다양한 백엔드 시스템을 안정적으로 운영할 수 있습니다.
- 임베디드 시스템:
aspectran-embed모듈을 사용하여 기존 Java 애플리케이션 내부에 Aspectran의 IoC, DI, AOP 기능을 통합하여 특정 모듈의 기능을 강화하거나 유연성을 높일 수 있습니다.
빌드
Aspectran 프로젝트를 로컬 환경에서 빌드하고 실행하는 방법은 다음과 같습니다.
먼저, 저장소를 복제합니다.
git clone https://github.com/aspectran/aspectran.git
cd aspectran
그런 다음 운영 체제에 맞는 빌드 스크립트를 실행합니다.
# Unix 계열 시스템 (Linux, macOS, Git Bash)
./build.sh rebuild
# Windows (명령 프롬프트 또는 PowerShell)
.\build.bat rebuild
또는 Maven을 직접 사용할 수도 있습니다: ./mvnw clean install.
- Java 21 이상: Aspectran은 최소 런타임 버전으로 Java 21을 필요로 합니다. 최신 Java LTS 버전을 사용하는 것을 권장합니다.
- Maven: 프로젝트 빌드를 위해 Apache Maven 3.9.4 이상 버전이 설치되어 있어야 합니다.
데모 실행
Aspectran 데모 애플리케이션을 빌드하고 실행하여 프레임워크의 기능을 빠르게 탐색할 수 있습니다.
운영 체제에 맞는 데모 스크립트를 실행합니다.
# Unix 계열 시스템 (Linux, macOS, Git Bash)
./build.sh demo
# Windows (명령 프롬프트 또는 PowerShell)
.\build.bat demo
그런 다음 웹 브라우저에서 http://localhost:8080 으로 접속하여 데모를 확인하세요.
데모 애플리케이션은 Aspectran의 다양한 기능(웹 서비스, AOP, 빈 관리 등)을 보여주는 예제 코드를 포함하고 있습니다.
지속적 통합
Aspectran 프로젝트는 GitHub Actions 워크플로우를 통해 지속적인 통합(CI) 및 지속적인 배포(CD)를 관리합니다.
- GitHub Actions: 프로젝트의 모든 변경 사항은 자동으로 빌드, 테스트 및 검증되어 코드 품질과 안정성을 보장합니다.
커뮤니티 및 지원
- GitHub Issues: 프로젝트 사용 중 발생하는 문제점, 버그 보고, 기능 제안 등은 GitHub Issues를 통해 공유하고 논의할 수 있습니다.
- 공식 문서: Aspectran 공식 웹사이트에서 제공하는 상세한 문서를 통해 프레임워크의 모든 기능을 학습하고 활용할 수 있습니다.
- 기여: Aspectran 프로젝트는 오픈 소스로 운영되며, 누구나 코드 기여, 문서 개선, 버그 수정 등을 통해 프로젝트 발전에 참여할 수 있습니다.
링크
- 공식 사이트: https://aspectran.com/ - Aspectran에 대한 최신 정보, 문서 등을 확인할 수 있습니다.
- 데모: https://public.aspectran.com/ - Aspectran으로 구축된 실제 데모 웹애플리케이션들을 경험할 수 있습니다.
- API 문서: https://javadoc.io/doc/com.aspectran/aspectran-all - Aspectran의 모든 API에 대한 상세한 Javadoc 문서를 제공합니다.
라이선스
Aspectran은 Apache 2.0 라이선스 하에 배포됩니다. 이는 상업적 및 비상업적 목적으로 자유롭게 사용, 수정, 배포할 수 있음을 의미합니다.