Skip to content

ProjectVG/ProjectVG-Server

Repository files navigation

ProjectVG - ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ์•„ํ‚คํ…์ฒ˜ AI ์ฑ—๋ด‡ ์„œ๋ฒ„

์‹ค์‹œ๊ฐ„ AI ์ฑ—๋ด‡ ์„œ๋ฒ„๋กœ, Clean Architecture์™€ ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•˜์—ฌ WebSocket๊ณผ HTTP API๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•˜๋ฉฐ LLM(Large Language Model)๊ณผ ๋ฒกํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ๋ฅผ ์—ฐ๋™ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

ProjectVG๋Š” ๊ฐœ์ธํ™”๋œ AI ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ ์‹ค์‹œ๊ฐ„ ์ฑ—๋ด‡ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Clean Architecture ์›์น™์„ ๋”ฐ๋ผ ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ ์„ค๊ณ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž์™€์˜ ๋Œ€ํ™”๋ฅผ ๊ธฐ์–ตํ•˜๊ณ , ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•œ ๋งž์ถคํ˜• ์‘๋‹ต์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•

  • Clean Architecture: ๋„๋ฉ”์ธ ์ค‘์‹ฌ์˜ ๊ณ„์ธตํ™”๋œ ์•„ํ‚คํ…์ฒ˜
  • ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ๊ตฌ์กฐ: ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•œ ๋ชจ๋“ˆํ™”
  • ์‹ค์‹œ๊ฐ„ WebSocket ํ†ต์‹ : ์–‘๋ฐฉํ–ฅ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
  • ๋ฒกํ„ฐ ๊ธฐ๋ฐ˜ ์žฅ๊ธฐ ๊ธฐ์–ต ์‹œ์Šคํ…œ: ์˜๋ฏธ ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ๋ฆฌ ๊ฒ€์ƒ‰
  • ์„ธ์…˜๋ณ„ ๋Œ€ํ™” ๊ธฐ๋ก ๊ด€๋ฆฌ: ๊ฐœ์ธํ™”๋œ ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ
  • ๊ฐœ์ธํ™”๋œ AI ํŽ˜๋ฅด์†Œ๋‚˜ ์ง€์›: ์บ๋ฆญํ„ฐ ๊ธฐ๋ฐ˜ AI ์‘๋‹ต

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

Client โ†” WebSocket/HTTP API โ†” ProjectVG.Api โ†” ProjectVG.Application โ†” ProjectVG.Domain
                                    โ†“
                            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                            โ”‚   LLM API   โ”‚ Memory API  โ”‚
                            โ”‚ (Port 5601) โ”‚ (Port 5602) โ”‚
                            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Clean Architecture ๋ ˆ์ด์–ด

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Presentation Layer                       โ”‚
โ”‚  ProjectVG.Api (Controllers, Middlewares)                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                   Application Layer                        โ”‚
โ”‚  ProjectVG.Application (Services, DTOs, Commands)         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                    Domain Layer                            โ”‚
โ”‚  ProjectVG.Domain (Entities, Enums, Common)               โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                 Infrastructure Layer                        โ”‚
โ”‚  ProjectVG.Infrastructure (Repositories, External APIs)   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                   Common Layer                             โ”‚
โ”‚  ProjectVG.Common (Constants, Exceptions, Extensions)     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

