본문 바로가기

프로젝트/여행지 오픈 API

[Elasticsearch] 시스템 구조 및 flow 정리

목차

     

    시스템 구조

    전체 구조도

     

    이번 프로젝트의 구조도를 한눈에 정리하자면 다름과 같다.

    Main 서버에는 FE 서버와 본체 비즈니스 서버, Elasticsearch와 연동되는 API 서버가 존재하고, 핵심 로직을 담당한다.

    Sub 서버에는 ELK 및 배치 프로그램, MySQL의 저장소 위주로 구성하였다.

    이는 Elasticsearch와 배치 프로그램이 상대적으로 RAM 용량을 많이 차지하기 때문에, 부하를 줄일 목적으로 Sub 서버를 구성하였다.

     

    데이터 아키텍쳐 - 스크래핑

     

    데이터 정제 구조도이다.

    우리는 배치 프로그램을 통해 스크래핑이 허가된 사이트에서(robot.txt 및 정책 확인) 부하를 주지 않는 선에서 데이터를 수집하였다.

    이 과정에서 수집된 html 데이터는 텍스트화하여 1차적으로 MongoDB 클라우드에 저장하였다.

    한 도메인의 수집이 완료되면 2차적으로 이를 데이터 정제 프로그램을 통해 csv파일로 정제하였고, 이를 logstash를 통해 인덱스 안의 도큐먼트로 저장하였다.

     

    데이터 아키텍쳐 - 사용자 로그

     

    또한, 사용자의 API 요청 회수를 통해 어떤 종류가 자주, 얼마나 사용되는지에 대한 데이터를 수집하고자 하였다.

    Elasticsearch API 서버에 Logback을 통해 로그 데이터를 설치하고, 이를 볼륨 마운팅을 통해 외부 EC2 폴더와 매핑하였다.

    로그스태시는 이 로그 파일을 파싱하고, 마찬가지로 도큐먼트의 형태로 저장하였다.

     

    비즈니스 로직

    비즈니스 로직의 구성은 다음과 같다.

    1. FE 서버를 통해 API 사이트의 화면 처리를 담당한다. 이 과정에서 Kibana에 저장된 Dashboard를 통해 시각화 화면을 iframe으로 가져와 보여주게 하였다.

    2. BE API 서버를 통해 서버의 핵심 비즈니스 로직을 처리한다.

    이 과정에서 Redis를 사용한 API 요청 처리, MySQL 및 Elasticsearch API 서버를 통한 비즈니스 로직을 수행할 수 있게 한다.

     

    전체 플로우

     

    조금 복잡하긴 하지만, 전체 플로우는 다음과 같이 구성된다.