-
Notifications
You must be signed in to change notification settings - Fork 1
✅ 그라파나가 우리를 배신한 날
KyungMin Lee edited this page Aug 22, 2024
·
1 revision
- View Server의 API를 활용해 그라파나에서 로그를 보려고 세팅을 진행함
- docker로 jar를 실행하는 상황에서 @RequestParam의 뒤에 값이 무시되는 현상 발생
-
https://api.path/endpoint?cursor=30&size=55
: 입력값 cursor -> 30 | size -> 10 (default)
-
- 원인 코드
@GetMapping("/{appKey}")
public Mono<CursorPaginationResult> getLogs(@PathVariable String appKey,
@RequestParam(name = "cursor", defaultValue = "-1", required = false) Long cursor,
@RequestParam(name = "size", defaultValue = "10", required = false) Integer size) {
log.info("appKey: {}, cursor: {}, size: {}", appKey, cursor, size);
return logViewService.findLogs(appKey, cursor, size + 1)
.collectList()
.map(data -> CursorPaginationResult.of(data, size));
}
-
첫 번째 가설: Spring WebFlux의 문제이다? ❌
- 로컬 환경에서는 정상적으로 작동함
-
두 번째 가설: 다른 JDK를 사용해서 문제가 발생한건가? ❌
- 빌드 환경은 Liberica JDK 17이고 실행 환경은 OpenJDK 17이라 오류가 발생한걸까?
- 가설 검증을 위한 실행 환경 비교
- OpenJDK 17
- Liberica JDK 17
- Corretto JDK 17
- 실험 결과 모두 동일하게 문제가 발생함..
-
세 번째 가설: 아키텍처 문제인 것인가? ❌
- 프로젝트 빌드는 ARM(MacBook Pro M1 Pro)에서 진행되었고, 실행 환경은 x86(Ubuntu 24.04 LTS AWS EC2 t3.small)이다.
- 검증을 위한 비교
- arm → arm: 오류 발생
- arm → x86: 오류 발생
- x86 → arm: 오류 발생
- x86 → x86: 오류 발생
- 테스트를 위해 CURL을 사용하던 중 Ubuntu 환경에서 CURL 작성시
“”
이 누락됨을 확인-
&
에 대한 인코딩이 이뤄지지 않음!
-
- 그라파나의 Infinity Plugin의 베타 기능인 Pagination이 URL 인코딩을 지원하지 않음..
- 베타 기능을 함부로 맹신하면 안된다!
- 💡 How To? Chat-GPT 리뷰어 도입하기
- 💡 How To? 도메인 설정하기
- 💡 How To? NGINX로 CORS 설정하기
- 💡 How To? JavaScript SDK 개발하기
- 💡 How To? Java SDK 개발하기
- 💡 How To? AWS Lambda로 부하 테스트 진행하기
- 💡 How To? Terraform + Locust로 부하 테스트 진행하기
- ⚙️ Refactoring: 로그 저장을 한번에 하자!
- 🚨 완벽하지 않은 샌드박스 테스트가 불러온 폭풍
- 💡 How To? 디버깅용 경쟁이 발생하지 않는 Long 카운터 만들기!
- 💡 How To? Queue의 poll과 push는 왜 한 스레드에서 담당하게 했을까?