EveryGSM Server V2는 학생 프로젝트를 등록하고 관리자 검수를 거쳐 공개하며, DataGSM과 프로젝트 데이터를 동기화하는 Spring Boot 기반 백엔드 서버입니다.
Frontend
↓ REST API
Controller
↓
Service
↓
Repository / QueryDSL
↓
MySQL
외부 시스템과 연결되는 경우에는 Service에서 외부 API를 호출한다.
┌─ DataGSM OAuth
├─ DataGSM OpenAPI
Service ────────────┼─ AWS S3
└─ Discord Webhook
즉 기본적으로는
Controller → Service → Repository → DB
구조이고, 필요한 기능에서는
Service → 외부 API
가 추가되는 형태이다.
domain/
├─ auth/
├─ user/
├─ project/
├─ admin/
└─ image/
global/
├─ config/
├─ security/
├─ exception/
├─ ratelimit/
├─ discord/
└─ thirdparty/
실제 서비스의 기능과 비즈니스 로직이 들어간다.
여러 도메인에서 공통으로 사용하는 인프라 코드가 들어간다.
dto/
├─ common
├─ request
└─ response
Every gsm 코드 베이스 분석하면서 봐봤는데 project 도메인이 제일 핵심적인 기능들이 있는것 같다
프로젝트에는 제목, 설명, 배포 URL, Git Repository, 기술 스택, 참여 학생 등의 정보가 들어간다.
상태는
PENDING → 승인 대기
APPROVED → 승인 / 공개
REJECTED → 거절
INACTIVE → 비활성
이렇게 4개가 있다
이미 APPROVED된 프로젝트를 수정할 때 바로 수정하지 않는다.
APPROVED
↓ 수정 요청
PENDING 수정본 생성
↓
관리자 승인
↓
원본에 수정사항 반영
↓
수정본 INACTIVE
공개된 프로젝트가 관리자 검수 없이 변경되는 것을 막기 위한 구조이다.
DataGSM OAuth
↓
사용자 정보 확인
↓
EveryGSM User 조회/생성
↓
EveryGSM JWT 발급
↓
이후 API 요청은 JWT로 인증`
DataGSM으로 로그인하고 이후 api 인증은 Every GSM JWT가 담당한다
DataGSM은 두 가지 용도로 사용한다.
프로젝트는 스케줄러를 통해 주기적으로 DataGSM과 동기화된다.
DataGSM
↓
프로젝트 조회
↓
EveryGSM DB와 비교
↓
있으면 수정 / 없으면 생성
DataGSM에서 사라진 프로젝트는 INACTIVE 처리한다.