"μ½κ² νλλ‘ λͺ¨μ¬μλ λΉ΅ λ§μ§ μ 보, λΉ΅μ§μλ‘"
λΉ΅μ§ λ¦¬λ·° 곡μ λ° λλ§μ λΉ΅μ§μλ‘ λ£¨νΈλ₯Ό κΈ°λ‘νλ μλΉμ€μ λλ€.
- μ§ν κΈ°κ°: 2025.09 ~ 2025.12 (μ½ 3κ°μ)
- μΈμ: λ°±μλ 3λͺ , νλ‘ νΈμλ 3λͺ (μ΄ 6λͺ )
- Documents Repository: Go to Documents
- Client Repository: Go to Frontend
νμ¬ AWS λΉμ© λ¬Έμ λ‘ λ°°ν¬ μλ²λ μ€λ¨λμμ΅λλ€. μλ μμ° μμμΌλ‘ μ£Όμ κΈ°λ₯μ νμΈνμ€ μ μμ΅λλ€.
πΊ μμ° μμ λ§ν¬
μ¬μ© κΈ°μ κ³Ό ν΄λΉ κΈ°μ μ μ μ ν μ΄μ μ λλ€.
| 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 | - | λ°λ³΅μ μΈ λ°°ν¬ μμ μλν |
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 |
-
νλ‘μ νΈ μ΄κ΄ λ° λ°±μλ 리λ©
- μ 체 μΌμ κ΄λ¦¬ λ° νμ μ£Όκ΄
- μλΉμ€ μ 체 νλ¦(μꡬμ¬ν β API β DB) μ€κ³
-
DB & λλ©μΈ μ€κ³
- ν΅μ¬ λλ©μΈ DB μ€ν€λ§ μ€κ³
- JPA μν°ν° λ§€ν κΈ°μ€ μ μ λ° μ°κ΄κ΄κ³ μ€κ³
-
API ꡬ쑰 μ€κ³ λ° κ³΅ν΅ν
- API μλ΅ κ΅¬μ‘° νμ€ν (ApiResponse)
- μ μ μμΈ μ²λ¦¬(Global Exception Handler) ꡬν
- μλ¬ μ½λ μ²΄κ³ μ€κ³λ‘ ν΄λΌμ΄μΈνΈ μμΈ μ²λ¦¬ λ¨μν
-
μν€ν μ² λ° νμ νκ²½ ꡬμΆ
- ν¨ν€μ§ ꡬ쑰 μ€κ³ λ° Base Controller/Entity ν νλ¦Ών
- GitHub λ ν¬μ§ν 리 λ° νμ κ·μΉ κ΄λ¦¬
- Gradle μμ‘΄μ± λ° κ³΅ν΅ μ€μ κ΄λ¦¬
- λ¬Έμ : APIλ§λ€ μλ΅ ν¬λ§·(Data, μν μ½λ, μλ¬ λ©μμ§)μ΄ ννΈνλμ΄ νλ‘ νΈμλ μ°λ μμ°μ±μ΄ μ νλ¨.
- ν΄κ²°:
- κ³΅ν΅ μλ΅ κ°μ²΄(
ApiResponse<T>) λμ : λͺ¨λ APIκ° μ±κ³΅/μ€ν¨ μ¬λΆ, 컀μ€ν μν μ½λ, λ©μμ§, λ°μ΄ν°λ₯Ό λμΌν ν¬λ§·μΌλ‘ λ°ννλλ‘ κ·κ²©ν. - μ μ μμΈ μ²λ¦¬(
@RestControllerAdvice): λΉμ¦λμ€ λ‘μ§μμ λ°μνλ 컀μ€ν μμΈ(GeneralException)λ₯Ό μ€μμμ μΊμΉνμ¬, μΌκ΄λ ννμ JSON μλ¬ μλ΅μΌλ‘ λ³ν. - κ²°κ³Ό: νλ‘ νΈμλμ λ°μ΄ν° νμ± λ‘μ§μ΄ νλλ‘ ν΅ν©λμκ³ , λ°±μλ μμ λΉμ¦λμ€ λ‘μ§ λ΄μμ μμΈ μ²λ¦¬ μ½λλ₯Ό λΆλ¦¬νμ¬ μ½λ κ°λ μ±(Clean Code) λν ν₯μ.
- κ³΅ν΅ μλ΅ κ°μ²΄(
- λ¬Έμ : ν΄λΌμ΄μΈνΈ(React, Localhost:3000)μ μλ²(Spring Boot, AWS EC2)μ Origin λΆλ¦¬λ‘ μΈν΄ λΈλΌμ°μ SOP μλ° λ°μ. νΉν μΈμ
μλ³μμΈ
JSESSIONIDμΏ ν€κ° 곡μ λμ§ μμ λ‘κ·ΈμΈ μν μ μ§κ° λΆκ°λ₯ν¨. - ν΄κ²°:
WebMvcConfigurerλ₯Ό ꡬννμ¬ νλ‘ νΈμλ Originμ λν΄ CORS μ μ± μ λͺ μμ μΌλ‘ κ°λ°©.- μ격 μ¦λͺ
(Credential) λͺ¨λλ₯Ό νμ±ν(
allowCredentials(true))νκ³ , μλ΅ ν€λμSet-Cookieλ₯Ό λ ΈμΆμμΌ λΈλΌμ°μ κ° μΈμ κΈ°λ° μΈμ¦μ΄ μ μ λμνλλ‘ λ€νΈμν¬ λ³΄μ μ€μ μ΅μ ν.
- λ¬Έμ : λΉ΅μ§ λͺ©λ‘ νλ©΄ μ‘°ν μ, κ° λΉ΅μ§κ³Ό μ°κ΄λ '리뷰 μ'μ 'μ€ν¬λ© μ'λ₯Ό μν°ν° κ·Έλν νμμΌλ‘ κ°μ Έμ€λ©΄μ λΉ΅μ§ κ°μ(N)λ§νΌμ μΆκ° μΏΌλ¦¬κ° λ°μνλ N+1 λ¬Έμ μ§λ©΄.
- ν΄κ²°:
- λ€κ±΄ μ‘°ν λ‘μ§μ μ§μ° λ‘λ©(Lazy Loading)μ μμ‘΄νμ§ μκ³ , JPQLμ
JOINλ¬Έμ νμ©ν΄ 1νμ μΏΌλ¦¬λ‘ μ°κ΄ λ°μ΄ν°λ₯Ό νμΉ(Fetch) νλλ‘ νλ. - μ ν리μΌμ΄μ
λ©λͺ¨λ¦¬μμ
.size()λ‘ κ°μλ₯Ό μΈλ λ°©μμ, 쿼리 λ 벨μμCOUNT(DISTINCT id)λ₯Ό μννμ¬ DB λ 벨 μ§κ³ μ°μ°μΌλ‘ μν μ μμ. - κ²°κ³Ό: λΆνμν DB I/Oλ₯Ό μ κ±°νμ¬ λ©μΈ μ‘°ν APIμ μλ΅ μλ λ° λ©λͺ¨λ¦¬ μ¬μ©λ λν κ°μ .
- λ€κ±΄ μ‘°ν λ‘μ§μ μ§μ° λ‘λ©(Lazy Loading)μ μμ‘΄νμ§ μκ³ , JPQLμ
BreadCast-Backend/
βββ .github/ # κΉνλΈ μ‘μ
λ° PR ν
νλ¦Ώ
βββ breadcast/ # μ€νλ§ λΆνΈ μ΄ν리μΌμ΄μ
λ©μΈ μμ€μ½λ
β βββ src/
β βββ build.gradle
βββ docs/ # λ°±μλ κ°λ°μ μν λ¬Έμλ€
β βββ architecture/ # μμ€ν
μν€ν
μ² λ° ν΄λ ꡬ쑰 μ€λͺ
β βββ guides/ # κ°λ° κ°μ΄λλΌμΈ
β βββ images/ # 리λλ―Έ λ° λ¬Έμμ© μ΄λ―Έμ§ 리μμ€
βββ database/ # λ°μ΄ν°λ² μ΄μ€ 리μμ€
β βββ seed-images/ # λΉ΅μ§ μ΄λ―Έμ§
βββ README.md
git clone https://github.com/seohyun27/breadcast-backend.gitTo 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 |
cd breadcast
./gradlew bootRun









