Skip to content

Latest commit

Β 

History

126 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

irummate (이룸맀이트)

μ„€λ¬Έ 기반 λΌμ΄ν”„μŠ€νƒ€μΌ μœ μ‚¬λ„ 맀칭으둜 κΈ°μˆ™μ‚¬ λ£Έλ©”μ΄νŠΈλ₯Ό μ°Ύμ•„μ£ΌλŠ” μ„œλΉ„μŠ€

irummateλŠ” 학생듀이 μƒν™œ μŠ΅κ΄€ 섀문에 μ‘λ‹΅ν•˜λ©΄, 응닡을 λ²‘ν„°λ‘œ λ³€ν™˜ν•΄ κ°€μž₯ 잘 λ§žλŠ” λ£Έλ©”μ΄νŠΈ 후보λ₯Ό μΆ”μ²œν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. κΈ°μˆ™μ‚¬ 인증을 ν†΅κ³Όν•œ μž¬ν•™μƒλ§Œ μ°Έμ—¬ν•  수 μžˆμ–΄ μ‹ λ’°ν•  수 μžˆλŠ” λ§€μΉ­ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

λ³Έ μ €μž₯μ†ŒλŠ” λ°±μ—”λ“œ μ„œλ²„μž…λ‹ˆλ‹€.


λͺ©μ°¨


μ£Όμš” κΈ°λŠ₯

κΈ°λŠ₯ μ„€λͺ…
카카였 μ†Œμ…œ 둜그인 카카였 OAuth 인증 ν›„ JWT μ•‘μ„ΈμŠ€Β·λ¦¬ν”„λ ˆμ‹œ 토큰 λ°œκΈ‰
κΈ°μˆ™μ‚¬ 인증 S3 presigned URL둜 인증 사진을 μ—…λ‘œλ“œν•˜κ³  κ΄€λ¦¬μžκ°€ 승인·반렀
μƒν™œ μŠ΅κ΄€ μ„€λ¬Έ 9개 λ¬Έν•­ 응닡을 μ •κ·œν™”λœ 9차원 λΌμ΄ν”„μŠ€νƒ€μΌ λ²‘ν„°λ‘œ λ³€ν™˜
λ£Έλ©”μ΄νŠΈ λ§€μΉ­ pgvector 기반 μœ μ‚¬λ„ κ²€μƒ‰μœΌλ‘œ 후보 3λͺ… μΆ”μ²œ, ν•˜λ£¨ 1회 μ œν•œ
μƒν˜Έ 수락 및 μ±„νŒ… 양츑이 μˆ˜λ½ν•˜λ©΄ μ±„νŒ…λ°©μ΄ κ°œμ„€λ˜κ³  WebSocket으둜 μ‹€μ‹œκ°„ λŒ€ν™”
κ΄€λ¦¬μž κΈ°λŠ₯ 인증 심사, νšŒμ› 쑰회 및 μ •μ§€, λ§€μΉ­ κΈ°κ°„ μ„€μ •

기술 μŠ€νƒ

μ–Έμ–΄ 및 ν”„λ ˆμž„μ›Œν¬

  • Java 21
  • Spring Boot 3.5.11
  • Spring Security, Spring Data JPA, Spring WebSocket(STOMP)
  • Spring AOP, Bean Validation

λ°μ΄ν„°λ² μ΄μŠ€

  • PostgreSQL + pgvector (벑터 μœ μ‚¬λ„ 검색)
  • Hibernate Vector, QueryDSL

인증 및 λ³΄μ•ˆ

  • 카카였 OAuth 2.0
  • JWT (jjwt)
  • Hashids (μ™ΈλΆ€ λ…ΈμΆœμš© ID λ‚œλ…ν™”)

인프라

  • AWS EC2, RDS(PostgreSQL), S3
  • Docker, Docker Compose, Nginx
  • GitHub Actions + GHCR + AWS SSM

