System Architecture - 3sam5oh/webtoon-search-service GitHub Wiki
(์ถ๊ฐ ์์ - ์ด๋ ๋ถ๋ถ์์ ๋ก๊ทธ๋ฅผ ์ทจ๋ํ ๊ฑด์ง ๊ฒฐ์ ํ์)
<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์ ์ฅ๊ธฐ ๋ณด๊ด์ฉ ๋ก๊ทธ ์ ์ก
A : ํ๋ฆ์ ๋ก์ปฌ ํ์ผ -> fluentbit -> opensearch -> ์ดํ ์ฒ๋ฆฌ(s3์ ์ฅ์ด ํ์ํ๋ค๋ฉด ์ดํ์ ์ถ๊ฐํ ์ ๋ ์์ง๋ง ๋ณ๋์ ์๋น์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ผ ํ๋ ํ์ฌ๋ ์ถ์ฒ ์ํจ)
A2 : ์กํฐ๋ธ ๋ก๊ทธ ์ข
๋ฅ๋ ์ ๋นํจ
A3 : opensearch ๋ก๊ทธ ์ ์ฅ ์ฃผ๊ธฐ๋ ํ๋ฒ ์๊ฐํด๋ณด๊ธฐ - ๋น์ฉ ๋ฌธ์ ๋ก ์ค๋ฌด๋งํผ ์์ฃผ๋ ๋ชป ์ฌ๋ฆฌ๋๋ผ๋ ํ๋ฃจ ํ ๋ฒ์ ๊ฒฐ๊ณผ ํ์ธ์ด ๋๋ฌด ํ๋ค ๊ฒ ๊ฐ๋ค. ์ ๋นํ ์ฃผ๊ธฐ๋ฅผ ์ฐพ์๋ณผ ๊ฒ (1์๊ฐ?)
<Q>
1. nginx์ ์์น๊ฐ ๋ง๋์ง?(Public์ธ์ง Private์ธ์ง, LB ์ /ํ)
-> A: Public์ ์์นํ ๋ช
ํํ ์ด์ ๊ฐ ์์ผ๋ฉด Public์ ์์นํด๋ ๋จ. ๊ทธ๊ฒ ์๋๋ผ๋ฉด Private๋ก ๋๊ธธ ๊ฒ.
ํ์ฌ ์ํคํ
์ณ์์๋ ์ธ๋ถ๋ก๋ถํฐ์ ํธ๋ํฝ์ NLB๊ฐ public์์ ๋ฐ์์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ nginx๊น์ง public์ ์์นํ ํ์๋ ์์ ๊ฒ ๊ฐ์