로그 데이터 저장이 실패했을 때, 디스코드 알림 메시지에 예외 메시지와 함께 저장 실패한 로그 데이터를 보내줍니다.
왜냐하면, 저장에 실패한 데이터를 수작업으로 직접 저장할 수 있게 하고 싶었기 때문입니다.
그런데, 디스코드 알림 메시지가 보내지지 않고, 다음과 같은 에러가 발생했습니다.
해결과정
[개요]
1. 에러 메시지 해석
2. 원인 파악
3. 다양한 해결방법 모색
4. 최종 해결책 선택
5. 추가 보완점 개선 : Excel 파일 제한
1. 에러 메시지 해석
디스코드 웹훅으로 보낼 수 있는 메시지의 최대 글자수는 2000자인데, 알림 메시지의 글자수가 이를 초괴했다는 메시지였습니다.
2. 원인 파악
해당 메시지의 총 글자수는 총 7029자 였는데, 그 중에서 Github API 통신 로그 데이터(githubApiLog)가 6538자를 차지하면서, 발생한 문제였습니다.
3. 다양한 해결방법 모색
위 문제를 해결하기 위해 크게 3가지 방법을 생각했습니다.
방법 1. 메시지를 2000자 단위로 쪼개서 전송
장점
1.간단한 구현: 메시지를 일정한 크기로 쪼개서 전송하는 것은 비교적 간단합니다.
단점
1.UI 불편: 디스코드에서 쪼개진 메시지가 여러 개로 나뉘어 표시되므로, 읽기 불편할 수 있습니다. 2.논리적 연결성 부족: 메시지가 끊어지면서 중요한 정보의 흐름이 중단될 수 있습니다. 3.Google Sheets 저장 시 필드 정리 및 추가 작업 필요: Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요합니다.
방법 2. 필드 단위로 쪼개서 전송
장점
1. 정보의 가독성 증가: 관련 정보를 그룹화하여 개별 필드로 나누면, 가독성이 향상될 수 있습니다. 2. 논리적 구조 유지: 정보를 필드로 구분하여 논리적 연결성을 유지할 수 있습니다.
단점
1. 복잡한 구현: 데이터를 적절하게 필드로 나누고 전송하는 과정이 다소 복잡할 수 있습니다. 2. 디스코드 필드 제한: 디스코드 필드에도 제한이 있어, 많은 필드가 필요하면 제한에 도달할 수 있습니다. 3. Google Sheets 저장 시 필드 정리 및 추가 작업 필요 : Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요합니다.
방법 3. 메시지에는 파일명을 보내주고, 데이터가 저장된 파일 첨부하여 전송
장점
1. 글자수 제한 문제 해결: 파일로 첨부하면 메시지 글자수 제한을 신경 쓰지 않아도 됩니다. 2. 정보 전달의 명료성: 로그 데이터나 기타 긴 내용을 파일로 전달하면, 디스코드에서 정보가 명확하게 구분됩니다. 3. Google Sheets 저장 시 간편함 : 만약, Excel 파일일 경우, Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요없이 그대로 복사 붙여넣기 하면 됩니다.
단점
1. 파일 크기 및 갯수 제한 : 파일 크기 및 갯수의 제한이 있을 수 있습니다. 2. 별도 파일 열기 필요: 방법 1과 방법2와 달리, 사용자가 파일을 열어봐야 하는 번거로움이 있습니다. 3. 파일 형식 호환성 : 파일 형식에 따라 사용자가 추가적인 프로그램이 필요할 수 있습니다.
4. 최종 해결책 선택
최종적으로, 방법 3. 메시지에는 파일명을 보내주고, 파일을 첨부하여 전송을 선택했습니다. 특히, 파일은 액셀 파일로 생성해서 보내주기로 결정했습니다. 방법 3을 선택한 이유와 액셀 파일을 선택한 이유는 다음과 같습니다.
(1) 저장 실패 로그 데이터 알림 메시지의 특징 또는 조건(?)
특징 1. 로그 데이터의 경우, 최종적으로 Google Sheets 에 저장되어야 하므로, 개발자가 수동으로 Google Sheets에 저장하기 쉬운 구조면 좋다.
특징 2. 알림 메시지를 보고 문제를 파악해야 하므로, 한번에 파악하기 쉽게 UI도 개발자 친화적이어야 한다.
특징 3. 로그 데이터의 경우, 크기와 형식이 매우 다양하게 존재할 수 있으므로, 유연한 구조면 좋다.
특징 4. 디스코드로 1개 파일 최대 크기인 25MB로(참고) 이하이어야 한다.
특징 5. 디스코드로 1번에 보낼 수 있는 최대 파일 갯수는 10개로(참고), 이 값 이하 이어야 한다.
디스코드로 한 번에 보낼 수 있는 파일 크기 (참고)
디스코드로 한 번에 보낼 수 있는 파일의 갯수 (참고)
(2) 방법 3이 적합하다고 생각한 이유
위에서 파악한 각 특징별로 방법 3이 적한 이유는 다음과 같습니다.
[특징 1] 관점에서 보면, 방법 1과 방법 2는 Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요해서, 번거로움이 있습니다. 반면, 방법 3은 만약, Excel 파일일 경우, Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요없이 그대로 복사 붙여넣기 하면 되는 편리함이 있습니다.
[특징 2] 관점에서 보면, 방법 1과 방법 2의 경우, 메시지 단위든 필드 단위든 쪼개져서 보이므로, UI가 불편하다는 단점이 있습니다. 반면, 방법 3은 디스코드에서 로그나 긴 내용을 하나의 파일로 제공함으로써 메시지가 산만해지지 않고, UI도 깔끔하게 유지되는 장점이 있습니다.
[특징 3] 관점에서 보면, 방법 1과 방법 2는 데이터의 크기나 형식에 따라 고정된 구조를 가지므로 유연하지 못한 단점이 있습니다. 반면, 방법 3의 경우, 다양한 크기와 형식의 로그 데이터를 파일로 저장하여 전송할 수 있어 데이터의 유연성을 보장할 수 있다는 장점이 있습니다.
[특징 4] 관점에서 보면, 파일 크기 제한의 범위에서 방법 3이 방법 1과 방법 2보다 더 유연합니다. 메시지 글자수에 대한 고민 없이 모든 정보를 하나의 파일로 전달할 수 있으며, 파일이 25MB를 초과하지 않는 한 문제 없이 전송 가능합니다. 이와 같은 방식은 필요 시 데이터를 더 큰 단위로 관리할 수 있도록 해줍니다.
[특징 5] 관점에서 보면, 디스코드에서 한 번에 보낼 수 있는 최대 파일 갯수가 10개이기 때문에, 만약 로그 데이터가 여러 개의 파일로 나뉘어 전송되어야 한다면, 이 제약 내에서 처리할 수 있습니다. 만약 파일이 10개를 초과하는 경우, 추가 전송을 통해 문제를 해결할 수 있어 실질적으로 큰 문제가 되지 않습니다.
(3) 첨부할 파일 형식으로 Excel을 선택한 이유
Google Sheets로 저장 실패 데이터를 디스코드로 보내주는 이유는 이 데이터를 개발자가 직접 Google Sheets에 저장하기 위함입니다.
JSON, TXT 등의 파일 형식은 Google Sheets로 저장되기 위해, 개발자가 데이터를 Google Sheets 형식에 맞게 변환해줘야 하는 불편함이 있습니다.
반면, Excel 파일의 경우, 개발자가 바로 복붙해서 추가적인 작업이 필요없기 때문에, Excel 파일로 선택했습니다.
5. 추가 보완점 개선 : Excel 파일 제한
(1) 문제
기본적으로 로그 데이터는 객체로 저장되기 때문에, 이를 Excel 파일로 변환하기 위해 Apache POI를 활용하여 Excel 파일을 생성해야 했습니다.
그러나, Close할 이슈 목록을 가져오는 API에서 responseBody 필드의 경우, 총 43,701 자로, Excel 셀 최대 글자 수(32,767자)를 초과했습니다.
이로 인해, 다음과 같은 예외가 발생하면서 Excel 저장이 실패하는 문제가 있었습니다.
java.lang.IllegalArgumentException: The maximum length of cell contents (text) is 32767 characters
(2) 해결책
이 문제를 해결하기 위해, Excel 셀의 최대 글자 수인 32,767자를 초과하는 경우, 해당 셀에는 전체 데이터를 저장하는 대신, 파일명을 저장하도록 변경했습니다. 추가로, 초과된 데이터를 별도의 파일로 생성하여 디스코드 메시지와 함께 첨부했습니다.
만약, 데이터가 객체나 객체 배열을 포함하는 필드의 경우, JSON 파일로 저장하고, 단순 텍스트 데이터의 경우, TXT 파일로 저장하여 첨부되도록 하였습니다. 왜냐하면, UI/UX 관점에서 각 데이터 타입에 적합한 형식으로 데이터를 제공하고 싶었기 때문입니다.
(3) 결과
그 결과, Excel 파일의 글자 수 제한 문제를 해결할 수 있었으며, 모든 로그 데이터를 효율적으로 관리하고 전송할 수 있는 구조를 갖추게 되었습니다.
최종적으로, 다음 그림처럼, 디스코드 메시지에는 파일명이 담기고, 실제 로그 데이터는 첨부파일 형태로 제공됩니다.
또한, Excel 파일 제한 초과 데이터는 다음 그림처럼 해당 Excel 파일의 Cell에 파일명이 기재되고,
실제 데이터는 json 파일로 제공됩니다.
성과
1. 디스코드 메시지의 글자 수 제한 문제 해결
디스코드 메시지의 글자 수 제한 문제를 해결함으로써 로그 데이터가 손실되지 않도록 했습니다. 더 이상 긴 로그 데이터가 메시지로 전송되지 못하는 문제는 발생하지 않으며, 모든 로그 데이터가 파일 형태로 안전하게 전달됩니다.
2. 개발자 편의성 향상
로그 데이터를 Excel 파일로 전송함으로써, 개발자들이 Google Sheets로 데이터를 손쉽게 저장하고 분석할 수 있게 되었습니다. JSON 또는 TXT 파일로 데이터를 분리하여 전송하는 방식도, 데이터의 구조와 내용을 명확하게 파악할 수 있도록 도움을 주었습니다.
로그 데이터의 구조와 형식에 맞는 파일 형식을 선택하여 전송함으로써, 개발자가 파일을 확인하고 사용하는 과정에서의 불편함을 최소화했습니다. 이는 전체적으로 시스템의 사용성을 높이고, 업무 효율성을 향상시키는 결과를 가져왔습니다.
3. 시스템 유연성 강화
Excel 파일 글자 수 제한을 고려한 유연한 데이터 처리 방식을 도입하여, 다양한 크기와 형식의 로그 데이터를 안정적으로 관리할 수 있게 되었습니다. 이는 시스템이 다양한 예외 상황에 대해 더 견고하게 대응할 수 있도록 해줍니다.
문제
해결과정
1. 에러 메시지 해석
2. 원인 파악
3. 다양한 해결방법 모색
2.논리적 연결성 부족: 메시지가 끊어지면서 중요한 정보의 흐름이 중단될 수 있습니다.
3.Google Sheets 저장 시 필드 정리 및 추가 작업 필요: Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요합니다.
2. 논리적 구조 유지: 정보를 필드로 구분하여 논리적 연결성을 유지할 수 있습니다.
2. 디스코드 필드 제한: 디스코드 필드에도 제한이 있어, 많은 필드가 필요하면 제한에 도달할 수 있습니다.
3. Google Sheets 저장 시 필드 정리 및 추가 작업 필요 : Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요합니다.
2. 정보 전달의 명료성: 로그 데이터나 기타 긴 내용을 파일로 전달하면, 디스코드에서 정보가 명확하게 구분됩니다.
3. Google Sheets 저장 시 간편함 : 만약, Excel 파일일 경우, Google Sheet로 저장시, 필드 정리 같은 추가적인 작업이 필요없이 그대로 복사 붙여넣기 하면 됩니다.
2. 별도 파일 열기 필요: 방법 1과 방법2와 달리, 사용자가 파일을 열어봐야 하는 번거로움이 있습니다.
3. 파일 형식 호환성 : 파일 형식에 따라 사용자가 추가적인 프로그램이 필요할 수 있습니다.
4. 최종 해결책 선택
방법 3. 메시지에는 파일명을 보내주고, 파일을 첨부하여 전송
을 선택했습니다. 특히, 파일은 액셀 파일로 생성해서 보내주기로 결정했습니다. 방법 3을 선택한 이유와 액셀 파일을 선택한 이유는 다음과 같습니다.(1) 저장 실패 로그 데이터 알림 메시지의 특징 또는 조건(?)
(2) 방법 3이 적합하다고 생각한 이유
(3) 첨부할 파일 형식으로 Excel을 선택한 이유
5. 추가 보완점 개선 : Excel 파일 제한
(1) 문제
responseBody
필드의 경우, 총 43,701 자로, Excel 셀 최대 글자 수(32,767자)를 초과했습니다.(2) 해결책
파일명
을 저장하도록 변경했습니다. 추가로, 초과된 데이터를별도의 파일
로 생성하여 디스코드 메시지와 함께 첨부했습니다.(3) 결과
6. 최종 구현 (관련 PR)
최종적으로, 다음 그림처럼, 디스코드 메시지에는 파일명이 담기고, 실제 로그 데이터는 첨부파일 형태로 제공됩니다.
또한, Excel 파일 제한 초과 데이터는 다음 그림처럼 해당 Excel 파일의 Cell에 파일명이 기재되고,
실제 데이터는 json 파일로 제공됩니다.
성과
1. 디스코드 메시지의 글자 수 제한 문제 해결
2. 개발자 편의성 향상
3. 시스템 유연성 강화