[WIL] 최종프로젝트 2주차 회고

Yuri·2025년 4월 11일

WIL

목록 보기
4/4

✏️ 최종프로젝트 2주차를 진행하며 겪은 문제점과 해결방법, 새로 알게된 점을 기록합니다.

최종프로젝트

팀원들과 함께 마지막을 향해 달려가는 최종 프로젝트에 들어가게 되었다.

쏟아지는 과제에 TIL, SC 공부 등에 소홀했는데 벌써 최종 프로젝트라니... (사실은 임시글에 쌓여있다 흑흑 🫠) 미루다 보면 결국 안 하게 되니 우선 쓰고봐야 한다!

🎯 2주차

  • MVP 개발 완료하기 🧑‍💻
  • 고도화 기능 고민하기

1. Spring Boot

✅ 환경 설정 관리 전략

  • 목적: 환경별 설정 파일을 명확히 분리하여 유지보수성과 배포 유연성 확보
  • 적용 방식
    • application.yml: 공통 설정
    • application-local.yml, application-prod.yml 등: 환경별 설정
    • .env: 민감 정보 (DB, Redis, 키 등)를 외부에서 주입 (Spring에서 dotenv 또는 CI/CD에서 환경변수로 활용)
  • 이슈: .envapplication.yml에 어떻게 매핑할지, Spring Boot의 @Value 또는 System.getenv() 사용 여부

2. 푸시 알림 시스템 (Cross-platform)

✅ 예약 알림 API

  • 사용 목적: 식당 예약 취소 시 대기 유저에게 실시간 알림 전송
  • 핵심 요소
    • 예약 취소 이벤트 발생 시 Pub/Sub로 대기 유저 알림 트리거
    • 푸시 전송 대상 플랫폼: Web, Android, iOS
    • 유저가 어떤 디바이스에서 대기 중인지 고려한 멀티 플랫폼 메시지 구성
  • 기술 고려 사항
    • Android/iOS: FCM, APNs
    • Web: Web Push (VAPID)
    • 푸시 서버 큐 설계 필요 (비동기 처리)

3. Redis

✅ Redis Pub/Sub (비동기 알림 처리)

  • 목적: 분산 환경에서 예약 취소 이벤트 → 대기 유저 알림 처리
  • 구성
    • Publisher: 예약 서버 (예약 취소 시 메시지 전송)
    • Subscriber: 알림 서버 (해당 메시지를 수신해 푸시 전송)
  • 고려사항
    • Redis 클러스터 환경에서의 분산 Pub/Sub
    • AWS ElastiCache for Redis 사용 예정 (내부 보안, VPC 설정 등 고려)

✅ 검색 기능 고도화 (실시간 UX 개선)

  • 기능:
    • 검색어 자동완성 (prefix 기반)
    • 인기 검색어 랭킹 (ZSET 사용)
    • TTL 적용된 캐싱 (검색 결과 캐시)
    • Lua Script로 atomic 처리 (랭킹 증가 + 키워드 정규화 동시 처리)
  • 예시 구현 요소
    • ZINCRBY → 인기 랭킹 갱신
    • GET/SETEX → 검색 캐싱
    • HSET, HGET → 추천 키워드 메타 관리

4. Elasticsearch

✅ 검색 + 추천 통합 처리

  • 목적: 검색 정확도 및 추천 정교화
  • 검색 기능
    • 토큰화된 키워드를 기준으로 정렬 및 필터링
    • 사용자 쿼리 로그 기반 검색어 추천
  • 추천 기능
    • Redis: 추천 후보군 캐시
    • Elasticsearch: 유사도 기반 정렬 (function_score, script_score)
    • 사용자의 선호 지역, 음식 카테고리, 예약 이력 기반 personalized query

5. 추천 기능

✅ 사용자 기반 추천 로직

  • 데이터 기반
    • 로그인 유저의 선호 음식 카테고리
    • 예약 이력 기반 유사 식당 추천
    • 지역 기반 선호도 분석
  • 추천 흐름
    1. Redis에서 후보군 (캐시 기반) 조회
    2. Elasticsearch에서 유사도 점수 기반 정렬
    3. 랭킹 보정 (예약률, 평점, 클릭 수 반영)

6. 테스트 도구 (nGrinder + Docker Compose)

✅ 성능 테스트 자동화

  • 목적: 시스템의 부하 테스트 자동화
  • 환경
    • Docker-Compose 기반 nGrinder 컨테이너 구성
    • Gradle 기반 프로젝트에서 스크립트 실행
    • Java 17 호환성 확인
  • 과제
    • nGrinder Controller + Agent 구성 분리
    • Docker 네트워크 내에서 통신 가능하도록 설정
profile
안녕하세요 :)

0개의 댓글