토익 시험 준비를 위한 스터디 매칭 및 고사장 리뷰 플랫폼 백엔드 API 서버
https://github.com/koheon2/examtalk_ai.git
https://github.com/kang022878/examtalk_front.git
- Framework: Spring Boot 4.0.1
- Language: Java 21
- Database: PostgreSQL (AWS RDS)
- Authentication: JWT (JSON Web Token)
- Storage: AWS S3
- AI Server: KCLOUD
- Real-time: WebSocket (STOMP)
- Documentation: Swagger/OpenAPI
- Build Tool: Gradle
| 컴포넌트 | 기술 스택 | 역할 |
|---|---|---|
| Flutter App | Flutter, Dart | 사용자 인터페이스 (스터디, 지도, 리뷰, 채팅) |
| Spring Boot | Java 21, Spring Boot 4.0 | REST API, WebSocket, JWT 인증, 비즈니스 로직 |
| KCLOUD AI Server | FastAPI, PyTorch, CUDA | 텍스트 임베딩 생성, LLM 기반 리뷰 평가 생성 |
| AWS RDS | PostgreSQL 17 | 사용자, 스터디, 학교, 리뷰, 채팅 데이터 저장 |
| AWS S3 | S3 | 이미지 파일 저장, Presigned URL 발급 |
| 모델 | 용도 |
|---|---|
| LLaMA 3.1 8B Instruct | 리뷰 기반 고사장 평가 문장 생성 |
| multilingual-e5-base | 텍스트 → 768차원 임베딩 벡터 변환 |
| 엔드포인트 | 입력 | 출력 |
|---|---|---|
POST /embed |
{ text: string } |
{ embedding: float[] } |
POST /venue/eval-embed |
{ reviews: string[] } |
{ evaluation: string, embedding: float[] } |
[사용자 성향 입력] → [AI Server: 임베딩 생성] → [DB 저장]
↓
[추천 요청] → [캐시에서 임베딩 조회] → [코사인 유사도 계산] → [Top-K 반환]
[리뷰 작성] → [DB 저장] → [응답 반환 (즉시)]
↓
[비동기]
↓
[AI Server: 리뷰 평가 생성]
↓
[학교 evaluation, embedding 업데이트]
[이미지 업로드] → [S3 저장] → [S3 Key를 DB에 저장]
↓
[이미지 조회 요청] → [S3 Presigned URL 생성] → [클라이언트에 URL 반환]
- 회원가입 / 로그인 (JWT 기반 인증)
- 프로필 조회 및 수정
- 프로필 이미지 업로드
- 성향(tendency) 기반 AI 임베딩 생성
- 포인트/스코어 시스템
- 스터디 생성 / 수정 / 삭제
- 스터디 목록 조회 및 검색 (시험 종류, 지역, 목표 점수 필터)
- 스터디 가입 신청 및 승인/거절
- AI 기반 스터디 추천 (사용자 성향 ↔ 스터디 콘텐츠 유사도)
- 내 스터디 조회
- 고사장 목록 조회 및 검색
- 위치 기반 주변 고사장 조회
- AI 기반 고사장 추천 (사용자 성향 ↔ 리뷰 기반 평가 유사도)
- AI 생성 고사장 평가 요약
- 고사장 리뷰 작성 / 수정 / 삭제
- 리뷰 이미지 업로드 (최대 5장)
- 리뷰 좋아요 기능
- Predefined 태그 (추천, 시설 좋음, 조용함, 접근성 좋음)
- WebSocket 기반 실시간 스터디 그룹 채팅
- 채팅 이미지 전송
- 채팅 기록 조회
서버 실행 후 Swagger UI에서 확인:
http://localhost:8080/swagger-ui.html
src/main/java/com/moleep/toeic_master/
├── config/ # 설정 (Security, WebSocket, S3, Swagger)
├── controller/ # REST API 컨트롤러
├── dto/ # 요청/응답 DTO
│ ├── request/
│ └── response/
├── entity/ # JPA 엔티티
├── exception/ # 커스텀 예외
├── repository/ # JPA 리포지토리
├── security/ # JWT, UserDetails
└── service/ # 비즈니스 로직
spring:
datasource:
url: jdbc:postgresql://<host>:<port>/<database>
username: <username>
password: <password>
jpa:
hibernate:
ddl-auto: update
jwt:
secret: <jwt-secret-key>
expiration: 86400000 # 24시간
cloud:
aws:
s3:
bucket: <bucket-name>
credentials:
access-key: <access-key>
secret-key: <secret-key>
region:
static: ap-northeast-2- Java 21
- PostgreSQL
- AWS S3 버킷
# 빌드
./gradlew build
# 실행
./gradlew bootRun
# 또는 JAR 실행
java -jar build/libs/toeic_master-0.0.1-SNAPSHOT.jar- 외부 AI 서버 (
/embed,/venue/eval-embed) 연동 - 사용자 성향 → 임베딩 벡터 변환
- 코사인 유사도 기반 스터디/고사장 추천
- 임베딩 캐시로 성능 최적화
- 리뷰 등록 시 고사장 임베딩 업데이트는 비동기 처리
- 사용자 응답 지연 없이 AI 서버 호출
| 활동 | 포인트 |
|---|---|
| 스터디 가입 승인 | +50 |
| 리뷰 작성 | +20 |
MIT License