-
Notifications
You must be signed in to change notification settings - Fork 0
Features
TAEHEON KIM edited this page Jul 7, 2026
·
2 revisions
- Kakao OAuth 2.0 로그인
- JWT Access Token (30분) + Refresh Token (7일, Redis 저장)
- Refresh Token 재발급 시 기존 토큰 삭제 (RTR 방식)
- STOMP 연결(CONNECT) 시
StompJwtInterceptor로 WebSocket도 JWT 인증, 메시지 전송(SEND) 시에는 별도 Sliding Window Rate Limiting 적용
- CRUD (기술스택 / 모집상태 필터링, 페이징)
- Elasticsearch 풀텍스트 검색
- nori 분석기로 한국어 형태소 분석
- 동의어 필터 (스프링=spring, 자바=java, 리액트=react 등)
- 키워드 / 기술스택 / 모집상태 / 최대인원 복합 조건 검색
- 단건 조회 Redis 캐시 (TTL 10분), 장애 시 DB 폴백
- Spring Batch 만료 게시글 자동 마감
-
JpaCursorItemReader스트리밍 조회, Chunk 1,000건 커밋 - 매일 자정 실행, ES 인덱스도 배치 내 동기화
-
- 지원 / 취소 / 승인 / 거절
- 비관적 락 (
PESSIMISTIC_WRITE) + 락 타임아웃 3초로 동시 지원 레이스컨디션 방지 -
DataIntegrityViolationExceptioncatch -> 중복 지원 409 응답 - 지원 승인 시 스터디팀 자동 생성
- 게시글별 댓글 CRUD
- 댓글 작성 시 게시글 작성자에게 알림 발송
-
@nickname정규식 파싱 -> 멘션 알림
- WebSocket STOMP + Redis Pub/Sub
- 지원 승인 시 스터디팀 전용 채팅방 자동 생성
- Redis Pub/Sub으로 멀티 인스턴스 간 메시지 동기화
- 채팅 내역 MySQL 저장 + 페이징 조회
- Kafka -> Redis Pub/Sub -> SSE 파이프라인
- Outbox 패턴으로 알림 유실 방지, DLT로 실패 격리
| 종류 | 트리거 |
|---|---|
| 지원 접수 | 게시글에 지원 시 작성자에게 |
| 지원 승인 / 거절 | 승인/거절 시 지원자에게 |
| 댓글 알림 | 댓글 작성 시 게시글 작성자에게 |
| 멘션 알림 |
@nickname 작성 시 해당 유저에게 |
| 팀 일정 알림 | 일정 등록 시 팀원 전체에게 |
| D-1 리마인더 | 매일 오전 9시 다음날 일정 있는 팀원에게 |
- 읽음 처리 / 미읽음 카운트 / 전체 읽음
- 지원 승인 시 팀 자동 생성, 리더/멤버 역할 관리
- 리더 위임, 멤버 추방, 팀 탈퇴
- 팀 일정 CRUD
- 매일 오전 9시
TeamScheduleReminderScheduler로 D-1 리마인더 발송
-
@RateLimit어노테이션으로 API별 선택적 적용 - Redis Sorted Set + Lua Script로 Sliding Window 원자적 처리
- 키 구조:
rate:limit:{userId 또는 clientIp}:{endpoint}— 미인증 요청은 클라이언트 IP 기준으로 폴백 - STOMP CONNECT/SEND에도 별도 키(
rate:limit:stomp:{userId}:{destination})로 적용 (10초당 20건) - 초과 시 HTTP 429 반환
-
@Idempotent어노테이션 적용 (지원, 댓글, 게시글, 팀 일정 생성) -
Idempotency-Key헤더 기반, Redis에 응답 캐시 (TTL 30분) - 처리 중 재요청 -> 409 Conflict, 실패 시 키 삭제로 재시도 허용
-
MdcFilter: 요청마다requestId,serverInstance,clientIp,method,uri자동 주입 -
JwtAuthenticationFilter: 인증 성공 시userId추가 주입 -
LogstashEncoder로 MDC 값이 JSON 필드로 직렬화 -> Kibana에서requestId기반 필터링