Skip to content

seohyun27/breadcast-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

366 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🍞 breadcast - Server (λΉ΅μ§€μˆœλ‘€ 지도 μ„œλΉ„μŠ€)

main image

"μ‰½κ²Œ ν•˜λ‚˜λ‘œ λͺ¨μ—¬μžˆλŠ” λΉ΅ λ§›μ§‘ 정보, λΉ΅μ§€μˆœλ‘€"
λΉ΅μ§‘ 리뷰 곡유 및 λ‚˜λ§Œμ˜ λΉ΅μ§€μˆœλ‘€ 루트λ₯Ό κΈ°λ‘ν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€.

πŸ“… ν”„λ‘œμ νŠΈ κ°œμš”

  • μ§„ν–‰ κΈ°κ°„: 2025.09 ~ 2025.12 (μ•½ 3κ°œμ›”)
  • 인원: λ°±μ—”λ“œ 3λͺ…, ν”„λ‘ νŠΈμ—”λ“œ 3λͺ… (총 6λͺ…)

πŸ”— Project Repositories

πŸš€ Demo

ν˜„μž¬ AWS λΉ„μš© 문제둜 배포 μ„œλ²„λŠ” μ€‘λ‹¨λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ μ‹œμ—° μ˜μƒμœΌλ‘œ μ£Όμš” κΈ°λŠ₯을 ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.
πŸ“Ί μ‹œμ—° μ˜μƒ 링크

πŸ› οΈ Tech Stack & Decision

μ‚¬μš© 기술과 ν•΄λ‹Ή κΈ°μˆ μ„ μ„ μ •ν•œ μ΄μœ μž…λ‹ˆλ‹€.

Category Stack Version μ„ μ • 이유
Language Java 21 μ΅œμ‹  LTS λ²„μ „μ˜ μ•ˆμ •μ„±κ³Ό μ‹ κΈ°λŠ₯ ν•™μŠ΅ λͺ©μ 
Framework Spring Boot 3.5.4 λΉ λ₯΄κ³  μ•ˆμ •μ μΈ REST API μ„œλ²„ ꡬ좕
Database MySQL 8.0 지리 정보(μ’Œν‘œ) μ €μž₯ 및 νŠΈλžœμž­μ…˜ 관리에 용이
Infra AWS EC2 / S3 - 이미지 파일의 효율적 관리 및 ν™•μž₯μ„± κ³ λ €
CI/CD GitHub Actions - 반볡적인 배포 μž‘μ—… μžλ™ν™”

Java Spring Boot Spring Security Spring Data JPA MySQL AWS S3

πŸ›οΈ System Architecture

architecture image

πŸ’Ύ Domain Diagram

domain diagram image

πŸ’Ύ ERD

ERD image

⚑ Key Features (핡심 κΈ°λŠ₯)

key features image

πŸ‘¨β€πŸ’» Contributors & Roles (νŒ€μ› 및 μ—­ν• )

Backend Team

이름 μ—­ν•  λ‹΄λ‹Ή 업무 GitHub
κΉ€μ„œν˜„ Leader β€’ 전체 ν”„λ‘œμ νŠΈ 일정 관리 및 회의 주재
β€’ DB μŠ€ν‚€λ§ˆ 섀계 및 JPA μ—”ν‹°ν‹° λ§€ν•‘ 총괄
β€’ API 응닡 및 μ—λŸ¬ 처리 κ·œκ²©ν™”
GitHub
κΉ€μ„œμ—° Core Dev β€’ Swagger UI 연동
β€’ μ‚¬μš©μž 인증/인가 κ΅¬ν˜„ (Spring Security)
β€’ GitHub Actions 기반 CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕
GitHub
박세은 Core Dev β€’ μ£Όμš” λ„λ©”μΈμ˜ 핡심 둜직 κ΅¬ν˜„
β€’ μ„œλΉ„μŠ€ 계측 λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
β€’ API 연동 ν…ŒμŠ€νŠΈ 및 버그 ν”½μŠ€
GitHub

Frontend Team

이름 μ—­ν•  λ‹΄λ‹Ή 업무 GitHub
κΉ€ν˜„μ§€ Frontend β€’ FE ν™˜κ²½ ꡬ좕 및 κΈ°λŠ₯ κ΅¬ν˜„ GitHub
λ…Έμ€μž¬ Frontend β€’ API ν΄λΌμ΄μ–ΈνŠΈ ꡬ좕 및 배포 GitHub
이지원 Frontend β€’ λ°±μ—”λ“œ API μ—°κ²° 및 κΈ°λŠ₯ κ΅¬ν˜„ GitHub

