1. 인덱스란? 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다. 장점 1. 검색 대상 레코드의 범위를 줄여 검색 속도를 빠르게 할 수 있다. 2. 중복 데이터를 방지하거나 특정 컬럼의 유일성(Unique)을 보장할 수 있다. 3. ORDER BY 절과..
프로젝트 중 최근 검색 기록을 구현해야 할 일이 생겼다. 처음엔 SearchLog 엔티티를 만들어 mysql에 저장할까 했다. 하지만 검색 시 항상 검색 기록을 조회해와야 했고다. 특히 나같은 경우 검색 기록 개수를 10개로 제한해두었는데, 만약 검색 기록이 꽉 찼을 때 새로 insert 하기 위해선 가장 오래된 기록을 제거해야 했기 때문에 정렬 후 delete 하는 과정이 필요했다. 위 문제를 해결하기 위해 인메모리 DB인 Redis를 사용하기로 했다. 레디스 리스트를 만들어서 관리하는 방식으로 사용할 것이고 SearchLog + memberId 를 key로 두어 식별할 수 있도록 구현했다. 레디스 리스트를 다루기 위한 메소드는 leftpush,leftpop,rightpush,rightpop 등이 있어..
모니터링을 위해 최근 prometheus와 grafana를 통해 metric을 수집했다. 이번엔 로그 수집을 위해 elastic stack (elastic search + logstash + kibana) + filebeat 로 로그 관리 시스템을 구축해보았다. 로그를 수집하게 되면 다음과 같은 장점이 있다. 1. 사용자 행동 분석 로그 데이터를 통해 사용자의 행동 패턴을 파악하고 이를 바탕으로 서비스 개선 및 마케팅 전략을 세울 수 있다. 2. 오류 및 버그 추적 로그를 통해 시스템 내 발생한 오류나 문제를 확인하고 추적할 수 있어, 소프트웨어의 안정성과 품질을 개선할 수 있다. 3. 성능 최적화 로그 데이터를 분석하여 데이터 베이스 작업, API 호출, 시스템 리소스 사용 등 시스템의 성능 상태를 파..
Prometheus 프로메테우스는 대상 시스템으로부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템이다. 프로메테우스 특징 메트릭 기반의 오픈소스 모니터링 시스템이다. 이벤트 모니터링 및 경고에 사용되는 무료 소프트웨어 응용 프로그램이다. 유연한 쿼리(PromQL) 및 실시간 경고가 가능하다. 구조가 간단해서 운영이 쉽고, 강력한 쿼리 기능을 가지고 있으며, 그라파나(Grafana)를 통한 시각화를 지원한다. ELK와 같은 로깅이 아니라, 대상 시스템으로부터 각종 모니터링 지표를 수집하여 저장하고 검색할 수 있는 시스템이다. 프로메테우스가 주기적으로 exporter(모니터링 대상 시스템)로부터 pulling 방식으로 메트릭을 읽어서 수집한다. 메트릭이란? 수집하는 시계열 데이터를 말한다...
Cache란? 나중에 할 요청 결과를 미리 저장 해 두었다가 빠르게 서비스 해 주는 것 Look aside Cache(일반적으로 많이 쓰는 방식) DB를 가기 전에 Cache에 먼저 데이터가 있는지 확인 해본다. 만약 Cache에 데이터가 있다면 캐시 데이터를 읽고, 없다면 DB를 읽은 후 Cache에 저장 & 결과 리턴 Write Back(로그를 DB에 저장하는 경우, 쓰기 연산이 많은 경우) 캐시에 먼저 저장했다가, 특정 시점마다 DB에 저장하는 방식 ex. 걸리는 시간(배치 작업) - DB insert 쿼리를 1번씩 * 500번 >> insert쿼리 500개 합친 것 * 1번 단점: 장애가 생기면 데이터가 사라질 위험이 있다. 왜냐면 리부팅 되면 메모리는 사라지기 때문 캐시가 되는 대상들 - 단순한..