- AOP 개념 기반: 스프링 개발자에게 익숙한 AOP 개념을 활용하여 요청 전/후 처리를 위한 어드바이저를 제공합니다. 🛠️
- 비포/애프터 메서드:
before 메서드로 요청에 관여하고, after 메서드로 응답 후처리를 수행하는 구조입니다. 🔄
- 체이닝 순서 불만: 요청 시 A->B 순서로 처리되지만, 응답 시 B->A 순서로 돌아오는 체이닝 방식에 대한 불만이 제기되었습니다. ⛓️
- 동기적 처리의 한계: 어드바이저의
before, after 메서드는 동기적으로 동작하여 무거운 작업에 부적합하며, 스프링 서버 스레드를 점유해 동시 접속자 처리에 불리합니다. 🐌
- 비동기 웹 클라이언트 장점 상실: 내부적으로 Netty 기반의 비동기 WebClient를 사용함에도 불구하고, 어드바이저의 동기적 동작이 Netty의 이벤트 루프 스레드 풀 효율성을 저해합니다. ⚡
- 약한 타입의 컨텍스트 공유:
PromptContext 맵(Map<String, Object>)을 공유하여 타입 안정성이 낮고, 키 누락이나 타입 불일치로 인한 예외 발생 가능성이 높습니다. ⚠️
- 커스텀 어드바이저의 유지보수 어려움: 약한 타입으로 인해 커스텀 어드바이저는 코드 분석 없이는 사용하기 어렵고, 유지보수가 복잡하며, 개발자 자신조차 쉽게 잊어버릴 수 있습니다. 🤯
- 내장 어드바이저의 위험성:
SimpleLogAdvisor나 SafeguardAdvisor 같은 가벼운 내장 어드바이저는 유용하지만, ChatMemory나 VectorStore 관련 어드바이저는 내부적으로 무거운 작업을 동기적으로 처리하여 잠재적 성능 위협이 됩니다. 💣