λ¬Έμ„œν™”

  • SpringDoc OpenAPI (Swagger UI)

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚ GitHub main  β”‚ ──▢ β”‚  GitHub Actions  β”‚ ──▢ β”‚   GHCR   β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜
                                                                     β”‚
                                                    SSM 배포 Β· 이미지 pull
                                                                     β”‚
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    ╔═══════════════ AWS Cloud (ap-northeast-2) ══════β•ͺ═════════╗
   β”‚          β”‚    β•‘  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ VPC ─────────────────────────┐ β”‚         β•‘
   β”‚  μ‚¬μš©μž   β”‚ ──▢║  β”‚  β”Œβ”€β”€β”€ EC2 (t3.medium) ───────┐            β”‚ β–Ό         β•‘
   β”‚  μ•± Β· μ›Ή  β”‚    β•‘  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β•‘
   β”‚          β”‚    β•‘  β”‚  β”‚  β”‚ Nginx (ν”„λ‘μ‹œΒ·TLS)   β”‚  β”‚   β”‚  RDS PostgreSQL  β”‚ β•‘
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β•‘  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚   β”‚ pgvectorΒ·t4g.smallβ”‚ β•‘
                   β•‘  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β•‘
                   β•‘  β”‚  β”‚  β”‚ Spring Boot (Docker)│──┼──▢          β–²          β•‘
                   β•‘  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚             β”‚          β•‘
                   β•‘  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜             β”‚          β•‘
                   β•‘  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β•‘      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β•‘
                   β•‘      β”‚  S3 (κΈ°μˆ™μ‚¬ 인증 사진)    β”‚                          β•‘
                   β•‘      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β•‘
                   β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
  • EC2 단일 μΈμŠ€ν„΄μŠ€μ—μ„œ Nginx와 Spring Boot μ»¨ν…Œμ΄λ„ˆκ°€ Docker Compose둜 μ‹€ν–‰λ©λ‹ˆλ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 포트(8080)λŠ” 127.0.0.1μ—λ§Œ λ°”μΈλ”©λ˜μ–΄ μ™ΈλΆ€μ—μ„œ 직접 μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • λ°°ν¬λŠ” SSHκ°€ μ•„λ‹Œ AWS SSM Run Command둜 이루어져 22번 포트λ₯Ό μ—΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • S3λŠ” VPC λ°–μ˜ 리전 λ‹¨μœ„ μ„œλΉ„μŠ€λ‘œ, presigned URL을 톡해 ν΄λΌμ΄μ–ΈνŠΈκ°€ 직접 μ—…λ‘œλ“œν•©λ‹ˆλ‹€.

λ§€μΉ­ μ•Œκ³ λ¦¬μ¦˜

1. μ„€λ¬Έ 응닡을 λ²‘ν„°λ‘œ λ³€ν™˜

μ‚¬μš©μžκ°€ 9개 λ¬Έν•­(μ·¨μΉ¨ μ‹œκ°„, 코골이, μž κΌ¬λŒ€, 정리 μŠ΅κ΄€, μ‹€λ‚΄ 취식, μ˜¨λ„ μ„ ν˜Έ, μƒ€μ›Œ λΉˆλ„, μŠ€ν”Όμ»€ μ‚¬μš©, 톡화 μŠ΅κ΄€)에 μ‘λ‹΅ν•˜λ©΄, 각 값을 [0, 1] κ΅¬κ°„μœΌλ‘œ μ •κ·œν™”ν•˜μ—¬ 9차원 λ²‘ν„°λ‘œ μ €μž₯ν•©λ‹ˆλ‹€. λ³€ν™˜μ€ μ—”ν‹°ν‹° μ €μž₯ μ‹œμ μ— μžλ™μœΌλ‘œ μˆ˜ν–‰λ©λ‹ˆλ‹€.

answers (jsonb) ──▢ normalize ──▢ lifestyle_vector (vector(9))

2. 후보 검색