ProjectVG/
โ”œโ”€โ”€ ProjectVG.Api/                    # ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด
โ”‚   โ”œโ”€โ”€ Controllers/                  # API ์—”๋“œํฌ์ธํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ ChatController.cs         # ์ฑ„ํŒ… ์š”์ฒญ ์ฒ˜๋ฆฌ
โ”‚   โ”‚   โ”œโ”€โ”€ CharacterController.cs    # ์บ๋ฆญํ„ฐ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ””โ”€โ”€ HealthController.cs       # ํ—ฌ์Šค์ฒดํฌ
โ”‚   โ”œโ”€โ”€ Middlewares/                  # ๋ฏธ๋“ค์›จ์–ด
โ”‚   โ”‚   โ””โ”€โ”€ WebSocketMiddleware.cs    # WebSocket ์ฒ˜๋ฆฌ
โ”‚   โ”œโ”€โ”€ Models/                       # API ๋ชจ๋ธ
โ”‚   โ”‚   โ”œโ”€โ”€ Character/                # ์บ๋ฆญํ„ฐ ๊ด€๋ จ ๋ชจ๋ธ
โ”‚   โ”‚   โ””โ”€โ”€ Chat/                     # ์ฑ„ํŒ… ๊ด€๋ จ ๋ชจ๋ธ
โ”‚   โ””โ”€โ”€ Program.cs                    # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง„์ž…์ 
โ”‚
โ”œโ”€โ”€ ProjectVG.Application/             # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด
โ”‚   โ”œโ”€โ”€ Services/                     # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์„œ๋น„์Šค
โ”‚   โ”‚   โ”œโ”€โ”€ Chat/                     # ์ฑ„ํŒ… ์„œ๋น„์Šค
โ”‚   โ”‚   โ”œโ”€โ”€ Character/                # ์บ๋ฆญํ„ฐ ์„œ๋น„์Šค
โ”‚   โ”‚   โ”œโ”€โ”€ Conversation/             # ๋Œ€ํ™” ๊ด€๋ฆฌ ์„œ๋น„์Šค
โ”‚   โ”‚   โ”œโ”€โ”€ LLM/                      # LLM ์—ฐ๋™ ์„œ๋น„์Šค
โ”‚   โ”‚   โ””โ”€โ”€ Session/                  # ์„ธ์…˜ ๊ด€๋ฆฌ ์„œ๋น„์Šค
โ”‚   โ”œโ”€โ”€ Models/                       # DTO ๋ฐ Command ๋ชจ๋ธ
โ”‚   โ”‚   โ”œโ”€โ”€ Character/                # ์บ๋ฆญํ„ฐ DTO/Command
โ”‚   โ”‚   โ”œโ”€โ”€ Chat/                     # ์ฑ„ํŒ… DTO/Command
โ”‚   โ”‚   โ””โ”€โ”€ User/                     # ์‚ฌ์šฉ์ž DTO/Command
โ”‚   โ”œโ”€โ”€ Middlewares/                  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฏธ๋“ค์›จ์–ด
โ”‚   โ””โ”€โ”€ DTOs/                        # ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด
โ”‚
โ”œโ”€โ”€ ProjectVG.Domain/                 # ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด
โ”‚   โ”œโ”€โ”€ Entities/                     # ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ Character/                # ์บ๋ฆญํ„ฐ ์—”ํ‹ฐํ‹ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ Chat/                     # ์ฑ„ํŒ… ์—”ํ‹ฐํ‹ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ ConversationHistory/      # ๋Œ€ํ™” ๊ธฐ๋ก ์—”ํ‹ฐํ‹ฐ
โ”‚   โ”‚   โ””โ”€โ”€ User/                     # ์‚ฌ์šฉ์ž ์—”ํ‹ฐํ‹ฐ
โ”‚   โ”œโ”€โ”€ Enums/                        # ๋„๋ฉ”์ธ ์—ด๊ฑฐํ˜•
โ”‚   โ”‚   โ””โ”€โ”€ ChatRole.cs               # ์ฑ„ํŒ… ์—ญํ•  ์ •์˜
โ”‚   โ””โ”€โ”€ Common/                       # ๋„๋ฉ”์ธ ๊ณตํ†ต ์š”์†Œ
โ”‚       โ””โ”€โ”€ BaseEntity.cs             # ๊ธฐ๋ณธ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค
โ”‚
โ”œโ”€โ”€ ProjectVG.Infrastructure/         # ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋ ˆ์ด์–ด
โ”‚   โ”œโ”€โ”€ ExternalApis/                 # ์™ธ๋ถ€ API ํด๋ผ์ด์–ธํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ LLM/                      # LLM API ํด๋ผ์ด์–ธํŠธ
โ”‚   โ”‚   โ””โ”€โ”€ MemoryClient/             # ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ ํด๋ผ์ด์–ธํŠธ
โ”‚   โ”œโ”€โ”€ Repositories/                 # ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต
โ”‚   โ”‚   โ”œโ”€โ”€ InMemory/                 # ์ธ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ ๊ตฌํ˜„
โ”‚   โ”‚   โ”œโ”€โ”€ ICharacterRepository.cs   # ์บ๋ฆญํ„ฐ ์ €์žฅ์†Œ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ”‚   โ”œโ”€โ”€ IConversationRepository.cs # ๋Œ€ํ™” ์ €์žฅ์†Œ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ”‚   โ”œโ”€โ”€ ISessionRepository.cs     # ์„ธ์…˜ ์ €์žฅ์†Œ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ”‚   โ””โ”€โ”€ IUserRepository.cs        # ์‚ฌ์šฉ์ž ์ €์žฅ์†Œ ์ธํ„ฐํŽ˜์ด์Šค
โ”‚   โ””โ”€โ”€ Services/                     # ์ธํ”„๋ผ ์„œ๋น„์Šค
โ”‚       โ””โ”€โ”€ Session/                  # ์„ธ์…˜ ๊ด€๋ จ ์„œ๋น„์Šค
โ”‚
โ””โ”€โ”€ ProjectVG.Common/                 # ๊ณตํ†ต ๋ ˆ์ด์–ด
    โ”œโ”€โ”€ Constants/                    # ์ƒ์ˆ˜ ์ •์˜
    โ”‚   โ”œโ”€โ”€ AppConstants.cs           # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์ˆ˜
    โ”‚   โ”œโ”€โ”€ ErrorCodes.cs             # ์—๋Ÿฌ ์ฝ”๋“œ
    โ”‚   โ””โ”€โ”€ LLMSettings.cs            # LLM ์„ค์ • ์ƒ์ˆ˜
    โ”œโ”€โ”€ Exceptions/                   # ์ปค์Šคํ…€ ์˜ˆ์™ธ
    โ”‚   โ”œโ”€โ”€ ProjectVGException.cs     # ๊ธฐ๋ณธ ์˜ˆ์™ธ ํด๋ž˜์Šค
    โ”‚   โ”œโ”€โ”€ NotFoundException.cs       # ๋ฆฌ์†Œ์Šค ์—†์Œ ์˜ˆ์™ธ
    โ”‚   โ”œโ”€โ”€ ValidationException.cs     # ๊ฒ€์ฆ ์˜ˆ์™ธ
    โ”‚   โ””โ”€โ”€ ExternalServiceException.cs # ์™ธ๋ถ€ ์„œ๋น„์Šค ์˜ˆ์™ธ
    โ”œโ”€โ”€ Extensions/                   # ํ™•์žฅ ๋ฉ”์„œ๋“œ
    โ”‚   โ””โ”€โ”€ ExceptionExtensions.cs    # ์˜ˆ์™ธ ํ™•์žฅ ๋ฉ”์„œ๋“œ
    โ””โ”€โ”€ Configuration/                # ์„ค์ • ํด๋ž˜์Šค
        โ””โ”€โ”€ LLMSettings.cs            # LLM ์„ค์ •

