์ธํฐ๋ํฐ๋ธ ์คํ ๋ฆฌ ์ ์์ ์ํ ์คํ์์ค ๋ฐฑ์๋ ์์ง
๋ณต์กํ ๋ถ๊ธฐํ ์คํ ๋ฆฌ๋ฅผ ๊ตฌ์กฐํํ๊ณ ๊ด๋ฆฌํ ์ ์๋ API ๊ธฐ๋ฐ ํ๋ซํผ์ ๋๋ค.
๊ฒ์ ์๋๋ฆฌ์ค, ํนํ ๋ถ๊ธฐํ ์คํ ๋ฆฌ๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด:
- ์ ํ์ง๊ฐ ๋์ด๋ ์๋ก ์ด๋ค ๋ฃจํธ๊ฐ ์ด๋๋ก ์ฐ๊ฒฐ๋๋์ง ์ถ์ ํ๊ธฐ ์ด๋ ต๋ค
- ์์ ์ด๋ ํ ์คํธ ํ์ผ๋ก๋ ๋ณต์กํ ๋ถ๊ธฐ ๊ตฌ์กฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค
- ๊ธฐ์กด ๋น์ฃผ์ผ ๋ ธ๋ฒจ ํด๋ค์ ๊ฒ์ ์ ์์๋ง ์ง์ค๋์ด ์๊ณ , ์์ํ๊ฒ ์ธํฐ๋ํฐ๋ธ ์คํ ๋ฆฌ ์์ฑ์๋ ๊ณผ๋ํ๋ค
- ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ, ์์ดํ , ๋ณ์ ์์คํ ์ ์ฒด๊ณ์ ์ผ๋ก ์ค๊ณํ๊ณ ํ ์คํธํ ๋๊ตฌ๊ฐ ๋ถ์กฑํ๋ค
NarrativeProtagonist๋ ์๊ฐ ์ค์ฌ์ ์ธํฐ๋ํฐ๋ธ ์คํ ๋ฆฌ ์ ์ ๋ฐฑ์๋์ ๋๋ค.
ํ๋ก ํธ์๋์ ๋ถ๋ฆฌ๋ API ๊ธฐ๋ฐ ์ค๊ณ๋ก, ๋ค์ํ ํด๋ผ์ด์ธํธ(์น, ๋ชจ๋ฐ์ผ, CLI)์์ ํ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ๋ณต์กํ ๋ถ๊ธฐ ๋ก์ง์ ๊ตฌ์กฐํํ๊ณ ๋ฒ์ ๊ด๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- โ ๋ฐฑ์๋ API๋ก ๋ถ๋ฆฌ - ์ด๋ค UI๋ ์์ ๋กญ๊ฒ ๋ถ์ผ ์ ์์
- โ Variable/Item ์์คํ ๋ถ๋ฆฌ - ์คํ ๋ฆฌ ์ํ ๊ด๋ฆฌ๊ฐ ๋ช ํํจ
- โ Random Event ์ฒด๊ณํ - ์กฐ๊ฑด + ํ๋ฅ ๊ธฐ๋ฐ ์ด๋ฒคํธ ๊ด๋ฆฌ
- โ ๋ฒ์ ๊ด๋ฆฌ - ๋ ์ ์ธ์ ๊ณผ ์๊ฐ ์์ ๋ถ๋ฆฌ
- โ ๋ค์ํ Export ํ์ - JSON, HTML, Ren'Py, Ink ์ง์ ์์
- โ ์คํ์์ค & ๋ฌด๋ฃ - Self-hosted ๊ฐ๋ฅ
- ์ ์ ๋ณ Sandbox(์์ ๊ณต๊ฐ) ์๋ ์์ฑ
- Private/Public ํ๋ก์ ํธ ๊ด๋ฆฌ
- JWT ๊ธฐ๋ฐ ์ธ์ฆ ์์คํ
- ENTRY - ์คํ ๋ฆฌ ์์์
- SCENE - ๋จ์ผ ์ฅ๋ฉด (์๋ ์งํ)
- BRANCH - ์ ํ์ง ๋ถ๊ธฐ
- ENDING - ์คํ ๋ฆฌ ์ข ์ฐฉ์
- Variable - ์์น/๋ฌธ์์ด ๊ธฐ๋ฐ ์ํ (health, age, respect ๋ฑ)
- Item - ์์ดํ ์์ง ๋ฐ ํจ๊ณผ ์์คํ
- Effects - ๋ ธ๋ ๋ฐฉ๋ฌธ ์ ์๋ ์คํ๋๋ ์ํ ๋ณ๊ฒฝ
- ์กฐ๊ฑด(Conditions) + ํ๋ฅ (Probability) ๊ธฐ๋ฐ
- SCENE ๋ ธ๋์์ ๋ค์ ๋ ธ๋๋ก ๋์ด๊ฐ๊ธฐ ์ ๋ฐ๋
- Tag ๊ธฐ๋ฐ ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ
- Publish ์์ ์ ์ ์ฒด ์คํ ๋ฆฌ ์ค๋ ์ท ์ ์ฅ
- ๋ ์๊ฐ ์ฝ๋ ๋์ ์๊ฐ์ ์์ ์ฌํญ ์ํฅ ์์
- ๋ ์๋ณ ์งํ ์ํ(Session) ๋ ๋ฆฝ ๊ด๋ฆฌ
- JSON - ๋ฒ์ฉ ๋ฐ์ดํฐ ํ์
- Standalone HTML - ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ํ๋ ์ด ๊ฐ๋ฅ
- Ren'Py Script - ๋น์ฃผ์ผ ๋ ธ๋ฒจ ์ ์์ฉ (์์ )
- Ink Script - Unity ๊ฒ์ ๊ฐ๋ฐ์ฉ (์์ )
ํ์ด๋ ์กฐ์ง ๋ด๋ถ์์ ์์ฒด ์ธํฐ๋ํฐ๋ธ ํฝ์ ํ๋ซํผ ์ด์
๋๊ตฌ๋ ๊ฐ์ ๊ฐ๋ฅํ ์คํ ๋ฆฌ ์์ฑ ํ๋ซํผ์ผ๋ก ์ด์
- ๋น์ฃผ์ผ ๋ ธ๋ฒจ, ํ ์คํธ ์ด๋๋ฒค์ฒ ๊ฒ์์ ์คํ ๋ฆฌ ์์ง
- Unity + Ink ์ํฌํ๋ก์ฐ
- Ren'Py ํ๋ก์ ํธ ํตํฉ
๋ณต์กํ ๋ถ๊ธฐํ ์๋๋ฆฌ์ค ์์ฑ ๋ฐ ์คํ
- JDK 17+
- Docker & Docker Compose
- Gradle 8+
# Clone repository
git clone https://github.com/yourusername/NarrativeProtagonist.git
cd NarrativeProtagonist
# Start infrastructure (PostgreSQL, Redis)
docker-compose up -d
# Run application
./gradlew bootRun# Health check
curl http://localhost:8080/actuator/health
# Create user (signup)
curl -X POST http://localhost:8080/api/auth/signup \
-H "Content-Type: application/json" \
-d '{"username":"writer","email":"writer@example.com","password":"password123"}'
# Login
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"writer@example.com","password":"password123"}'| Category | Technology |
|---|---|
| Language | Kotlin |
| Framework | Spring Boot 3 |
| Database | PostgreSQL |
| ORM | JPA / Exposed |
| Cache | Redis (์์ ) |
| Auth | JWT |
| Build | Gradle (KTS) |
| Containerization | Docker |
- Architecture Guide - ์์คํ ๊ตฌ์กฐ ๋ฐ ERD
- API Documentation - ์๋ํฌ์ธํธ ๋ช ์ธ (Swagger ์์ )
- Setup Guide - ์์ธ ์ค์น ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
- Contributing Guide - ๊ธฐ์ฌ ๋ฐฉ๋ฒ
narrative-protagonist/
โโ src/
โ โโ main/kotlin/com/narrativeprotagonist/
โ โโ domain/ # ๋๋ฉ์ธ ๋ก์ง
โ โ โโ user/
โ โ โโ sandbox/
โ โ โโ project/
โ โ โโ node/
โ โ โโ item/
โ โ โโ variable/
โ โ โโ condition/
โ โ โโ effect/
โ โ โโ random/
โ โโ application/ # ์ ์ค์ผ์ด์ค
โ โโ api/ # REST API
โ โโ infra/ # ์ธํ๋ผ ๊ตฌํ
โโ docs/ # ๋ฌธ์
โโ docker-compose.yml
โโ build.gradle.kts
โโ README.md
- Sandbox / User / Project ๊ธฐ๋ณธ ๊ตฌ์กฐ
- Entry / Scene / Branch / Ending ํ์ ์ค๊ณ
- JWT ์ธ์ฆ ์์คํ
- Effect engine ๊ตฌํ
- Conditions ์์ง ๊ธฐ๋ณธ ๋ฒ์
- SCENE ๊ธฐ๋ฐ ํ๋ฅ ๋ถ๊ธฐ
- Condition + Probability ์กฐํฉ
- NodeSet ๋ฒ์ ์ค๋ ์ท ์ ์ฅ
- Reader ์ธ์ ๊ตฌ์กฐ ๊ตฌ์ถ
- JSON Export
- Standalone HTML Export
- Ren'Py Script Export
- Ink Script Export (Unity)
- API ๋ฌธ์ํ (Swagger/OpenAPI)
- ์ํ ์คํ ๋ฆฌ ์ ๊ณต
- Docker ์ด๋ฏธ์ง ๋ฐฐํฌ (Docker Hub)
- ํตํฉ ํ ์คํธ & CI/CD
๊ธฐ์ฌ๋ ์ธ์ ๋ ํ์ํฉ๋๋ค!
- ์ด ์ ์ฅ์๋ฅผ Fork ํ์ธ์
- Feature ๋ธ๋์น๋ฅผ ์์ฑํ์ธ์ (
git checkout -b feature/AmazingFeature) - ๋ณ๊ฒฝ์ฌํญ์ ์ปค๋ฐํ์ธ์ (
git commit -m 'Add some AmazingFeature') - ๋ธ๋์น์ Push ํ์ธ์ (
git push origin feature/AmazingFeature) - Pull Request๋ฅผ ์ด์ด์ฃผ์ธ์
์์ธํ ๋ด์ฉ์ CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
- ๋ผ๋ฒจ์ด
good first issue์ธ ์ด์๋ค์ ํ์ธํด๋ณด์ธ์ - ๊ถ๊ธํ ์ ์ GitHub Discussions์์ ์ง๋ฌธํด์ฃผ์ธ์
- Author: Annie Ha
- Blog: dev-annieha.tistory.com
- Issues: GitHub Issues
- Discussions: GitHub Discussions
This project is licensed under the MIT License - see the LICENSE file for details.
์ธํฐ๋ํฐ๋ธ ํฝ์ ๊ณผ ๊ฒ์ ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด ํ๋ก์ ํธ๋ ํ๋ฐํ ๊ฐ๋ฐ ์ค์ ๋๋ค. Production ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ถฉ๋ถํ ํ ์คํธ๋ฅผ ๊ฑฐ์ณ์ฃผ์ธ์.