λ§€μΉ­ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ λ‹€μŒ μˆœμ„œλ‘œ 후보λ₯Ό ν™•λ³΄ν•©λ‹ˆλ‹€.

  1. κΈ°μ‘΄ μΆ”μ²œ μž¬ν™œμš© β€” 이미 λ°œκΈ‰ν–ˆμ§€λ§Œ 아직 μ‘λ‹΅ν•˜μ§€ μ•Šμ€ 후보λ₯Ό μš°μ„  쑰회
  2. μ‹ κ·œ μΆ”μ²œ β€” λΆ€μ‘±ν•œ μΈμ›λ§ŒνΌ pgvector μœ μ‚¬λ„ κ²€μƒ‰μœΌλ‘œ 보좩

μ‹ κ·œ μΆ”μ²œ μΏΌλ¦¬λŠ” 동일 성별, μ„€λ¬Έ μ™„λ£Œ, λ―Έλ§€μΉ­ μƒνƒœμ˜ μ‚¬μš©μž 쀑 이미 λ§€μΉ­ 이λ ₯이 μžˆλŠ” μƒλŒ€λ₯Ό μ œμ™Έν•œ λ’€, L2 거리(<->) κΈ°μ€€μœΌλ‘œ κ°€μž₯ κ°€κΉŒμš΄ 3λͺ…을 μ„ νƒν•©λ‹ˆλ‹€. 흑연 μ—¬λΆ€κ°€ μΌμΉ˜ν•˜λŠ” 후보λ₯Ό μš°μ„  κ²€μƒ‰ν•˜κ³ , 인원이 λΆ€μ‘±ν•˜λ©΄ 흑연 쑰건을 μ™„ν™”ν•΄ μž¬κ²€μƒ‰ν•©λ‹ˆλ‹€.

3. λ§€μΉ­ μš”μ²­ 생성 및 ν™•μ •

μ„ νƒλœ 후보에 λŒ€ν•΄ match_requests λ ˆμ½”λ“œλ₯Ό μƒμ„±ν•˜λ©°, μ΄λ•Œ κ³„μ‚°λœ λ§€μΉ­λ₯ μ„ μ»¬λŸΌμ— μŠ€λƒ…μƒ·μœΌλ‘œ μ €μž₯ν•©λ‹ˆλ‹€. 양츑이 λͺ¨λ‘ μˆ˜λ½ν•˜λ©΄ μ±„νŒ…λ°©μ΄ κ°œμ„€λ˜κ³  μ—°λ½μ²˜κ°€ κ³΅κ°œλ©λ‹ˆλ‹€.

μ°Έκ³ : μ„€λ¬Έ μˆ˜μ •μ€ λ§€μΉ­ μ‹œμž‘μΌ μ΄μ „κΉŒμ§€λ§Œ ν—ˆμš©λ©λ‹ˆλ‹€. λ§€μΉ­ μ‹œμž‘ μ΄ν›„μ—λŠ” 이미 λ°œκΈ‰λœ λ§€μΉ­λ₯ κ³Ό μ‹€μ œ 벑터가 μ–΄κΈ‹λ‚˜μ§€ μ•Šλ„λ‘ μˆ˜μ •μ΄ μ œν•œλ©λ‹ˆλ‹€.

4. 리둀 μ œν•œ

rerolled_at μ»¬λŸΌμ„ 톡해 ν•˜λ£¨ 1회만 μƒˆλ‘œμš΄ μΆ”μ²œμ„ 받을 수 μžˆλ„λ‘ μ œν•œν•©λ‹ˆλ‹€.


인증 및 인가 ꡬ쑰

μš”μ²­μ€ 두 λ‹¨κ³„λ‘œ κ²€μ¦λ©λ‹ˆλ‹€.

1단계 β€” Spring Security ν•„ν„° 체인

JwtAuthenticationFilterκ°€ UsernamePasswordAuthenticationFilter μ•žμ—μ„œ λ™μž‘ν•˜λ©°, Bearer 토큰을 κ²€μ¦ν•˜κ³  userIdλ₯Ό SecurityContext에 μ €μž₯ν•©λ‹ˆλ‹€. μ„Έμ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” stateless κ΅¬μ„±μž…λ‹ˆλ‹€.

