Portfolio

Portfolio

BlessFlow / BibleCard AI β€” 기술 포트폴리였

μ„±κ²½ 묡상을 AI 이미지와 κ²°ν•©ν•΄ λ§μ”€μΉ΄λ“œλ₯Ό λ§Œλ“œλŠ” μ›Ή μ„œλΉ„μŠ€. κΈ°νšλΆ€ν„° μš΄μ˜κΉŒμ§€ 1인 개발.

1
2
3
Cloudflare CDN β†’ Edge Proxy β†’ Next.js Γ— 3 + FastAPI (톡합 λ°±μ—”λ“œ)
                                  Celery Worker, PostgreSQL + pgvector
                                  GPT-4o-mini, DALL-E 3, SeaweedFS

Hetzner 단일 μ„œλ²„μ— k3s 10개 Pod.


RAG μ‹œμŠ€ν…œ

μ„±κ²½ 31,102μ ˆμ„ OpenAI text-embedding-3-small둜 λ²‘ν„°ν™”ν•˜κ³  pgvector(IVFFlat)둜 코사인 μœ μ‚¬λ„ 검색을 κ΅¬μΆ•ν–ˆμŠ΅λ‹ˆλ‹€. 묡상을 μž‘μ„±ν•˜λŠ” 쀑에 κ΄€λ ¨ ꡬ절이 μ‹€μ‹œκ°„μœΌλ‘œ μΆ”μ²œλ©λ‹ˆλ‹€.

인기 2,296개 κ΅¬μ ˆμ— GPT-4o-mini둜 6μΆ• 메타데이터(μ—°λ ΉλŒ€/상황/절기/μ‹ μ•™μƒν™œ/영적주제/감정)λ₯Ό νƒœκΉ…ν–ˆλŠ”λ°, μΆ”μ²œ κ²°κ³Όκ°€ λ“€μ­‰λ‚ μ­‰ν•΄μ„œ 직접 νλ ˆμ΄μ…˜ν•œ 130개 ꡬ절둜 μ „ν™˜ν–ˆμŠ΅λ‹ˆλ‹€. μžλ™ν™”κ°€ 항상 닡은 μ•„λ‹ˆμ—ˆμŠ΅λ‹ˆλ‹€.

ꡬ좕 λΉ„μš© 1.57λ‹¬λŸ¬ (μΌνšŒμ„±). 검색 λΉ„μš© νšŒλ‹Ή 0.00001λ‹¬λŸ¬


LLM νŒŒμ΄ν”„λΌμΈ

μ‚¬μš©μž 묡상 β†’ GPT-4o-miniκ°€ ν”„λ‘¬ν”„νŠΈλ‘œ λ³€ν™˜ β†’ DALL-E 3κ°€ 이미지 생성.

μŠ€νƒ€μΌμ€ 7κ°€μ§€(μˆ˜μ±„ν™”, 사진, μœ ν™”, 일러슀트, λΌμΈμ•„νŠΈ, μŠ€ν…ŒμΈλ“œκΈ€λΌμŠ€, λ°”λ‘œν¬) 쀑 선택. 200μž₯을 직접 μƒμ„±ν•˜κ³  κ²€μˆ˜ν•˜λ©΄μ„œ ν”„λ‘¬ν”„νŠΈ 원칙을 μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. μ‚¬λžŒ μ–Όκ΅΄ ν΄λ‘œμ¦ˆμ—…μ€ AI κΈ°ν˜•μ΄ λ‚˜μ˜€λ‹ˆ ν”Όν•˜κ³ , 좔상적 ν‘œν˜„μ€ μ‹œκ°μ  μ€μœ λ‘œ λ°”κΎΈλŠ” μ‹μž…λ‹ˆλ‹€.

AI 생성이 μ‹€νŒ¨ν•˜λ©΄ 이미지 ν’€μ—μ„œ μœ μ‚¬ 이미지λ₯Ό λ§€μΉ­ν•˜κ³ , 그것도 μ•ˆ 되면 ν”„λ‘ νŠΈ 폴백 이미지λ₯Ό μ”λ‹ˆλ‹€. 3단계.

비동기 μ²˜λ¦¬λŠ” Celery + Redis. λŒ€κΈ°μ—΄ μœ„μΉ˜λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ λ³΄μ—¬μ€λ‹ˆλ‹€.


이미지 μΆ”μ²œ

208μž₯ 이미지 풀을 3μΆ•(μ˜λ„/μ†Œμž¬/λΆ„μœ„κΈ°)으둜 νƒœκΉ…ν•˜κ³ , 묡상 ν…μŠ€νŠΈμ—μ„œ ν‚€μ›Œλ“œλ₯Ό μΆ”μΆœν•΄μ„œ μŠ€μ½”μ–΄λ§ν•©λ‹ˆλ‹€.

