cd /projects
$ cat refentra/README.md
project : Refentra - 협업형 레퍼런스 아카이브
period : 2026.03 - 진행 중
role : Solo Developer (Fullstack)
stack :
React 18TypeScriptViteTailwind CSSGoEchoGORMPostgreSQLRedisDockerPlaywright
// key metrics
  • PRD v1.0 → v1.8 버전 기반 단계별 개발
  • React(SPA) + Go(Echo) 풀스택 솔로 설계
  • Hetzner VPS + Caddy + Docker Compose 프로덕션 배포 스캐폴드 완비

아이디어

팀이나 개인이 유용한 링크를 발견할 때마다 슬랙·노션·즐겨찾기에 흩어진다. 나중에 “그 레퍼런스 어디 있었지?”가 반복된다.

레퍼런스 발견

슬랙/노션/북마크에 분산 저장

검색이 안 되거나 공유가 불편함

결국 다시 구글링

Refentra의 답: 태그 기반 필터·풀텍스트 검색·페이지네이션이 서버 사이드로 동작하는 협업형 레퍼런스 아카이브. 검색 상태는 URL에 저장돼 새로고침하거나 링크를 공유해도 그대로 복원된다.


아키텍처

┌──────────────────────────────────────────────────┐
│          frontend/ (React 18 + Vite + TS)        │
│  Landing  /  Dashboard  /  Login  /  Signup      │
│  태그 필터 · 검색 · 페이지네이션 · 모달 저장     │
└─────────────────────┬────────────────────────────┘
                      │ REST  /api/v1/...

┌──────────────────────────────────────────────────┐
│          Go (Echo + GORM)                        │
│  인증(JWT httpOnly)  │  레퍼런스 CRUD            │
│  검색/필터/페이지네이션  │  중복 감지              │
└──────┬───────────────────────────┬───────────────┘
       │                           │
  PostgreSQL 16              Redis 7
  (레퍼런스·유저)          (Refresh Token)

프로젝트 구조

refentra/
├── frontend/
│   ├── src/
│   │   ├── components/
│   │   ├── pages/
│   │   └── lib/
│   └── e2e/             # Playwright 시나리오
├── internal/
│   ├── auth/            # JWT + Redis 세션
│   ├── handlers/        # Echo 핸들러
│   └── models/          # GORM 모델
├── docker/
├── docs/
│   ├── prd/             # v1.0 ~ v1.8 PRD 문서
│   └── devlog/
└── main.go

핵심 기능

기능설명
레퍼런스 저장·조회URL + 제목 + 태그 저장, 서버 사이드 페이지네이션
풀텍스트 검색제목/설명/URL 기준 실시간 검색
태그 필터다중 태그 AND 필터
URL 상태 동기화/dashboard?search=react&tags=Frontend&page=2 형식 — 새로고침·공유 후 복원
중복 감지동일 사용자 기준 url + title 중복 서버 거절
포트폴리오 데모 모드?mode=portfolio — 브라우저 내 샘플 데이터 레이어, 실제 DB와 분리

인증 흐름

회원가입 → 자동 로그인

Access Token (httpOnly 쿠키, 15분)
    ↓ 만료
Refresh Token (Redis, 24시간) → 재발급

로그아웃 → Redis Refresh Token + 브라우저 쿠키 동시 폐기

기술 선택 이유

Go + Echo (백엔드) Go는 단일 바이너리로 배포되고 Docker 이미지가 가볍다. Echo는 미들웨어 조합이 직관적이고, GORM으로 PostgreSQL 스키마 관리를 코드 수준에서 처리한다.

React + Vite (프론트엔드) SPA로 빠르게 MVP를 만들되, go:embed로 Go 바이너리에 프론트엔드를 통합해 서버를 하나만 운영한다. 배포 토폴로지를 단순하게 유지한다.

Redis (세션 저장소) Refresh Token을 DB에 저장하면 토큰 폐기 쿼리가 느리다. Redis의 TTL 기반 자동 만료와 즉시 삭제로 로그아웃 보안을 확보한다.

Playwright (E2E) 단순 API 테스트로는 URL 상태 복원, 리다이렉트 흐름, 쿠키 동작을 검증하기 어렵다. 실제 브라우저에서 4개 핵심 시나리오를 CI에서 자동 검증한다.


개발 단계

Phase내용상태
v1.0제품 기본 PRD — 레퍼런스 저장·조회·삭제 MVP완료
v1.1저장/조회 서버 연동완료
v1.2로컬 Docker PostgreSQL 환경완료
v1.3Redis 세션 인증 (httpOnly + Refresh)완료
v1.4Playwright 브라우저 E2E완료
v1.5검색/필터/페이지네이션완료
v1.6대시보드 URL 쿼리 동기화완료
v1.8포트폴리오 리디자인완료