파이썬(Python)으로 구현한 터미널/웹 텍스트 RPG, "Erebos" 개발 데브로그 ⚔️


안녕하세요! 오늘은 파이썬(Python)을 주력 언어로 활용하여 직접 바닥부터 설계하고 개발해낸 [Erebos(에레보스)] 프로젝트의 개발 회고를 작성해보려고 합니다.

기술이 발전하면서 언리얼, 유니티 등 화려한 3D 그래픽 엔진으로 만들어진 대작 게임들이 쏟아지는 시대입니다. 하지만 가끔은 예전 90년대 머드(MUD) 게임이나 2G 피처폰 시절의 타이쿤처럼, 화려한 이펙트 없이 오직 **“텍스트”**만을 읽고 머릿속으로 상황을 상상하며 즐기던 원초적인 재미가 그리워질 때가 있었습니다.

이러한 옛날 감성을 현대적인 웹 환경에서 가볍게 구현해보고 싶다는 생각에서 시작된 토이 프로젝트가 바로 “텍스트 RPG Erebos”입니다. CLI(명령줄 인터페이스) 환경과 Web Browser 환경 모두에서 즐길 수 있도록 확장성을 고려하여 개발했습니다.


🎮 Erebos 게임 소개 및 핵심 시스템

유저는 아무것도 가진 것 없는 초보자 마을에서 시작합니다. 몬스터들을 사냥하고, 전리품과 골드를 모아 장비를 세팅하며 최종 목표인 **Lv.30 고대 용(보스)**을 물리치는 전형적인 용사 성장 스토리를 담고 있습니다.

1. 턴제 전투 시스템과 밸런스

전투는 JRPG 스타일의 고전적인 턴제(Turn-based) 방식을 채택했습니다. 플레이어와 몬스터의 ‘Speed(속도)’ 스탯을 비교하여 선공 권한이 결정됩니다.

  • 일반 공격 및 스킬: 치명타 확률 계산 등 고전 RPG의 데미지 공식을 재현했습니다. 단순히 때리기만 하는 것이 아니라 레벨업마다 해금되는 고유 스킬(강타, 치유, 방패 강타 등)을 전략적으로 MP와 함께 관리해야 합니다.
  • 리스크와 패널티 관리: 도주 기능이 있지만 확률적이며(보스전은 도주 불가), 전투에서 사망할 경우 소지한 골드의 10%를 잃고 강제로 초보자 마을로 귀환해야 하는 로그라이크 성격을 약간 가미했습니다.

2. 경제와 파밍: 대장간 강화 시스템

사냥만 계속하면 지루해지기 쉽습니다. 모은 골드를 소비할 재미 요소로 ‘대장간 장비 강화 시스템’을 구현했습니다. 일반부터 전설 등급까지 파밍 한 무기를 +0에서 +10단계까지 강화할 수 있습니다. K-RPG의 매운맛을 살짝 섞어, 고강화 구간(+5 이상)에서는 성공 확률이 급감하고 실패 시 등급 하락은 물론 해당 아이템이 영구 파괴될 수 있는 확률 로직을 정교하게 넣었습니다. 물론 억울한 파괴를 막아주는 ‘강화 보호 주문서’ 아이템도 함께 기획하여 게임 내 경제를 순환시킵니다.

3. 웹 UI 전용 편의성(QoL) 기능 도입

CLI의 낭만을 즐기다 보니 직접 타이핑하는 반복 사냥에 금방 피로감이 느껴진다는 치명적인 단점이 발견되었습니다. 이를 보완하고자 web_app.py로 Flask 앱을 올리면서 편의성 기능을 듬뿍 추가했습니다.

  • 자동 포션 사용: “내 턴 종료 시 HP가 30% 이하라면 인벤토리의 가장 효율적인 회복 포션을 자동으로 소모”하도록 로직을 설계했습니다.
  • 자동 포션 구매: 사냥 종료 후 포션이 5개 미만이면 지정된 골드 한도 내에서 자동으로 상점에서 포션을 리필하는 기능을 넣었습니다. 이 세팅을 활성화하면 클릭만으로 무한 사냥의 쾌로움을 느낄 수 있습니다.

💻 Tech Stack & Architecture 설계 원칙

단순해 보이는 텍스트 게임이라도, 내부 구조가 엉키면 스킬 하나 추가하기도 힘들어집니다. 이번 프로젝트에서는 처음부터 확고한 아키텍처 원칙을 세우고 코딩했습니다.

1. I/O와 비즈니스 로직(Core)의 분리 설계

Erebos 로직의 가장 큰 특징은 출력 방식(Console vs Web HTML)을 게임 로직이 전혀 모르게(Agnostic) 설계했다는 점입니다. core/ 폴더와 systems/ 폴더 내에 있는 게임 규칙(데미지 계산, 레벨업 처리, 데이터베이스 접근)들은 input()이나 print() 등 인터페이스 함수를 일절 호출하지 않습니다. 오직 ‘데이터’를 연산하여 dict 형태로 상태를 반환할 뿐입니다. 이 덕분에 처음에 개발한 단일 게임 엔진을 그대로 두고, 껍데기만 main.py(터미널용)web_app.py(Flask 서버용) 로 두 개를 끼워 호환시킬 수 있었습니다.

2. 불변성(Immutability) 유지와 사이드 이펙트 억제

함수가 플레이어 객체의 체력을 깎는 연산을 수행할 때, 플레이어 인스턴스의 변수를 직접 뮤테이션(player.hp -= damage) 하지 않도록 했습니다. 대신, 갱신된 값을 담은 새로운 상태 딕셔너리 트리를 반환하는 방식(순수 함수 지향)을 따랐습니다. 메모리는 조금 낭비될 수 있어도 로직 디버깅이 압도적으로 쉬워지고, 의도치 않은 버그 연쇄 발생을 차단했습니다.

3. TDD(테스트 주도 개발)와 데이터 의존도 낮추기

장비 드랍률, 확률, 몬스터 스펙 등 기획 밸런스 요소들은 Python 코드 내 하드코딩하지 않고 모두 data/*.json 파일로 외부로 분리했습니다. 핵심 엔진의 안정성을 확인하기 위해 PyTest로 무려 **63개의 단위 테스트(Unit Tests)**를 작성했습니다. 덕분에 강화 파괴 로직이나 데미지 공식을 변경할 때마다 단 1초면 테스트가 통과하는지 확인할 수 있어 안심이 되었습니다.


🚀 지금 바로 플레이해 보세요!

모든 개발이 완료된 지금, Vercel을 통해 클라우드에 게임을 올려두었습니다. 파이썬이나 기타 설치 없이 즉시 모바일이나 데스크톱 웹 브라우저에서 게임을 즐기실 수 있습니다.

👉 Erebos 플레이하러 가기 (https://erebos.hobokai.com)

화려한 효과음과 이미지는 없지만, 텍스트가 주는 고전적인 성장 RPG의 맛을 가볍게 즐겨보시길 바랍니다! 읽어주셔서 감사합니다. 앞으로도 꾸준히 흥미로운 토이 프로젝트들을 포스팅해 보겠습니다. 호보카이 올림.