μ°μ£Ό λ°μ΄ν°λ₯Ό λΆμνκ³ λ§μΆ€ν νΌλλ°±μ μ 곡νλ MuseReviewμ Backend Serverμ λλ€.
MuseReviewλ μμ μ μΈ μλΉμ€ μ΄μκ³Ό κ° κ΅¬μ±μμμ μν λΆλ¦¬λ₯Ό κ³ λ €νμ¬ μμ κ°μ΄ Production νκ²½μ μΈνλΌλ₯Ό ꡬμ±νμ΅λλ€.
docker-compose.ymlμμ Backend, Redis, Analysis μλΉμ€λ₯Ό κ°κ° λ 립λ 컨ν μ΄λλ‘ μ μνκ³ , νλμ AWS EC2 μΈμ€ν΄μ€μμ ν¨κ» μ΄μν©λλ€..github/workflows/cd.ymlμμ GitHub Actionsλ‘ μ΄λ―Έμ§λ₯Ό λΉλν΄ Docker Hubμ νΈμν λ€, EC2μμ Docker Composeλ‘ λ°°ν¬νλ κ³Όμ μ μλννμ΅λλ€.application-prod.ymlμμ μΈλΆ PostgreSQL, AWS S3, OAuth Redirect URI λ± μ΄μ νκ²½ μ°λ μ€μ μ κ΄λ¦¬ν©λλ€.
- Nginx: EC2μ μ§μ μ€μΉλμ΄ Reverse Proxy μν μ λ΄λΉν©λλ€. (μ€μ νμΌμ λ³Έ μ μ₯μμ ν¬ν¨λμ§ μμ΅λλ€.)
- AWS RDS(PostgreSQL) Β· AWS S3: μꡬ λ°μ΄ν°μ νμΌ λ°μ΄ν°λ₯Ό λΆλ¦¬ν΄ μ μ₯νλ©°, AWS μ½μμμ νλ‘λΉμ λν©λλ€. μ μ μ 보λ νκ²½ λ³μλ‘ μ£Όμ ν©λλ€.
- OAuth μμ λ‘κ·ΈμΈ Β· Gemini API: μΈλΆ μλΉμ€λ‘ μ°λνμ¬ μ΄μ νΈμμ±, λ°μ΄ν° μμ μ±, μλΉμ€ κ° μν λΆλ¦¬ λ° νμ₯μ±μ ν보νμ΅λλ€.
|
|
|
|
|
| κ°λκ· | κ³ μμ | κΉμμ | λ°μμ° | μ΄μμ° |
|
νμ΅ Β· λ°±νΉνΈλ μλ¦Ό |
μ°μ£Ό μ΄μ Β· μΈνλΌ |
μΈμ¦ | μ¬μ©μ Β· νμ΅ |
λΆμ Β· AI λ©ν Β· ν΅κ³ ν Β· νμ€ν 리 |
μμ μ μΈ λ°°ν¬μ λ 립μ μΈ κΈ°λ₯ κ°λ°μ μν΄ Git Flow κΈ°λ° λΈλμΉ μ λ΅μ μ¬μ©ν©λλ€.
| Branch | Description |
|---|---|
π΅ main |
νμ λ°°ν¬ κ°λ₯ν μνλ₯Ό μ μ§νλ μ΄μ λΈλμΉμ λλ€. μ§μ μμ νμ§ μκ³ PRμ ν΅ν΄μλ§ λ¨Έμ§ν©λλ€. |
π’ develop |
λ€μ λ°°ν¬λ₯Ό μ€λΉνλ ν΅ν© κ°λ° λΈλμΉμ λλ€. |
| π‘ Feature Branch | κΈ°λ₯ λ° μ΄μ λ¨μλ‘ developμμ λΆκΈ°νμ¬ μμ
ν©λλ€. |
Prefix/#μ΄μλ²νΈ-μμ
λ΄μ©
Kebab Caseλ₯Ό μ¬μ©ν©λλ€.
Example
feat/#10-login-api
chore/#1-setting-base
| Prefix | Description | Example |
|---|---|---|
feat |
μλ‘μ΄ κΈ°λ₯ μΆκ° | feat/#10-login-api |
fix |
λ²κ·Έ μμ | fix/#23-header-layout |
docs |
README λ± λ¬Έμ μμ | docs/#5-update-readme |
style |
μ½λ ν¬λ§·ν λ± λ‘μ§μ μν₯μ μ£Όμ§ μλ λ³κ²½ | style/#12-format-code |
refactor |
μ½λ 리ν©ν λ§ | refactor/#30-user-service |
chore |
μ€μ νμΌ, λΉλ νκ²½ λ±μ λ³κ²½ | chore/#1-setting-base |
μ»€λ° λ©μμ§λ λ€μ νμμΌλ‘ μμ±ν©λλ€.
νμ
: μμ
λ΄μ© (#μ΄μλ²νΈ)
Example
feat: μΉ΄μΉ΄μ€ μμ
λ‘κ·ΈμΈ API μΆκ° (#10)
PRμ νλ°ν μ½λ 리뷰μ μμ μ μΈ λ³ν©μ μν΄ μ΅μ 2λͺ μ΄μμ Approveλ₯Ό λ°μ μ΄ν λ¨Έμ§ν©λλ€.
| Category | Version / Technology |
|---|---|
| Language | Java 17 |
| Framework | Spring Boot 3.2.2 |
| ORM | JPA |
| Database | PostgreSQL 18 |
νλ‘μ νΈλ Spring JavaFormatμ μ¬μ©νμ¬ κ³΅ν΅ μ½λ μ€νμΌμ μ μ§ν©λλ€.
λΉλ μ ν¬λ§·μ΄ λ§μ§ μμ κ²½μ° κ²μ¦μ μ€ν¨ν μ μμΌλ―λ‘ μμ μ μ½λ μ€νμΌμ νμΈν©λλ€.
| Target | Convention | Example |
|---|---|---|
| Class | PascalCase |
AuthController |
| Variable / Method | camelCase |
accessToken |
| Constant | UPPER_SNAKE_CASE |
MAX_LIMIT |
β οΈ μΌλ° λ³μ λ° λ©μλλͺ μλ μΈλλ°(_)λ₯Ό μ¬μ©νμ§ μμ΅λλ€.
DB Password, JWT Secret, OAuth Key λ±μ λ―Όκ° μ 보λ μ μ₯μμ μ§μ 컀λ°νμ§ μκ³ MR_configλ₯Ό ν΅ν΄ κ΄λ¦¬ν©λλ€.
- λ‘컬 PostgreSQLμ
mr_dbλ°μ΄ν°λ² μ΄μ€λ₯Ό μμ±ν©λλ€. - νλ‘μ νΈ λ£¨νΈμ
MR_config/local/λλ ν°λ¦¬λ₯Ό μμ±ν©λλ€. - 곡μ λ
application.example.ymlμ ν΄λΉ λλ ν°λ¦¬μ 볡μ¬ν©λλ€. - νμΌλͺ
μ
application.ymlλ‘ λ³κ²½ν©λλ€. - λ‘컬 DB λΉλ°λ²νΈμ νμν API Keyλ₯Ό μ λ ₯ν©λλ€.
- μλ μ€ν λͺ λ ΉμΌλ‘ μ ν리μΌμ΄μ μ ꡬλν©λλ€.
Spring Boot Gradle Pluginμ΄ μ 곡νλ bootRun νμ€ν¬λ‘ μ ν리μΌμ΄μ
μ μ€νν©λλ€.
Windows PowerShell
./gradlew.bat bootRunGit Bash / macOS
./gradlew bootRunκΈ°λ³Έ λΉλλ μ»΄νμΌκ³Ό ν μ€νΈλ₯Ό λͺ¨λ μνν©λλ€.
# Windows PowerShell
./gradlew.bat build
# Git Bash / macOS
./gradlew buildν
μ€νΈλ₯Ό 건λλ°κ³ λΉ λ₯΄κ² ν¨ν€μ§λ§ νμΈνκ³ μΆμ λλ -x testλ‘ test νμ€ν¬λ₯Ό μ μΈν©λλ€. λ¨, PR μ μλ λ°λμ ν
μ€νΈλ₯Ό ν¬ν¨ν κΈ°λ³Έ λΉλλ‘ κ²μ¦ν©λλ€.
# Windows PowerShell
./gradlew.bat build -x test
# Git Bash / macOS
./gradlew build -x testhttp://localhost:8080/swagger-ui/index.html