ꡬ체적 μ†Œμž¬κ°€ μ–ΈκΈ‰λ˜λ©΄ μ†Œμž¬ κ°€μ€‘μΉ˜λ₯Ό 높이고, 좔상적 묡상이면 μ˜λ„μ™€ λΆ„μœ„κΈ° κ°€μ€‘μΉ˜λ₯Ό λ†’μž…λ‹ˆλ‹€. μ΅œκ·Όμ— μƒμ„±λœ μ΄λ―Έμ§€λŠ” κ°μ ν•΄μ„œ 같은 이미지가 반볡 μΆ”μ²œλ˜μ§€ μ•Šκ²Œ ν–ˆμŠ΅λ‹ˆλ‹€.

AI둜 λ§Œλ“  μ΄λ―Έμ§€λŠ” μžλ™μœΌλ‘œ 풀에 μΆ”κ°€λ˜μ–΄μ„œ, μ‚¬μš©μžκ°€ μΉ΄λ“œλ₯Ό λ§Œλ“€μˆ˜λ‘ μΆ”μ²œμ΄ λ‚˜μ•„μ§€λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.


AdelieAI β€” μž‘μ€ LLM 페λ₯΄μ†Œλ‚˜ μ—”μ§„ (μ˜€ν”ˆμ†ŒμŠ€)

μž‘μ€ LLM에 페λ₯΄μ†Œλ‚˜λ₯Ό 직접 ν›ˆλ ¨μ‹œμΌœ νŒ¨ν‚€μ§•ν•˜λŠ” μ˜€ν”ˆμ†ŒμŠ€ 엔진을 2026λ…„ 4월에 κ³΅κ°œν–ˆμŠ΅λ‹ˆλ‹€. κ²Œμž„ NPC, λΈŒλžœλ“œ 페λ₯΄μ†Œλ‚˜, 도메인 μ›Œμ»€μ²˜λŸΌ β€œμΊλ¦­ν„° μœ μ§€β€κ°€ ν•„μˆ˜μΈ μš©λ„λ₯Ό 겨λƒ₯ν–ˆμŠ΅λ‹ˆλ‹€.

github.com/southglory/AdelieAI Β· μΆœμ‹œ 회고

Qwen2.5-7B 베이슀 μœ„μ— LoRA μ–΄λŒ‘ν„°λ₯Ό 60~120쌍 λŒ€ν™” λ°μ΄ν„°λ‘œ ν›ˆλ ¨ν•©λ‹ˆλ‹€. 둜컬 3090 ν•œ μž₯μ—μ„œ 25λΆ„ μ•ˆμ— ν•œ 캐릭터가 λ‚˜μ˜€κ³ , GGUF q4_k_m으둜 μ–‘μžν™”ν•˜λ©΄ 4.4GB 단일 파일둜 λ…ΈνŠΈλΆ CPUμ—μ„œλ„ 좔둠이 λ©λ‹ˆλ‹€. ν•™μŠ΅ λ ˆμ‹œν”Ό, κ°€μ€‘μΉ˜, RAG κ·ΈλΌμš΄λ”©, μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈλ₯Ό .adelie 페λ₯΄μ†Œλ‚˜ 팩 ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ„œ κ²Œμž„μ΄λ‚˜ 봇에 κ·ΈλŒ€λ‘œ νˆ¬μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν‰κ°€λŠ” LLM-as-judge ν•˜λ„€μŠ€λ‘œ λ² μ΄μŠ€μ™€ 이전 버전을 μžλ™ λΉ„κ΅ν•©λ‹ˆλ‹€. κ·Έ μœ„μ— EvalGardenerλΌλŠ” μžκΈ°κ°œμ„  5단계 루프(μΈ‘μ • β†’ μ „μˆ  뢄석 β†’ μ „λž΅ 뢄석 β†’ 생성 β†’ Eval-Re)λ₯Ό μ–Ήμ–΄ λΌμš΄λ“œλ§ˆλ‹€ λ‹€μŒ μž‘μ—… μΆ•(ν…ŒμŠ€νŠΈ ν’€ ν™•μž₯, ν”„λ‘¬ν”„νŠΈ κ°•ν™”, LoRA ν•™μŠ΅, DPO, 베이슀 ꡐ체)을 κ²°μ • 맀트릭슀둜 μΆ”μ²œν•©λ‹ˆλ‹€.

