NOVAλ IT λΆμΌ μ·¨μ μ€λΉμμ μν κ°μΈν μ½ν μΈ νλ μ΄μ μλΉμ€μ λλ€. AI κΈ°λ° μν°ν΄ μμ½, ν€μλ νΈλ λ λΆμ, λ§μΆ€ν νΌλλ₯Ό ν΅ν΄ λΉ λ₯΄κ² λ³ννλ IT μ κ³ λν₯μ ν¨μ¨μ μΌλ‘ νμ ν μ μλλ‘ λκΈ° μν νλ‘μ νΈ μ λλ€.
νμ₯: λ°±μ€κ· νμ: κΆμΈμΈ, λκ°κ±΄, μ₯μμ§, μ‘°μ±μ€
- project build : Gradle
- Spring Boot : 3.5.9
- Java : 17
- packaging : jar
- IDE : Intellij
- ν¨ν€μ§ μ λ΅: λλ©μΈ ν¨ν€μ§ μ λ΅
- MySQL
- Spring Web
- Spring Data JPA
- MySQL Driver
- Lombok
- Grafana (λ°μ΄ν° μκ°ν λ° λμ보λ)
- Prometheus (μ΄ν리μΌμ΄μ λ©νΈλ¦ μμ§)
- Loki (λ‘κ·Έ μ€μ μ§μ€ κ΄λ¦¬)
- Spring Boot Actuator (μ΄ν리μΌμ΄μ μν λ° μλν¬μΈνΈ λͺ¨λν°λ§)
Gitub Flow
-
main : λ°°ν¬ λ²μ
-
develop : κ°λ° ν΅ν© λΈλμΉ
-
feature/ : κΈ°λ₯ κ°λ° (μ:
feature/reservation-api) -
λΈλμΉλͺ μ kebab-case μ¬μ©
-
λͺ¨λ μμ μ μ΄μ μμ± ν λΈλμΉ μμ±
-
κΈ°λ³Έ merge λμ λΈλμΉλ
develop
| νλͺ© | κ·μΉ | μμ |
|---|---|---|
| μ λͺ© νμ | [TYPE] μμ
μμ½ |
[CHORE] νλ‘μ νΈ μ΄κΈ° μΈν
|
| TYPE | λλ¬Έμ μ¬μ© | CHORE, FEAT, FIX |
| λͺ©μ | μμ λ¨μ κ΄λ¦¬ | λ‘κ·ΈμΈ API ꡬν |
| λΈλμΉ μ°κ²° | μ΄μ λ²νΈ κΈ°λ° | feat/#12-login-api |
| νλͺ© | κ·μΉ | μμ |
|---|---|---|
| κΈ°λ³Έ νμ | [TYPE] μμ
λ΄μ© |
[FEAT] λ‘κ·ΈμΈ API ꡬν |
| TYPE | μ΄μ TYPEκ³Ό λμΌ | CHORE, FEAT, FIX |
| μΈμ΄ | νκΈ νμ© | μ€μ νμΌ μΆκ° |
| λ¨μ | μλ―Έ λ¨μ μ»€λ° | κΈ°λ₯ / μ€μ λΆλ¦¬ |
| νλͺ© | κ·μΉ | μμ |
|---|---|---|
| μ λͺ© νμ | [TYPE/#μ΄μλ²νΈ] μμ
μμ½ |
[FEAT/#12] λ‘κ·ΈμΈ API ꡬν |
| λμ λΈλμΉ | develop |
develop β feature |
| μ΄μ μ°κ²° | closes #μ΄μλ²νΈ |
closes #12 |
| merge λ°©μ | PR κΈ°λ° merge | 리뷰 ν merge |
| λ¨κ³ | μμ |
|---|---|
| μ΄μ | [FEAT] λ‘κ·ΈμΈ API ꡬν |
| λΈλμΉ | feat/#12-login-api |
| μ»€λ° | [FEAT] λ‘κ·ΈμΈ API ꡬν |
| PR | [FEAT/#12] λ‘κ·ΈμΈ API ꡬν |
| merge | develop λΈλμΉ |
nova-server
βββ docs/ # νλ‘μ νΈ λ¬Έμ (API μ€κ³, μΈνλΌ μν€ν
μ², μ΄μ μ λ΅)
βββ scripts/ # λ°°ν¬ λ° μ€ν μλν μ€ν¬λ¦½νΈ
βββ src/
β βββ main/
β β βββ java/com/nova/nova_server/
β β β
β β β βββ domain/ # ν΅μ¬ λΉμ¦λμ€ λλ©μΈ λ μ΄μ΄
β β β β
β β β β βββ ai/ # AI μμ½ λ° λΆμ λ‘μ§
β β β β βββ auth/ # μΈμ¦/μΈκ° (JWT, Spring Security, OAuth2)
β β β β βββ batch/ # Spring Batch κΈ°λ° λ°μ΄ν° μ²λ¦¬
β β β β β βββ articleingestion/ # κΈ°μ¬ μμ§ λ°°μΉ
β β β β β βββ summary/ # κΈ°μ¬ μμ½ λ°°μΉ
β β β β β βββ cardnews/ # μΉ΄λλ΄μ€ μμ± λ°°μΉ
β β β β β βββ common/ # λ°°μΉ κ³΅ν΅ μ€μ λ° λ©νλ°μ΄ν°
β β β β βββ bookmark/ # λΆλ§ν¬(μ€ν¬λ©) κΈ°λ₯
β β β β βββ cardNews/ # μΉ΄λλ΄μ€ API λ° λλ©μΈ
β β β β βββ feed/ # ν΅ν© νΌλ μ‘°ν λ° μ λ ¬
β β β β βββ keyword/ # ν€μλ μΆμΆ λ° νΈλ λ λΆμ
β β β β βββ member/ # μ¬μ©μ νλ‘ν λ° κ³μ κ΄λ¦¬
β β β β βββ post/ # κΈ°μ¬ λ° μΈλΆ μ½ν
μΈ κ΄λ¦¬
β β β β β βββ sources/ # μΈλΆ API ꡬν체 (Tech Blog, GNews, Jumpit λ±)
β β β β β βββ model/ # Post κ³΅ν΅ λͺ¨λΈ μ μ
β β β β β βββ service/ # μ½ν
μΈ μ²λ¦¬ λΉμ¦λμ€ λ‘μ§
β β β β βββ trend/ # μ€μκ° μΈκΈ° νΈλ λ API
β β β β
β β β βββ global/ # μ μ κ³΅ν΅ λͺ¨λ
β β β βββ apiPayload/ # κ³΅ν΅ μλ΅ ν¬λ§· λ° μμΈ μ²λ¦¬
β β β βββ config/ # νλ μμν¬ μ€μ (Security, Swagger, WebClient λ±)
β β β
β β βββ resources/
β β
β βββ test/ # λ¨μ λ° ν΅ν© ν
μ€νΈ
β
βββ build.gradle # νλ‘μ νΈ μμ‘΄μ± λ° λΉλ μ€μ