Search
🔫

갑자기 AOP 어드민 로깅이 제대로 되지 않는 문제

분야
BE
주제
Spring
심각도
낮음🤒
제보자
jihykim2
담당자
작성자
상태
처리 완료
이슈링크(optional)
작성일자
2025/08/05 06:50
공개여부
공개
글감
Spring

문제 상황

어떤 것을 하려다가 문제가 발생했는가?
어드민에서 장기 연체자의 사물함을 강제 반납했는데, 디스코드에 알림이 가지 않음
발생한 환경, 프로그램
PROD, DEV, LOCAL
발생한 문제(에러)
슬랙으로 알림 보내는 기능은 알림이 정상적으로 가고, 그 이외의 모든 요청은 알림이 가지 않음
시큐리티 도입 이후부터 갑자기 알림이 오지 않는 문제 발생

원인

추정되는 원인
슬랙 알림 부분의 문제? 혹은 시큐리티 도입 시 관련된 문제?
아니 로깅하는 부분이 모두 동일한데 도데체 왜 슬랙만 로깅되는건데???
실제 원인
AdminApiLogAspect에서 pointcut 설정한 path 부분 중 패키지 제한하는 부분이 cabinet.admin..controller.* 이 아닌 cabinet.controller.* 로 되어있었음
현재 Cabi는 AdminApiLogAspect에서 pointcut에 해당하는 조건과, 어드민 토큰을 가진 요청에 한해 디스코드로 알림을 로깅하고 있음
⇒ 슬랙은 pointcut에 해당하는 경로인 유저 단에 위치해 있었으며, 어드민 토큰을 가진 요청이라 알림이 가고 있었음

최종 해결

최종 해결을 위한 시행착오(optional)
1.
알림이 오지 않는다 해서 알림이 오는 것도, ec2 로그 상에서의 에러도 없다..
슬랙만 알림이 간다고? 그럼 슬랙 부분의 로직을 한번 봐보자
a.
문제 없음.. (기존에 너무나도 잘 돌아가고 있었음)
b.
변경된 부분도 확인해보려 했으나, 기존 시큐리티 도입 시 슬랙 로깅을 건드리는 부분이 없음… 말이 안됨
2.
그렇다면 디스코드로 로깅하는 부분?
a.
DiscordWebHookMessenger 파일 내의 sendMessage 파일 또한 변경 부분이 없으며…
b.
슬랙을 보내는 로직과, 어드민의 다른 요청들에 대해 디스코드 연결된 부분의 차이가 없는것을 확인
기존 로직 문제가 아닌 것을 확실히 확인
3.
AOP 관련한 AdminApiLogAspect에서 로깅하는 것을 보고, 깃 로그상 최신 변경점 위주로 코드 확인
a.
pointcut 설정하기 위해, ADMIN_CUD_POINTCUT 부분이 문제가 예상됨
b.
패키지 제한하는 부분에서 admin 내부가 아닌 유저 단에서의 controller에 대해 제한하고 있었음
⇒ 어드민 내부로 path 변경
private final static String ADMIN_CUD_POINTCUT = "@target(org.springframework.web.bind.annotation.RestController) && " + "!@annotation(org.springframework.web.bind.annotation.GetMapping) && " + /* 문제가 된 기존 로직 */ "within(org.ftclub.cabinet.controller.*)"; // 특정 패키지로 제한 /* 변경된 로직 */ "within(org.ftclub.cabinet.admin..controller.*)"; // 특정 패키지로 제한
Java
복사
4.
어드민에서의 GET을 제외한 모든 요청에 대한 알림이 정상적으로 오기 시작함
하지만? 기존의 슬랙 알림은 오지 않음…
a.
slack 관련한 api 명세서를 확인해보니, 어드민 요청과는 달리 백엔드로 요청하는 url이 다름
b.
이유를 알고자, 소현님과 우주님께 질문을 드렸는데, 결론은 다음과 같음
기존에 슬랙 기능을 확장하고자 유저의 편의 기능을 위한 슬랙 봇 등을 도입할 생각으로 유저 단에 슬랙 관련 로직을 두었음
하지만, 재단에서 요청을 받아주지 않아 슬랙 봇 도입은 실패
유저단에 로직이 남아 있음..
⇒ 즉, 어드민의 기능이지만 슬랙 관련 로직은 유저 단에 위치함
5.
두가지 방법이 있음
a.
어드민 단으로 파일을 옮기고, 기존 어드민과 같이 url 까지 변경한다.
b.
pointcut 부분에 예외로 한줄 더 추가한다
⇒ 예외를 직접 추가하기 보다는 어드민으로 파일을 옮기는게 더 깔끔하다고 생각하여 전자를 택함

해결방법

최종적인 pointcut path
private final static String ADMIN_CUD_POINTCUT = "@target(org.springframework.web.bind.annotation.RestController) && " + "!@annotation(org.springframework.web.bind.annotation.GetMapping) && " + "within(org.ftclub.cabinet.admin..controller.*)"; // 어드민 내부의 컨트롤러로 패키지 제한
Java
복사
기존 슬랙 로직을 어드민 폴더 내부로 옮김 + api 요청 url을 기존의 컨벤션에 맞춰 /v5/admin 로 변경
많은 가르침을 주신 소현언니께 감사 인사를 드립니다,,,🥹

참고자료