DPO ν•™μŠ΅μš© λ°μ΄ν„°λŠ” μ±„νŒ… UI의 3ν‹°μ–΄ + dismiss 평점 μœ„μ ―μœΌλ‘œ 직접 μˆ˜ν™•ν•©λ‹ˆλ‹€. 같은 ν”„λ‘¬ν”„νŠΈμ— 쒋은 응닡과 λ‚˜μœ 응닡이 λ™μ‹œμ— μŒ“μ΄λ©΄ (chosen, rejected) νŽ˜μ–΄λ‘œ λ–¨μ–΄μ Έμ„œ TRL DPOTrainer에 λ°”λ‘œ λ“€μ–΄κ°‘λ‹ˆλ‹€.

HuggingFace에 두 ν˜•νƒœλ‘œ κ³΅κ°œν–ˆμŠ΅λ‹ˆλ‹€.

λΌμ΄μ„ μŠ€λŠ” μ½”λ“œ Apache 2.0, κ°€μ€‘μΉ˜ Tongyi Qianwen v1(Qwen2.5 상속).


AI Agent System Template μ˜€ν”ˆμ†ŒμŠ€ λ ˆν¬μ§€ν† λ¦¬ 운영

μ—¬λŸ¬ μ—μ΄μ „νŠΈλ₯Ό μ‚¬μš©ν•΄μ„œ ν”„λ‘œμ νŠΈλ“€μ„ μ§„ν–‰ν•  λ•Œ μ—μ΄μ „νŠΈ 각자의 λ©”λͺ¨λ¦¬μ—λ§Œ μ˜μ‘΄ν•  경우의 λ¬Έμ œλŠ” μ—μ΄μ „νŠΈλ“€μ΄ μ„œλ‘œμ˜ μ›Œν¬ν”Œλ‘œμš°λ₯Ό κ³΅μœ ν•˜μ§€ λͺ»ν•œλ‹€λŠ” μ μž…λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이 Agent System Template ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. λ™μ μœΌλ‘œ 봇에 μ˜ν•΄ μ™„μ„±λ˜λŠ” 이 μ‹œμŠ€ν…œμ˜ μ›Œν¬ν”Œλ‘œμš° μž‘μ—… λ¬Έμ„œλŠ” ν•œ μ—μ΄μ „νŠΈμ˜ λ©”λͺ¨λ¦¬μ— μ˜μ‘΄ν•˜μ§€ μ•ŠμœΌλ©° μ—μ΄μ „νŠΈλ“€λΌλ¦¬ μž‘μ—… μ›Œν¬ν”Œλ‘œμš° 진행상황을 λΆ„λͺ…ν•˜κ²Œ μ†Œν†΅ν•˜λŠ” 과정을 거치며 λͺ…μ‹œμ μœΌλ‘œ κΈ°λ‘ν•΄λ‚˜κ°‘λ‹ˆλ‹€.

λ˜ν•œ 이 μ‹œμŠ€ν…œμ€ κ°œλ°œμžλ“€ κ°„ ν˜‘μ—…μ—λ„ 도움이 λ©λ‹ˆλ‹€. 각자의 μ›Œν¬ν”Œλ‘œμš°λ₯Ό λ‹€λ₯Έ κ°œλ°œμžλ“€κ³Ό κ³΅μœ ν•  λ•Œ, μž‘μ—… 흐름이 λŠκΈ°μ§€ μ•Šκ³  μ›ν™œνžˆ μ΄μ–΄μ§€κ²Œ λ©λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ, ν•œ μ—μ΄μ „νŠΈλ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ μ—μ΄μ „νŠΈκ°€ λ©”λͺ¨λ¦¬ λ°”κΉ₯μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ 자기의 νƒœμŠ€ν¬λ₯Ό 생성, μ—…λ°μ΄νŠΈ, μ™„λ£Œμ²˜λ¦¬ ν•˜λŠ” μ›Œν¬ν”Œλ‘œμš°κ°€ μ—¬μ „νžˆ κ΄€λ¦¬ν•˜κΈ°μ— μœ μš©ν•©λ‹ˆλ‹€.

κ°„λ‹¨ν•œ κΈ°λŠ₯ μ„€λͺ…은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • μ—¬λŸ¬ 역할을 ν• λ‹Ήν•œ μ—μ΄μ „νŠΈλ“€μ„ ν„΄μ œλ‘œ μš΄μ˜ν•©λ‹ˆλ‹€.
  • μ—μ΄μ „νŠΈλΌλ¦¬ μ±„νŒ…λ°©μ—μ„œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›κ³ , 봇이 λ©”μ‹œμ§€λ₯Ό νŒŒμ‹±ν•΄μ„œ μž‘μ—… λ³΄λ“œλ₯Ό μžλ™μœΌλ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  • μ—μ΄μ „νŠΈλŠ” μ±„νŒ… λ©”μ‹œμ§€λ‘œλ§Œ λ³€κ²½ μš”μ²­μ„ ν•˜κ³  봇이 μ€‘μž¬ν•΄μ„œ μž‘μ—… λ³΄λ“œλ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.

