본문으로 건너뛰기

기술 스택

시스템 구성 (3-Tier)

Client (Next.js)
└─ 위치 권한 획득, Kakao Map SDK 렌더링
└─ GPS 좌표는 서버 미전송 → 클라이언트에서 Kakao Local API 직접 호출

API Server (Spring Boot 3.5)
└─ RESTful JSON API
└─ 사주 계산 엔진 연동, 기운 분석, 궁합 계산

Database
└─ MySQL 8.0 — 영구 저장
└─ Caffeine — 인프로세스 캐시 (장소 키워드 24h TTL)

External APIs
└─ Ablecity API — 사주 8자 계산, 일별 기운 점수
└─ OpenAI API — LLM 기반 인사이트 생성 (gpt-4o-mini)
└─ Kakao OAuth2 — 소셜 로그인

Infrastructure
└─ AWS EC2 (애플리케이션 서버)
└─ AWS S3 (정적 리소스, 일별 로그 업로드)
└─ Docker Compose — 애플리케이션·DB 컨테이너 구성
└─ GitHub Actions — CI/CD 파이프라인

스택 상세

서버

항목내용
언어Java 17
프레임워크Spring Boot 3.5.x
빌드 도구Gradle
ORMSpring Data JPA (Hibernate)
보안Spring Security + JWT

데이터베이스

항목내용
주 DBMySQL 8.0
인프로세스 캐시Caffeine (24h TTL, 최대 10,000 엔트리)

외부 API 연동

서비스용도
Ablecity사주 8자 계산·일별 기운 점수
OpenAI일별 인사이트·장소 키워드·음식 추천 생성
Kakao OAuth2소셜 로그인 (인가코드 → JWT 발급)
Kakao 알림톡커뮤니티 참가 확인 발송

장애 대응

항목내용
재시도Spring Retry — 지수 백오프(Exponential Backoff) 적용
서킷브레이커Resilience4j — 실패율 임계치 기반 OPEN/HALF-OPEN/CLOSED 전환

Ablecity(사주 엔진)에만 재시도 + 서킷브레이커를 이중 적용합니다. OpenAI는 비용 이슈로 재시도 없음, Kakao는 인가코드 1회성이므로 재시도 없음.

인프라

항목내용
서버AWS EC2
스토리지AWS S3 (정적 리소스·로그)
컨테이너Docker Compose (app + db)
CI/CDGitHub Actions (push → 빌드 → 테스트 → Docker 빌드 → EC2 배포)

스케일아웃 시 전환 계획

현재 단일 인스턴스 MVP 기준. 인스턴스 2대 이상으로 확장 시 Redis 전환이 필요한 항목입니다.

기능현재전환 시우선순위
장소 키워드 캐시CaffeineRedis1순위 — 캐시 설정 교체만으로 가능
Refresh Token 저장MySQLRedis1순위 — 보안·성능 모두 Redis 적합
Rate Limiting미구현Redis sliding window2순위
비동기 콜백 대기인프로세스Redis Pub/Sub3순위 — 스케일아웃 시 콜백 유실 위험