Note
μ¬μ΄λν½ Backend λ ν¬μ§ν 리μ λλ€!
μ¬μ΄λν½(Side Peek)πμ λ€λ₯Έ κ°λ°μλ€μ μ¬μ΄λ νλ‘μ νΈμμ μΈμ¬μ΄νΈλ₯Ό μ»κ³ μΆμ κ°λ°μλ€μ μν μ¬μ΄λ νλ‘μ νΈ κ³΅μ νλ«νΌμ λλ€.
π μλΉμ€ λ§ν¬(νμ¬λ μ μβ): https://www.sidepeek.site/
π μ€μ¨κ±° λ§ν¬: http://15.165.135.134:8080/api/v1/swagger-ui/index.html
Important
μ΄ 3λͺ μ ꡬμ±μμΌλ‘ 2024λ 2μ 1μΌλΆν° λ°±μλ κ°λ°μ μ§ννκ³ μμ΅λλ€.
μ΄μΈν¬ | μ μμ§ | μμλ¦Ό |
@Sehee-Lee-01 | @uijin-j | @yenzip |
-
ν λ΄μμ μλ‘ λ°°μ΄ λ΄μ©, νΈλ¬λΈ μν μ λ Έμ μ κΈ°λ‘ν΄μ 곡μ νκ³ μμ΄μ.
- κΈ°λ₯ κ°λ°, λ²κ·Έ ν½μ€ λ± μμ€μ½λ λ³κ²½μ΄ νμν λ μλ‘μ΄ λΈλμΉ(ex.
feat#1-xxxx
) μμ± ν κ°λ° νκ²½(dev
) λ±μ Backbone λΈλμΉμ Merge - CI ν μ€νΈ ν΅κ³Ό ν, μ΅μ 1λͺ μκ² Approve λ°κ³ Merge νκΈ°(@yenzip CI μ€μ )
- μΌμ£ΌμΌμ ν λ²μ© λ°°ν¬ νκ²½(
main
) λΈλμΉμdev
λΈλμΉ Merge νκΈ°(@uijin-j CD μ€μ )
- CheckStyle λμ νμ¬ build μ€νλ§λ€ μ½λ 컨벀μ νμΈ λ° κ΄λ¦¬(@uijin-j μ€μ )
- κ΅¬κΈ μλ° μ»¨λ²€μ λμ (Indent, Javadoc λ± ν μν©μ λ§κ² μΌλΆ μμ )
- κ·Έ μΈ μ»€λ° μ»¨λ²€μ , μ λν μ΄μ μμ, μμ±μ, λ©μλ λ€μ λ± ν λ°©ν₯μ±μ λ§κ² μ€μ
- JaCoCo λμ μΌλ‘ build μ€νλ§λ€ ν μ€νΈ 컀λ²λ¦¬μ§ νμΈ λ° κ΄λ¦¬(@Sehee-Lee-01 μ€μ )
- Service λ μ΄μ΄ μ€μ¬μΌλ‘ ν μ€νΈ 컀λ²λ¦¬μ§ μ΅μ 90% μ΄μ λλλ‘ μμ±
- Language: JAVA 17
- Server: Spring Boot 3.2.2, Spring Security
- ORM: Spring Data JPA, QueryDSL
- API Docs: Swagger
- DB: Flyway, MySQL, Redis
- Infra: Docker, GiHub Action, AWS(EC2, S3, RDS, CodeDeploy, ElasticCache, ACM, Route 53, IAM)
- Test: JUnit5, Mockito, Data Faker
- Etc: Slack API Client, Sentry
- κ²μκΈ
- μμ±
- νλ‘μ νΈ μμΈ μ 보(μ£Όμ , μμ½, λ§ν¬, κΈ°λ₯ μ€λͺ λ±)λ₯Ό μ μ₯ν μ μμ΅λλ€.
- κΈ°μ μ€ν λ°μ΄ν°λ₯Ό κ²μν΄μ λ±λ‘ν©λλ€.
- νμ λλ€μμ κ²μνμ¬ νλ‘μ νΈ λ©€λ²λ‘ λ±λ‘ν©λλ€. λΉνμ λ©€λ²λ μμλ‘ μ΄λ¦μ μΆκ°ν©λλ€.
- μμ
- νλ‘μ νΈ μμ±μμ λ©€λ²λ§ μμ ν μ μμ΅λλ€.
- νλ‘μ νΈ μμΈ μ 보(μ£Όμ , μμ½, λ§ν¬, κΈ°λ₯ μ€λͺ λ±)λ₯Ό μμ ν μ μμ΅λλ€.
- κΈ°μ μ€ν λ°μ΄ν°λ₯Ό κ²μν΄μ λ±λ‘ν©λλ€.
- νμ λλ€μμ κ²μνμ¬ νλ‘μ νΈ λ©€λ²λ‘ λ±λ‘ν©λλ€. λΉνμ λ©€λ²λ μμλ‘ μ΄λ¦μ μΆκ°ν©λλ€.
- μμ
- νλ‘μ νΈ μμ±μλ§ μμ ν μ μμ΅λλ€.
- λ¨κ±΄ μ‘°ν
- νλ‘μ νΈμ λν μμΈμ 보, λκΈ, μ‘°νμ λ±μ νμΈν μ μμ΅λλ€.
- νλ‘μ νΈλ₯Ό μ‘°ννλ©΄ μ‘°νμκ° μ¬λΌκ°λλ€.
- λͺ©λ‘ μ‘°ν λ° κ²μ
- νν°λ‘ μνλ 쑰건μ νλ‘μ νΈλ₯Ό κ²μν μ μμ΅λλ€.
- μ’μμ
- νμμ νλμ νλ‘μ νΈμ μ’μμλ₯Ό ν λ² λλ₯Ό μ μμ΅λλ€.
- μμ±
- λκΈ
- μμ±
- λκΈμ λλκΈμ μμ±ν μ μμ΅λλ€.
- μ΅λͺ λκΈλ‘ μ€μ ν μ μμ΅λλ€.
- μμ
- μμ±μλ§μ΄ μμ ν μ μμ΅λλ€.
- μμ
- μμ±μλ§μ΄ μμ ν μ μμ΅λλ€.
- μμ±
- νμκ°μ
- μ΄λ©μΌλ‘ νμκ°μ μ ν μ μμ΅λλ€.
- λ‘κ·ΈμΈ
- μ΄λ©μΌ λ‘κ·ΈμΈμ ν μ μμ΅λλ€.
- μμ λ‘κ·ΈμΈ(κΉνλΈ)μ ν μ μμ΅λλ€.
- νλ‘ν μμ
- νμμ μμΈμ 보(νλ‘ν μ΄λ―Έμ§, μκ°κΈ, μ§κ΅°, κ²½λ ₯, κΈ°μ μ€ν λ±)λ₯Ό μμ ν μ μμ΅λλ€.
- νλ‘ν μ‘°ν
- νμ κ΄λ ¨ μμΈ μ 보νλ‘ν μ΄λ―Έμ§, μκ°κΈ, μ§κ΅°, κ²½λ ₯, κΈ°μ μ€ν λ±)λ₯Ό μ‘°νν μ μμ΅λλ€.
- νμ κ΄λ ¨ νλ‘μ νΈ μ 보λ₯Ό μ‘°νν μ μμ΅λλ€.
- νμμ΄ μμ±ν νλ‘μ νΈ, λ©€λ²λ‘ μ°Έμ¬ν νλ‘μ νΈ, λκΈ λ¨ νλ‘μ νΈλ₯Ό νμΈν μ μμ΅λλ€.
- μΈλΆ μμ‘΄μ± μΆκ°μ Config Class μ μ
- Configλ₯Ό ν΅ν΄ μΆν μΈλΆ μμ‘΄μ±μ μ νμ μΌλ‘ λΆλ¬μ¬ μ μλ νκ²½μ ꡬμ±
- λλ©μΈλ³ ν¨ν€μ§ ꡬμ±
- 볡μ‘ν μλΉμ€ ꡬ쑰λ₯Ό λ¨μννκ³ κ°λ μ±μ λμ΄κ³ μ λλ©μΈλ³ ν¨ν€μ§ λΆλ¦¬
- ν΄λμ€ μμ μν μ μ΅μννκ³ μ Validator, Constant, ErrorMessage ν΄λμ€ κ΅¬ν λ° μ μ© β λλΆμ μ½λ μμ μ΄ λμ± κ°νΈν΄μ§
- ex) κΈ°νμμ λλ€μ μ΅λ κΈΈμ΄ λ³κ²½ β λλ€μ μ΅λκΈΈμ΄λ₯Ό μ μνλ μμ κ°λ§ λ°κΎΈλ©΄ μ μμΌλ‘ μμ λλ€.(λΉμ¦λμ€ λ‘μ§ κ΅¬ν λ©μλ, Swagger, ν μ€νΈ μ½λ λ±)
- AWS DEV, PROD νκ²½ λΆλ¦¬
- PROD νκ²½μ μλΈλ· ꡬμ±νμ¬ RDS μΈλΆ μ κ·Ό μ ν
- CodeDeploy μ€μ μΌλ‘ CD ꡬν
β μμΈ μΈμ§ μκ° λ¨μΆ
-
μν©: κΈ°μ‘΄ Prod(μ΄μ), Dev(κ°λ°) μλ²μμ νΈλ€λ§ λμ§ μλ μμΈλ νΈλ±λ§ λλλΌλ μλ² μ΄μμ λ¬Έμ κ° μλ μμΈλ₯Ό μ½κ² μΈμ§νκ³ μ Sentrty μ°λ λ° μμΈ μλ μλ¦Ό μ€μ κΈ°λ₯μ ꡬννμ΅λλ€.
-
λ°©λ²
-
κ²°κ³Ό: κΈ°μ‘΄μλ κ°λ°μκ° μ§μ λ‘컬μμ νμΈνκ±°λ νλ‘ νΈμλ κ°λ°μλ‘λΆν° λ°μν μμΈλ₯Ό μ λ¬λ°μμ§λ§ Sentrty μ°λ λ° μλ μλ¦Ό μ€μ μΌλ‘ λλ£λ€κ³Όμ μμΈ λ°μ μν©κ³Ό κ΄λ ¨ν λΆνμν μν΅μ μ€μ΄κ³ μμΈ ν΄κ²°μλ§ μ§μ€ν μ μλ νκ²½μ μ‘°μ±νμ΅λλ€.
-
λ°°μ΄μ : μμΈ μλ¦Όμ μ€μ νλ©΄μ κ°λ°μκ° μΈμ§νκ³ κ³§λ°λ‘ μ²λ¦¬ν΄μΌ ν μμΈ, μ¬μ©μ λ¨μμ ν΄κ²°ν μ μλ μμΈ λ±μ ꡬλΆνλ©΄μ μλ² μμΈ μ²λ¦¬μ λν μκ°μ λμ§μ΄λ³Ό μ μμμ΅λλ€.
-
λΈλ‘κ·Έ
β ν μ€νΈ μ½λ μ€λ³΅ κ°μ
-
μν©: κ° ν μ€νΈ μ½λμμ Entity, Dto, κ° μμ± μ½λ μ€λ³΅μ΄ λ°μνλ κ²μ νμΈνμ΅λλ€. μλΉμ€ νΉμ±μ Entityμ μμ±μ΄ λ§μκΈ° λλ¬Έμ μμ±μκ° κΈ΄ κ²μ΄ μμΈμ΄μμ΅λλ€. μλΉμ€ λ‘μ§λ 볡μ‘νμ¬ ν μ€νΈ μ½λκ° κΈΈμ΄μ§λ κ°λ μ±μ΄ μ μ μμ’μμ‘μ΅λλ€.
-
λ°©λ²: κ°κ° ν μ€νΈ ν΄λμ€μμ μ€λ³΅λλ μ½λλ₯Ό μ°Ύμμ ν μ€νΈ νκ²½ μ μμμ μ¬μ©ν μ μλ static λ©μλλ‘ μ μνκ³ μ΄λ¬ν λ©μλλ₯Ό μ 곡νλ ν μ€νΈ Fixture μ 곡 ν΄λμ€πλ₯Ό ꡬννμ¬ νμλ€μκ² μ¬μ©λ²μ 곡μ νμ΅λλ€. μ΄ν νμλ€κ³Ό ν¨κ» Fixture ν΄λμ€λ₯Ό ꡬνν΄λκ°λ©΄μ μ€λ³΅μ μ€μμ΅λλ€.
-
κ²°κ³Ό: κ° ν μ€νΈ μ½λμμ λλ΅ 633μ€ μ΄μμ μ½λ μ€λ³΅μ μ€μμΌλ‘μ¨ κ°λ μ±μ ν보ν μ μμμ΅λλ€. λν μλΉμ€ λ‘μ§ ν μ€νΈμλ§ μ§μ€ν μ μκ² λμμ΅λλ€.
-
λ°°μ΄μ : λ¨μ ν μ€νΈ μμΉ(FIRST)μμμ Fastλ ν μ€νΈ μ€ν μκ°μ μ΄μΌκΈ°νμ§λ§ μ€μ§μ μΌλ‘ κ°λ°μκ° ν μ€νΈ μ½λλ₯Ό ν΄μνκ³ μμ±νλ μκ°λ μ€μνλ€λ κ²μ μκ² λμμ΅λλ€.
Method | PATH | μ€λͺ | λ΄λΉ |
---|---|---|---|
POST | /auth/reissue |
Access/Refresh Token μ¬λ°κΈ | @uijin-j |
POST | /auth/me |
Access Token κ²μ¦ | @uijin-j |
POST | /auth/login |
μ΄λ©μΌ λ‘κ·ΈμΈ(κΈ°λ³Έ λ‘κ·ΈμΈ) | @uijin-j |
POST | /auth/login/{provider} |
μμ λ‘κ·ΈμΈ | @uijin-j |
Method | PATH | μ€λͺ | λ΄λΉ |
---|---|---|---|
GET | /users/{id} |
νμ νλ‘ν μμΈ μ 보 μ‘°ν | @Sehee-Lee-01 |
GET | /users/{id}/projects |
νμ κ΄λ ¨ νλ‘μ νΈ μ‘°ν(μ°Έμ¬/μ’μμ/λκΈ) | @uijin-j |
GET | /users/nickname |
νμ λλ€μ κ²μ | @Sehee-Lee-01 |
POST | /users |
νμ κ°μ | @uijin-j |
POST | /users/nickname/check |
λλ€μ μ€λ³΅ νμΈ | @uijin-j |
POST | /users/email/check |
μ΄λ©μΌ μ€λ³΅ νμΈ | @uijin-j |
PUT | /users/{id} |
νμ νλ‘ν μμΈ μ 보 μμ | @Sehee-Lee-01 |
PUT | /users/{id}/password |
λΉλ°λ²νΈ μμ | @uijin-j |
Method | PATH | μ€λͺ | λ΄λΉ |
---|---|---|---|
GET | /projects |
νλ‘μ νΈ μ 체 μ‘°ν(κ²μ) | @yenzip |
GET | /projects/{id} |
νλ‘μ νΈ μμΈ μ‘°ν(μ‘°νμ, μ’μμ μ, λκΈ/λλκΈ) | @yenzip |
GET | /projects/weekly |
μ§λ μ£Ό μΈκΈ° νλ‘μ νΈ μ‘°ν(μ΅λ 5κ°) | @Sehee-Lee-01 |
POST | /projects |
νλ‘μ νΈ μμ± | @Sehee-Lee-01 |
PUT | /projects |
νλ‘μ νΈ μμ | @Sehee-Lee-01 |
DELETE | /projects |
νλ‘μ νΈ μμ | @Sehee-Lee-01 |
Method | PATH | μ€λͺ | λ΄λΉ |
---|---|---|---|
POST | /comments |
λκΈ μμ± | @Sehee-Lee-01 |
PUT | /comments/{id} |
λκΈ μμ | @Sehee-Lee-01 |
DELETE | /comments/{id} |
λκΈ μμ | @Sehee-Lee-01 |
Method | PATH | μ€λͺ | λ΄λΉ |
---|---|---|---|
POST | /likes |
μ’μμ μμ± | @yenzip |
DELETE | /likes/{id} |
μ’μμ μμ | @yenzip |
Method | PATH | μ€λͺ | λ΄λΉ |
---|---|---|---|
POST | /files |
μ΄λ―Έμ§ νμΌ μ λ‘λ | @Sehee-Lee-01 |
Method | PATH | μ€λͺ | λ΄λΉ |
---|---|---|---|
GET | /skills |
κΈ°μ μ€ν κ²μ | @Sehee-Lee-01 |
- Project homepage: https://www.sidepeek.site/
- Repository: https://github.com/side-peek/sidepeek_backend/
- Issue tracker: https://github.com/side-peek/sidepeek_backend/issues/
- 보μ μ·¨μ½μ λ±μ λ―Όκ°ν μ΄μμΈ κ²½μ° ν΄λΉ [email protected]μΌλ‘ μ°λ½μ£Όμμμ€.
- κ΄λ ¨ νλ‘μ νΈ
- SidePeek νλ‘ νΈμλ: https://github.com/side-peek/sidepeek_frontend