GitHub


λ³΄μ•ˆ

묡상 ν…μŠ€νŠΈλŠ” AES-256-GCM으둜 μ•”ν˜Έν™”ν•΄μ„œ DB에 μ €μž₯ν•©λ‹ˆλ‹€. 곡개 κ°€λŸ¬λ¦¬μ—μ„œλŠ” 묡상 λ‚΄μš©μ΄ 보이지 μ•ŠμŠ΅λ‹ˆλ‹€. μ΄μš©μ•½κ΄€κ³Ό κ°œμΈμ •λ³΄μ²˜λ¦¬λ°©μΉ¨μ—λ„ λͺ…μ‹œν–ˆμŠ΅λ‹ˆλ‹€.


인프라

  • k3s + Helm + ArgoCD (GitOps)
  • GitHub Actions CI/CD β€” SSH둜 μ„œλ²„ 접속, docker build, k3s ctr images import (λ ˆμ§€μŠ€νŠΈλ¦¬ 없이 배포)
  • Sentry μ—λŸ¬ 좔적 + Discord Bot μ•Œλ¦Ό
  • PostgreSQL 15 + pgvector, Redis, SeaweedFS (S3 ν˜Έν™˜), Cloudflare CDN

λΈ”λ‘œκ·Έ 개발 둜그

μ•½ 3λ…„μ§Έ κ΄€μ‹¬μžˆλŠ” λΆ„μ•Όμ˜ κ°œλ°œμ΄λ‚˜ 연ꡬλ₯Ό ν•˜λ©° κ²½ν—˜ν•œ 것을 제 슀슀둜 λ˜λŒμ•„λ³΄κ³  찾아보기 μœ„ν•΄ κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έλ₯Ό μ΄μ–΄μ˜€κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ 졜근 μ‚¬μ΄λ“œν”„λ‘œμ νŠΈμ— λŒ€ν•œ κ΄€λ ¨ ν¬μŠ€νŒ…μž…λ‹ˆλ‹€.

BibleCardAI 전체 ν”Œλ‘œμš° 데λͺ¨

ꡬ절 선택 β†’ 묡상 μž‘μ„± β†’ μŠ€νƒ€μΌ 선택 β†’ AI 이미지 생성 β†’ μΉ΄λ“œ μ™„μ„±κΉŒμ§€μ˜ 전체 과정을 μ˜μƒμœΌλ‘œ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

31,102절 성경을 λ²‘ν„°λ‘œ β€” RAG둜 묡상 λ„μš°λ―Έ λ§Œλ“€κΈ°

μ„±κ²½ 31,102μ ˆμ„ 벑터 μž„λ² λ”©ν•˜κ³  pgvector둜 μ‹œλ§¨ν‹± 검색을 κ΅¬μΆ•ν•˜μ—¬, 묡상 μž‘μ„± 쀑 κ΄€λ ¨ κ΅¬μ ˆμ„ μ‹€μ‹œκ°„μœΌλ‘œ μΆ”μ²œν•˜λŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

DALL-E둜 200μž₯ λ§Œλ“€λ©΄μ„œ 배운 ν”„λ‘¬ν”„νŠΈ 원칙

200μž₯의 AI 이미지λ₯Ό μƒμ„±ν•˜κ³  κ²€μˆ˜ν•˜λ©΄μ„œ μ •λ¦¬ν•œ ν”„λ‘¬ν”„νŠΈ 원칙과 κΈˆμ§€ λͺ©λ‘, 7κ°€μ§€ μŠ€νƒ€μΌλ³„ μ§€μ‹œμ‚¬ν•­μ„ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

μΉ΄ν†‘μ²˜λŸΌ μ„±κ²½ κ΅¬μ ˆμ„ κ³ λ₯΄κ²Œ ν–ˆλ‹€

66ꢌ 1,189μž₯의 μ„±κ²½μ—μ„œ μ›ν•˜λŠ” κ΅¬μ ˆμ„ μ‰½κ²Œ 찾을 수 μžˆλ„λ‘ λŒ€ν™”ν˜• 3단계 UIλ₯Ό μ„€κ³„ν•œ κ³Όμ •μž…λ‹ˆλ‹€.

λ§Œλ‚˜μ—μ„œ κ²¨μžμ”¨κΉŒμ§€ β€” μ„±κ²½ μ„Έκ³„κ΄€μœΌλ‘œ 토큰 섀계

AI 생성 λΉ„μš©μ„ μ„±κ²½μ˜ λ§Œλ‚˜ μ΄μ•ΌκΈ°μ—μ„œ μ°©μ•ˆν•œ 토큰 μ‹œμŠ€ν…œμœΌλ‘œ μ„€κ³„ν•œ κ³Όμ •μž…λ‹ˆλ‹€.