2단계 β€” AOP 기반 λ©”μ„œλ“œ λ‹¨μœ„ κ°€λ“œ

ValidationAspectκ°€ μ•„λž˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ 감지해 λΉ„μ¦ˆλ‹ˆμŠ€ 쑰건을 사전 κ²€μ¦ν•©λ‹ˆλ‹€.

μ–΄λ…Έν…Œμ΄μ…˜ 검증 λ‚΄μš©
@RequiresAuth(roles = ...) 계정 μƒνƒœ 및 κΆŒν•œ(GUEST / USER / ADMIN) 확인
@RequiresCertification κΈ°μˆ™μ‚¬ 인증 μ™„λ£Œ(ACTIVE) μ—¬λΆ€ 확인
@RequiresSurvey μ„€λ¬Έ μž‘μ„± μ™„λ£Œ μ—¬λΆ€ 확인
@RequiresMatchDate ν˜„μž¬ λ‚ μ§œκ°€ λ§€μΉ­ κΈ°κ°„ 내인지 확인

이 ꡬ쑰 덕뢄에 컨트둀러 λ©”μ„œλ“œμ— μ–΄λ…Έν…Œμ΄μ…˜μ„ μ„ μ–Έν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ μ ‘κ·Ό 쑰건을 μ‘°ν•©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


ν”„λ‘œμ νŠΈ ꡬ쑰

도메인 쀑심(Domain-Driven) νŒ¨ν‚€μ§€ ꡬ쑰λ₯Ό λ”°λ¦…λ‹ˆλ‹€.

src/main/java/com/irummate/
β”œβ”€β”€ domain/
β”‚   β”œβ”€β”€ auth/            # 카카였 OAuth, 토큰 λ°œκΈ‰ 및 μž¬λ°œκΈ‰
β”‚   β”œβ”€β”€ user/            # νšŒμ› ν”„λ‘œν•„, 상세 정보, νƒˆν‡΄
β”‚   β”œβ”€β”€ certification/   # κΈ°μˆ™μ‚¬ 인증 제좜 및 쑰회
β”‚   β”œβ”€β”€ survey/          # μ„€λ¬Έ λ“±λ‘Β·μ‘°νšŒΒ·μˆ˜μ •, 벑터 λ³€ν™˜
β”‚   β”œβ”€β”€ matching/        # λ§€μΉ­ μ•Œκ³ λ¦¬μ¦˜, λ§€μΉ­ μš”μ²­, λ§€μΉ­ κΈ°κ°„ μ„€μ •
β”‚   β”œβ”€β”€ chat/            # μ±„νŒ…λ°©, λ©”μ‹œμ§€, WebSocket
β”‚   └── admin/           # 인증 심사, νšŒμ› 관리
β”‚       └── (각 도메인) controller / service / repository / entity / dto / util
└── global/
    β”œβ”€β”€ aop/             # κΆŒν•œΒ·μƒνƒœ 검증 μ–΄λ…Έν…Œμ΄μ…˜ 및 Aspect
    β”œβ”€β”€ jwt/             # 토큰 생성·검증 ν•„ν„°
    β”œβ”€β”€ s3/              # presigned URL λ°œκΈ‰, 객체 μ‚­μ œ
    β”œβ”€β”€ config/          # Security, WebSocket, Swagger μ„€μ •
    β”œβ”€β”€ exception/       # 곡톡 μ˜ˆμ™Έ 및 μ „μ—­ ν•Έλ“€λŸ¬
    β”œβ”€β”€ response/        # ν‘œμ€€ 응닡 포맷
    └── util/            # Hashids λ“± 곡톡 μœ ν‹Έ

μ‹œμž‘ν•˜κΈ°

