허브 살리기 프로젝트24 TopN 구하기 (2) 지난 글에 이어서 TopN을 구하는 방식에 대해서 잦은 변경이 있는 데이터 관련 TopN을 구하는 방식을 이야기 해보고자 한다. 최종적으로 부하가 많은 서비스에서 TopN을 실시간으로 집계를 해서 보여주는 것은 별도의 데이터 파이프라인을 통해 집계하는 방식이 될 것이다. 하지만 데이터 파이프라인을 구성하는 것과 관리하는 것. 추가로 중간 단계에서의 엔지니어링을 거치지 않고 끝판왕 구조를 바로 적용하게 된다면. 비용측면에서 적절한 엔지니어링이 아니라고 생각한다. 또한, 실제 서비스가 요구하는 트래픽 상황이 데이터 엔지니어들이 파이프라인을 구축해서 처리해야 할 규모가 아닐 수도 있다. 그래서 적지는 않지만 적당한 양의 트래픽을 받는 서비스의 경우 어떻게 TopN을 처리할 수 있을지에 관해서 고민해봤다. M.. 2024. 6. 16. TopN 구하기 (1) 배경요즘은 소위 특정 유명한 주제의 'Best Practice' 라고 부르는 구현 방법을 쉽게 찾을 수 있다.근데 이 구현 방법들이 본인이 속한 상황에 맞지 않을 수 있다. 예를들면 특정 인프라를 요구하는 구현들이 있는데, 해당 인프라가 익숙하지 않다면 도입하는 비용과 관리 및 유지보수의 비용까지 생각 했을 때 해당 인프라를 사용하는 것이 본인이 속한 상황에 맞지 않을 수 있다. 그럴때 반드시 Best Practice에서 이야기 하는 구현들을 사용해야 하는가? 라고 한다면 아니라고 생각한다. 그래서 특정 예시를 바탕으로 상황에 맞게 적절한 구현이 뭐가 있을지 탐색 해보고자한다. 선정 주제 특정 분류의 최소값 혹은 상하위 N개의 목록을 구해야하는 요구사항이 있다고 가정하고, 상황에 맞게 어떻게 풀어가야 할.. 2024. 6. 9. 로컬에서만 Spring Boot에서 HTML Resource 파일이 제공 가능 했던 이유 Restdocs 설정을 하고 생성 된 HTML이 src/main/resources/static 경로에 존재하면 해당 파일명으로 GET 요청을 날렸을 때정적 파일이 서빙 되는 줄 알았다. 물론 로컬에서는 해당 경로에 존재하면 정상적으로 정적 파일이 제공이 되는데 빌드 된 파일로 서버에 띄우게 되면 리소스를 찾지 못하는 문제가 있었다. 먼저 리소스 관련 HTTP 요청 처리 과정을 보면 HTTP 요청을 할 때 해당 요청 경로를 담당하는 컨트롤러가 없으면ResourceHttpRequestHandler 의 handleRequest를 타고 가는데 여기서 getResource 함수에서 리소스를 가져오게 된다. 파싱하는 코드들을 지나서 리소스를 가져오는 부분은 해당 부분이다.resolverChain.resolveR.. 2024. 5. 2. Spring Kafka Record 삭제하기 Spring에서 카프카로 '정확히 한 번' 을 어떻게 테스트 할 수 있을지 고민을 하다가 내린 결론은 테스트 할 수 없을 것 같다는 것이다. MockProducer 등등 에러를 재현할 수 있는 객체들이 있지만, 네트워크 에러를 재현 하는 건 어떻게 해야 할 지.. 감이 아직 안 온다. (디버깅 포인트 걸고.. 카프카 중지시키기?? 밖에 떠오르지 않는다.) 코드를 짜보면서 삽질을 조금 하다가 토픽의 레코드 수를 확인하는 코드를 작성하였는데, 다음과 같이 작성하였다. fun getMessageCount(topicName: String, kafkaTemplate: KafkaTemplate): Long { val adminClient: AdminClient = AdminClie.. 2024. 5. 1. 이전 1 2 3 4 5 6 다음