πŸ™‹β€β™€οΈ My Contribution

  • ν”„λ‘œμ νŠΈ 총괄 및 λ°±μ—”λ“œ 리딩

    • 전체 일정 관리 및 회의 μ£Όκ΄€
    • μ„œλΉ„μŠ€ 전체 흐름(μš”κ΅¬μ‚¬ν•­ β†’ API β†’ DB) 섀계
  • DB & 도메인 섀계

    • 핡심 도메인 DB μŠ€ν‚€λ§ˆ 섀계
    • JPA μ—”ν‹°ν‹° λ§€ν•‘ κΈ°μ€€ μ •μ˜ 및 연관관계 섀계
  • API ꡬ쑰 섀계 및 곡톡화

    • API 응닡 ꡬ쑰 ν‘œμ€€ν™” (ApiResponse)
    • μ „μ—­ μ˜ˆμ™Έ 처리(Global Exception Handler) κ΅¬ν˜„
    • μ—λŸ¬ μ½”λ“œ 체계 μ„€κ³„λ‘œ ν΄λΌμ΄μ–ΈνŠΈ μ˜ˆμ™Έ 처리 λ‹¨μˆœν™”
  • μ•„ν‚€ν…μ²˜ 및 ν˜‘μ—… ν™˜κ²½ ꡬ좕

    • νŒ¨ν‚€μ§€ ꡬ쑰 섀계 및 Base Controller/Entity ν…œν”Œλ¦Ών™”
    • GitHub λ ˆν¬μ§€ν† λ¦¬ 및 ν˜‘μ—… κ·œμΉ™ 관리
    • Gradle μ˜μ‘΄μ„± 및 곡톡 μ„€μ • 관리

πŸš€ Trouble Shooting & Engineering Decisions

1. API 응닡 및 μ—λŸ¬ 처리 ν‘œμ€€ν™” (클린 μ•„ν‚€ν…μ²˜ κ³ λ―Ό)

  • 문제: APIλ§ˆλ‹€ 응닡 포맷(Data, μƒνƒœ μ½”λ“œ, μ—λŸ¬ λ©”μ‹œμ§€)이 νŒŒνŽΈν™”λ˜μ–΄ ν”„λ‘ νŠΈμ—”λ“œ 연동 생산성이 μ €ν•˜λ¨.
  • ν•΄κ²°:
    • 곡톡 응닡 객체(ApiResponse<T>) λ„μž…: λͺ¨λ“  APIκ°€ 성곡/μ‹€νŒ¨ μ—¬λΆ€, μ»€μŠ€ν…€ μƒνƒœ μ½”λ“œ, λ©”μ‹œμ§€, 데이터λ₯Ό λ™μΌν•œ 포맷으둜 λ°˜ν™˜ν•˜λ„λ‘ κ·œκ²©ν™”.
    • μ „μ—­ μ˜ˆμ™Έ 처리(@RestControllerAdvice): λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—μ„œ λ°œμƒν•˜λŠ” μ»€μŠ€ν…€ μ˜ˆμ™Έ(GeneralException)λ₯Ό μ€‘μ•™μ—μ„œ μΊμΉ˜ν•˜μ—¬, μΌκ΄€λœ ν˜•νƒœμ˜ JSON μ—λŸ¬ μ‘λ‹΅μœΌλ‘œ λ³€ν™˜.
    • κ²°κ³Ό: ν”„λ‘ νŠΈμ—”λ“œμ˜ 데이터 νŒŒμ‹± 둜직이 ν•˜λ‚˜λ‘œ ν†΅ν•©λ˜μ—ˆκ³ , λ°±μ—”λ“œ μ—­μ‹œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 λ‚΄μ—μ„œ μ˜ˆμ™Έ 처리 μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ½”λ“œ 가독성(Clean Code) λŒ€ν­ ν–₯상.
πŸ“Έ ν•΄κ²° κ²°κ³Ό 캑처 (μ ‘κΈ°/펼치기)

trouble shooting image trouble shooting image

2. μ„Έμ…˜ 기반 인증 ν™˜κ²½μ—μ„œμ˜ CORS 및 μΏ ν‚€ 곡유 이슈 ν•΄κ²°

  • 문제: ν΄λΌμ΄μ–ΈνŠΈ(React, Localhost:3000)와 μ„œλ²„(Spring Boot, AWS EC2)의 Origin λΆ„λ¦¬λ‘œ 인해 λΈŒλΌμš°μ € SOP μœ„λ°˜ λ°œμƒ. 특히 μ„Έμ…˜ μ‹λ³„μžμΈ JSESSIONID μΏ ν‚€κ°€ κ³΅μœ λ˜μ§€ μ•Šμ•„ 둜그인 μƒνƒœ μœ μ§€κ°€ λΆˆκ°€λŠ₯함.
  • ν•΄κ²°:
    • WebMvcConfigurerλ₯Ό κ΅¬ν˜„ν•˜μ—¬ ν”„λ‘ νŠΈμ—”λ“œ Origin에 λŒ€ν•΄ CORS 정책을 λͺ…μ‹œμ μœΌλ‘œ 개방.
    • 자격 증λͺ…(Credential) λͺ¨λ“œλ₯Ό ν™œμ„±ν™”(allowCredentials(true))ν•˜κ³ , 응닡 헀더에 Set-Cookieλ₯Ό λ…ΈμΆœμ‹œμΌœ λΈŒλΌμš°μ € κ°„ μ„Έμ…˜ 기반 인증이 정상 λ™μž‘ν•˜λ„λ‘ λ„€νŠΈμ›Œν¬ λ³΄μ•ˆ μ„€μ • μ΅œμ ν™”.