๋ชจ๋“ˆ๋ณ„ ์—ญํ• 

ProjectVG.Api (ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด)

  • ์—ญํ• : HTTP API ์—”๋“œํฌ์ธํŠธ์™€ WebSocket ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ
  • ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ:
    • Controllers: REST API ์—”๋“œํฌ์ธํŠธ
    • Middlewares: WebSocket ๋ฐ ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด
    • Models: API ์š”์ฒญ/์‘๋‹ต ๋ชจ๋ธ

ProjectVG.Application (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด)

  • ์—ญํ• : ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ๋ฐ ๋„๋ฉ”์ธ ์„œ๋น„์Šค ์กฐ์œจ
  • ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ:
    • Services: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์„œ๋น„์Šค
    • Models: DTO, Command, Query ๋ชจ๋ธ
    • Middlewares: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฏธ๋“ค์›จ์–ด

ProjectVG.Domain (๋„๋ฉ”์ธ ๋ ˆ์ด์–ด)

  • ์—ญํ• : ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ์—”ํ‹ฐํ‹ฐ์™€ ๋„๋ฉ”์ธ ๋กœ์ง
  • ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ:
    • Entities: ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ (Character, ChatMessage, User ๋“ฑ)
    • Enums: ๋„๋ฉ”์ธ ์—ด๊ฑฐํ˜•
    • Common: ๊ณตํ†ต ๋„๋ฉ”์ธ ์š”์†Œ

