κ°μ
π νλ‘μ νΈ κ°μ: SurfAI μ΅μ’ μ λ°μ΄νΈ: 2025λ 6μ 29μΌ
μ΄ λ¬Έμλ SurfAI νλ‘μ νΈμ λΉμ , ν΅μ¬ κ°λ , μ£Όμ κΈ°λ₯, κ·Έλ¦¬κ³ λͺ©νλ₯Ό μμΈν μ€λͺ ν©λλ€.
1. νλ‘μ νΈ λΉμ (Vision)β
SurfAIμ ν΅μ¬ λΉμ μ AI μ΄λ―Έμ§ λ° λΉλμ€ μμ± κΈ°μ μ 볡μ‘μ±μ μ κ±°νκ³ , λꡬλ μ λ¬Έκ° μμ€μ κ²°κ³Όλ¬Όμ μμ½κ² λ§λ€ μ μλλ‘ νλ κ²μ λλ€.
κΈ°μ‘΄μ AI μμ± λꡬλ€μ μ¬μ©μκ° λ³΅μ‘ν λ
Έλ ꡬ쑰λ μλ§μ νλΌλ―Έν° κ°μ μ§μ μ΄ν΄νκ³ μ€μ ν΄μΌ νλ λμ μ§μ
μ₯λ²½μ κ°μ§κ³ μμ΅λλ€. SurfAIλ μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄, κΈ°μ μ λ¬Έκ°(κ΄λ¦¬μ)κ° μ λ§λ€μ΄μ§ ComfyUI
μν¬νλ‘μ°λ₯Ό "ν
νλ¦Ώ"μΌλ‘ λ±λ‘νλ©΄, μΌλ° μ¬μ©μλ λ§μΉ μ λ§λ€μ΄μ§ μΉ΄λ©λΌ μ±μ νν°λ₯Ό κ³ λ₯΄λ―, λͺ κ°μ§ μ§κ΄μ μΈ νλΌλ―Έν°λ§ μ‘°μ νμ¬ μΌκ΄μ± μκ³ κ³ νμ§μ κ²°κ³Όλ¬Όμ μ»μ μ μλ νμ μ μΈ μ¬μ©μ κ²½νμ μ 곡νκ³ μ ν©λλ€.
2. ν΅μ¬ κ°λ (Core Concepts)β
SurfAI μλΉμ€λ λ€μ λ κ°μ§ ν΅μ¬ κ°λ μ μ€μ¬μΌλ‘ ꡬμΆλ©λλ€.
κ°. μν¬νλ‘μ° ν νλ¦Ώ (Workflow Template)β
- μ μ: νΉμ λͺ©μ (μ: 'κ³ νμ§ μΈλ¬Ό μ¬μ§ μμ±', 'μ λλ©μ΄μ
μ€νμΌ λ¨νΈ λΉλμ€ μ μ')μ μν΄ μ΅μ νλ
ComfyUI
μν¬νλ‘μ°μ "μ²μ¬μ§"μ λλ€. - κ΅¬μ± μμ: ν
νλ¦Ώμ
ComfyUI
μ μλ³Έdefinition
JSONκ³Ό, μ¬μ©μκ° μ μ΄ν μ μλparameter_map
μΌλ‘ ꡬμ±λ©λλ€. - μν : κ΄λ¦¬μλ§μ΄ μ΄ ν νλ¦Ώμ μμ±νκ³ κ΄λ¦¬νλ©°, μλΉμ€μ ν΅μ¬ μμ± λ₯λ ₯μ μ μνκ³ νμ₯νλ μν μ ν©λλ€.
λ. λμ νλΌλ―Έν° (Dynamic Parameters)β
- μ μ: μν¬νλ‘μ° ν νλ¦Ώ λ΄μμ μ¬μ©μκ° μ§μ μμ ν μ μλλ‘ κ΄λ¦¬μκ° μ§μ ν ν΅μ¬ λ³μλ€μ λλ€.
- μμ:
positive_prompt
,negative_prompt
,seed
,cfg
,steps
, λΉλμ€μlength
λ°fps
λ±. - μν : μ¬μ©μλ 볡μ‘ν λ Έλ ꡬ쑰λ₯Ό μ ν λͺ°λΌλ, νλ‘ νΈμλμ μΉνμ μΈ UIλ₯Ό ν΅ν΄ μ΄ νλΌλ―Έν° κ°λ€λ§ μμ νμ¬ μμ λ§μ λ μ°½μ μΈ κ²°κ³Όλ¬Όμ μμ±ν μ μμ΅λλ€.
3. μ£Όμ κΈ°λ₯ (Key Features)β
κ°. κ΄λ¦¬μ (Admin
) κΈ°λ₯β
- μν¬νλ‘μ° ν νλ¦Ώ κ΄λ¦¬ (CRUD): κ΄λ¦¬μ μ μ© νμ΄μ§μμ μν¬νλ‘μ° ν νλ¦Ώμ μμ±, μ‘°ν, μμ , μμ ν μ μμ΅λλ€.
- μν κΈ°λ° μ κ·Ό μ μ΄ (RBAC): νΉμ μ΄λ©μΌ μ£Όμλ₯Ό κ°μ§ μ¬μ©μμκ²λ§ κ΄λ¦¬μ κΆνμ λΆμ¬νμ¬ μμ€ν μ μμ νκ² κ΄λ¦¬ν©λλ€.
- (ν₯ν) μ¬μ©μ λ° μλΉμ€ ν΅κ³ κ΄λ¦¬: μ 체 μ¬μ©μ λͺ©λ‘ μ‘°ν, μλΉμ€ μ¬μ©λ ν΅κ³ λ±μ νμΈν μ μλ λμ보λ κΈ°λ₯μ νμ₯ν μ μμ΅λλ€.
λ. μΌλ° μ¬μ©μ (User
) κΈ°λ₯β
- κ°νΈν λ‘κ·ΈμΈ: μ΄λ©μΌ/λΉλ°λ²νΈ κ°μ
λλ
Google
κ³μ μ ν΅ν κ°νΈ λ‘κ·ΈμΈμ μ§μν©λλ€. - ν νλ¦Ώ κΈ°λ° μμ±: 곡κ°λ μν¬νλ‘μ° ν νλ¦Ώ λͺ©λ‘μμ μνλ μ€νμΌμ μ ννκ³ , κ°λ¨ν νΌ μ λ ₯μ ν΅ν΄ μ΄λ―Έμ§/λΉλμ€ μμ±μ μμ²ν©λλ€.
- μ€μκ° μ§ν μν© νμΈ:
WebSocket
μ ν΅ν΄ μμ± μμ μ μ§νλ₯ , λκΈ°μ΄ μν, κ·Έλ¦¬κ³ μμ± μ€μΈ ν리뷰 κ²°κ³Όλ¬Όμ μ€μκ°μΌλ‘ νμΈν μ μμ΅λλ€. - κ°μΈ κ°€λ¬λ¦¬ (νμ€ν 리): μμ μ΄ μμ±ν λͺ¨λ κ²°κ³Όλ¬Όμ "νμ€ν 리" νμ΄μ§μμ νμΈνκ³ κ΄λ¦¬ν μ μμ΅λλ€.
- κ²°κ³Όλ¬Ό κ΄λ¦¬: κ°€λ¬λ¦¬μμ κ° κ²°κ³Όλ¬Όμ νλνμ¬ μμΈ μμ± μ 보(μ¬μ©ν νλΌλ―Έν° λ±)λ₯Ό νμΈνκ³ , κ³ νμ§ μλ³Έ νμΌμ λ€μ΄λ‘λνκ±°λ μμ ν μ μμ΅λλ€.
4. κΈ°μ μ€ν (Tech Stack)β
- Frontend: Next.js, React, TypeScript, Tailwind CSS
- Backend: NestJS, TypeScript, TypeORM, PostgreSQL
- Infrastructure: Docker, Google Cloud Run, Cloudflare R2, Nginx
- Documentation: Docusaurus, Gemini CLI, Mermaid
5. κΈ°μ μ λͺ©ν (Technical Goals)β
- μμ μ± λ° νμ₯μ±: λͺ¨λ μλΉμ€λ₯Ό
Docker
컨ν μ΄λννκ³Google Cloud Run
μ λ°°ν¬νμ¬, νΈλν½μ λ°λΌ μλμΌλ‘ νμ₯λλ μμ μ μΈ μλ²λ¦¬μ€ μν€ν μ²λ₯Ό ꡬμΆν©λλ€. - 보μ:
JWT
μHttpOnly
μΏ ν€λ₯Ό μ΄μ©ν μμ ν μΈμ¦,CSRF
λ°WAF
λ₯Ό ν΅ν μΉ κ³΅κ²© λ°©μ΄, μν κΈ°λ° μ κ·Ό μ μ΄ λ± λ€μΈ΅μ μΈ λ³΄μ 체κ³λ₯Ό μ μ©ν©λλ€. - μλνλ μν¬νλ‘μ°:
GitHub Actions
λ₯Ό μ΄μ©ν CI/CD νμ΄νλΌμΈμ ꡬμΆνμ¬, μ½λ λ³κ²½ μ¬νμ μλμΌλ‘ ν μ€νΈνκ³ λ°°ν¬νλ νλ‘μΈμ€λ₯Ό ν립ν©λλ€. - μ μ§λ³΄μμ±: νλ‘ νΈμλμ λ°±μλλ₯Ό λͺ νν λΆλ¦¬νκ³ , κ° λ΄λΆμμλ λͺ¨λκ³Ό μ»΄ν¬λνΈμ μ± μμ λͺ νν λλλ ν΄λ¦° μν€ν μ²λ₯Ό μ§ν₯ν©λλ€.
- μ΄μμλ λ¬Έμ:
Docusaurus
λ₯Ό ν΅ν΄ λͺ¨λ λ¬Έμλ₯Ό μ½λμ ν¨κ»Git
μΌλ‘ κ΄λ¦¬ν©λλ€. μ΄λ₯Ό ν΅ν΄ νμ μ΅μ μνμ μ νν λ¬Έμλ₯Ό λͺ¨λ ꡬμ±μμ΄ μ½κ² μ΄λν μ μλ νκ²½μ ꡬμΆν©λλ€.