Skip to content

evencoding/onmeet-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,028 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ONMEET Backend

B2B 화상 회의 + AI 요약 + 알림 서비스 (MSA w/ Spring Boot 3 & Kotlin)

Current Version: v0.4.9 | Deployed: api.onmeet.cloud

🏗 기술 스택 (Tech Stack)

Core

  • Language: Kotlin (Auth/Gateway), Java (AI/Video/Notification/Email), Go (File)
  • Framework: Spring Boot 3.3.5, Spring Cloud 2023.x, Gin (Go)
  • Build Tool: Gradle (Kotlin DSL), Go Modules
  • Shared Libraries: onmeet-common, common-security (Kotlin)

아키텍처 및 통신 (Architecture & Communication)

  • Architecture: 마이크로서비스 아키텍처 (MSA)
  • Gateway: Spring Cloud Gateway (WebFlux)
  • Communication: REST API, Kafka (이벤트 기반)
  • Database: MySQL 9.0 (대부분), PostgreSQL 16 (File Service), Redis (인증/캐싱)
  • File Storage: MinIO (S3 호환) + Nginx 프록시 서빙
  • Deployment: GCP VM (e2-standard-4) + Docker Compose + GitHub Actions CI/CD
  • DNS/CDN: Cloudflare (DNS 프록시, Pages)

⚡ 성능 최적화 (Performance Optimization)

📊 정량적 개선 지표 (Quantitative Metrics)

항목 (Metric) 이전 (Kotlin/Spring) 이후 (Go/Gin) 개선율 (Improvement)
빌드 속도 (Build Time) 31.5s 8.5s (Gradle 캐시 적용 시) 73% 단축
이미지 크기 (Image Size) ~450MB ~25MB 94% 감소
메모리 점유 (Memory) ~512MB (JVM 최소) ~20MB 96% 감소
API 응답 (Health Check) 10ms ~ 50ms 39µs ~ 300µs 약 100배 이상 빨라짐
파일 처리 방식 Blocking/Thread-pool Goroutine 기반 비동기 동시 처리 용량 대폭 상승
데이터베이스 (DB) MySQL 9.0 PostgreSQL 16 (JSONB) 유연한 메타데이터 구조 확보
  • Gradle 빌드 최적화: Parallel Build, Configuration Cache 적용 (기본 31.5s -> 8.5s로 약 73% 개선)
  • Google Jib 도입: Dockerfile 없이 변경된 레이어만 효율적으로 빌드하여 이미지 생성 시간을 혁신적으로 단축
  • Go & PostgreSQL 전환: I/O 집약적인 file-service를 Go로 전환하고, PostgreSQL JSONB를 통해 비정형 메타데이터를 효율적으로 관리합니다.
  • Cache: Redis (인증, 세션 관리)

보안 (Security)

  • Authentication: JWT (Access/Refresh Token) + Cookie (HttpOnly)
  • Authorization: 역할 기반 접근 제어 (Admin, User)

🚀 서비스 목록 (Services)

서비스 (Service) 포트 (Port) 언어 (Language) 설명 (Description) DB
Gateway Service 8080 Kotlin API 진입점, 라우팅, JWT 검증 -
Auth Service 8081 Kotlin 사용자 인증, 토큰 관리, 팀/기업 관리 MySQL, Redis
AI Service 8082 Java AI 요약 생성 (STT/LLM) MySQL
Video Service 8083 Java 화상 회의 관리, WebRTC 시그널링 MySQL
Notification Service 8085 Java 실시간 알림 (SSE) MySQL
File Service 8086 Go 파일 업로드/다운로드, S3, 프로필 이미지 PostgreSQL
Email Service 8087 Java 이메일 발송 (Gmail SMTP OAuth2) -

참고: File Service는 성능 최적화를 위해 Kotlin에서 Go로 전환되었으며, 약 100배 이상 빠른 API 응답 속도를 달성했습니다.


📚 문서 (Documentation)

서비스별 API 명세서

가이드 문서


🛠 시작하기 (Getting Started)

필수 요구사항 (Prerequisites)

  • JDK 21 이상
  • Docker & Docker Compose

Docker Compose로 실행 (권장)

최신 빌드 방식(Jib)이 적용되어, 이미지 빌드 후 실행해야 합니다.

# 1. Docker 이미지 빌드 (Jib) - 약 30초 소요
./gradlew jibDockerBuild --parallel

# 2. 전체 서비스 실행 (이미지 Pull 없이 로컬 이미지 사용)
docker compose up -d