사전 μš”κ΅¬μ‚¬ν•­

  • JDK 21
  • Docker / Docker Compose
  • PostgreSQL 16+ (pgvector ν™•μž₯ ν•„μš”)

1. μ €μž₯μ†Œ 클둠

git clone https://github.com/ALOC-dev/5th-project-yulgok-server-2026.git
cd 5th-project-yulgok-server-2026

2. ν™˜κ²½ λ³€μˆ˜ μ„€μ •

ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— .env νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€. (spring.config.import둜 μžλ™ λ‘œλ“œλ©λ‹ˆλ‹€.)

# Database
DB_URL=jdbc:postgresql://localhost:5432/irummate
DB_USERNAME=your_username
DB_PASSWORD=your_password

# Kakao OAuth
KAKAO_CLIENT_ID=your_client_id
KAKAO_CLIENT_SECRET=your_client_secret
KAKAO_REDIRECT_URI=http://localhost:8080/api/auth/kakao/callback
KAKAO_ADMIN_KEY=your_admin_key

# JWT
JWT_SECRET=your_jwt_secret_key
JWT_ACCESS_TOKEN_EXPIRATION=3600000
JWT_REFRESH_TOKEN_EXPIRATION=1209600000

# Hashids
HASHIDS_SALT=your_salt
HASHIDS_MIN_LENGTH=8

AWS 자격 증λͺ…은 EC2 μΈμŠ€ν„΄μŠ€ ν”„λ‘œνŒŒμΌ λ˜λŠ” 둜컬 AWS CLI 섀정을 톡해 μ£Όμž…λ©λ‹ˆλ‹€. S3 버킷과 리전은 application.properties에 μ •μ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

3. λ°μ΄ν„°λ² μ΄μŠ€ μ€€λΉ„

pgvector ν™•μž₯을 ν™œμ„±ν™”ν•©λ‹ˆλ‹€.

CREATE EXTENSION IF NOT EXISTS vector;

spring.jpa.hibernate.ddl-auto=validate μ„€μ •μ΄λ―€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μŠ€ν‚€λ§ˆκ°€ 미리 μ€€λΉ„λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

4. μ‹€ν–‰

# 둜컬 μ‹€ν–‰
./gradlew bootRun

# λ˜λŠ” Docker둜 μ‹€ν–‰
docker compose -f docker-compose.prod.yml up -d --build

5. API λ¬Έμ„œ 확인

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ν›„ Swagger UIμ—μ„œ 전체 APIλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

http://localhost:8080/swagger-ui/index.html

API κ°œμš”

λͺ¨λ“  응닡은 GlobalApiResponse 포맷으둜 ν†΅μΌλ˜μ–΄ 있으며, μ˜ˆμ™ΈλŠ” GlobalExceptionControllerμ—μ„œ 일괄 μ²˜λ¦¬λ©λ‹ˆλ‹€.

인증 /api/auth

λ©”μ„œλ“œ 경둜 μ„€λͺ…
GET /kakao/callback 카카였 둜그인 콜백, 토큰 λ°œκΈ‰
POST /refresh μ•‘μ„ΈμŠ€ 토큰 μž¬λ°œκΈ‰
POST /logout λ‘œκ·Έμ•„μ›ƒ
GET /status 둜그인 μƒνƒœ 쑰회

νšŒμ› /api/users

λ©”μ„œλ“œ 경둜 μ„€λͺ…
GET /me λ‚΄ ν”„λ‘œν•„ 쑰회
PATCH /me ν”„λ‘œν•„ μˆ˜μ •
POST /details 상세 정보 등둝
PATCH /details 상세 정보 μˆ˜μ •
DELETE /me νšŒμ› νƒˆν‡΄

κΈ°μˆ™μ‚¬ 인증 /api/certifications

λ©”μ„œλ“œ 경둜 μ„€λͺ…
GET /me 졜근 인증 μƒνƒœ 쑰회
POST /presigned-url μ—…λ‘œλ“œμš© presigned URL λ°œκΈ‰
POST / 인증 제좜

