tolelom feb8ec96ad
All checks were successful
Server CI/CD / lint-and-build (push) Successful in 21s
Server CI/CD / deploy (push) Successful in 56s
feat: 체인 클라이언트 멀티노드 페일오버 (SPOF 해결)
CHAIN_NODE_URLS 환경변수(쉼표 구분)로 복수 노드 지정 가능.
Client.Call()이 네트워크/HTTP 오류 시 다음 노드로 자동 전환.
RPC 레벨 오류(트랜잭션 실패 등)는 즉시 반환 (페일오버 미적용).
기존 CHAIN_NODE_URL 단일 설정은 하위 호환 유지.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-18 17:31:46 +09:00
2026-02-25 00:20:43 +09:00

One of the plans — Backend Server

Go 기반 REST API 서버. 유저 인증, 공지사항, 게임 파일 배포를 담당합니다.

기술 스택

  • Go + Fiber v2 — HTTP 프레임워크
  • GORM + MySQL — ORM / 주 데이터베이스
  • Redis — JWT 블랙리스트 (로그아웃 처리)
  • JWT (golang-jwt/jwt v5) — 인증

실행

# 로컬 (MySQL, Redis 필요)
go run .

# Docker
docker build -t a301-server .
docker run -p 8080:8080 --env-file .env a301-server

환경 변수

변수 설명 기본값
APP_PORT 서버 포트 8080
DB_HOST MySQL 호스트 localhost
DB_PORT MySQL 포트 3306
DB_USER MySQL 사용자 root
DB_PASSWORD MySQL 비밀번호 ""
DB_NAME 데이터베이스 이름 a301
REDIS_ADDR Redis 주소 localhost:6379
REDIS_PASSWORD Redis 비밀번호 ""
JWT_SECRET JWT 서명 키 secret
JWT_EXPIRY_HOURS JWT 만료 시간(시) 24
ADMIN_USERNAME 초기 관리자 계정 admin
ADMIN_PASSWORD 초기 관리자 비밀번호 admin1234
BASE_URL 외부 접근 URL (파일 URL 생성용) http://localhost:8080
GAME_DIR 게임 파일 저장 경로 /data/game

API 엔드포인트

Auth

메서드 경로 설명
POST /api/auth/register 회원가입
POST /api/auth/login 로그인 → JWT 반환
POST /api/auth/logout 로그아웃 (토큰 블랙리스트)

Users (관리자 전용)

메서드 경로 설명
GET /api/users/ 전체 유저 목록
PATCH /api/users/:id/role 유저 권한 변경
DELETE /api/users/:id 유저 삭제

Announcements

메서드 경로 설명
GET /api/announcements/ 공지사항 목록
POST /api/announcements/ 공지 생성 (관리자)
PUT /api/announcements/:id 공지 수정 (관리자)
DELETE /api/announcements/:id 공지 삭제 (관리자)

Download

메서드 경로 설명
GET /api/download/info 게임/런처 메타데이터 (버전, 크기, SHA256)
GET /api/download/file game.zip 다운로드
GET /api/download/launcher launcher.exe 다운로드
POST /api/download/upload/game 게임 zip 업로드 (관리자)
POST /api/download/upload/launcher launcher.exe 업로드 (관리자)

업로드 엔드포인트는 raw body 스트리밍으로 대용량 파일을 메모리 없이 디스크에 직접 저장합니다. 게임 zip 업로드 시 내부 A301.exe의 SHA256 해시를 자동 추출합니다.

프로젝트 구조

.
├── main.go
├── routes/routes.go
├── internal/
│   ├── auth/        # handler, service, repository, model
│   ├── announcement/
│   └── download/
└── pkg/
    ├── config/      # 환경 변수 로드
    ├── database/    # MySQL, Redis 연결
    └── middleware/  # JWT 인증, AdminOnly

Docker / 배포

/data/game 볼륨에 game.ziplauncher.exe가 저장됩니다. docker-compose.yml에 named volume game_data:/data/game 마운트 필요.

Description
No description provided
Readme 746 KiB
Languages
Go 99.8%
Dockerfile 0.2%