μ§μΆν΅μ λμ°λ―Έ.
ν루 μμ°μ κΈ°μ€μΌλ‘ μ λμ μΌλ‘ μλΉνμΈμ.
μ§μ ν νλ λ΄μμ μλΉν μ μλλ‘ λμλ립λλ€.
μμ°μ μ€μ νμλ©΄ ν루μ μΌλ§λ μΈ μ μλμ§ μλ €λλ €μ. λΉμΌμ μ§μΆμ λ°λΌ κ·Έλ κ·Έλ μ μμ°μ μ¬λΆλ°°ν μλ μμ΄μ.
μ΄λ² λ¬ μνλΉκ° λΆμ‘±ν΄β¦ κΈ΄μΆμ λ€μ΄κ° λ
- μ μ€λ μΈμνκ³ μΆμλ°β¦μ§κΈ μ΄κ±° λ¨ΉμΌλ©΄ μμΌλ‘ μΌλ§λ μ¨μΌ νμ§?
- μ΄κ±° λ무 μ¬κ³ μΆλ€β¦μ΄μ°¨νΌ μ΄λ²λ¬ μκΈ μ΄λ―Έ λ§μ΄ μ΄ κ² κ°μλ°, λ€μλ¬ μκΈ λ€μ΄μ€λ©΄ μ§μ§ κ°κ³λΆ μ¨μΌμ§!
- (μμ‘λΆμ‘±) λΆλͺ
ν 150λ§μμ΄ μμλλ°β¦? μΈμ λ€ μΌμ§?
π κ°κ³λΆ μ±μ λ¬Έμ μ
- β κ°κ³λΆλ₯Ό μ¬μ©νλ λͺ©μ :
μ§λ μλΉλ₯Ό λμλ³΄κ³ ν₯ν μ§μΆμ μ λΉν μμ€μΌλ‘ μ μ§νκΈ° μν¨μ. κ·Έλ¬λ,
1οΈβ£ μ§μΆ ν΅μ κ° μλ κΈ°λ‘μ λ μ΄μ μ΄ λ§μΆ°μ Έ μλ€.
νμ μ¬νμ μΈ λΆμμ κ±°μ³ μ΄λ€μ§κΈ° λλ¬Έμ (μ¦, νκ³ μ μ΄κΈ° λλ¬Έμ)
맀 κΈ΄μΆμ¬μ΄ν΄/μν©μ λ§μΆ κ³νμ μΈ μ§μΆ ν΅μ λ λΆκ°λ₯ν¨
- μμ° μ€μ κΈ°λ₯μ΄ μλ κ²½μ°λ μμ§λ§ 볡μ‘νκ±°λ λ²κ±°λ‘λ€.
- λΉμ₯ μ§μΆμ μ€μ¬μΌ ν λ, μ§κΈκΉμ§ μΌλ§λ μΌλμ§λ₯Ό μμμλ λΆμ‘±νλ€.
- μλ³ ν΅κ³κ° λμ€κ³ λμμΌ μ¬νμ μΌλ‘, κ·Έλ¦¬κ³ κ°μ μ μΌλ‘ μ§μΆμ κ΄λ¦¬ν μ μλ€.
β΄ λͺ©μ μ λΆν©νλ κΈ°λ₯μ μ 곡νμ§ μλλ€
2οΈβ£ ν΅κ³λ§μ 보μ¬μ€λ€
- λΆμ(μ΄λμ μ€μ¬μΌ νκ³ )κ³Ό λμ(μ΄λ»κ² μ€μΌ 건μ§)μ μ΄μ©μμ λͺ«
β μ§μΆ ν΅μ λ μ¬νμ μ΄ μλ, μλΉμ λμμ μΌλ‘ μ΄λ£¨μ΄μ ΈμΌ νλ€. (μμΈ‘κΉμ§ κ°λ₯νλ€λ©΄ λμ± λ°λμ§)
3οΈβ£ ν루μ μΌλ§λ μ¨μΌ ν μ§ λͺ°λΌμ μ§μΆμ κΈ°μ€μ μΈμ°κΈ° μ΄λ ΅λ€.
-
κ·Έλμ μ΄μμ°μ λ¨μ μΌν κ³μ°νλ©΄?
β ν루 μμ°μ μλλΌλ λ§€μΌ μμμ΄κ° λ€λ₯Έλ°β¦
μ€λ μ΄λ κ² μΌμ λ μμΌλ‘
- νλ£¨λΉ μΌλ§λ λ/λ μ¨μΌ νλμ§
- λ§€μΌ λ€λ₯Έ μΌμ λ§λ€ μμ°μ μ΄λ»κ² λ°°λΆν΄μΌ ν μ§ μκΈ° μ΄λ ΅λ€.
β«οΈ β κ²°λ‘ :
λμ μκ»΄μΌ νλ μ¬λμ
μΌλ§λ μΌλμ§κ° μ€μν κ² μλλΌ
μμΌλ‘ μΌλ§λ₯Ό μΈ μ μλμ§(νλ λ΄ μλΉλ₯Ό μν λ―Έλμ μ§μΆκΈ°μ€)κ° λ μ€μνλ€.
β μ΄λ₯Ό μν κΈ°μ€μ μ μνκ³ μ νλ κ²
π§ κ·Έλμ,
-
μ§κ΄μ μΈ μλΉ κΈ°μ€μ΄ μ μλκ³
-
ν루μ μΌλ§λ μ¨μΌ ν μ§ νλμ λ³΄μ¬ μ§μΆμ κ΄λ¦¬ν μ μμΌλ©΄μλ
-
μ΄μμ° λ΄μμ κ·Έλ κ·Έλ μ λμ μΌλ‘ μλΉν μ μλλ‘ λλ μ±μ κΈ°ννμ΅λλ€.
-
μ€λ κ³ΌμλΉνλλΌλ, μμ° μ¬λ°°μΉλ₯Ό ν΅ν΄ κΈ΄μΆ λͺ©νλ₯Ό μμ§ μκ² ν΄μ€ μ μμ΅λλ€.
β λͺ©ν: νλ£¨μΉ μμ°μ κ°μ΄λλΌμΈμΌλ‘ νμ¬ μλΉνλ, λ μ°λ λ μ°λ μμ° μ¬λΆλ°°λ₯Ό ν΅ν΄ μ΄μμ° λ΄μμ μ λμ μΈ μλΉκ° κ°λ₯νλλ‘
μ΄μμ° νλ λ΄μμ μλΉμ μμ° κ³νμ λ°λΌ, 맀μΌμ μ§μΆ κ°μ΄λλΌμΈμ΄ μ μμ μΌλ‘ μλ‘κ² μ μλ©λλ€.
μ 체 κ°λ° κΈ°κ° : 24.07.13 - 24.08.21
κΈ°λ₯ ꡬν : 24.07.18 - 24.08.21
μμ§λ―Ό/μ μ | μ λͺ μ/λ£¨λ² | κΉμμ§/λ¦¬λ² | μ‘λ―Όμ/μ€λ |
---|---|---|---|
@jimmy0524 | @ohu-star | @hcg0127 | @ssongmina |
μλ² λ°°ν¬ λ° AWS DB μ°κ²°, λΉκ²¨μ°κΈ° λ° λ겨μ°κΈ° κ΄λ ¨ κΈ°λ₯, μ§μΆ λ§κ° κ΄λ ¨ κΈ°λ₯ | μ΄κΈ°μΈν , νλ¬ μμ° κ΄λ ¨ κΈ°λ₯, νμ£Ό μμ° λ° λ¨μ μΌμ λ° κΈμ‘ μ‘°ν κΈ°λ₯ | API λͺ μΈμ, ERD μ€κ³, νμκ°μ λ° λ‘κ·ΈμΈ, μ΄λ©μΌ μΈμ¦, νμ κ΄λ ¨ κΈ°λ₯ | API λͺ μΈμ, ERD μ€κ³, ν루 λ° λ μ§λ³ μμ° μ‘°ν, μμ /μ§μΆ λ±λ‘ λ° μμ κΈ°λ₯ |
- Java 17
- JDK 17.0.6
- IDEΒ : IntelliJ IDEA 2024.1
- FrameworkΒ : Springboot(3.3.1)
- DatabaseΒ : MySQL(AWS RDS), redis(AWS ElastiCache)
- ORMΒ : Spring Data JPA
- λ°°ν¬ : GitHub Actionsλ₯Ό μ¬μ©νμ¬ AWS Elastic Beanstalkμ κ°λ°μ© μλ² λ°°ν¬
- API ν΄ : Swagger
- main, develop, feat λΈλμΉλ‘ λλμ΄ κ°λ°μ μ§ννμμ΅λλ€.
- mainΒ λΈλμΉλ μ΅μ’ κ°λ° μλ£λΒ developΒ λΈλμΉμ λ΄μ©μ mergeνλ λΈλμΉμ λλ€.
- developΒ λΈλμΉλ κ°λ° λ¨κ³μμ λͺ¨λ κΈ°λ₯μ΄ μ΄κ³³μ mergeλλ λΈλμΉμ λλ€.
- featΒ λΈλμΉλ κ° κΈ°λ₯λ³λ‘ μ΄μλ₯Ό μμ±νκ³ , ν΄λΉ μ΄μμ λν΄ κ°λ°μ μ§νν ν, μλ£λ κΈ°λ₯μΒ developΒ λΈλμΉμ Pull Request(PR)νμ¬ mergeνλ κ³Όμ μΌλ‘ μ΄μλμμ΅λλ€.
- Pull Request(PR)μ μ΅μ 2λͺ
μ΄ μλ½ν΄μΌ mergeν μ μλλ‘ μ ννμμ΅λλ€.
src
ββmain
β ββjava
β β ββumc
β β ββharuchi
β β β HaruchiApplication.java
β β β
β β ββapiPayload
β β β β ApiResponse.java
β β β β
β β β ββcode
β β β β β BaseCode.java
β β β β β BaseErrorCode.java
β β β β β ErrorReasonDTO.java
β β β β β ReasonDTO.java
β β β β β
β β β β ββstatus
β β β β ErrorStatus.java
β β β β SuccessStatus.java
β β β β
β β β ββexception
β β β β ExceptionAdvice.java
β β β β GeneralException.java
β β β β
β β β ββhandler
β β β BudgetRedistributionHandler.java
β β β DayBudgetHandler.java
β β β ExpenditureHandler.java
β β β IncomeHandler.java
β β β JwtExceptionHandler.java
β β β MemberHandler.java
β β β MonthBudgetHandler.java
β β β
β β ββconfig
β β β β EmailConfig.java
β β β β SwaggerConfig.java
β β β β
β β β ββlogin
β β β β β SecurityConfig.java
β β β β β
β β β β ββauth
β β β β β MemberDetail.java
β β β β β MemberDetailService.java
β β β β β
β β β β ββjwt
β β β β JwtAccessDeniedHandler.java
β β β β JwtAuthenticationEntryPoint.java
β β β β JwtAuthenticationFilter.java
β β β β JwtExceptionHandlerFilter.java
β β β β JwtUtil.java
β β β β
β β β ββredis
β β β RedisConfig.java
β β β
β β ββconverter
β β β BudgetRedistributionConverter.java
β β β DayBudgetConverter.java
β β β MemberConverter.java
β β β MonthBudgetConverter.java
β β β
β β ββdomain
β β β β DayBudget.java
β β β β Expenditure.java
β β β β Income.java
β β β β Member.java
β β β β MonthBudget.java
β β β β PullMinusClosing.java
β β β β PushPlusClosing.java
β β β β Withdrawer.java
β β β β
β β β ββcommon
β β β β BaseEntity.java
β β β β
β β β ββenums
β β β ClosingStatus.java
β β β DayBudgetStatus.java
β β β ExpenditureCategory.java
β β β IncomeCategory.java
β β β RedistributionOption.java
β β β
β β ββrepository
β β β DayBudgetRepository.java
β β β ExpenditureRepository.java
β β β IncomeRepository.java
β β β MemberRepository.java
β β β MonthBudgetRepository.java
β β β PullMinusClosingRepository.java
β β β PushPlusClosingRepository.java
β β β WithdrawerRepository.java
β β β
β β ββservice
β β β BudgetRedistributionService.java
β β β DayBudgetService.java
β β β MemberService.java
β β β MonthBudgetService.java
β β β
β β ββweb
β β ββcontroller
β β β BudgetRedistributionController.java
β β β DayBudgetController.java
β β β MemberApiController.java
β β β MonthBudgetController.java
β β β RootController.java
β β β
β β ββdto
β β BudgetRedistributionRequestDTO.java
β β BudgetRedistributionResponseDTO.java
β β DayBudgetRequestDTO.java
β β DayBudgetResponseDTO.java
β β MemberRequestDTO.java
β β MemberResponseDTO.java
β β MonthBudgetRequestDTO.java
β β MonthBudgetResponseDTO.java
β β
β ββresources
β application-secret.yml
β application.yml
β
ββtest
ββjava
ββumc
ββharuchi
HaruchiApplicationTests.java
- λ‘κ·ΈμΈ(μΌλ°) : Spring Securityμ JWTλ₯Ό μ΄μ©ν΄ μ¬μ©μ μΈκ°/μΈμ¦ κΈ°λ₯ ꡬν
- μ΄λ©μΌ μΈμ¦ κΈ°λ° νμκ°μ : Gmail SMTPλ₯Ό μ¬μ©ν΄ Spring Bootμμ μΈμ¦ μ½λλ₯Ό λ©μΌλ‘ 보λ΄κ³ Redisμ μΊμ±νλ λ°©μμ μ¬μ©ν΄ ꡬν
- λ‘κ·Έμμ λ° νμνν΄: λ°κΈλ ν ν°μ λΈλ리μ€νΈννλ λ°©μμ μ¬μ©ν΄ ꡬν
- νμ μ 보 μ‘°ν: ν ν°μμ λ½μλΈ μ μ μ λν μ 보 μ‘°ν κΈ°λ₯ ꡬν
- ν λ¬ μμ° μμ : ν λ¬ μμ°μ μμ νκ³ ν루 μμ°μ μ¬λΆλ°°νλ κΈ°λ₯ ꡬν
- ν루 μμ° μ¬λΆλ°°: ν λ¬ μ€ λ¨μ μΌμμ μμ°μ κ³ λ₯΄κ² λΆλ°°, λλμ΄μ§μ§ μλ κΈμ‘μ μΈμ΄ν λ°μ€μ μ μ₯νλλ‘ κ΅¬ν
- ν λ¬ μμ° κΈμ‘ μ‘°ν: μ΄λ² λ¬μ μμ° κΈμ‘μ λ°ννλλ‘ κ΅¬ν
- ν λ¬ μ§μΆλ₯ μ‘°ν: μ΄λ² λ¬μ μ§μΆλ₯ (ν λ¬ μμ° λλΉ μ¬μ©ν κΈμ‘)μ λ°ννλλ‘ κ΅¬ν
- ν μ£Ό μμ° κΈμ‘ μ‘°ν: μ΄λ² μ£Όμ ν루 μμ° λ¦¬μ€νΈ, νμ¬ λ¬κ³Ό μ£Όμ°¨λ₯Ό DTOλ‘ λ³ννμ¬ λ°μ΄ν° μ λ¬
- λ¨μ μΌμ λ° κΈμ‘ μ‘°ν: μ€λλΆν° λ§μΌκΉμ§μ λ¨μ μΌμμ λ¨μ μμ°μ DTOλ‘ λ³ννμ¬ λ°μ΄ν° μ λ¬
- ν루 μμ° κΈμ‘ μ‘°ν : μ€λ μ¬μ© κ°λ₯ν κΈμ‘μ μ λ°μ΄νΈνμ¬ λ°ννλλ‘ κ΅¬ν
- λ μ§λ³ μμ° κΈμ‘ μ‘°ν : μ€λλΆν° λ§μΌκΉμ§μ μμ° κΈμ‘ 리μ€νΈDTOλ₯Ό μμ±νμ¬ λ°μ΄ν° μ λ¬
- μμ λ±λ‘ / μμ : μ€λμ μμ μ λ±λ‘νκ³ μμ νλ λ‘μ§ κ΅¬ν
- μ§μΆ λ±λ‘ / μμ : μ€λμ μ§μΆμ λ±λ‘νκ³ μμ νλ λ‘μ§ κ΅¬ν
-
λΉκ²¨μ°κΈ° λ° λ겨μ°κΈ° : κ³ λ₯΄κ², μΈμ΄νλ°μ€, νΉμ μΌμ μ¬λΆλ°° μ΅μ μ ENUMμΌλ‘ ꡬλΆνμ¬ κ° λ‘μ§ κ΅¬ν (λͺ¨λ κ³Όμ μλ 10μ μ리 μ΄ν μ μ¬ λ‘μ§ ν¬ν¨)
-
μ§μΆ λ§κ°νκΈ° : ν루 μ§μΆ(DayBudget)μ μμ/μμ/0 νλ¨νμ¬
-
μμμΈ κ²½μ° : κ³ λ₯΄κ² λΆλ°° or μΈμ΄νλ°μ€ ENUMμΌλ‘ ꡬλΆνμ¬ λ‘μ§ κ΅¬ν
-
μμμΈ κ²½μ° : κ³ λ₯΄κ² κ°μ Έμ€κΈ° or μΈμ΄νλ°μ€ ENUMμΌλ‘ ꡬλΆνμ¬ λ‘μ§ κ΅¬ν
-
0μΈ κ²½μ° : μ¬λΆλ°° μ΅μ μ ZEROλ‘ μ§μ ν λ°λ‘ μ§μΆ λ§κ°
(λͺ¨λ κ³Όμ μλ 10μ μ리 μ΄ν μ μ¬ λ‘μ§ ν¬ν¨)
-
-
μ§μΆ μμμ¦ μ‘°ν : μμ , μ§μΆ, λΉκ²¨μ°κΈ° λ° λ겨μ°κΈ°μ κ° λ¦¬μ€νΈλ₯Ό DTOλ‘ λ³ννμ¬ μ΅μ’ μ μΌλ‘ μμμ¦ λ¦¬μ€νΈ DTOλ₯Ό μμ±νμ¬ λ°μ΄ν° μ λ¬
νλ‘μ νΈλ₯Ό μ§ννλ λμ μ λ§ λ§μ κ²μ λ°°μΈ μ μμμ΅λλ€. νμ κ·μΉμ 체κ³μ μΌλ‘ μ νκ³ μ§νν νλ‘μ νΈλ κ±°μ μ²μμ΄λΌ, ν νλ¦Ώ μμ±λΆν° ν¨κ» μλ Όνμ¬ μμ±νλ κ³Όμ μ΄ μ λ§ μμ€νμ΅λλ€. νΉν PRμ ν΅ν΄ μλ‘ μ½λ 리뷰λ₯Ό μ§ννμ¬ λ μ’μ μ½λλ₯Ό μμ±ν μ μμλ κ² κ°μ΅λλ€. UMC μ€ν°λμμ λ°°μ΄ λ΄μ©μ μ€μ λ‘ λ§μ΄ μ μ©ν΄ λ³Ό μ μμ΄μ μ’μκ³ , μμκΉμ§ νκ² λμ΄ μ μκ²λ μ λ§ λ»κΉμ νλ‘μ νΈλ‘ κΈ°μ΅λ κ² κ°μ΅λλ€. μ°λ¦¬ μλμ€λ¬μ΄ νμλ€ μ λ§ κ³ μ λ§μμ΅λλ€! π
νλ‘μ νΈλ₯Ό μ§ννλ©° UMC μ€ν°λμμ λ°°μ΄ μ§μλ€μ μ€μ λ‘ μ μ©ν΄λ³Ό μ μμκ³ , μ΄λ₯Ό ν΅ν΄ λ κ²¬κ³ νκ² μ΅ν μ μμμ΅λλ€. λν λμ λΆμ‘±ν λΆλΆμ΄ 무μμΈμ§ μκ² λμκ³ , μ΄λ₯Ό λ°νμΌλ‘ μ΄λ€ κ²μ μΆκ°μ μΌλ‘ 곡λΆν΄μΌ νλ μ§ νμ νμ¬ λμ± μ±μ₯ν μ μλ κ³κΈ°κ° λμμ΅λλ€. κΉνλΈ PRμ ν΅ν΄μ μ λλ‘ λ μ½λ 리뷰λ₯Ό μ§νν νλ‘μ νΈκ° κ±°μ μ²μμ΄μκΈ° λλ¬Έμ μ²μμ λ―μ€μμ§λ§, μ½λ 리뷰 κ³Όμ μμ λ΄κ° μμ±ν μ½λλ₯Ό λ€μ λμλ³΄κ³ κ°μ ν μ μμκ³ , νμλ€μ μ½λλ₯Ό 리뷰νλ©° μλ‘ λ°°μ°κ³ ν¨κ» μ±μ₯ν μ μμμ΅λλ€. νλ£¨μΉ νλ‘μ νΈλ νλ₯ν νμλ€κ³Ό νμ νλ©° λ§μ κ²μ μ»μ΄κ° μ μμλ κ°μ§ κ²½νμ΄μμ΅λλ€. λκΉμ§ ν¨κ» κ³ μνλ©° νλ‘μ νΈ μλ£κΉμ§ λ¬λ €μ¨ νμλ€μκ² μ§μ¬μΌλ‘ κ°μ¬μ μΈμ¬λ₯Ό μ ν©λλ€!
μ»€λ° μ»¨λ²€μ λΆν° μ΄μμ PR κ΄λ¦¬κΉμ§ νμ μ λͺ¨λ κ³Όμ μ μ λλ‘ κ²½νν 첫 νλ‘μ νΈμμ΅λλ€! νΉν Spring Securityλ₯Ό νμ©ν μ¬μ©μ μΈμ¦/μΈκ° ꡬνμ μ²μμΌλ‘ ꡬνν΄ λ³Ό μ μμκ³ , νμλ€μ λμμΌλ‘ μ λλ‘ ν΄λΌ μ μμλ κ² κ°μ΅λλ€. μκ°μ μ«κΈ°λ©° μ§νλ λΆλΆλ μμμ§λ§, κ·Έλ§νΌ μ΄λ€ λΆλΆμ΄ λΆμ‘±νμ§ μ μ μμλ κΈ°νμλ€κ³ μκ°ν©λλ€. ν¨κ» κ³ μν νμλ€ λͺ¨λμκ² κ°μ¬μ μΈμ¬λ₯Ό μ νκ³ μΆμ΅λλ€. μμΌλ‘λ μ΄ κ²½νμ λ°νμΌλ‘ λ 체κ³μ μ΄κ³ ν¨μ¨μ μΌλ‘ κ°λ°νλ, λ λμ κ°λ°μλ‘ μ±μ₯ν΄ λκ°κ³ μΆμ΅λλ€!
ν λ¬ λ°λμ ν νλ‘μ νΈλ₯Ό μ§ννλ©΄μ λ§μ μ λ€μ λλ μ μμμ΅λλ€. κ°μΈμ μΌλ‘λ UMC μ€ν°λλ₯Ό νλ©΄μ λ°°μ λ μ§μμ κΈ°λ°μΌλ‘ νλ‘μ νΈ μ€κ³λΆν° μ½λ μμ±κΉμ§ μ κ³Όμ λ€μ μ§μ μνμ°©μ€λ₯Ό κ±°μΉλ©΄μ ꡬνν΄ λλ€λ μ μμ λΏλ―νκ³ μ¦κ±°μ μ΅λλ€. λν PRμ ν΅ν΄ μ½λ 리뷰λ₯Ό μμ±νμ¬ ν΄λ¦°ν μ½λλ€μ μμ±ν μ μμ΄μ λ무λ μ’μμ΅λλ€. 첫 ν νλ‘μ νΈμκΈ° λλ¬Έμ λΆμ‘±ν μ λ λ§μμ§λ§ νμλ€ λλΆμ μ±κ³΅μ μΌλ‘ λ§λ¬΄λ¦¬ν μ μμ΄μ κ°μ¬νκ³ , μ’μ κΈ°μ΅μΌλ‘ λ¨μ κ² κ°μ΅λλ€! λͺ¨λλ€ μκ³ νμ ¨κ³ , μμΌλ‘λ νμ΄ν μ λλ€!!