Skip to content

On-Survey/Backend

Repository files navigation

ONSURVEY BACKEND REPOSITORY


1. ν”„λ‘œμ νŠΈ κ°œμš”

ν•­λͺ© λ‚΄μš©
ν”„λ‘œμ νŠΈλͺ… ON SURVEY
μ£Όμš” 기술 Java 21, Spring Boot 3, Spring JPA, QueryDSL, Redis, MySQL

2. μ£Όμš” DOMAIN

DOMAIN μ„€λͺ…
FORM μ„€λ¬Έ 생성 및 μˆ˜μ •
MEMBER μ‚¬μš©μž 정보 관리
MANAGEMENT μ„€λ¬Έ 관리 및 집계
PARTICIPATION μ„€λ¬Έ μ°Έμ—¬
PAYMENT 결제
λ©±λ“±μ„± & λΆ„μ‚° 락 PromotionGrant + Redis 락으둜 쀑볡 μ§€κΈ‰ λ°©μ§€

3. ν”„λ‘œμ νŠΈ ꡬ쑰 (μˆ˜μ • 쀑)

Backend/
β”œβ”€ src/
β”‚  └─ main/
β”‚     β”œβ”€ java/OneQ/OnSurvey/
β”‚     β”‚  β”œβ”€ domain/
β”‚     β”‚  β”‚  β”œβ”€ form/                        # μ„€λ¬Έ 생성 및 μˆ˜μ •
β”‚     β”‚  β”‚  β”‚  β”œβ”€ api/  
β”‚     β”‚  β”‚  β”‚  β”‚  β”œβ”€ FormController
β”‚     β”‚  β”‚  β”‚  β”‚  └─ dto/
β”‚     β”‚  β”‚  β”‚  β”‚     β”œβ”€ request/
β”‚     β”‚  β”‚  β”‚  β”‚     β”œβ”€ response/
β”‚     β”‚  β”‚  β”‚  β”‚     └─ DefaultSurveyDto
β”‚     β”‚  β”‚  β”‚  β”œβ”€ application/
β”‚     β”‚  β”‚  β”‚  β”‚  β”œβ”€ SurveyService
β”‚     β”‚  β”‚  β”‚  β”‚  └─ QuestionService
β”‚     β”‚  β”‚  β”‚  β”œβ”€ domain/
β”‚     β”‚  β”‚  β”‚  β”‚  β”œβ”€  model/                # 도메인 μ—”ν‹°ν‹° (POJO)
β”‚     β”‚  β”‚  β”‚  β”‚  β”‚  β”œβ”€ Survey
β”‚     β”‚  β”‚  β”‚  β”‚  β”‚  └─ Question
β”‚     β”‚  β”‚  β”‚  β”‚  └─  repository/
β”‚     β”‚  β”‚  β”‚  β”‚     β”œβ”€ SurveyRepository
β”‚     β”‚  β”‚  β”‚  β”‚     └─ QuestionRepository
β”‚     β”‚  β”‚  β”‚  └─ infra/
β”‚     β”‚  β”‚  β”‚     β”œβ”€ entity/                # μ˜μ†μ„± μ—”ν‹°ν‹° (@Entity)
β”‚     β”‚  β”‚  β”‚     β”‚  β”œβ”€ SurveyEntity
β”‚     β”‚  β”‚  β”‚     β”‚  β”œβ”€ QuestionEntity
β”‚     β”‚  β”‚  β”‚     β”‚  └─ ScreeningEntity
β”‚     β”‚  β”‚  β”‚     β”œβ”€ mapper/                # POJO <-> JpaEntity 컨버터
β”‚     β”‚  β”‚  β”‚     └─ jpa/
β”‚     β”‚  β”‚  β”‚        └─ SurveyJpaRepository
β”‚     β”‚  β”‚  β”œβ”€ management/                  # μ„€λ¬Έ 관리 및 집계
β”‚     β”‚  β”‚  β”œβ”€ member/                      # μ‚¬μš©μž 관리
β”‚     β”‚  β”‚  └─ participation/               # μ„€λ¬Έ μ°Έμ—¬
β”‚     β”‚  └─ global/                         # 곡유 μ„€μ •
β”‚     β”‚     β”œβ”€ annotation/
β”‚     β”‚     β”œβ”€ auth/
β”‚     β”‚     β”œβ”€ config/
β”‚     β”‚     β”œβ”€ entity/
β”‚     β”‚     β”œβ”€ exception/
β”‚     β”‚     β”œβ”€ handler/
β”‚     β”‚     β”œβ”€ infra/
β”‚     β”‚     β”œβ”€ response/
β”‚     β”‚     └─ util/
β”‚     └─ resources/
β”‚        └─ application.yml                 # ν™˜κ²½ μ„€μ •
β”œβ”€ build.gradle
β”œβ”€ Dockerfile
β”œβ”€ docker-compose.yml
└─ README.md

4. 배포·운영

Docker 이미지

# JAR 파일 λΉŒλ“œ (Gradle)
./gradlew bootJar

# 이미지 생성
docker build -t yourrepo/yourproject:latest .

4. ν…ŒμŠ€νŠΈ

ν…ŒμŠ€νŠΈ μ’…λ₯˜ μ‹€ν–‰ λͺ…λ Ή λΉ„κ³ 
λ‹¨μœ„ ν…ŒμŠ€νŠΈ ./gradlew test JUnit 5 + Mockito
톡합 ν…ŒμŠ€νŠΈ ./gradlew integrationTest (ν”„λ‘œμ νŠΈμ— μ •μ˜) Testcontainers 둜 μ‹€μ œ DB ꡬ동
컀버리지 λ³΄κ³ μ„œ ./gradlew jacocoTestReport build/reports/jacoco/test/html/index.html 확인

5. λ©±λ“±μ„± & λΆ„μ‚° 락 (Promotion)

ν† μŠ€ ν”„λ‘œλͺ¨μ…˜ 포인트 지급은 λ‹€μŒ μ‘°ν•©μœΌλ‘œ 쀑볡 지급을 λ°©μ§€ν•©λ‹ˆλ‹€.

  • DB μœ λ‹ˆν¬ μ œμ•½ + 낙관적 락 기반 λ©±λ“± 처리
  • Redis 기반 λΆ„μ‚° 락
  • ν† μŠ€ API μž¬μ‹œλ„ 및 κ²°κ³Ό 폴링
  • 포인트 μ§€κΈ‰ μ—¬λΆ€ ν”Œλž˜κ·Έ

5.1 PromotionGrant 기반 λ©±λ“± 처리

  • μ—”ν‹°ν‹°: promotion_grant
  • μœ λ‹ˆν¬ μ œμ•½ (1 μœ μ € Β· 1 μ„€λ¬Έ Β· 1 μ½”λ“œλ‹Ή 1건)
    • user_key, survey_id, promotion_code

μš”μ•½

μ„Ήμ…˜ 핡심 λ‚΄μš©
λ ˆν¬μ§€ν† λ¦¬ κ°œμš” Java 21 + Spring Boot 3 기반 λ°±μ—”λ“œ μ„œλ²„
μ£Όμš” 도메인 μ„€λ¬Έ 생성, 관리, μ°Έμ—¬ / μ‚¬μš©μž 및 결제 관리
ꡬ쑰 Bounded Contextλ₯Ό 기반으둜 ν•œ 도메인 뢄리
배포 Dockerfile, docker‑compose, GitHub Actions

About

πŸŒŠπŸ“’ OnSurvey Server πŸ“’πŸŒŠ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •