Aspectran 9.2는 프레임워크의 안정성, 정확성, 성능을 대폭 향상시키는 데 중점을 둔 중요한 릴리스입니다. 내부 아키텍처에 대한 광범위한 리팩토링과 여러 중대한 버그 수정을 통해 더욱 견고하고 신뢰할 수 있는 기반을 마련했습니다.
🚀 주요 개선 사항 (Key Enhancements)
- 빈(Bean) 스코프 관리 및 동시성 성능 향상
FactoryBean
을 통해 빈을 생성할 때의 락(Lock) 전략을 최적화하여, 불필요한 경합을 줄이고 동시성 환경에서의 성능을 크게 향상시켰습니다. 이는 다중 스레드 환경에서 더 나은 처리량을 보장합니다.- 세션 스코프(
SessionScope
)에서 특정 빈 인스턴스를 수동으로 제거할 수 있도록 API의 제약을 해제하여, 스티키 세션(sticky session)과 같은 시나리오에서 유용성을 높였습니다.
- 핵심 컴포넌트 전반의 리팩토링
- 세션 관리: Lettuce 기반 세션 저장소의 공통 로직을 추상화하여 코드 중복을 제거하고, “Master-Replica” 용어를 “Primary-Replica”로 현대화하는 등 전체적인 구조를 개선했습니다.
- MyBatis 통합: MyBatis 연동 모듈의 내부 구조를 리팩토링하여 책임 분리를 명확히 하고 유지보수성을 높였습니다.
- 내부 로직 개선:
JsonParser
를 도입하여 JSON 처리 로직을 분리하고,RestRequest
의 오류 처리 방식을 개선하는 등 여러 유틸리티 클래스의 안정성을 강화했습니다.
- 셸(Shell) 및 데몬(Daemon) 환경 안정성 강화
- 셸 재시작(
restart
) 시 발생하던 여러 치명적인 버그를 해결하여, 개발 환경에서의 안정성을 크게 향상시켰습니다. - 스크립트 환경에서
quit
명령이 확인 프롬프트 없이 즉시 종료되도록 개선하고, 대화형 모드 감지 로직에 캐싱을 도입하여 성능을 최적화했습니다.
- 셸 재시작(
- 코드 품질 및 문서 개선
- 프로젝트 전반에 걸쳐 Javadoc 주석을 대대적으로 보강하고, 내부 로깅 및 사용자 메시지를 명확하고 일관성 있게 다듬어 개발자 경험을 향상시켰습니다.
EmbeddedAspectran
의 자원 해제 메서드 이름을release()
에서destroy()
로 변경하여 API의 역할을 명확히 했습니다.
🐞 주요 버그 수정 (Key Bug Fixes)
- 빈(Bean) 및 프로파일(Profile) 설정의 정확성 확보
@Component
어노테이션 없이@Profile
등 다른 설정 어노테이션을 사용할 경우, 이를 무시하고 경고 메시지를 출력하도록 수정하여 설정 오류를 방지합니다.SessionScope
에서 ID가 아닌 클래스 이름으로 빈을 잘못 매칭하던 치명적인 버그를 수정하여, 특히 클러스터 환경에서 발생할 수 있는 예측 불가능한 문제를 해결했습니다.- 여러 프로파일 빈이 존재할 때
NoUniqueBeanException
이 발생하던 문제를 해결하여 프로파일 기반의 빈 선택이 정확하게 동작하도록 수정했습니다.
- 서비스 라이프사이클 관련 버그 수정
- 셸 재시작 시 비정상 종료 문제: 임베디드 Jetty 서버의 비동기 종료 프로세스로 인해
restart
명령 후 셸이 예기치 않게 종료되던 문제를 해결했습니다. - Jetty/Logback 재시작 시 로깅 중단 문제: 셸 환경에서
restart
시 Logback 컨텍스트가 종료되어 모든 로깅이 중단되던 문제를 해결했습니다. - 서비스 시작 중 요청 처리: 서비스가 시작되는 동안 들어온 요청을 거부하는 대신, 시작이 완료될 때까지 대기하도록 수정하여 안정성을 높였습니다.
- 셸 재시작 시 비정상 종료 문제: 임베디드 Jetty 서버의 비동기 종료 프로세스로 인해
- 기타 중요 버그 수정
ConcurrencyThrottleSupport
클래스에서NotSerializableException
이 발생하던 직렬화 문제를 해결했습니다.- 특정 조건에서 Quartz 스케줄러가 생성되지 않던 버그를 수정하고, 재초기화를 방지하는 로직을 추가했습니다.
Juho Jeong NEWS
Release