본문 바로가기

전체 글35

Kubernetes ClusterIP Service에서 HTTP의 TCP 연결 재사용이 L4 로드밸런싱에 미치는 영향 실험 1. 서론1.1 문제 정의: ClusterIP(L4)에서 TCP 연결 재사용과 트래픽 fairnesshttps://dogfood.tistory.com/entry/프로덕션-장애로-배운-Kubernetes-L4-로드밸런싱과-HTTP2 장애 발생으로 배운 Kubernetes L4 로드밸런싱과 HTTP/2장애 양상 및 대처 갑작스럽게 대부분의 트래픽이 실패하며 HTTP 요청에 대한 timeout이 발생하였으며, 약 30분이 지난 후에 별다른 조치 복구되었다.사후 분석장애가 발생한 부분은 외부와의 연동dogfood.tistory.com 이전에 k8s ClusterIp Service에서는 L4 기반 로드밸런싱을 하고, 원리상 HTTP/2를 사용하면 TCP 연결 재사용으로 인해 L4 로드밸런싱이 의도한 대로 동작하.. 2026. 5. 4.
KrakenD 적용기: 분산 환경에서 JWT 강제 폐기 요구사항을 대응하며 1. 들어가며 이 글은 KrakenD를 API Gateway로 도입한 이후, 분산 환경에서 토큰 만료 처리의 일관성을 어떻게 보장할 것인가에 대한 설계와 운용 경험을 다룹니다. KrakenD 자체의 도입 의사결정이나 다른 Gateway 솔루션과의 비교는 다루지 않습니다. 대신 KrakenD 특유의 구현 디테일보다는 한 단계 위에서, API Gateway 단의 토큰 만료 일관성을 설계할 때 분산 시스템적 요구사항을 어떻게 얹었는지에 초점을 맞춥니다. 본격적인 논의에 앞서, 이 작업이 시작된 맥락부터 정리하겠습니다.어떤 요구사항에서 시작되었는가? 해당 프로젝트에서는 JWT로 인증 토큰을 발급하기로 설계가 되었습니다. 그런데 보안 요구사항이 추가되었습니다.사용자가 로그아웃 API를 호출하면, 그 사용자에게 발.. 2026. 5. 2.
장애 발생으로 배운 Kubernetes L4 로드밸런싱과 HTTP/2 장애 양상 및 대처 갑작스럽게 대부분의 트래픽이 실패하며 HTTP 요청에 대한 timeout이 발생하였으며, 약 30분이 지난 후에 별다른 조치 복구되었다.사후 분석장애가 발생한 부분은 외부와의 연동 포인트를 담당하는 모듈이었고, 나중에 inbound 트래픽에 대한 로그를 찍어 보니 아래와 같은 그래프 양상을 볼 수 있었다. 트래픽이 선형적으로 느려지거나 하는 증상 없이 갑작스럽게 응답에 지연이 발생했으며, 가로선은 HTTP Timeout 설정으로 인해 발생한 것으로 보였다.현상은 약 20분 정도 지속되었으며 13:10 이후에는 해소되었다.장애가 자연 해소되었기에, 처음에는 외부 연동포인트 등에서 장애가 발생한 것이 아닌가 의심을 했다.그러나 이 가설은 맞지 않은 것으로 드러났다.외부 연동포인트 측에 연.. 2026. 4. 6.
부하테스트를 진행하며 배운 것들 (!개인적인 경험 주의!) 들어가며부하테스트를 진행하기 전에는 부하테스트에 대해서 가지고 있던 막연한 두려움이 있었다.백엔드 개발자로서, 자기가 짠 코드가 높은 부하를 견디는 걸 경험해보고 싶어하지만 실제로 그런 경험을 해보기는 쉽지 않기 때문이다. 개인적인 돈을 투자해서 부하테스트를 해보긴 쉽지 않고, 업무로써 높은 트래픽을 감당해보는 건 내가 원한다고 되는 일이 아니다. 그러다보니 테스트를 진행하기 전에는 막연한 두려움이 있었고, 그 두려움은 내가 뭘 모르는지도 모르는 채로 일정 안에 테스트를 통과해야한다는 압박감 때문이었다. 실제로 테스트를 진행해보면서 많은 것들을 배울 수 있었고, 깨달음을 얻은 부분에 대해서 기록을 남기려고 한다. 이 글에서는 부하테스트를 준비하고 진행하면서 겪었던 문제들과 그 과정에서 얻은 인사이트를 정.. 2026. 1. 21.
Go 바이너리 실행시 ENOENT(No such file or directory) 문제 해결하기 - C 표준 라이브러리 구현체를 찾아서 문제 발생 상황Go 언어로 애플리케이션을 개발하고, 바이너리로 빌드한 다음 로컬에서 실행해보면 문제가 없는데 컨테이너로 띄우면 No such file or directory 에러가 뜨는 경우가 있습니다. 컨테이너 안에서 명령어를 쳐서 바이너리가 있는지 검사해봐도 아무런 문제가 없는데요.실제로 실행하려고 보면 파일이나 디렉터리가 없다고 에러가 뜨는 것이죠. 개발자의 눈으로 보면 아무런 문제가 없기 때문에 이러한 에러는 해결하기 매우 어려웠습니다. 이 문제를 해결하면서 Go와 이외 주변 영역에 대한 다양한 지식을 얻게 되었는데요.반대로 여러 배경지식이 있어야만 쉽게 풀 수 있는 문제였습니다. 결론부터 말씀드리면, C 표준 라이브러리 구현체를 빌드 환경과 실행 환경이 호환되도록 맞춰 줘야 합니다.왜 ENOEN.. 2025. 1. 20.
Go 언어 개발기 - Go로 gelf-forwarder를 만들다 서문많은 개발자들이 그렇겠지만 Go를 공부하고 Go로 개발해보고 싶다는 생각은 많이들 하는 것 같습니다.Stackoverflow에서 최근에 시행된 2024 Survey를 보니, Go는 전체 7위로 많이 배우고 싶어 하고, 또 만족감이 높은 언어인 것 같습니다.https://survey.stackoverflow.co/2024/technology#admired-and-desired-language-desire-admire Technology | 2024 Stack Overflow Developer SurveyPostgreSQL debuted in the developer survey in 2018 when 33% of developers reported using it, compared with the mo.. 2025. 1. 19.
Redirect URI는 프론트엔드여야 할까? 백엔드여야 할까? (OAuth 2.0에 대해서 알아보기) 계기: Redirect URI는 프론트엔드여야 할까? 백엔드여야 할까? 최근에 회사에서 개발을 진행하던 중, 로그인 방식 중 MS Entra ID 로그인을 구현해야 하는 요구사항이 있었습니다. MS Entra ID는 마이크로소프트에서 제공하는 OIDC 규격의 서드파티 로그인 서비스인데요. 사실 이번에 직접 구현해보기 전까지는 OAuth 2.0과 OIDC에 대해서 개념만 대충 알고 있었고, '실제로 구현하게 되면 그때 문서 보고 하지~' 같은 안일한 마음으로 열심히 공부하지 않았습니다.  그런데 막상 구현하려고 보니 생각보다 막히는 부분도 많았고, 프론트엔드 분들과 소통할 때도 서로 생각하는 시퀀스가 달라서 뭐가 맞는지에 대해서 고민이 많이 되더라구요. 그 중에서 가장 의견이 분분했던 Redirect UR.. 2024. 12. 24.
[Java] Optional.of는 왜 있을까? Optional 그리고 Optional.ofOptional은 Java를 사용할 때 null-safe한 코드를 간결하게 짤 수 있게 해주는 좋은 클래스입니다.저는 가능하면 Java에서 null을 다룰 때 Optional을 많이 사용하는데요. 1. if문을 사용한 검사보다 코드가 더 간결하고2. 직접적으로 null을 사용하지 않아도 되며3. 람다를 활용하여 필요한 동작을 매끄럽게 연계할 수 있기 때문입니다. 그런데 Optional을 사용하다 보니 Optional.of가 왜 필요한지 의문이 들었습니다. Optional.of의 javadoc을 보면 다음과 같이 나와 있는데요.Returns an Optional describing the given non-null value.Throws:NullPointerExc.. 2024. 10. 10.