스프링부트에서 Discord의 Bot기능을 이용해서 API 명세서봇을 운영하다가
스프링부트 서버 실행이 실패하며 해당 로그를 뱉어냈다.
java.lang.IllegalArgumentException: Message Id provided was older than 2 weeks. Id: ~~~~~
해당 로그는 주로 메시징 시스템 ( SNS , Kafka 등 ) 또는 소셜 미디어 API ( Slack, Discord 등 ) 와 상호작용을 할 때
발생하는 에러로써 사용중인 메시지 Id ( API )가 시스템에 유효하지 않다고 판단되는 경우에 반환되는 에러로그이다.
메시징 시스템, API 설계와 관련된 것이다.
주된 원인은
1. 오래된 메시지 ID : 메시지 ID가 생성된 이후 일정 기간이 지나면 더 이상 유효하지 않다고 간주할때.
2. 메시지 만료 : 메시지 시스템에서 일정 시간이 지나면 메시지가 만료되어 더 이상 접근할 수 없을때.
3. 잘못된 메시지 ID : 메시지 ID가 잘못되었거나 손상된 경우
이 3가지 원인은 API키가 만료되었거나,
API를 사용하여 메시지를 보내다가 이전 로그가 삭제되지않아 새로운 로그를 전송하지 못할때 발생한다.
해결방법으로는
1. 유효한 메시지 ID 사용 : 최신의 유효한 메시지 ID를 사용하여 재시도 요청
2. 메시지 만료 정책 확인 : 메시징 시스템의 메시지 보존 기간 및 만료 정책 확인하여 유효한 메시지 ID 사용
3. 오류 핸들링 추가 : 메시지 ID가 만료된 경우 처리할 수 있는 예외 처리 로직 구현
이렇게 있는데
필자는 Discord API를 사용중으로 해당 로그를 뱉어내서
처음으로는 API키의 만료기간을 확인하였더니 이미 기간이 만료되어가지고
이전의 API키로는 작동이 불가했다.
새로운 키를 발급받아 .properties에 넣어 재시작을 하였지만 같은 로그를 뱉어냈다.
구글링을 하다보니 두가지 해결 방법을 알아냈다.
첫번째로는 Discord Bot이 데이터를 뿌려주는 채널에 있는 메시지를 하나하나 삭제를 해서
이전 로그들을 전부 삭제하는것이다.

사진과 같이 채널에있는 이전 로그를 삭제하여 서버를 재시작하면 정상적으로 작동합니다.
두번째로는 새로운 채널을 만들어
API를 통해 데이터를 뿌려줄 채널에 우클릭을 하여 채널 ID 복사하여 .properties에 등록하여 사용하면된다.
