Every GSM 코드베이스 분석

김대은·2026년 8월 9일

EveryGSM Server V2는 학생 프로젝트를 등록하고 관리자 검수를 거쳐 공개하며, DataGSM과 프로젝트 데이터를 동기화하는 Spring Boot 기반 백엔드 서버입니다.

기술 스택

  • Language : JAVA
  • Framework : Spring Boot
  • DB : My SQL9
  • ORM : Spring Data JPA + Hibernate
  • 외부 API : OpenFeign + DataGSM SDK

전체적인 요청 흐름

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/

domain

실제 서비스의 기능과 비즈니스 로직이 들어간다.

  • auth → 로그인, OAuth
  • user → 사용자
  • project → 프로젝트
  • admin → 관리자 기능
  • image → 이미지 관련 기능

global

여러 도메인에서 공통으로 사용하는 인프라 코드가 들어간다.

  • config → Spring 및 외부 서비스 설정
  • security → Spring Security, JWT
  • exception → 예외 처리
  • ratelimit → 요청 제한
  • discord → Discord 알림
  • thirdparty → 외부 서비스 연동

DTO 구조

dto/
├─ common
├─ request
└─ response
  • common → 공통 DTO
  • request → API 요청 DTO
  • response → API 응답 DTO

Project

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은 두 가지 용도로 사용한다.

  • OAuth → 학생 로그인 및 사용자 확인
  • OpenAPI → 프로젝트 데이터 조회 및 동기화

프로젝트는 스케줄러를 통해 주기적으로 DataGSM과 동기화된다.

DataGSM
   ↓
프로젝트 조회
   ↓
EveryGSM DB와 비교
   ↓
있으면 수정 / 없으면 생성

DataGSM에서 사라진 프로젝트는 INACTIVE 처리한다.

0개의 댓글