ProjectVG.Infrastructure (์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ฒ˜ ๋ ˆ์ด์–ด)

  • ์—ญํ• : ์™ธ๋ถ€ ์„œ๋น„์Šค ์—ฐ๋™ ๋ฐ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ
  • ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ:
    • ExternalApis: ์™ธ๋ถ€ API ํด๋ผ์ด์–ธํŠธ (LLM, Memory)
    • Repositories: ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ตฌํ˜„์ฒด
    • Services: ์ธํ”„๋ผ ์„œ๋น„์Šค

ProjectVG.Common (๊ณตํ†ต ๋ ˆ์ด์–ด)

  • ์—ญํ• : ๋ชจ๋“  ๋ ˆ์ด์–ด์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ
  • ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ:
    • Constants: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์ˆ˜
    • Exceptions: ์ปค์Šคํ…€ ์˜ˆ์™ธ ํด๋ž˜์Šค
    • Extensions: ํ™•์žฅ ๋ฉ”์„œ๋“œ
    • Configuration: ์„ค์ • ํด๋ž˜์Šค

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

1. ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ์‹œ์Šคํ…œ

  • WebSocket์„ ํ†ตํ•œ ์–‘๋ฐฉํ–ฅ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 
  • ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ ๋ฐ ์ž๋™ ์žฌ์—ฐ๊ฒฐ
  • ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ

2. ๋Œ€ํ™” ๊ธฐ๋ก ๊ด€๋ฆฌ

  • ์„ธ์…˜๋ณ„ ๋Œ€ํ™” ๊ธฐ๋ก ์ €์žฅ (์ตœ๋Œ€ 50๊ฐœ ๋ฉ”์‹œ์ง€)
  • ์‹œ๊ฐ„์ˆœ ์ •๋ ฌ ๋ฐ ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰
  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ž„์‹œ ์ €์žฅ

3. ์žฅ๊ธฐ ๊ธฐ์–ต ์‹œ์Šคํ…œ

  • ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™
  • ์˜๋ฏธ ๊ธฐ๋ฐ˜ ๊ด€๋ จ ๊ธฐ์–ต ๊ฒ€์ƒ‰
  • ๋Œ€ํ™” ๋‚ด์šฉ ์ž๋™ ์ €์žฅ ๋ฐ ์ธ๋ฑ์‹ฑ

4. LLM ํ†ตํ•ฉ

  • ์™ธ๋ถ€ LLM API์™€์˜ HTTP ํ†ต์‹ 
  • ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์‘๋‹ต ์ƒ์„ฑ
  • ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰ ์ถ”์ 

5. ์บ๋ฆญํ„ฐ ๊ด€๋ฆฌ

  • AI ํŽ˜๋ฅด์†Œ๋‚˜ ์ •์˜ ๋ฐ ๊ด€๋ฆฌ
  • ์บ๋ฆญํ„ฐ๋ณ„ ๊ฐœ์„ฑ๊ณผ ๋ฐฐ๊ฒฝ ์„ค์ •
  • ๋™์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ง€์›

