Skip to content

✅ 그라파나가 우리를 배신한 날

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 인코딩을 지원하지 않음..

🧪 결론

  • 베타 기능을 함부로 맹신하면 안된다!
Clone this wiki locally