모니터링을 위해 최근 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번 단점: 장애가 생기면 데이터가 사라질 위험이 있다. 왜냐면 리부팅 되면 메모리는 사라지기 때문 캐시가 되는 대상들 - 단순한..
1. AOP란? - 관점 지향 프로그래밍 (Aspect Oriented Programming) - 프로젝트 구조를 바라보는 관점을 바꿔보자는 의미 - 횡단 관심사(Cross-Cutting Concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임 - 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 개발자는 반복 작업을 줄이고 핵심 기능 개발에만 집중할 수 있음 간단하게 한줄로 AOP를 정리해보자면, AOP는 공통된 기능을 재사용하는 기법이다. 왜 사용해야할까?? 위 사진은 우아한 테크 10분 테크톡 유튜브 영상에서 캡쳐한 사진이다. 만약 3개의 메소드의 실행 시간을 측정해달라는 요청이 들어오면 메소드 시작 지점과 끝나는 지점의 시간을 측정해 이의 차이를 출력할 것이다...
프로젝트 진행 중 직업 추천 api에서 반환까지 평균 6초 이상의 시간이 걸렸다. 100개가 넘는 직업 csv에 각각의 csv마다 6000개가 넘는 데이터가 있는데 이걸 전부 읽기 때문에 오래 걸리는게 당연했다. 성능 개선을 위해 멀티 스레드를 적용했었는데 프로젝트 마감 기한이 있었던지라 사용법만 익혀 적용했었다. 프로젝트가 끝나고 다시 돌아와 공부해보니 생각보다 어려워 이번 기회에 자세히 공부하고 정리해보았다. 비동기와 멀티스레드는 같은 뜻이 아닙니다. 비동기와 멀티스레드는 비슷하다 착각할 수 있지만 같은 뜻이 아니다. 의미를 간단하게 정리하자면 아래와 같다. 동기= 순서 스레드= 공간 or 일꾼 그럼 이제, 하나씩 살펴보자 동기 & 비동기 동기: 순차적으로 실행되는 것 비동기: 요청을 받은 뒤 먼저 ..
세션 방식 로그인 세션은 인증된 사용자의 정보를 SESSION ID와 매핑하여 서버에 저장하고 클라이언트에게 식별자와 문자열로 이루어진 SESSION ID를 응답헤더에 넣어 전송한다. 매 응답마다 SESSION ID 만 보내기때문에 네트워크 부하가 커지지 않고 서버에 저장되므로 클라이언트의 웹브라우저의 호환성 문제가 해결된다. 그리고 많은 정보의를 유지할 수 있게 된다. 하지만 서버에 데이터 저장량이 많아지므로 서버 메모리에 부담이 갈 수 있다. 백엔드 개발을 하다보면 로그인 구현은 필수라고 해도 과언이 아니다. 지금까지 진행했던 여러 프로젝트에서 로그인 기능이 없었던 프로젝트는 거의 없는 것 같다. 이렇게 아무렇지 않게 사용했던 세션에 대해 의문점이 생겼다. session.getAttribute("us..