์ฑ„ํŒ… ์ฒ˜๋ฆฌ ํ๋ฆ„

  1. ์„ธ์…˜ ์—ฐ๊ฒฐ: WebSocket์„ ํ†ตํ•œ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ
  2. ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ : HTTP POST๋กœ ์ฑ„ํŒ… ์š”์ฒญ ์ฒ˜๋ฆฌ
  3. ์ปจํ…์ŠคํŠธ ์ˆ˜์ง‘:
    • ๋ฒกํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ด€๋ จ ๊ธฐ์–ต ๊ฒ€์ƒ‰
    • ์ตœ๊ทผ ๋Œ€ํ™” ๊ธฐ๋ก ์กฐํšŒ (์ตœ๋Œ€ 10๊ฐœ)
  4. LLM ์š”์ฒญ: ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์™ธ๋ถ€ LLM API ํ˜ธ์ถœ
  5. ์‘๋‹ต ์ƒ์„ฑ: LLM์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌ
  6. ์‹ค์‹œ๊ฐ„ ์ „์†ก: WebSocket์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต ์ „์†ก
  7. ๊ธฐ์–ต ์ €์žฅ: ๋Œ€ํ™” ๋‚ด์šฉ์„ ์žฅ๊ธฐ ๊ธฐ์–ต์— ์ €์žฅ

๊ธฐ์ˆ  ์Šคํƒ

  • .NET 8.0: ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ
  • ASP.NET Core: ์›น API ๋ฐ WebSocket ์ง€์›
  • Clean Architecture: ๋„๋ฉ”์ธ ์ค‘์‹ฌ ์•„ํ‚คํ…์ฒ˜
  • Dependency Injection: ์˜์กด์„ฑ ์ฃผ์ž…
  • Windows Authentication: ์ธ์ฆ ์‹œ์Šคํ…œ
  • Swagger: API ๋ฌธ์„œํ™”
  • Docker: ์ปจํ…Œ์ด๋„ˆํ™” ์ง€์›

์„ค์น˜ ๋ฐ ์‹คํ–‰

ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ

  • .NET 8.0 SDK
  • ์™ธ๋ถ€ ์„œ๋น„์Šค:
    • LLM API ์„œ๋ฒ„ (ํฌํŠธ 5601)
    • ๋ฒกํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ์†Œ (ํฌํŠธ 5602)

์‹คํ–‰ ๋ฐฉ๋ฒ•

  1. ์ €์žฅ์†Œ ํด๋ก 

    git clone [repository-url]
    cd ProjectVG
  2. ์˜์กด์„ฑ ๋ณต์›

    dotnet restore
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰

    dotnet run --project ProjectVG.Api
  4. Docker ์‹คํ–‰ (์„ ํƒ์‚ฌํ•ญ)

    docker build -t projectvg-api .
    docker run -p 5000:5000 projectvg-api

ํ™˜๊ฒฝ ์„ค์ •

ProjectVG.Api/appsettings.json์—์„œ ์™ธ๋ถ€ ์„œ๋น„์Šค URL ์„ค์ •:

{
  "ExternalServices": {
    "LLMApi": "http://localhost:5601",
    "MemoryApi": "http://localhost:5602"
  }
}

API ๋ช…์„ธ

HTTP API

POST /api/chat

์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ:

{
  "session_id": "session_123",
  "actor": "user",
  "message": "์•ˆ๋…•ํ•˜์„ธ์š”",
  "action": null
}

์‘๋‹ต:

{
  "session_id": "session_123",
  "response": "์‘๋‹ต ๋ฉ”์‹œ์ง€"
}

GET /api/characters

๋ชจ๋“  ์บ๋ฆญํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

