분류 전체보기

공부!

카프카(kafka)란 무엇이며, 왜 사용할까?

프로젝트에 메세지 큐로써 카프카를 사용했지만, 카프카가 무엇이며 왜 사용했으며, 그 구조가 어떻게 되어있는지는 개념적으로 설명하지 않은 것 같아 간단하게 정리하겠습니다. 1. 카프카 : 메세징 시스템 프로젝트 기능을 구현하기 위해 시스템 모듈간 메세지나 데이터를 교환해야할 필요가 있습니다. 서비스 모듈에서 처리된 데이터를 DB 모듈로 옮기거나, 알림 모듈에서 발생한 데이터를 로깅 모듈로 옮기는 등 필요한 상황은 매우 많습니다. 이를 구현하기 위해 생각해 볼 수 있는 방법은 데이터 교환이 필요한 모듈마다 버스를 구성해서 point to point 통신을 하는 것인데, 개략적인 모습은 아래와 같습니다. 별로 이상적이지 않죠? 아키텍처의 복잡도가 필요 이상으로 올라가고, 시스템의 각 모듈이 강하게 결합되어 있..

프로젝트/레시피토리(Recipetory)

분산 서버를 사용해보기 ! : 세션은 어디에?

선요약 : 서비스의 가용성을 늘리고 TPS를 향상시키기 위해 다중 분산 서버를 도입했습니다. 현재 세션 기반으로 인증 처리를 하고 있는데, 서버간 데이터 불일치로 인한 문제를 해결하기 위해 레디스를 세션 서버로 사용했습니다. # 분산 서버 개념 단일 웹 어플리케이션 서버로 구성된 프로젝트는 하나의 서버가 모든 사용자 요청을 받는다. 이 경우 여러가지 문제가 생길 수 있다. 하나의 서버에 모든 트래픽이 몰리기 때문에 서버 부담이 커진다. 하나의 서버에 예상치 못한 오류가 발생할 경우 서비스 전체가 죽는다. 글로벌 서비스의 경우, 물리적으로 거리가 먼 한 대의 서버만 사용했을 때 네트워크 자체로 병목이 될 여지가 있다. 요컨데 성능과 확장성, 그리고 가용성 측면에서 좋지 않다. 서버를 여러개 두면 전술한 문..

프로젝트/레시피토리(Recipetory)

Redis 캐시를 사용하여 인덱스 페이지 성능 개선하기

선요약 : 호출이 많이 일어날 것으로 예상되는 메인 페이지의 "추천 컨텐츠"에 캐시를 적용하여 전반적 성능을 1.5배 향상시켰습니다. 또한 컨텐츠 추천에 사용되는 로그 연산을 위해 elastic search script를 사용하였습니다. # 컨텐츠 추천을 위한 로직 프로젝트에서 사용하는 메인 컨텐츠는 조리법이 설명된 "레시피"이다. 사용자가 서비스의 index 페이지에 접속했을 때, 추천하는 레시피를 10개 정도 뽑아 홈페이지에서 볼 수 있도록 구성하고 싶었다. ML 솔루션을 도입해 사용자 개개인에 맞는 추천 레시피를 설정할 수도 있겠고, 최근 데이터에 weight을 주어 최근에 많이 조회된 컨텐츠를 추천할 수도 있겠다. 그러나 현재 단계에선 간단하게, 레시피의 조회수와 평점을 기준으로 높은 점수를 가진..

프로젝트/레시피토리(Recipetory)

레시피 검색에 Elastic Search를 사용해보자 2 : ES 쿼리 작성

선요약 : ElasticSearchClient를 이용한 es 커스텀 쿼리를 작성하여 프로젝트에 적용하여 20배 이상의 성능 향상을 이뤄냈습니다. 그러나 ES client를 사용하는데 최신 버전이 기존의 레퍼런스와 달라 공식 문서를 많이 참고했습니다. # 현재 ES 스펙 ES를 적용한 시점 기준, 프로젝트에서 사용한 spring data es의 버전은 5.1.2, elastic client는 8.7.1이었다. 해당 버전의 ES client는 쿼리 자체를 stream api형식으로 지원해서.. 기존에 java에서 ES를 사용할 때 대부분 사용하던 HighLevelRestClient를 사용할 수 없었다.(아예 deprecated라고 뜨며 사용할 수 없었음) 그리고 현재 recipe document 구조를 간단..

김부추
'분류 전체보기' 카테고리의 글 목록 (6 Page)