# 3. 로그 확인
docker compose logs -f auth-service gateway-service

부분 실행 (Partial Execution)

특정 서비스만 실행할 때도 이미지 빌드가 선행되어야 합니다.

# 1. 특정 서비스만 빌드 (예: Auth Service)
./gradlew :auth-service:jibDockerBuild

# 2. 필요한 서비스 실행 (의존성 포함 자동 실행)
docker compose up -d gateway-service auth-service

로컬에서 실행 (Local / IntelliJ)

IntelliJ에서 개발할 때는 인프라만 Docker로 띄우고, 서비스는 IDE에서 실행하는 것이 디버깅에 유리합니다.

1. 기반 인프라 실행 데이터베이스, Kafka, Redis 등 필수 인프라를 실행합니다.

docker compose up -d mysql-auth redis-auth kafka zookeeper mysql-ai mysql-video mysql-notification postgres-file

2. 서비스 실행 (IntelliJ)

  • 프로젝트 창에서 각 서비스의 Application.kt (예: AuthApplication.kt)를 우클릭하여 **Run 'AuthApplication'**을 선택합니다.
  • 환경 변수(EnvFile 플러그인 또는 Run Configuration)가 필요한 경우 설정합니다.

3. (선택) IntelliJ에서 Docker 이미지 빌드 터미널 명령어 대신 IDE UI를 사용할 수 있습니다.

  • 우측 Gradle 탭 > Tasks > jib > jibDockerBuild 더블 클릭

⚙️ 환경 설정 (Configuration)

이 프로젝트는 민감한 정보와 환경별 설정을 위해 **환경 변수(Environment Variables)**를 사용합니다. application.yml의 기본값은 로컬 개발 환경에 맞춰져 있습니다.

주요 환경 변수

루트 디렉토리에 .env 파일을 생성하여 관리할 수 있습니다. (로컬 개발 시 선택 사항)

# 전역 설정
SERVER_PORT=8080
SPRING_PROFILES_ACTIVE=local

# 보안 (Security)
JWT_SECRET_KEY=your-secret-key-must-be-long-enough
AUTH_ENCRYPTION_KEY=encryption-key
GATEWAY_SHARED_SECRET=shared-secret-for-internal-auth

# 쿠키 설정
COOKIE_SAMESITE=Lax          # 크로스사이트 환경(프로덕션)에서는 None으로 설정
COOKIE_SECURE=true

# 데이터베이스 (전역 또는 서비스별)
DB_ROOT_PASSWORD=root
DB_USERNAME=root

# AWS (S3/CloudFront - file-service)
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...

# Gmail OAuth2 (email-service)
GMAIL_CLIENT_ID=...
GMAIL_CLIENT_SECRET=...
GMAIL_REFRESH_TOKEN=...
SPRING_MAIL_USERNAME[email protected]

🔗 엔드포인트 및 API 명세 (Endpoints & API Reference)

각 서비스의 상세한 API 명세는 아래 링크 및 Swagger UI를 참조하세요.

서비스 (Service) 경로 접두사 (Path Prefix) API 명세서 (Reference) Swagger UI
Gateway / GATEWAY_ROUTES.md Link
Auth /auth/** API_REFERENCE.md Link
AI /ai/** API_REFERENCE.md Link
Video /video/** API_REFERENCE.md Link
Notification /notification/** API_REFERENCE.md Link
File /file/** API_REFERENCE.md Link
Email /email/v1/** API_REFERENCE.md -

상태 확인 (Health Check)

  • GET /actuator/health (모든 서비스 공통)

📋 릴리즈 노트 (Release Notes)

v0.4.9 (2026-03-22)

  • fix(auth): 비밀번호 변경 500 에러 수정 (DTO 필드명 불일치)
  • fix(gateway): 비밀번호 찾기 API 화이트리스트 추가
  • fix(video): 회의 생성/예약 500 에러 수정 (@EnableJpaAuditing 누락, auth URL config 키 수정)
  • fix(notification): actuator 경로 이중화 해소, Gateway 라우트 추가
  • fix(notification): 미읽음 알림 수 응답을 타입별 분류 Map으로 변경

v0.4.0 (2026-03-15)

  • 전 서비스 응답 포맷 통일 ({ success: true, data: T })
  • GCP VM 업그레이드 (e2-standard-4)

v0.3.0

  • AI 회의록 요약 기능
  • STT 연동

v0.2.0

  • 화상 회의 기능 (LiveKit WebRTC)
  • 실시간 채팅

v0.1.0

  • 초기 MVP (인증, 기업/팀 관리)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors