Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

1,847 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

LogLens - AI ๊ธฐ๋ฐ˜ ๋กœ๊ทธ ๋ถ„์„ ํ”Œ๋žซํผ

LogLens ๋กœ๊ณ 

๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ , AI(LLM)๋ฅผ ํ™œ์šฉํ•œ ์ž๋™ ๋ถ„์„ ๋ฐ RAG ๊ธฐ๋ฐ˜ ์ฑ—๋ด‡ QA ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋กœ๊ทธ ๊ด€๋ฆฌ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

์†Œ๊ฐœ์™€ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

  • AI ๊ธฐ๋ฐ˜ ๋กœ๊ทธ ๋ถ„์„ ํ”Œ๋žซํผ, LogLens
  • ๋ฐœํ‘œ ์ž๋ฃŒ
  • ์˜์ƒ ํฌํŠธํด๋ฆฌ์˜ค
  • ํŒ€์› ๊น€๊ฑดํ•™ : BE ๋ฆฌ๋” + INFRA ์ด์„๊ทœ : BE + AI ํ•œ์ข…์šฑ : BE + BE_Lib ํ™ํ˜œ๋ฆฐ : FE ๋ฆฌ๋” ๊น€๋ฏผ์ง„ : FE_Lib + BE ์ด์ข…ํ˜„ : FE

๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ (ํ…์ŠคํŠธ ๋‹ค์ด์–ด๊ทธ๋žจ):

Spring Boot ์•ฑ (LogLens Starter)
         โ†“
      Kafka (๋ฉ”์‹œ์ง€ ํ)
         โ†“
      Logstash (ETL)
         โ†“
      OpenSearch (๋กœ๊ทธ ์ €์žฅ + ๋ฒกํ„ฐ DB)
         โ†“