μ„€λ¬Έ /api/surveys

λ©”μ„œλ“œ 경둜 μ„€λͺ…
POST / μ„€λ¬Έ 제좜
GET /me λ‚΄ μ„€λ¬Έ 쑰회
PATCH /me μ„€λ¬Έ μˆ˜μ • (λ§€μΉ­ μ‹œμž‘ μ „κΉŒμ§€)

λ§€μΉ­ /api/matching

λ©”μ„œλ“œ 경둜 μ„€λͺ…
GET /status λ§€μΉ­ ν˜„ν™© 쑰회
POST /match λ§€μΉ­ 후보 μΆ”μ²œ (ν•˜λ£¨ 1회)
PATCH /requests ν•˜νŠΈ 전솑 λ˜λŠ” 거절
PATCH /requests/confirm λ§€μΉ­ ν™•μ •
GET /requests/{receiverId}/contact ν™•μ •λœ μƒλŒ€ μ—°λ½μ²˜ 쑰회

μ±„νŒ… /api/chat

λ©”μ„œλ“œ 경둜 μ„€λͺ…
GET /rooms μ±„νŒ…λ°© λͺ©λ‘
GET /rooms/{roomId}/messages λ©”μ‹œμ§€ λͺ©λ‘
PATCH /rooms/{roomId}/read 읽음 처리
GET /unread-count μ•ˆ 읽은 λ©”μ‹œμ§€ 수

μ‹€μ‹œκ°„ λ©”μ‹œμ§€ 전솑은 WebSocket(STOMP)의 /chat/send λͺ©μ μ§€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

κ΄€λ¦¬μž /api/admin

λ©”μ„œλ“œ 경둜 μ„€λͺ…
GET /certifications 인증 λͺ©λ‘ 쑰회 (νŽ˜μ΄μ§€λ‹Ή 15건)
GET /certifications/{id} 인증 상세 쑰회 (이미지 URL 포함)
PATCH /certifications/{id}/approve 인증 승인
PATCH /certifications/{id}/reject 인증 반렀
GET /users νšŒμ› λͺ©λ‘ 쑰회
GET /users/{userId} νšŒμ› 상세 쑰회
PATCH /users/{userId}/ban νšŒμ› μ •μ§€
PATCH /users/{userId}/unban μ •μ§€ ν•΄μ œ
GET /match/config λ§€μΉ­ κΈ°κ°„ 쑰회
PATCH /match/config λ§€μΉ­ κΈ°κ°„ μ„€μ •

배포

main λΈŒλžœμΉ˜μ— ν‘Έμ‹œλ˜λ©΄ GitHub Actionsκ°€ μžλ™μœΌλ‘œ 배포λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

push (main)
   └─▢ Gradle λΉŒλ“œ
        └─▢ Docker 이미지 λΉŒλ“œ 및 GHCR ν‘Έμ‹œ (latest, commit SHA)
             └─▢ AWS SSM Run Command둜 EC2에 배포
                  └─▢ 이미지 pull 및 μ»¨ν…Œμ΄λ„ˆ μž¬μ‹œμž‘

ν•„μš”ν•œ GitHub Secrets

이름 μ„€λͺ…
AWS_ACCESS_KEY_ID 배포용 IAM μ‚¬μš©μž μ•‘μ„ΈμŠ€ ν‚€
AWS_SECRET_ACCESS_KEY 배포용 IAM μ‚¬μš©μž μ‹œν¬λ¦Ώ ν‚€
EC2_INSTANCE_ID λŒ€μƒ EC2 μΈμŠ€ν„΄μŠ€ ID

SSH 접속 없이 SSM을 톡해 λ°°ν¬ν•˜λ―€λ‘œ λ³΄μ•ˆ 그룹에 22번 포트λ₯Ό μ—΄μ–΄λ‘˜ ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.


λΌμ΄μ„ μŠ€

νŒ€

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages