NE:MO는 조건에 맞는 스터디/모임을 탐색하고 실시간으로 참여할 수 있는 매칭 플랫폼입니다.
kafka를 통합 데이터 정합성, WebSocket + SSE 기반의 빠른 AI 모임 추천, Redis 캐싱 등 다양한 기술을 도입하여 효율적이고 반응성 높은 서비스를 제공합니다.
| Category | Technology |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot 3.4.5 |
| Database | MySQL, Redis |
| Messaging | Kafka |
| Realtime | WebSocket, SSE |
| Infrastructure | Docker, NGINX, AWS EC2 |
| Monitoring | Sentry, SigNoz |
| CI/CD | GitHub Actions |
- 카카오 Oauth를 활용한 회원 가입, 로그인
- Access / Refresh Token 기반 JWT 인증
- 모임 생성 시 기본정보만 입력해도 AI가 자동으로 모임 소개, 계획 작성 및 추천
- 모임을 생성하는 시간을 획기적으로 단축
- 조건 기반 탐색 (지역, 카테고리, 키워드, 태그, 모집중)
- 활성화 이벤트를 한 눈에 보기 위해 업데이트순 정렬, 페이징, 키워드 검색 지원
- 모임별 일정 생성
- 참여자 등록 및 나의 일정 확인 가능
- Kafka 메시징으로 AI 서버에 요청
- WebSocket 기반 응답 수신 및 비동기 처리
users: 사용자 정보groups: 모임 정보tags: 태그group_tag: 모임 - 태그group_participants: 모임 참가자schedules: 일정schedule_participants: 일정 참여자
- 문제: 외부 API 호출 지연에 따른 Thread 점유로 BE 에러율 70%, AI의 Chroma DB와의 정합성 깨짐
- 해결: Kafka 기반 비동기 이벤트 구조로 전환
- 결과: 정합성 확보, 에러율 감소
📎 관련 블로그
- 문제: Full GC가 자주 발생하고, GC 이후에도 Heap 메모리 사용률이 회수되지 않음
- 접근: MAT를 활용한 HeapDump 분석을 통해
byte[],char[],Thread,AgentBuilder등의 비정상 객체를 추적 - 해결: OpenTelemetry와 ByteBuddy Agent 설정 조정 → 불필요한 객체 할당 제거
- 결과: 힙 메모리 사용률 감소, Full GC 빈도 5~7회 -> 4회 미만으로 감소
📎 관련 블로그
- 문제: 테스트 코드 실행 시간이 10초 이상으로 비효율적
- 접근: IntelliJ Profiler로 테스트 성능 분석 →
Thread.sleep,NettyEventLoop, 외부 API 호출이 병목 - 해결: WebClient를 Mock으로 대체, Thread Pool 조절로 개선
- 결과: 테스트 실행 시간 10s → 6s 512ms로 단축
📎 관련 블로그
- 문제: 캐시 만료 시점에 트래픽 집중 (Cache Stampede) → Redis 부하 및 성능 저하
- 해결: TTL 설정 시
Jitter(Random)적용 및 null 캐싱 활용하여 트래픽 분산 - 결과: TTL 충돌 시점 완화, 조회 응답 속도 평균 58ms → 1ms
📎 관련 블로그
- 문제: 모임 신청에서 동시 요청으로 인해 데이터 정합성이 깨지는 문제 발생
- 접근: Redisson Lock 기반의 분산락 도입,
tryLock과waitTime조절 - 결과: race condition 방지, 분산환경에서의 데이터 무결성 확보
📎 관련 블로그
- 문제: MySQL에 불필요하게 연결이 발생하며 병목과 커넥션 낭비가 빈번
- 해결: Redis 커넥션 풀 설정 최적화, Lettuce 비동기 처리 전략 적용
- 결과: 동시 처리 성능 2배 증가, 메모리 사용률 감소로 시스템 안정화
📎 관련 블로그
- 문제: AI 서버 및 DB 호출 지연으로 인해 전체 API 응답 속도 저하
- 해결: Index 최적화 (불필요한 Index 제거, 컬럼 재정렬로 Range Scan 개선)
- 결과: 응답 시간 단축, 서버 처리량 증가 및 트래픽 대응력 향상
📎 관련 블로그
- Kafka 기반 비동기 메시징 (AI 그룹 생성 요청/응답)
- Redis 기반 캐싱 + 분산락
- WebSocket 기반 BE ↔ AI 서버 통신
- SSE 챗봇 Streaming 구현
| 기술 요소 | 설명 |
|---|---|
| Kafka | AI 연동 / 메시지 큐 / DLQ 구성 |
| Redis Cache | @Cacheable + TTL + Jitter → 평균 1ms 응답 |
| Redis Lock | Redisson 분산락 기반 모임 신청 중복 방지 |
| WebSocket + SSE | AI 응답 Streaming 처리 → UX 개선 |
| Virtual Thread | Timed Waiting Thread 감소, 응답 속도 향상 |
| Heap 분석 | GC 튜닝 + Agent 비활성화로 메모리 사용률 감소 |