- νλ‘μ νΈλͺ : Trello π₯οΈ
- ν μ€ μ 리 : μ 무 νλ‘μΈμ€ κ΄λ¦¬
- λ΄μ© : μ 무λ₯Ό μκ°μ μΌλ‘ νννμ¬ νμ΄ μμ κ³Ό νλ‘μΈμ€λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μκ² λμμ€λ€.
- μΈμ΄ : Java
- λ²μ : JDK17
- Tools : GitHub, Git
- IDE : IntelliJ IDEA
- DB: MySQL 8.0.37
- Framework : SpringBoot 3.2.5
- μΈμ¦/μΈκ° λ°©μ : JWT
- νμ₯ :
${\textsf{\color{green}μ νκ²½}}$ - νμ
- λ¬Έμμ
- μ΄λ―ΌνΈ
- μ΅μ§μ°
β¨οΈ μ νκ²½
- μΉ΄λ μμΈ κΈ°λ₯(λκΈ)
- λκΈ μμ±
- λκΈ μ‘°ν
π λ¬Έμμ
- μ»¬λΌ κ΄λ¦¬ κΈ°λ₯
- μ»¬λΌ μμ±
- μ»¬λΌ μμ
π μ΄λ―ΌνΈ
- 보λ κ΄λ¦¬ κΈ°λ₯
- 보λ λͺ©λ‘ μ‘°ν
- 보λ μμ±
- 보λ μμ
- 보λ μμ
- 보λ μ΄λ
π μ΅μ§μ°
- μΉ΄λ κ΄λ¦¬ κΈ°λ₯
- μΉ΄λ λͺ©λ‘ μ‘°ν
- μΉ΄λ μμ±
- μΉ΄λ μμ
- μΉ΄λ μμ
π κ³΅ν΅ κ΅¬ν
- μ¬μ©μ κΈ°λ₯ : λ‘κ·ΈμΈ, λ‘κ·Έ μμ, νμ κ°μ- Entity μ€κ³
- 컬λΌ, μΉ΄λ μμ μ΄λ(μμ )
- 쿼리 μ΅μ ν
- νλ‘ νΈ
π μ¬μ©μ κΈ°λ₯
- λ‘κ·ΈμΈ
- νμ κ°μ λ μ¬μ©μλΌλ©΄ emailκ³Ό passwordλ₯Ό μ¬μ©ν΄ λ‘κ·ΈμΈ κ°λ₯
- headerμ ν ν°μ μΆκ°ν΄ λ‘κ·ΈμΈμ μ±κ³΅νλ©΄ μ±κ³΅ μνμ½λ λ©μΈμ§ λ°ν
- μ ν¨νμ§ μμ μ¬μ©μ μ μ€λ‘ λ‘κ·ΈμΈμ μλν κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- emailκ³Ό passwordκ° μΌμΉνμ§ μμ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- λ‘κ·Έ μμ
- λ‘κ·Έμμ μ, λ°μν ν ν° μ΄κΈ°ν
- λ‘κ·Έμμ ν μ΄κΈ°νλ Refresh Token μ¬μ¬μ© λΆκ°
- νμκ°μ
- μ€λ³΅λ emailμ΄ μ‘΄μ¬νμ§ μλ κ²½μ° μ±κ³΅ λ©μΈμ§ λ°ν
- κΆν
- Manager : 보λ κ΄κ³ μμ΄ μΉ΄λ μ 체 μ‘°ν
- User
- 보λ, 컬λΌ, μΉ΄λ μ‘°ν κ°λ₯
- μΉ΄λ -> λ³ΈμΈμ΄ μμ±ν νλͺ©μ λν΄μλ§ κΆν μ‘΄μ¬
- 보λ -> μ΄μ¬ λ°μ λͺ¨λ 보λμμ μμ±λ μΉ΄λ μ 체 μ‘°ν
- μ€λ³΅λ emailμ΄ μ‘΄μ¬νκ±°λ email, password 쑰건μ λ§μ§ μμ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
π 보λ κ΄λ¦¬ κΈ°λ₯
- 보λ λͺ©λ‘ μ‘°ν
- μμ±λ 보λ μ‘°ν κ°λ₯
- 보λ μμ±
- 보λ μ΄λ¦, ν μ€ μ€λͺ νμ λ°μ΄ν°κ° μλ€λ©΄ μμ± κ°λ₯
- κΆνμ λ§μ§ μλ μ¬μ©μκ° μμ±μ μλνκ±°λ νμ λ°μ΄ν°κ° μ‘΄μ¬νμ§ μλ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- 보λ μμ
- 보λ μ΄λ¦, ν μ€ μ€λͺ νμ λ°μ΄ν° μμ κ°λ₯
- κΆνμ λ§μ§ μλ μ¬μ©μκ° μμ±μ μλνκ±°λ νμ λ°μ΄ν°κ° μ‘΄μ¬νμ§ μλ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- 보λ μμ
- 보λ μμ κ°λ₯
- κΆνμ λ§μ§ μλ μ¬μ©μκ° μμ λ₯Ό μλνκ±°λ μ΄λ―Έ μμ λ 보λμΈ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- 보λ μ΄λ
- 보λμ μ¬μ©μ μ΄λ κ°λ₯
- MANAGER κΆνμ κ°μ§κ³ μλ μ¬μ©μλ λ³ΈμΈμ΄ μμ±ν 보λ νΉμ μ΄λλ°μ 보λμ λν΄μ λ€λ₯Έ μ¬μ©μλ₯Ό μ΄λν κΆνμ κ°μ§ μ μμ κΆνμ λ§μ§ μλ μ¬μ©μκ° μ΄λλ₯Ό μλνκ±°λ, μ΄λ―Έ ν΄λΉ 보λμ μ΄λλ μ¬μ©μμΈ κ²½μ°, μ‘°λ΄νμ§ μμ μ¬μ©μμΈ κ²½μ° λ©μΈμ§ λ°ν
π μ»¬λΌ κ΄λ¦¬ κΈ°λ₯
- μ»¬λΌ μμ±
- 보λμ μ»¬λΌ μμ± κ°λ₯
- μν μ΄λ¦ νμ λ°μ΄ν°κ° μ‘΄μ¬ν΄μΌ ν¨
- κΆνμ λ§μ§ μλ μ¬μ©μκ° μμ±μ μλνκ±°λ μ΄λ―Έ μ‘΄μ¬νλ μνμ΄λ¦μΌλ‘ μμ±νλ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- μ»¬λΌ μμ
- 보λμ μμ±ν μ»¬λΌ μμ κ°λ₯
- μμ ν λ νμΈ λ©μΈμ§ μΆλ ₯
- κΆνμ λ§μ§ μλ μ¬μ©μκ° μμ±μ μλνκ±°λ μ΄λ―Έ μμ λ μ»¬λ¦ΌμΈ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- μ»¬λΌ μμ μ΄λ
- μ»¬λΌ μμλ₯Ό μμ λ‘κ² λ³κ²½ κ°λ₯
- μλ‘κ³ μΉ¨ νμλ λ³κ²½ν μμ μ μ§
- κΆνμ λ§μ§ μλ μ¬μ©μκ° μμ±μ μλνλ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
π³ μΉ΄λ κ΄λ¦¬ κΈ°λ₯
- μΉ΄λ λͺ©λ‘ μ‘°ν
- μμ±λ μΉ΄λλ€μ λͺ©λ‘μμ μ‘°ν κ°λ₯
- 쑰건
- μ 체 μ‘°ν
- μμ μλ³ μ‘°ν
- μνλ³ μ‘°ν
- μΉ΄λ μμ±
- 컬λΌμ μΉ΄λ μμ± κ°λ₯
- μ λͺ©, μΉ΄λ μν νμ λ°μ΄ν°κ° μλ€λ©΄ μμ± κ°λ₯
- λ΄μ©, λ§κ°μΌμ, μμ μλ νμ λ°μ΄ν° X
- νμ λ°μ΄ν°κ° μ‘΄μ¬νμ§ μκ±°λ μ΄λ―Έ 컬λΌμ΄ μμ λ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- μΉ΄λ μμ
- λ΄μ©, λ§κ°μΌμ, μμ μ, μ λͺ© μμ κ°λ₯
- μμ μ΄λμ ν΅ν΄ μΉ΄λ μν λ³κ²½ κ°λ₯
- λ‘κ·ΈμΈμ νμ§ μμ μ¬μ©μκ° μμ μ΄λμ μλνκ±°λ μ΄λ―Έ 컬λΌμ΄ μμ λ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- μΉ΄λ μμ
- 컬λΌμ μμ±ν μΉ΄λ μμ κ°λ₯
- μμ ν λ νμΈ λ©μΈμ§ μΆλ ₯
- λ‘κ·ΈμΈμ νμ§ μμ μ¬μ©μκ° μμ μ΄λμ μλνκ±°λ μ΄λ―Έ 컬λΌμ΄ μμ λ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
ποΈ μΉ΄λ μμΈ κΈ°λ₯
- λκΈ μμ±
- μΉ΄λ μμΈμ λκΈ μμ± κ°λ₯
- λ΄μ© νμ λ°μ΄ν°κ° μλ€λ©΄ μμ± κ°λ₯
- λ‘κ·ΈμΈμ νμ§ μμ μ¬μ©μκ° μμ μ΄λμ μλνκ±°λ μ΄λ―Έ 컬λΌμ΄ μμ λ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
- λκΈ μ‘°ν
- μΉ΄λ μμΈμ μμ±ν λκΈλ€μ λ³Ό μ μμ
- μμ±μΌμ μ΅μ μμΌλ‘ μ λ ¬
- λ‘κ·ΈμΈμ νμ§ μμ μ¬μ©μκ° μμ μ΄λμ μλνκ±°λ μ΄λ―Έ 컬λΌμ΄ μμ λ κ²½μ° μλ¬ λ©μΈμ§ λ°ν
βοΈ Github Rules
- λΈλμΉ μ΄λ¦ κ·μΉ
- dev λΈλμΉ, κ°μ κ°λ° κΈ°λ₯ ꡬν feat/(κΈ°λ₯μ΄λ¦) λΈλμΉ
- λκ°μ§ λ¨μ΄λΌλ©΄ β - β (νμ΄ν) μ¬μ©ν΄μ ꡬλΆ
- feat/signup, feat/order-create
- μ»€λ° λ©μμ§ κ·μΉ
[#μ΄μλ²νΈ] feat ꡬν λ΄μ© (νμ€ λΉμ°κΈ°) - μΆκ° λ΄μ© - μΆκ° λ΄μ©
- μ΄μ μμ± κ·μΉ
- μ΄μ μ¬μ©
- title : [Feat] μ΄μλͺ
- content:
- [] κΈ°λ₯ ꡬν λ΄μ© - [x] κΈ°λ₯ ꡬν λ΄μ©2
- PR μμ± κ·μΉ
- μ λͺ©
- [νμ¬λ μ§] κΈ°λ₯λͺ
- ex) [2024εΉ΄07ζ10ζ₯] λ‘κ·ΈμΈ
- λ΄μ©
- κ°λ¨ν μ€λͺ , νΉμ΄μ¬ν μμ± νμ
- ex) λ‘κ·ΈμΈ κΈ°λ₯ ꡬν, jwt secretκ΄λ ¨ νκ²½λ³μ μΆκ°
- μ λͺ©
- μ½λ리뷰 μ μ© (κ²ΉμΉλ λΆλΆμ ν΄λΉ λ΄λΉμμκ² λ¦¬λ·° λ°κΈ° νμ)
π Code Convention
- ν΄λμ€(Class) : λλ¬Έμ μΉ΄λ© μΌμ΄μ€ ( μ : MyClass )
- λ©μλ(Method) : μλ¬Έμ μΉ΄λ© μΌμ΄μ€ ( μ : myMethod() )
- λ³μ(Variable) : μλ¬Έμ μΉ΄λ© μΌμ΄μ€ ( μ : myVariable )
- ν¨ν€μ§(Package) : μλ¬Έμλ§ μ¬μ©νλ©°, νμμ μ (.)μΌλ‘ κ³μΈ΅ ꡬλΆ( μ : com.example.project)
API λͺ μΈμ
- μ¬μ©μ κΈ°λ₯
- 보λ κ΄λ¦¬ κΈ°λ₯
- μ»¬λΌ κ΄λ¦¬ κΈ°λ₯
- μΉ΄λ κ΄λ¦¬ κΈ°λ₯
- μΉ΄λ μμΈ κΈ°λ₯
π΅βπ« 쿼리 μ΅μ νλ₯Ό μν΄ λλ―Έ λ°μ΄ν° μ½μ μ μ±λ₯ μ΄μ π±
-
λ¬Έμ
- Bulk Insertλ₯Ό μ¬μ©νμ¬ 10λ§κ±΄ μμ± μ 12 λΆμ΄ μμ
-
ν΄κ²° λ°©λ²
- μ€λ λλ₯Ό μ΄μ©νμ¬ λ³λ ¬ μ²λ¦¬
=> 10λ§κ±΄ λ°μ΄ν°λ₯Ό μμ±νλλ° 12λΆμ΄ μμ λλ λ¬Έμ κ° 1λΆ 47μ΄ λ§μ μλ£ π
π€― μΏΌλ¦¬ μ΅μ νλ₯Ό μν λ Έλ ₯ π’
-
ν΄κ²°μ μν λ Έλ ₯ & λ¬Έμ
- fetch join μ¬μ©
- MultipleBagFetchException μ cannot simultaneously fetch multiple bags μλ¬λ°μ
- ν΄λΉ μλ¬λ₯Ό ν΄κ²°νκΈ°μν΄ SetμΌλ‘ λ³κ²½ν΄μ£ΌμμΌλ κ²°κ΅ κ·Όλ³Έμ μΈ λ¬Έμ μΈ 1:N νμ΄μ§ λ¬Έμ ν΄κ²° λΆκ°
- queryDSLμ μ¬μ©ν fetch join μμ±
- QueryDSLμ μ΄μ©νμ¬ fetch join λ° μμ± λ° νμ΄μ§ μλ
- fetch join μ¬μ©
-
ν΄κ²° λ°©λ²
- 쿼리 λΆλ¦¬ => fetch μ‘°μΈμΌλ‘ ν΄κ²°μ΄ λΆκ°λ₯νλ―λ‘, 3κ°μ μΏΌλ¦¬λ‘ λΆλ¦¬νμ¬ μ‘°ν π