인프런 커뮤니티 질문&답변

제리제리님의 프로필 이미지

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

나만의 검색 API

나만의 검색 API : 캐싱의 유효시간 관련, 폴링 시 일부 컬럼만을 ELK에 넣었을 때

해결된 질문

작성

·

383

0

 안녕하세요. ELK와 Redis를 이용하여 검색 API 숙제를 하는 중 질문이 있습니다.

  1. 캐시를 이용하여 검색 결과를 반환할 때, 폴링 등을 통해서 새로운 데이터가 들어온다면 기존의 캐시를 이용하지 못할 것 같은데요,

    제 생각으로는 강의중 말씀해주신 정확도를 포기하는 대신 성능을 얻기 위해서 캐시를 일단 TTL 만료 이전까지 사용해야 할 것 같습니다만, 좋은 방법이 무엇일까요?

     

  2. 강의 내에서는 폴링을 통해 테이블 컬럼의 전체가 아닌 일부 컬럼만을 Elasticsearch에 넣으셨었는데 전체를 넣지않는 이유가 있을까요? (데이터가 커져서? Join 데이터를 포함하면 많아질 것 같기는 합니다.)

     

    일부만 넣는 이유가 있다면 게시판 검색을 만든다고 생각하면 제가 생각한 아래의 방식으로도 사용되는 편일까요?

    1) ID를 포함하여 검색 결과 목록에 노출될 제목 등을 얻어오는 데에 ELK와 캐시를 이용

    2) 상세보기를 클릭했을 때는 DB 인덱스로 사용되는 ID를 이용하여 디비에서 필요한 모든 컬럼을 얻어오기

 

강의 막바지를 향해 달려가고 있습니다. 좋은 강의 제공해주셔서 감사드립니다.

답변 1

2

안녕하세요. 제리제리님

  1. 서비스 내부적으로 데이터가 초 단위로 변하지 않을시, Redis를 사용해서 성능을 개선 방법 선호합니다. 더불어 실제 개발환경이 아니라 프로덕션환경에서 Redis에 저장되는 데이터는 TTL을 최소한 1초 정도로만 잡아도 성능개선이 가능합니다.
    하지만 Redis를 사용할 경우 보안상의 이슈와 데드락 이슈 등이 발생할 수 있으므로 이점 학습해 보시길 바랍니다.

  2. 해당 이슈는 서비스의 구성에 따라 달라질 것으로 예상됩니다. 강의에서의 사용법은 간단한 예시를 위해 설명된 방법입니다. 예를 들어 실제 환경에서는 만약 기능(fecthBoard, fecthUser 등)마다 documents를 분리했을 경우 logstash의 성능이 올라감과 동시에 데이터베이스 부하가 발생할 가능성이 있습니다.
    반대로 데이터를 한꺼번에 폴링 시, 검색 시 불필요한 데이터로 검색 성능이 저하 될 수 있습니다. 이러한 점을 고려하셔서 해당 프로젝트에 적용해 보시길 바랍니다.

감사합니다.