์‘๋‹ต:

[
  {
    "id": "guid",
    "name": "์บ๋ฆญํ„ฐ๋ช…",
    "description": "์„ค๋ช…",
    "role": "์—ญํ• ",
    "personality": "์„ฑ๊ฒฉ",
    "background": "๋ฐฐ๊ฒฝ",
    "isActive": true,
    "metadata": {}
  }
]

POST /api/characters

์ƒˆ ์บ๋ฆญํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์š”์ฒญ:

{
  "name": "์บ๋ฆญํ„ฐ๋ช…",
  "description": "์„ค๋ช…",
  "role": "์—ญํ• ",
  "personality": "์„ฑ๊ฒฉ",
  "background": "๋ฐฐ๊ฒฝ",
  "metadata": {}
}

GET /api/hello

์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์‘๋‹ต:

{
  "status": "ok",
  "serverTime": "2024-01-01T00:00:00Z",
  "message": "ProjectVG API is running."
}

WebSocket API

WebSocket ์—ฐ๊ฒฐ: /ws

์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ WebSocket ์—ฐ๊ฒฐ

์—ฐ๊ฒฐ ํŒŒ๋ผ๋ฏธํ„ฐ:

  • sessionId (์„ ํƒ์‚ฌํ•ญ): ๊ธฐ์กด ์„ธ์…˜ ID

์—ฐ๊ฒฐ ์‹œ ์‘๋‹ต:

{
  "type": "session_id",
  "session_id": "session_123"
}

์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

ChatService (Application Layer)

์ฑ„ํŒ… ์š”์ฒญ์˜ ์ „์ฒด ์ฒ˜๋ฆฌ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

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

  • ๋ฉ”๋ชจ๋ฆฌ ๊ฒ€์ƒ‰ ๋ฐ ์ปจํ…์ŠคํŠธ ์ˆ˜์ง‘
  • LLM ์š”์ฒญ ์ฒ˜๋ฆฌ
  • ๋Œ€ํ™” ๊ธฐ๋ก ์ €์žฅ
  • ์‹ค์‹œ๊ฐ„ ์‘๋‹ต ์ „์†ก

CharacterService (Application Layer)

์บ๋ฆญํ„ฐ ๊ด€๋ฆฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

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

  • ์บ๋ฆญํ„ฐ CRUD ์ž‘์—…
  • ์บ๋ฆญํ„ฐ ๊ฒ€์ฆ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ์ ์šฉ
  • ์บ๋ฆญํ„ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

SessionService (Application Layer)

WebSocket ์„ธ์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

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

  • ์„ธ์…˜ ๋“ฑ๋ก/ํ•ด์ œ
  • ํด๋ผ์ด์–ธํŠธ๋ณ„ ๋ฉ”์‹œ์ง€ ์ „์†ก
  • ์—ฐ๊ฒฐ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง

ConversationService (Application Layer)

๋Œ€ํ™” ๊ธฐ๋ก์„ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

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

  • ์„ธ์…˜๋ณ„ ๋Œ€ํ™” ๊ธฐ๋ก ์ €์žฅ
  • ์ตœ๊ทผ ๋ฉ”์‹œ์ง€ ์กฐํšŒ
  • ๋ฉ”์‹œ์ง€ ์ˆ˜ ์ œํ•œ ๊ด€๋ฆฌ

WebSocketMiddleware (Api Layer)

WebSocket ์—ฐ๊ฒฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด์ž…๋‹ˆ๋‹ค.

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

  • WebSocket ์š”์ฒญ ๊ฒ€์ฆ
  • ์„ธ์…˜ ID ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ
  • ์—ฐ๊ฒฐ ์œ ์ง€ ๋ฐ ์ •๋ฆฌ

์ง€์›

๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ์ด์Šˆ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๋ฌธ์˜ํ•ด ์ฃผ์„ธ์š”.


About

ProjectVG Main Server

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published