개발 이야기11 Redis로 장바구니 구현하기: 추상화의 편리함과 함정 우리 앱의 장바구니 기능은 기존에 클라이언트 캐시로 관리되고 있었다. 해당 방식은 서버 부하를 줄일 수 있다는 장점이 있지만, 몇 가지 심각한 단점이 있었다. 1. 캐시로 관리되다 보니 장바구니를 한 개밖에 가질 수 없었다.-> 우리 앱은 사용자가 여러 마트를 이용할 수 있는데, 마트를 옮길 때마다 기존 장바구니 데이터를 지워야했다.2. 클라이언트에서 장바구니 관련 오류가 발생하면 추적이 어려웠다.-> 오류를 재현할 정보가 부족하여 디버깅에 많은 시간이 소요됐었다. 이러한 문제들을 해결하기 위해 장바구니를 서버로 이전하기로 결정했었다. 장바구니 서버 이전 시, 가장 먼저 고민한 것은 저장소 선택이였다.RDB와 NoSQL 중 어느 것을 사용할지 고민했어는데, 다음 이유로 Redis를 선택했다.1. 클라이언.. 2024. 8. 10. SSE 연결 문제 해결과 Spring 컨트리뷰터 도전기 문제 상황실시간 주문 알림 기능을 구현하면서 SSE(Server-Sent Events) 기술을 사용했는데, SSE 연결이 지속되지 않고 첫 연결 후 바로 끊어지는 문제가 발생했었다.원인 분석SSE는 연결이 지속되어야 하는데, Content-Length 헤더가 설정되면 연결이 유지되지 않는 문제가 있었다.원인을 요약하면 다음과 같다.ContentCachingResponseWrapper#copyBodyToResponse 호출 시 Content-Length가 설정되고 flush가 실행됨Http11Processor#prepareResponse() 실행길이가 존재하므로 chunked 헤더가 할당되지 않음클라이언트는 chunked 헤더가 없어서 이벤트로 인식하지 않고 연결을 종료RFC7230에 따르면 발신자는 Tr.. 2024. 8. 3. 실시간 주문 알림 도입기(서버 to 클라이언트) 대부분의 사람이 음식점에서 밥을 먹고있을 때, 매장 스피커로 '배달의 민족 주문~' 이라는 소리를 들어봤을 것이다.위와 비슷하게 주문이 발생할경우 소리가 발생하게 해달라는 실시간 주문 알림이라는 요구사항이 들어와 구현을 담당하게 됐다. 웹 어드민성 페이지에서 마트 관계자들이 간단하게 주문, 상품들을 관리할 수 있는 웹 플랫폼이 존재한다.마트 관계자는 항상 해당 페이지를 보고 있기 때문에, 여기다 해당 기능을 구현하기로 결정하였다. 서버 to 클라이언트 통신 방식이 여러가지 있는 것을 알게되었고, 각 방식의 장단점을 먼저 분석해봤다. Polling클라이언트가 서버로 http request를 계속 보내 이벤트 내용을 전달받는 방식대충 이런 흐름이다.1. 클라이언트 요청2. 서버에 이벤트가 발생했나 확인3. .. 2024. 7. 27. Redis Cluster 환경에서 'DEL Collection'은 왜 안 될까? 레디스를 로그로 활용해 스케줄링으로 수집하는 로직을 만들 때 발생했던 이슈이다.사실 increase로 쉽게 개발할 수 있었는데, 그 땐 increase를 몰라서 선택지에 두지 않았다. 저장한 키는 prefix_datetime 이런 구조였다. datatime에 ms 단위까지 저장하기 때문에 거의 겹칠일이 없었고, 반드시 수집해야하는 로그도 아니여서 겹칠 수 있다는 상황 자체를 고려하지 않았다.쨋든, 스케줄링의 역할은 하루에 저장된 여러 개의 prefix_datetime 키가 몇개있는지 찾아와 저장하고, 삭제하는 방식이였다. (사실 삭제할 필요도 없었다. TTL을 걸었다면 .. 옛날의 나는 여기까지는 생각못했던 것 같다.) 로컬에서 prefix를 기준으로 키를 가져와 데이터 개수를 세고, 삭제한 후, 가져온.. 2024. 7. 20. 비즈니스 로직 분산 입사 초에 있던 일을 공유해보려고 한다. 우리 회사는 백로그 단위로 일을 하며, 각 분야별로 1명씩 붙는다. 예를 들어 1개의 백로그에 기획, 백엔드, 프론트엔드 이런 식으로 붙는다.입사 후 사수와 같이 계속 작업을 하다가, 어느 정도 적응을 하고 처음 혼자 맡게된 백로그였다. 개발해야 하는 백로그는 주문 지연 알림톡이라고, 주문이 20분 이상 지연될 경우 관계자들한테 일괄적으로 알림톡을 보내는 기능이였다.지금 다시 한다면 쉽게 구현이 가능하겠지만, 그 때는 경험이 없어서 어려웠던 것 같다. 주문은 새벽에 발생할 수도 있는데, 주문 알림톡이 새벽에 온다면 짜증나지 않을까? -> 그래서 시간 조건도 존재하였다.마트와 마트 관계자는 1:N 관계이다. 최종적으로 알림톡을 보내는 시간 조건은 마트의 운영 시간에.. 2024. 7. 13. 이전 1 2 다음