나의 셀프 호스팅 기술을 이 프로젝트에 적용해봤습니다.
요약
작성자는 개인적인 흥미로 'AI 게이밍 클랜 OS'라는 웹사이트를 구축했습니다. 이 시스템은 자체 호스팅된 OptiPlex 장치와 Coolify를 통해 배포되었으며, Discord 봇과 PlayStation API 연동을 통해 AI 기능을 통합했습니다. 최종적으로 Mac Book Pro M2 Max로 전환하며 로컬 호스팅의 중요성을 강조합니다.
핵심 포인트
- 개인 프로젝트 기반의 'AI 게이밍 클랜 OS' 구축 경험 공유
- OptiPlex와 Coolify를 활용한 복잡한 서비스 자체 호스팅 및 배포 과정 설명
- PlayStation API와 ChatGPT 연동을 통해 게임 메시지에 AI 응답 기능을 구현함
- 클라우드 AI에서 로컬 호스팅(Mac Book Pro M2 Max)으로 전환하며 기술적 진화 과정을 보여줌
지난 게시물 이후 만회해야 할 것 같아, 이번 포스트에는 AI를 사용하지 않았습니다. 그래서 순수한 농담으로 시작했던 것이 제게 가장 프랭크스틴 같은 제품 중 하나가 되었습니다. 저는 셀프 호스팅 애호가라서, 서비스가 배포되어 저에게 접근 가능할 때마다 이런 엔도르핀 분비를 느낍니다. 이 흥분감에 사로잡혀, AI가 'AI 게이밍 클랜 OS'라고 설명하는 것을 만들게 되었습니다. 모든 것은 Github Pages에 호스팅되고 제가 구매한 도메인으로 접근 가능한 간단한 웹사이트에서 시작되었습니다. 그저 재미로요. 클랜 이름, 우리 클랜을 위한 AI 생성 노래, 우리 클랜원들의 AI 생성 사진, 그리고 끝입니다. 이게 전부였습니다. 이제 이 웹사이트는 '우리 클랜 앱'이라고 알려진 곳에 로그인하도록 연결됩니다. CRCMZ APP. 모든 것은 제 멋진 OptiPlex에 호스팅되어 있습니다. Dell OptiPlex Micro Plus 7010 CPU 20 코어 RAM 32 GB 저장 공간 2× SK Hynix 1 TB NVMe OS: Ubuntu 24.04 LTS 저에게는 Tailscale을 통해 사설로 접근 가능합니다. 공개가 필요한 것들은 Cloudflare Tunnel을 통해 이용할 수 있습니다. 이 장치는 80개 이상의 컨테이너를 실행하고 있습니다 (다른 날 포스팅할게요?). 제가 즉흥적으로 배포하는 잡다한 것들을 더 쉽게 관리하기 위해 Coolify를 배포했습니다. 이곳에서 저는 클랜을 위한 것들을 배포하기 시작했습니다. 가장 먼저 배포한 것은 비공식 API를 사용한 플레이스테이션(Playstation)의 존재 감지기였습니다. 2명 이상의 클랜원이 함께 게임을 하는 것을 보는 것이 좋았지만, 그것도 기초적이었습니다. 그러고 나서 온라인 상태인 클랜원들에게 고유한 AI 생성 사진을 추가했습니다. 와, 이건 멋졌습니다! 저는 남아있던 비영리 크레딧으로 Azure를 사용해 이 이미지들을 생성하고 있었습니다. 디스코드(Discord)를 건드리게 되면서, WZSTATS를 스크랩하여 최고 메타 총기를 출력하는 디스코드 봇을 설정했습니다. 그러고 나서 총기를 검색해서 그 메타 등급을 얻는 검색 기능을 추가했습니다. 별거 아니지만, 제 디스코드에 가치를 더하고 싶었습니다. PSN으로 돌아가서요. 저는 이 PSN API 접근 권한이 있었는데, 이걸로 어떻게 더 많은 것을 뽑아낼 수 있을까요? 저는 API를 파고들기 시작했고, 어떤 데이터를 활용할 수 있는지 찾아보기 시작했습니다.
메시지를 볼 수 있었고, 메시지에 응답할 수도 있었으며, 플레이되는 게임의 지속 시간과 정말 많은 다른 것들을 볼 수 있었습니다. 그러다가 역사적인 순간이 찾아왔습니다. 'ChatGPT를 PlayStation 그룹 메시지에 추가하면 어떨까?' 생각했습니다. 저는 개인적으로 우리가 이것을 성취한 최초의 사례라고 생각하며, 이 영예는 저에게 매우 소중합니다. 그래서 그렇게 했습니다. 제가 API에 접속하는 Python 스크립트를 설정했는데, 20초마다 그룹에서 'ai'로 시작하는 메시지를 찾았습니다. 우리가 PlayStation으로 'ai'가 앞에 붙은 메시지를 보내면 ChatGPT로부터 응답을 받는 식이었습니다. 정말 가장 멋지고 쓸모없는 것이었지만, 저는 그것에 자부심을 느낍니다. 그리고 Discord 봇 데이터를 AI 도구 호출에 연결했고, 짜잔! 이제 PlayStation 메시지에서 AI를 통해 메타 클래스를 얻을 수 있게 되었습니다. 그런 다음 온라인 상태로 플레이하는 클랜 멤버들을 놀리는 자동 로스트(roast) 기능을 설정했습니다. 이 역시 Azure 크레딧을 사용했습니다. 시간이 흘렀고, 흥분은 가라앉았습니다. 배포는 계속 실행되었습니다. 1년이 지났습니다. 결국 저는 크레딧을 소진했고, 그래서 이 경로는 재정적으로 실현 가능하지 않았습니다. 이때부터 저는 클라우드 AI에서 로컬 호스팅으로 전환하기 시작했고, 이를 할 수 있는 상당히 괜찮은 장치가 있었습니다. 제 작은 친구를 소개하고 싶습니다. Mac Book Pro M2 Max 96GB RAM 8TB. 이 기계는 항상 켜져서 OMLX와 Draw Things를 실행하는 책상 위에 놓여 있을 것이라고 예상하지 못했습니다. 하지만 여기 우리가 있고, 이것은 4살짜리 아이 덕분이라고 말할 수 있습니다. 그가 iPad로 노트북 화면을 닫기로 결정했기 때문입니다. 아무튼... 이때 저는 모든 Azure AI 호출을 OMLX에서 실행되는 Qwen 3.5 A3B 35B와 Draw Things의 AI 이미지 생성으로 전환하기 시작했습니다. 그래서 로컬에서 LLM 모델을 호스팅하는 작업을 하는 동안, 저는 다시 배포에 몰두하게 되었습니다. 한편으로는 거의 내부 Spotify를 배포했습니다. 하지만 이 스포티파이는 mattermost 채널에서 친구들이 공유한 노래들로 채워져 있었습니다. 우리는 이것을 Slapshare라고 불렀습니다. 이는 저에게 슬랩레이어(Slaplayer) 제작으로 이어졌습니다. 누가 노래를 추가했는지 보여주고, 인라인 댓글 시스템과 알림 기능이 있는 플레이어였습니다.
이 모든 것의 핵심은 Jellyfin이었습니다. 그러자 친구들이 함께 동영상을 보고 싶어 해서 Watchparty를 배포했습니다. 하지만 Watchparty만으로는 충분하지 않았고, 제가 직접 비디오 플레이어와 인라인 웹캠, 그리고 인라인 메시징 기능을 추가하여 수정했습니다. 덕분에 영화나 YouTube 영상을 전체 화면으로 시청하는 동안 이 모든 것을 볼 수 있게 되었습니다. 저는 이것에 대한 포크(fork)는 없습니다. 여러 가지가 배포되고 있었지만 여전히 여기저기 흩어져 있었습니다. 그래서 프런트엔드를 구축하기로 결정했습니다. 멤버들이 Zitadel을 사용하여 인증할 수 있도록 했습니다. 제가 가까운 클랜 멤버들 모두가 NPSSO를 추가하여 트로피 개수를 비교하고 모든 통계를 볼 수 있게 하려고 PSN 인증도 추가했습니다. 그러자 Slaplayer, AI Chat, Watch Party 등 이전에 만들었던 것들을 이 프런트엔드에 올리기 시작했고, 하나의 플랫폼으로 형태를 갖추기 시작했습니다. WhatsApp 섹션을 추가하고 Bailey를 사용하여 우리의 WhatsApp에 봇을 추가했습니다. 이제 저희는 최신 유용하지 않은 WhatsApp 통계를 우리 플랫폼에서 얻게 됩니다. 모든 AI는 제가 로컬로 호스팅하는 LLM을 사용합니다. 플레이스테이션 그룹에 미리 정의된 메시지를 가상 버튼을 통해 보내는 채팅 보드도 추가했습니다. 왜 안 되겠어요! 기브어웨이(Giveaway) 섹션도 추가했습니다! 이제 저는 데이터가 있었지만, 다른 곳에서도 사용하고 재미있게 활용하고 싶었습니다. 이때 MCP 서버를 배포하기로 결정했습니다. 이제 제 클랜의 모든 데이터는 다른 에이전트들로부터 접근 가능합니다. 인증 설정을 위해 Zitadel을 사용했습니다. 여기서 저는 에이전트들이 현재 채팅에 있는 컨텍스트(context)에만 국한되지 않도록, MCP 뒤에 영구적인 의미론적 메모리 계층(durable semantic memory layer)을 배치하는 것에 대해 배웠습니다. 이것이 제가 지난 AI 슬롭 포스팅에서 다뤘던 내용입니다. 죄송합니다. 이 게시글이 길어지고 있네요. 본론으로 바로 넘어가겠습니다. 요약하자면, PSN API에 대한 갈증은 사라지지 않았습니다. 저는 더 깊이 파고들어 PSN 그룹에 보내는 동영상의 클립 URL을 추출하는 방법을 배웠습니다. 저희 클립들을 WhatsApp, Discord, 그리고... 솔직히 어디로든 전송하는 포워딩 스크립트를 설정했습니다. PSN 비디오에 대해서는 2부를 만들겠습니다. 자동화된 몽타주와 일일 하이라이트 영상을 만들 수 있었습니다.
기본 AI 음성으로는 내레이션이 마음에 들지 않아서, Kokoro를 이용해 로컬 TTS(Text-to-Speech) 환경을 구축하여 AI가 나의 목소리로 내레이션을 생성할 수 있게 했습니다. 이제 완전히 자체 호스팅되는 클랜 웹 앱, 즉 클랜 OS(Clan OS)를 완성했습니다. 정말 대단한 경험이었습니다! 아, 그리고 이 모든 것을 Claude Code로 만들 수 있었습니다. /u/interestingsouper 님이 제출하셨습니다 [링크] [댓글들]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/SelfHosted (AI filter)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기