2024/09 3

[SSE] java.io.IOException : Broken pipe

이번에는 Spring에서 SSE를 사용하여 데이터를 전송할 때 발생하는 'java.io.IOException:Broken pipe'를 대응법을 알아보겠다.왜 해결법이 아니라 대응법이라 적었냐면... 진짜 말 그대로 'Broken pipe'가 발생하지 않게끔 해결하는 것이 아니라, 발생했을 때 대응하는 방법을 설명할 것이기 때문이다.       java.io.IOException:Broken pipe   이 Exception은 다음과 같은 상황에서 발생한다데이터 송수신 중 연결이 끊어진 경우: 클라이언트와 서버에서 유지 중인 connection이 끊어졌을 때, 이를 통해 데이터를 전송하려 하면 발생네트워크가 서버 CPU 문제로 송신받은 데이터를 처리하지 못한 경우: 송신받은 데이터를 적절하게 처리하지 못하..

[Rate Limiter] 트래픽 제어를 위한 처리율 제한 기능 (실전편 - Redis, Bucket4j)

이번에는 실제 서비스에서 처리율 제한 기능을 설정해 보겠다 1. Dependencies Sample Code를 작성했던 것처럼 서버 메모리에서 Bucket을 생성해서 관리할 수도 있지만, 서버가 재실행되면 Bucket의 정보가 날아가므로 대체제를 찾아야 한다 먼저 Rate Limit을 걸어줄 API의 특징에 따라 달라지겠지만, 나는 유저마다 Rate Limit을 설정해 줄 것이기 때문에 'User'-'Bucket' 형태로 정보를 저장해야 했고, RDB와 Redis라는 선택지가 있었다 마침 Bucket4j에서 Redis를 지원해주기도 했고, 각 유저가 API를 호출할 때 RDB에서 Bucket을 조회한다면 DB connection이 너무 많이 일어날 것 같기에 Redis를 선택하기로 했다    2. Con..

[Open AI API, Feign Client] Java로 Open AI API 사용하기

OpenAI 홈페이지의 API docs에 들어가면 세 가지 library의 request example을 보여준다  (주소: https://platform.openai.com/docs/api-reference/chat/create)  처음에 'curl, python, node.js' 세 가지만 나오길래 java로는 사용할 수 없나? 라는 생각을 했지만.. 그럴 리가 없지curl은 'Client URL'로, 다양한 통신 프로토콜을 지원해주기에 자신의 서버에서 Http 통신으로 요청을 주고받을 수 있다즉, 그냥 형태만 올바르게 맞춰서 request를 보내면 response를 받아올 수 있다는 것이다 스프링에서는 서버에서 http 통신을 지원해주는 다양한 라이브러리가 존재하는데, 나는 그중에서 Feign Cl..