πŸ“Έ ν•΄κ²° μ½”λ“œ 캑처 (μ ‘κΈ°/펼치기)

trouble shooting image

3. JPQL JOIN νŠœλ‹μ„ ν†΅ν•œ N+1 문제 ν•΄κ²° 및 집계 μ΅œμ ν™”

  • 문제: λΉ΅μ§‘ λͺ©λ‘ ν™”λ©΄ 쑰회 μ‹œ, 각 λΉ΅μ§‘κ³Ό μ—°κ΄€λœ '리뷰 수'와 '슀크랩 수'λ₯Ό μ—”ν‹°ν‹° κ·Έλž˜ν”„ νƒμƒ‰μœΌλ‘œ κ°€μ Έμ˜€λ©΄μ„œ λΉ΅μ§‘ 개수(N)만큼의 μΆ”κ°€ 쿼리가 λ°œμƒν•˜λŠ” N+1 문제 직면.
  • ν•΄κ²°:
    • 닀건 쑰회 λ‘œμ§μ„ μ§€μ—° λ‘œλ”©(Lazy Loading)에 μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , JPQL의 JOIN 문을 ν™œμš©ν•΄ 1회의 쿼리둜 μ—°κ΄€ 데이터λ₯Ό 페치(Fetch) ν•˜λ„λ‘ νŠœλ‹.
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ©”λͺ¨λ¦¬μ—μ„œ .size()둜 개수λ₯Ό μ„Έλ˜ 방식을, 쿼리 λ ˆλ²¨μ—μ„œ COUNT(DISTINCT id)λ₯Ό μˆ˜ν–‰ν•˜μ—¬ DB 레벨 집계 μ—°μ‚°μœΌλ‘œ 역할을 μœ„μž„.
    • κ²°κ³Ό: λΆˆν•„μš”ν•œ DB I/Oλ₯Ό μ œκ±°ν•˜μ—¬ 메인 쑰회 API의 응닡 속도 및 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰ λŒ€ν­ κ°œμ„ .
πŸ“Έ ν•΄κ²° μ½”λ“œ 캑처 (μ ‘κΈ°/펼치기)

trouble shooting image trouble shooting image trouble shooting image

πŸ“‚ Repository Structure

BreadCast-Backend/
β”œβ”€β”€ .github/                   # κΉƒν—ˆλΈŒ μ•‘μ…˜ 및 PR ν…œν”Œλ¦Ώ
β”œβ”€β”€ breadcast/                 # μŠ€ν”„λ§ λΆ€νŠΈ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 메인 μ†ŒμŠ€μ½”λ“œ
β”‚   β”œβ”€β”€ src/
β”‚   └── build.gradle
β”œβ”€β”€ docs/                      # λ°±μ—”λ“œ κ°œλ°œμ„ μœ„ν•œ λ¬Έμ„œλ“€
β”‚   β”œβ”€β”€ architecture/          # μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ 및 폴더 ꡬ쑰 μ„€λͺ…
β”‚   β”œβ”€β”€ guides/                # 개발 κ°€μ΄λ“œλΌμΈ
β”‚   └── images/                # λ¦¬λ“œλ―Έ 및 λ¬Έμ„œμš© 이미지 λ¦¬μ†ŒμŠ€
β”œβ”€β”€ database/                  # λ°μ΄ν„°λ² μ΄μŠ€ λ¦¬μ†ŒμŠ€
β”‚   └── seed-images/           # λΉ΅μ§‘ 이미지
└── README.md

πŸš€ How to Run

1. Clone the repository

git clone https://github.com/seohyun27/breadcast-backend.git

2. Configure Environment Variables

To run the application, you need to configure the following environment variables.

Variable Description Example
DB_HOST Database Host Address localhost
DB_PORT Database Port 3306
DB_NAME Database Schema Name breadcast
DB_USERNAME Database Username root
DB_PASSWORD Database Password your_password

3. Build & Run

cd breadcast
./gradlew bootRun

About

🍞 [Breadcast] λ°±μ—”λ“œ μ„œλ²„ | REST API κ·œκ²©ν™” 및 JPA 쑰회 쿼리 νŠœλ‹μ„ μ μš©ν•œ λΉ΅μ§€μˆœλ‘€ 지도 μ„œλΉ„μŠ€

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages