Skip to content

System Architecture

pp edited this page Jul 14, 2024 · 13 revisions

System Architecture (no HA, no load balancing)

image


0. System Architecture - Entire system

image

1. System Architecture - System traffic architecture

image

2. System Architecture - Data flow architecture

2-1. Entire data flow

image

2-2. Caching data flow (Spring ~ Caching ~ Opensearch)

image

3. System Architecture - Monitoring / Logging architecture

3-1. Monitoring

image

3-2. Logging

(추가 예정 - 어느 부분에서 로그를 취득할건지 결정 필요)

4. System Architecture - CICD architecture

image

Purpose of use

<Public>
IGW : 외부 인터넷과 VPC 연결 
NLB : 차후 HA 구성을 적용하기 위한 LB 
NGW : Private Subnet 에 있는 Grafana를 외부에서 접속하기 위한 게이트웨이
nginx : TLS 인증서 처리, 차후 HA 구성을 적용하기 위한 ALB 역할 담당
ArgoCD : Dockerhub의 이미지 변환 감지를 통한 CD 실행
<Private>
Frontend Server : Vue3 를 사용, 사용자 화면을 제공하는 서버 
App : Spring boot를 사용, 비즈니스 로직을 제공하는 서버 
Prometheus & Grafana : App서버 메트릭 모니터링 & 화면 제공
Logstash(or Fluentbit) : S3에 저장된 사용자 액세스 로그 파일을 읽어와 Opensearch 에 입력 
EC2 : Redis용 서버 
Redis : 검색 기능 향상을 위한 캐싱 기능 담당 DB 
RDS(MySQL) : 회원의 메타 데이터가 저장되는 테이블만 존재하는 DB
OpenSearch : 액세스 로그 분석, 검색 기능을 지원하는 검색 엔진
<VPC 영역외 서비스>
S3 : 사용자 액세스 로그 파일 및 에러 로그 파일이 저장되는 저장소
Ollama(또는 OpenAI) : AWS상에 올리기에는 최소 RAM 요구량이 많아서 로컬에서 실행, ngrok등을 사용해 외부에서 접근할 수 있도록 설정
Github : 개발 코드의 버전 관리 및 배포
Github Action : 테스트코드 정상 동작 확인 및 CI 실행
Dockerhub : 생성된 docker image 배포  
<로그 예상 흐름>
사용자의 특정 단어 검색 -> 
조회 메소드에 Aspect 를 사용하여 사용자 정보 및 검색 정보를 로컬 파일에 로깅 -> 
일정 기간(현재 매일 00시 1회 예상)이 될 때마다 Logstash(또는 fluentbit)를 통해 Opensearch로 로그 전송 -> 
일정 기간(현재 매일 00시 1회 예상)이 될 때마다 S3 Glacier에 장기 보관용 로그 전송  
mermaid-diagram-2024-07-11-190236
<Q>
1. nginx의 위치가 맞는지?(Public인지 Private인지, LB 전/후) 

Clone this wiki locally