์‚ฌ์šฉ์ž(FE) โ†โ†’ BE(Spring Boot) โ†โ†’ AI(FastAPI) โ†โ†’ OpenSearch
                   โ†“
            Redis (์บ์‹œ), MySQL (๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

์ธํ”„๋ผ ์•„ํ‚คํ…์ฒ˜ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜


๋กœ์ปฌ ๋น ๋ฅธ ์‹œ์ž‘

  1. ์ธํ”„๋ผ (Docker)
cd BE/BE/infra
docker-compose -f docker-compose-data.yml up -d

MySQL: 3306, Redis: 6379

  1. FE
cd FE/S13P31A306
npm install
npm run dev

๊ธฐ๋ณธ ๊ฐœ๋ฐœ ์„œ๋ฒ„: http://localhost:5173

  1. BE
cd BE/BE
./gradlew bootRun

๊ธฐ๋ณธ ํฌํŠธ: 8080, ํ—ฌ์Šค์ฒดํฌ: GET /health-check

  1. AI
cd AI/AI
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

ํ—ฌ์Šค์ฒดํฌ: GET /api/v1/health


ํ”„๋ก ํŠธ์—”๋“œ(FE)

๊ธฐ์ˆ  ์Šคํƒ

  • React 19, TypeScript 5.9, Vite 7
  • ์ƒํƒœ: Zustand, TanStack React Query
  • ๋ผ์šฐํŒ…: React Router 7
  • UI: Radix UI, Tailwind CSS, Lucide React
  • ์‹œ๊ฐํ™”: Nivo, Recharts, D3, ReactFlow
  • ํ†ต์‹ : Axios
  • ๋ฌธ์„œ: html2canvas + jsPDF, React Markdown

์ฃผ์š” ์Šคํฌ๋ฆฝํŠธ

npm run dev          # ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run build        # ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run preview      # ๋นŒ๋“œ ํ”„๋ฆฌ๋ทฐ

ํด๋” ๊ตฌ์กฐ ์š”์•ฝ

FE/S13P31A306/src/
โ”œโ”€ pages/           # ๋ผ์šฐํŒ… ํŽ˜์ด์ง€ (13๊ฐœ)
โ”œโ”€ components/      # ์žฌ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ (30+๊ฐœ)
โ”œโ”€ services/        # API ํด๋ผ์ด์–ธํŠธ ์„œ๋น„์Šค
โ”œโ”€ stores/          # Zustand ์ƒํƒœ ๊ด€๋ฆฌ
โ”œโ”€ hooks/           # ์ปค์Šคํ…€ React ํ›…
โ”œโ”€ types/           # TypeScript ํƒ€์ž… ์ •์˜
โ”œโ”€ router/          # ๋ผ์šฐํŒ… ์„ค์ •
โ””โ”€ utils/           # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜

๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ

  • API ๊ธฐ๋ณธ URL: ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์„ค์ •
  • ์ธ์ฆ: Access Token + Refresh Token (JWT)
  • ์‹ค์‹œ๊ฐ„: SSE ๊ธฐ๋ฐ˜ ์•Œ๋ฆผ ๊ตฌ๋…

๋ฐฑ์—”๋“œ(BE)

๊ธฐ์ˆ  ์Šคํƒ

  • Spring Boot 3.5.6, Java 21, Gradle
  • Web/WebFlux, Security, JPA, Redis, Actuator
  • springdoc-openapi (Swagger)

๋Ÿฐํƒ€์ž„

  • ํ”„๋กœํ•„: dev(H2 ์ธ๋ฉ”๋ชจ๋ฆฌ) / prod(MySQL)
  • ํ—ฌ์Šค์ฒดํฌ: GET /health-check
  • Swagger UI: /swagger-ui/index.html

AI ์—ฐ๋™

  • WebClient๋ฅผ ํ†ตํ•ด AI FastAPI ํ˜ธ์ถœ
  • ๋กœ๊ทธ ๋ถ„์„ ์š”์ฒญ โ†’ AI ์„œ๋น„์Šค โ†’ ๊ฒฐ๊ณผ ์บ์‹ฑ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • dev: H2 ๋ฉ”๋ชจ๋ฆฌ, ddl-auto: create
  • prod: MySQL 8.0, Redis 7, OpenSearch 2.17

์ฃผ์š” ๋„๋ฉ”์ธ (13๊ฐœ)

auth        # ์ธ์ฆ/์ธ๊ฐ€ (JWT)
project     # ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ (Multi-Tenancy)
log         # ๋กœ๊ทธ ์กฐํšŒ/ํ•„ํ„ฐ๋ง
analysis    # AI ๊ธฐ๋ฐ˜ ๋กœ๊ทธ ๋ถ„์„
alert       # ์•Œ๋ฆผ ๊ทœ์น™ ๋ฐ ์ด๋ ฅ
notification # SSE ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ
dashboard   # ๋Œ€์‹œ๋ณด๋“œ ํ†ต๊ณ„
statistics  # ๋กœ๊ทธ ํ†ต๊ณ„ ๋ถ„์„
component   # ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์ปดํฌ๋„ŒํŠธ
dependency  # ์„œ๋น„์Šค ๊ฐ„ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„
flow        # ์š”์ฒญ ํ๋ฆ„ ์ถ”์ 
jira        # Jira ์—ฐ๋™

๋นŒ๋“œ/์‹คํ–‰

./gradlew bootRun        # ๊ฐœ๋ฐœ ์‹คํ–‰
./gradlew build          # ๋นŒ๋“œ
java -jar build/libs/*.jar

AI ์„œ๋น„์Šค(AI)

๊ธฐ์ˆ  ์Šคํƒ

  • FastAPI 0.109, Python 3.11, Uvicorn
  • LangChain 0.2.16, LangGraph 0.2.28
  • OpenAI GPT-4o mini, text-embedding-3-large
  • OpenSearch 2.4 (๋ฒกํ„ฐ ๊ฒ€์ƒ‰)

๊ธฐ๋Šฅ ๋ชจ๋“ˆ

  • ๋กœ๊ทธ ๋ถ„์„: ์š”์•ฝ, ์›์ธ ๋ถ„์„, ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ์ƒ์„ฑ
  • ์ฑ—๋ด‡ QA: RAG ๊ธฐ๋ฐ˜ ์ž์—ฐ์–ด ์งˆ์˜์‘๋‹ต
  • ์ž„๋ฒ ๋”ฉ: ๋กœ๊ทธ ํ…์ŠคํŠธ ๋ฒกํ„ฐํ™”
  • 2๋‹จ๊ณ„ ์บ์‹ฑ: Trace ๊ธฐ๋ฐ˜ + ์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜ (97-99% AI ๋น„์šฉ ์ ˆ๊ฐ)

์ฃผ์š” ์—”๋“œํฌ์ธํŠธ

  • ํ—ฌ์Šค์ฒดํฌ: GET /api/v1/health
  • ๋กœ๊ทธ ๋ถ„์„: GET /api/v1/logs/{log_id}/analysis
  • ์ฑ—๋ด‡: POST /api/v1/chatbot/ask
  • ์ž„๋ฒ ๋”ฉ: POST /api/v1/embeddings
  • LangGraph API: /api/v2_langgraph/*

API ๋ฒ„์ „

  • v1: ๊ธฐ๋ณธ API (LangChain ์ฒด์ธ)
  • v2: ๊ฐœ์„ ๋œ API
  • v2_langgraph: LangGraph ์›Œํฌํ”Œ๋กœ์šฐ ๊ธฐ๋ฐ˜

์‹คํ–‰

pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000

ํ…Œ์ŠคํŠธ

python -m pytest tests -v

๋„์ปค/์ธํ”„๋ผ/๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ

  • ๊ฐ ๋ชจ๋“ˆ๋ณ„ Dockerfile ์กด์žฌ
  • Docker Compose: MySQL, Redis, OpenSearch, BE, AI
  • Blue/Green ๋ฐฐํฌ: infra/dev/docker/docker-compose-blue.yaml, docker-compose-green.yaml
  • Jenkins: CI/CD ํŒŒ์ดํ”„๋ผ์ธ (docker-compose-jenkins.yml)
  • ๋กœ๊ทธ ํŒŒ์ดํ”„๋ผ์ธ: Kafka โ†’ Logstash โ†’ OpenSearch

์ฃผ์š” ํฌํŠธ

3306  - MySQL
6379  - Redis
8080  - BE (Spring Boot)
8000  - AI (FastAPI)
9200  - OpenSearch
5601  - OpenSearch Dashboards

์„œ๋น„์Šค ์†Œ๊ฐœ

1. ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ

๋Œ€์‹œ๋ณด๋“œ

  • ๋กœ๊ทธ ํŠธ๋ Œ๋“œ ๊ทธ๋ž˜ํ”„, ์‹œ๊ฐ„๋Œ€๋ณ„ ํžˆํŠธ๋งต
  • ์—๋Ÿฌ ํ†ต๊ณ„, ์‹œ์Šคํ…œ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ์‹ค์‹œ๊ฐ„ SSE ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

2. AI ๋กœ๊ทธ ๋ถ„์„

AI ๋ถ„์„

  • GPT-4o mini ๊ธฐ๋ฐ˜ ์ž๋™ ๋กœ๊ทธ ๋ถ„์„
  • ์š”์•ฝ, ์›์ธ ๋ถ„์„, ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ์ œ์‹œ
  • 2๋‹จ๊ณ„ ์บ์‹ฑ์œผ๋กœ 97-99% ๋น„์šฉ ์ ˆ๊ฐ

3. ์ฑ—๋ด‡ QA

์ฑ—๋ด‡-1

  • RAG, LangGraph ๊ธฐ๋ฐ˜ ์ž์—ฐ์–ด ์งˆ์˜์‘๋‹ต
  • ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์—ฐ์–ด๋กœ ๊ฒ€์ƒ‰ ๋˜๋Š” ์งˆ์˜ ์œ ํ˜• ํŒ๋ณ„ ํ›„ AI Agent(ReAct Agent)๊ฐ€ tool์„ ํ™œ์šฉํ•ด ์งˆ์˜ ์ฒ˜๋ฆฌ
  • ๊ด€๋ จ ๋กœ๊ทธ์™€ ํ•จ๊ป˜ ๋‹ต๋ณ€ ์ œ๊ณต

4. ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„

์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ ๊ด€๊ณ„ ์‹œ๊ฐํ™”
  • ReactFlow ๊ธฐ๋ฐ˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„
  • ์„œ๋น„์Šค ์ƒํƒœ ๋ฐ ์—ฐ๊ฒฐ ํ™•์ธ

5. ์š”์ฒญ ํ๋ฆ„ ์ถ”์ 

์š”์ฒญ ํ๋ฆ„ - ์—๋Ÿฌ ์š”์ฒญ ํ๋ฆ„ - ์ •์ƒ

  • trace_id ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ํŠธ๋ ˆ์ด์‹ฑ
  • ์š”์ฒญ ๊ฒฝ๋กœ ์‹œ๊ฐํ™”
  • ๋ณ‘๋ชฉ ์ง€์  ํŒŒ์•…

6. ๋กœ๊ทธ ๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง

๋กœ๊ทธ ๊ฒ€์ƒ‰-1

  • ์ƒ์„ธ ํ•„ํ„ฐ๋ง (๋ ˆ๋ฒจ, ์„œ๋น„์Šค, ์‹œ๊ฐ„ ๋“ฑ)
  • OpenSearch ๊ธฐ๋ฐ˜ ๊ณ ์† ๊ฒ€์ƒ‰
  • ๋กœ๊ทธ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ

7. ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ

์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ

  • ์ดˆ๊ธฐ ์„ค์ • ๊ฐ€์ด๋“œ

8. ๋ถ„์„ ๋ฆฌํฌํŠธ

๋ถ„์„ ๋ฆฌํฌํŠธ - 1 ๋ถ„์„ ๋ฆฌํฌํŠธ - 2 ๋ถ„์„ ๋ฆฌํฌํŠธ - jira

  • AI ๋ถ„์„ ๊ฒฐ๊ณผ ๋ฌธ์„œํ™”
  • PDF/Markdown ๋‚ด๋ณด๋‚ด๊ธฐ
  • Jira ์ด์Šˆ ์—ฐ๋™

ํ•ต์‹ฌ ๊ธฐ์ˆ  ํŠน์ง•

Frontend

  • React 19 + TypeScript + Vite: ์ตœ์‹  ํ”„๋ก ํŠธ์—”๋“œ ์Šคํƒ์œผ๋กœ ๋น ๋ฅธ ๊ฐœ๋ฐœ๊ณผ ์ตœ์ ํ™”๋œ ๋ฒˆ๋“ค๋ง
  • ์ƒํƒœ ๊ด€๋ฆฌ: Zustand + TanStack Query๋กœ ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์บ์‹ฑ
  • ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ: SSE(Server-Sent Events)๋กœ ์„œ๋ฒ„ ํ‘ธ์‹œ ์•Œ๋ฆผ, ์ž๋™ ์žฌ์—ฐ๊ฒฐ ์ง€์›
  • UI/UX: Radix UI + Tailwind CSS๋กœ ์ ‘๊ทผ์„ฑ ์ค€์ˆ˜, Framer Motion์œผ๋กœ ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜
  • ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”: ReactFlow(์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„), Recharts/D3(์ฐจํŠธ), html2canvas+jsPDF(๋ฌธ์„œ ์ƒ์„ฑ)

Backend

  • Spring Boot 3.5.6 + Java 21: Virtual Threads๋กœ ๋†’์€ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ
  • ์ธ์ฆ: JWT ๊ธฐ๋ฐ˜ (Access 24h + Refresh 7d), Refresh Token Rotation์œผ๋กœ ๋ณด์•ˆ ๊ฐ•ํ™”
  • ์‹ค์‹œ๊ฐ„ ํ†ต์‹ : SSE๋กœ 50๊ฐœ ๋™์‹œ ์—ฐ๊ฒฐ ์ง€์›, heartbeat๋กœ ์—ฐ๊ฒฐ ์œ ์ง€
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: HikariCP ์ปค๋„ฅ์…˜ ํ’€ ์ตœ์ ํ™”, JPA ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋กœ DB ๋ถ€ํ•˜ ์ตœ์†Œํ™”
  • Multi-Tenancy: project_uuid ๊ธฐ๋ฐ˜ ์ž๋™ ํ•„ํ„ฐ๋ง, OpenSearch ์ธ๋ฑ์Šค ๋ถ„๋ฆฌ
  • ๋ชจ๋‹ˆํ„ฐ๋ง: Prometheus + Actuator๋กœ JVM/HTTP/DB ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘

AI

  • FastAPI + LangChain + LangGraph: GPT-4o mini ๊ธฐ๋ฐ˜ ๋กœ๊ทธ ๋ถ„์„ ์‹œ์Šคํ…œ
  • 2๋‹จ๊ณ„ ์บ์‹ฑ ์ „๋žต์œผ๋กœ AI ๋น„์šฉ ์ตœ์ ํ™”
    • 1๋‹จ๊ณ„ (Trace ๊ธฐ๋ฐ˜): ๊ฐ™์€ ์š”์ฒญ ํ๋ฆ„ ๋กœ๊ทธ ์žฌ์‚ฌ์šฉ โ†’ ๋น„์šฉ 97-99% ์ ˆ๊ฐ
    • 2๋‹จ๊ณ„ (์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜): ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์œผ๋กœ ์œ ์‚ฌ ์—๋Ÿฌ ํŒจํ„ด ๊ฐ์ง€ โ†’ ๋น„์šฉ 80% ์ ˆ๊ฐ
  • RAG ์ฑ—๋ด‡: ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋ฐ˜ ๊ทผ๊ฑฐ ์žˆ๋Š” ๋‹ต๋ณ€ ์ƒ์„ฑ
  • ReAct Agent: LangGraph Tool๋กœ ์งˆ์˜ ๋ถ„์„ โ†’ ๋„๊ตฌ ์„ ํƒ โ†’ ๊ฒฐ๊ณผ ์ข…ํ•ฉ

Infrastructure

  • ์ปจํ…Œ์ด๋„ˆํ™”: Docker + Docker Compose, ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ ๋นŒ๋“œ๋กœ ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
  • CI/CD: Jenkins ํŒŒ์ดํ”„๋ผ์ธ, Blue/Green ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ
  • ๋กœ๊ทธ ํŒŒ์ดํ”„๋ผ์ธ: Fluent Bit โ†’ Kafka โ†’ Logstash โ†’ OpenSearch (Logstash ๋Œ€๋น„ ๋ฆฌ์†Œ์Šค 90% ์ ˆ๊ฐ)
  • ๋ฐ์ดํ„ฐ ์ €์žฅ: MySQL(๋ฉ”ํƒ€๋ฐ์ดํ„ฐ), Redis(์บ์‹œ/์„ธ์…˜), OpenSearch(๋กœ๊ทธ ๊ฒ€์ƒ‰, 30์ผ ์ž๋™ ์‚ญ์ œ)
  • ํ—ฌ์Šค์ฒดํฌ: 30์ดˆ ๊ฐ„๊ฒฉ ์ƒํƒœ ํ™•์ธ, ์ž๋™ ์žฌ์‹œ์ž‘

๊ณต์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Frontend Lib (NPM Package)

์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ž๋™ TraceID ์ „ํŒŒ: ์ตœ์ƒ์œ„ ํ•จ์ˆ˜๋งŒ ๋ž˜ํ•‘ํ•˜๋ฉด ๋‚ด๋ถ€ ํ˜ธ์ถœ ์ฒด์ธ์— ์ž๋™์œผ๋กœ traceId ์ „ํŒŒ
  • React Hook ์ง€์›: useLogLens Hook์œผ๋กœ React ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ž๋™ ์ง€์›: Promise, async/await ํ•จ์ˆ˜ ์ž๋™ ์ถ”์ 
  • ์„ฑ๋Šฅ ์ธก์ •: ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ๊ฐ„ ์ž๋™ ์ธก์ • ๋ฐ ์ฝ˜์†” ํ‘œ์‹œ
  • ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ ๋งˆ์Šคํ‚น: ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋งˆ์Šคํ‚น ํ•„๋“œ ์„ค์ • (password, token ๋“ฑ)
  • ์ง์ ‘ ๋กœ๊น…: loglens.info(), loglens.warn(), loglens.error() ๋ฉ”์„œ๋“œ ์ œ๊ณต
  • ์ž๋™ ๋กœ๊ทธ ์ „์†ก: ์„ค์ •๋œ ์ฃผ๊ธฐ(๊ธฐ๋ณธ 30์ดˆ)๋งˆ๋‹ค ๋ฐฑ์—”๋“œ๋กœ HTTP ์ „์†ก
  • ์—๋Ÿฌ ์ž๋™ ์ˆ˜์ง‘: captureErrors: true ์˜ต์…˜์œผ๋กœ ์—๋Ÿฌ ์ž๋™ ์ˆ˜์ง‘

Backend Lib (LogLens Spring Boot Starter)

์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ž๋™ ๋กœ๊ทธ ์ˆ˜์ง‘: @RestController, @Service, @Repository, @Component ํด๋ž˜์Šค์˜ public ๋ฉ”์„œ๋“œ ์ž๋™ ์ถ”์ 
  • ์„ ํƒ์  ๋กœ๊น…: @LogMethodExecution ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ํŠน์ • ๋ฉ”์„œ๋“œ๋งŒ ๋กœ๊น… ๊ฐ€๋Šฅ
  • ๋กœ๊น… ์ œ์™ธ: @NoLogging ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ํŠน์ • ๋ฉ”์„œ๋“œ/ํด๋ž˜์Šค ์ œ์™ธ
  • ๋ณด์•ˆ:
    • @Sensitive ์–ด๋…ธํ…Œ์ด์…˜: ํŒŒ๋ผ๋ฏธํ„ฐ/ํ•„๋“œ๋ฅผ ****๋กœ ๋งˆ์Šคํ‚น
    • @ExcludeValue ์–ด๋…ธํ…Œ์ด์…˜: ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋กœ ์ฒ˜๋ฆฌ
  • MDC ํ†ตํ•ฉ: TraceID ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ์ถ”์  ์ง€์›
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ: ๋กœ๊ทธ ์ „์†ก์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Œ

์ธํ”„๋ผ ์•„ํ‚คํ…์ฒ˜

๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ

VPC (10.0.0.0/16)
โ”œโ”€โ”€ Public Subnet (10.0.0.0/20, 10.0.16.0/20)
โ”‚   โ”œโ”€โ”€ Internet Gateway โ†’ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ์ˆ˜์‹ 
โ”‚   โ”œโ”€โ”€ ALB โ†’ HTTPS ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ
โ”‚   โ”œโ”€โ”€ NAT Gateway โ†’ Private ์„œ๋ธŒ๋„ท ์•„์›ƒ๋ฐ”์šด๋“œ
โ”‚   โ””โ”€โ”€ Bastion Host โ†’ ์•ˆ์ „ํ•œ SSH ์ ‘๊ทผ
โ””โ”€โ”€ Private Subnet (10.0.64.0/20)
    โ””โ”€โ”€ Application Server (Spring Boot, MySQL, Redis)

๋ณด์•ˆ ์„ค๊ณ„

  • Security Group: ๋ฆฌ์†Œ์Šค๋ณ„ ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์ ์šฉ
  • IAM Role: EC2๊ฐ€ S3์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผ (Access Key ๋ถˆํ•„์š”)
  • HTTPS ๊ฐ•์ œ: ACM ์ธ์ฆ์„œ๋กœ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ ์•”ํ˜ธํ™”
  • Bastion Host: Private ์„œ๋ฒ„ ์ ‘๊ทผ ๋‹จ์ผ ์ง„์ž…์ 

๋ฐฐํฌ ์ „๋žต

User โ†’ Route53 โ†’ CloudFront โ†’ S3 (React)
     โ†’ Route53 โ†’ ALB โ†’ Target Group (Spring Boot)
                      โ”œโ”€โ”€ Blue (8080)
                      โ””โ”€โ”€ Green (8081) โ† ๋ฌด์ค‘๋‹จ ์ „ํ™˜

๋„๋ฉ”์ธ ๊ตฌ์„ฑ

๋„๋ฉ”์ธ ์šฉ๋„ ๊ธฐ์ˆ 
www.loglens.co.kr ํ”„๋ก ํŠธ์—”๋“œ CloudFront + S3
api.loglens.co.kr ๋ฐฑ์—”๋“œ API ALB โ†’ Spring Boot
jenkins_be.loglens.co.kr CI/CD ALB โ†’ Jenkins
bastion.loglens.co.kr ๊ด€๋ฆฌ ์ ‘์† Bastion Host

๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์„œ๋ฒ„ (์™ธ๋ถ€ ์ œ๊ณต)

์ธ์Šคํ„ด์Šค: t2.xlarge (4 vCPU, 16GB RAM)

๊ตฌ์„ฑ ์š”์†Œ

  • Kafka: ๋กœ๊ทธ ์ŠคํŠธ๋ฆฌ๋ฐ, Snappy ์••์ถ•
  • Logstash: ๋กœ๊ทธ ์ •๊ทœํ™” ๋ฐ OpenSearch ์ธ๋ฑ์‹ฑ
  • OpenSearch 2.17: KNN ๋ฒกํ„ฐ ๊ฒ€์ƒ‰, ILM ์ž๋™ ์‚ญ์ œ
  • FastAPI: AI ๋ถ„์„ API, 2๋‹จ๊ณ„ ์บ์‹ฑ

๋ฐ์ดํ„ฐ ํ๋ฆ„

์‚ฌ์šฉ์ž ์š”์ฒญ

React App โ†’ api.loglens.co.kr โ†’ Route53 โ†’ ALB โ†’ Spring Boot

๋กœ๊ทธ ์ˆ˜์ง‘

Application โ†’ Fluent Bit โ†’ Kafka โ†’ Logstash โ†’ OpenSearch
                                              โ†“
                                         AI ๋ถ„์„ (์บ์‹ฑ)

๊ด€๋ฆฌ์ž ์ ‘๊ทผ

Admin โ†’ bastion.loglens.co.kr โ†’ Bastion Host โ†’ Private Servers

๊ธฐ์ˆ ์  ์„ฑ๊ณผ

์„ฑ๋Šฅ ์ตœ์ ํ™”

  • Fluent Bit ๋„์ž…์œผ๋กœ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ 90% ์ ˆ๊ฐ
  • JPA ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋กœ DB ์™•๋ณต ์ตœ์†Œํ™”
  • CloudFront ์บ์‹ฑ์œผ๋กœ ์‘๋‹ต ์†๋„ ๊ฐœ์„ 

๋น„์šฉ ์ตœ์ ํ™”

  • AI 2๋‹จ๊ณ„ ์บ์‹ฑ์œผ๋กœ GPT ๋น„์šฉ 97-99% ์ ˆ๊ฐ
  • Kafka Snappy ์••์ถ•์œผ๋กœ ๋Œ€์—ญํญ 50% ์ ˆ๊ฐ

์•ˆ์ •์„ฑ

  • Blue/Green ๋ฐฐํฌ๋กœ ๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค
  • ์ž๋™ ํ—ฌ์Šค์ฒดํฌ ๋ฐ ์žฌ์‹œ์ž‘
  • ๋ถ„์‚ฐ ์ถ”์ (TraceID)์œผ๋กœ ์—๋Ÿฌ ์›์ธ ๋น ๋ฅธ ํŒŒ์•…

๋ณด์•ˆ

  • Private ์„œ๋ธŒ๋„ท์œผ๋กœ ์„œ๋ฒ„ ๋ณดํ˜ธ
  • JWT Rotation์œผ๋กœ ํ† ํฐ ํƒˆ์ทจ ๋ฐฉ์–ด
  • ๋ฏผ๊ฐ์ •๋ณด ์ž๋™ ๋งˆ์Šคํ‚น

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages