anglog

앵로그 (anglog)

앵무새가 되어 노는 가을 공원 앵파크, 그리고 우리 앵무의 하루를 기록하는 일기 SNS 앵로그. 누구나 로그인 없이 앵파크에서 먼저 놀고, 앵무를 키우는 사람(앵집사)은 앵로그에 우리 앵무를 등록해 앵파크에 집을 짓고 일기를 쓴다. 웹(PWA)으로 먼저 반응을 보고 앱으로 낼 계획이다.

(코드 안의 패키지명과 DB명은 아직 예전 이름 jjaklog다. 따로 바꿀 예정.)

앵파크

앵로그

폴더

backend/    앵로그 API. Spring Boot 3.3.5, Java 21, PostgreSQL + Flyway (테스트는 H2)
realtime/   앵파크 실시간 서버. 독립 Spring Boot 앱, WebSocket, 메모리만 사용 (포트 8090)
frontend/   Vite + React + TypeScript, three.js 0.128
docs/       plan.md 기획과 API, park-realtime.md 실시간 규약
docker-compose.yml  개발용 PostgreSQL (localhost:5433)

실행 (맥, zsh)

서버 없이 화면만 보기

cd ~/project/jjaklog/frontend
npm install
npm run dev:mock

http://localhost:5173 을 열면 앵파크부터 시작한다(피드는 /feed). 브라우저 안의 가짜 서버가 대답하고, 새로고침하면 기록이 처음으로 돌아간다. 미리 있는 계정 haru, bori, kongi의 비밀번호는 parrot123. 이 모드에서는 실시간 서버에 붙지 않는다(혼자 노는 앵파크).

전부 같이

cd ~/project/jjaklog
docker compose up -d db

cd backend
./gradlew test        # 전체 흐름 테스트 (H2, Docker 필요 없음)
./gradlew bootRun     # 앵로그 API, http://localhost:8080

# 새 터미널 탭
cd ~/project/jjaklog/realtime
./gradlew test        # 두 앵무가 서로 보이는지 실제 WebSocket으로 확인
./gradlew bootRun     # 앵파크 실시간, ws://localhost:8090/ws

# 새 터미널 탭
cd ~/project/jjaklog/frontend
npm run dev           # /api, /media 는 8080으로, 앵파크는 8090으로 붙는다

브라우저 창을 두 개 열어 앵파크에 들어가면 서로의 앵무가 보인다. 올린 사진은 backend/storage/ 아래에 저장된다 (STORAGE_DIR로 바꿀 수 있음).

운영에서 실시간 서버 주소

프론트 빌드 때 VITE_REALTIME_URL=wss://.../ws 를 준다. 없으면 운영 빌드의 앵파크는 혼자 노는 모드로 뜬다. 실시간 서버에는 ANGPARK_ALLOWED_ORIGINS(프론트 주소)와, 필요하면 ANGPARK_BLOCKED_WORDS_FILE(이름 금칙어, git에 넣지 않음)을 준다.

운영 배포

화면은 https://anglog.nobody-asked.dev (GitHub Pages, main에 frontend/가 바뀌면 Actions가 배포), API와 앵파크 실시간은 서버의 https://api.anglog.nobody-asked.dev . 구성, 처음 설정 순서, 서버 배포(anglog-deploy), 백업은 infra/README.md.

다음 단계 후보