μ±λ¦°μ§λ° κ°μλ₯Ό λ€μ λ€μΌλ©΄μ κ³΅λΆ !!πβοΈ!! μ€λμ S3μ EDA μ΄λμ λ~? AWS S3(Simple Storage Service)? νμΌ μλ²μ μν μ νλ μλΉμ€ μΌλ°μ μΈ νμΌ μλ²λ νΈλν½μ΄ μ¦κ°ν¨μ λ°λΌμ μ₯λΉλ₯Ό μ¦μ€νλ μμ
μ΄ νμνλ°, S3λ μ΄μ κ°μ κ²μ λμ ν΄μ€λ€. νΈλν½μ λ°λ₯Έ μμ€ν
μ μΈ λ¬Έγ΄μ λ₯Ό κ±±μ ν νμκ° μμ΄μ§λ€. λ, νμΌμ λν μ κ·Ό κΆνμ μ§μ ν μ μμ΄μ μλΉμ€λ₯Ό νΈμ€ν
μ©λλ‘ μ¬μ©νλ κ²μ λ°©μ§ν μ μλ€. νΉμ§ λ§μ μ¬μ©μκ° μ μν΄λ μ΄λ₯Ό κ°λΉνκΈ° μν μμ€ν
μ μΈ μμ
μ νμ§ μμλ λλ€. μ μ₯ν μ μλ νμΌ μμ μ νμ΄ μλ€. μ΅μ 1λ°μ΄νΈμμ μ΅λ 5TBμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μλΉμ€ν μ μλ€. νμΌμ μΈμ¦μ λΆμ¬μ 무λ¨μΌλ‘ μμΈμ€νμ§ λͺ»νλλ‘ ν μ μλ€..
TILπ₯
μ€λλ‘ 4λ²μ§Έ ννλ‘μ νΈ, λ°°λ¬μ± ꡬν νλ‘μ νΈκ° λλ¬λ€. μ²μ κΈ°ννλ κΈ°λ₯μ΄ μΌμ° λλμ μ€κ°μ κΈ°λ₯μ μΆκ°νμλ€. μ²μμλ κ·Έλ₯ νλμ κ°κ²μ λ°°λ¬ μ±μ΄λ€κ°, μ΄ν κ°κ² λ³λ‘ λλκ³ μ’μμ κΈ°λ₯κΉμ§ ꡬννλ€. νμλ€κ³Ό μν΅λ μλκ³ μλ§μμ μ¬λ°κ² μ§ννλ€.!! κ·Έλ¦¬κ³ λ€λ€ μ΄κ±° ν΄μ£ΌμΈμ νλ©΄ λλ±λλ± κ³΅μ₯λ§λ₯ μ°μ΄λ΄μ
μ μ§λλ μ°Έ λΉ λ₯΄κ² λκ°λ―!!!!! μΈκ» μλ€μ....γ
γ
μ! μ¬κΈ°μ λ°°μ°κ³ μ¬μ©ν΄λ³Έ jwt, refreshtokenκ³Ό λ€λ₯Έ νλ€μ΄ μ¬μ©νμ νμ¬ μ¬μ©μ μ λ
Έν
μ΄μ
ꡬνλ±μ μ΄μ©ν΄μ κΈ°μ‘΄μ νλ νλ‘μ νΈλ₯Ό μ
κ·Έλ μ΄λλ₯Ό λͺ©νλ‘ μ§νν΄μΌκ² λ€. λ§κ΅¬μ‘μ΄λ‘ νμ§λ§κ³ λλ±λλ± S.A λΆν° μ²μ²ν λ€ μμ±ν΄μΌμ§~!
νλ‘μ νΈ μ€ λ΄λΉ κΈ°λ₯μ μλμ§λ§ JWT κ° μ/μ΄λ»κ² λλμ§ κΆκΈν΄μ 곡λΆν΄λ³΄μ JWTλ λΉλ°ν€λ₯Ό μ΄μ©νμ¬ μλͺ
λ JSON ννμ λ°μ΄ν°μ΄λ€. μ¬κΈ°μ μ¬μ©μ μΈμ¦ μ 보λ₯Ό λ£μ΄μ ν ν°μ λ°κΈν΄μ£Όλ©΄ μΆν μΈμ¦μ΄ νμν 리μμ€μ μ κ·Ό μ μ¬μ©μκ° μλ²μ μλ²μ ν ν°μ ν¬ν¨ν΄μ μ μ‘νμ¬ μλ²μ ν ν°μ ν¬ν¨ν΄μ μ μ‘νμ¬ μλ²μΈ‘μμλ 볡μ‘ν μΈμ¦ κ³Όμ μμ΄ ν ν°λ§μΌλ‘ μ¬μ©μλ₯Ό μΈμ¦ λ° μΈκ°ν μ μλ κ²μ΄λ€. JWTλ ν€λ, νμ΄λ‘λ, μλͺ
μΈ κ°μ§ μ 보λ₯Ό base64λ‘ μΈμ½λ©ν κ°μ μ½€λ§('.')λ₯Ό μ¬μ΄μ λκ³ μ΄μ΄λΆμΈ ννλ‘ μμ±λλ€. ν€λ : JWT μλͺ
μ μ¬μ©λ μκ³ λ¦¬μ¦ μ 보 νμ΄λ‘λ : ν ν°μ λ΄κΈ΄ 주체, λ§λ£μΌ, μμ±μ λ± μκ·Έλμ² : ν€λμ νμ΄λ‘λλ₯Ό κ°κ° base64λ‘ μΈμ½λ©ν ν μ½€..
μ€λμ μλ¬ π₯ μ²μμ Orderμ Userλ₯Ό Lazy μ λ΅μΌλ‘ μ€μ νμλ€ κ·Έλ°λ° @Transactional public void updateInCart(Long orderId, BasketRequestDto requestDto, User user) { Order order = orderRepository.findByIdAndIsOrdered(orderId, false).orElseThrow( () -> new ApiException(ErrorCode.INVALID_CART) ); checkUserOrRole(user, order); menuService.findMenu(requestDto.getMenu_id()); for (Basket basket : order.getBaskets()) { if (Ob..
μ€λμ μλ¬ π₯ λ΄ λ΄λΉ κΈ°λ₯ μ½λλ₯Ό μ§λ κ²μλ§ μ§μ€ν λλ¨Έμ§,,,,,, pull μ λ°μ§ μκ³ commit -> push λ₯Ό ν΄λ²λ €μ λ€λ₯Έ λΆλ€μ μ½λκ° μΈμμμμμμγ± λ λΌκ°λ²λ¦Ό.//γ
λ€λ€ λ무 μ΄μ¬ν νμ
μ, λκ° λ§μλ리기 μ£μ‘ν΄μ κ·Έλ₯ merge λ₯Ό revert ν΄λ²λ Έλ€. κ·Έ ν, λ€μ pull μ νλκΉ μ€λ§λ μΈμμ λ§μμ π μ΄λ²μλ λ΄ μ½λκ° μΈμμμμμμ
λ λΌκ°λ€ πͺοΈ λ΄κ° pull μ μ€μμ±μ μμ΄λ²λ¦° κ²μ΄κΈ°μ λ΄ μλͺ»μ΄κΈ°μ,, λ°μ±νλ λ§μκ°μ§μΌλ‘ λ€μ μ§°λ€.γ
κ΅ν π PULL μ μνμ 2. git pull μ νλκΉ, λ μ€λ₯ pull λ°©μμ λͺ
μνλΌλ κ² git pull μ git fetchμ mergeλ₯Ό ν©μΉ λͺ
λ Ήμ΄μΈλ°, κ·Έ μ€ merge μ λ°©μμ λͺ
μνλΌλ μλ¬μ΄λ€. ..
μ€νλ§ μ¬ν ννλ‘μ νΈ μμ μ€λμ νλ‘μ νΈ ν μ§κΈ° ERD μμ±μ΄ κ°μ₯ λ¬Έμ μλ
ERDλ₯Ό μλ§λ€μ΄λμΌ μ½λλ₯Ό 지 λ, λͺ
ννκ² κ΅¬νν μ μκΈ° λλ¬Έμ νμλ€κ³Ό κ°μ₯ μ€λ«λμ κ³ λ―Όν΄μ λ§λ€μλ€. μλ° μ½λλ‘λ νλ λ° λ€λ₯Έ μν°ν°μμ κ΄κ³λ₯Ό κ·Έλ €λΌ μ μμλλ°, κ·Έκ±°λ₯Ό ERDλ‘ κ·Έλ¦΄λ €λκΉ νλλ λͺ¨λ₯΄κ² μ΄μ νν°λκ» Help μ³€λ€..γ
μ¬μ€ μ€λͺ
ν΄μ£Όμλκ±°λ₯Ό 100% λͺ
ννκ² μ΄ν΄νλμ§λ λͺ¨λ₯΄κ² μ§λ§, κ΅μ₯ν λμμ΄ λμλ€ μν°ν°μμ μ€μνκ² λ΄μΌν κ²κ³Ό μ΄λ λΆλΆμ μ’ λ μ€μ μΌλ‘ λκ³ κ΅¬μ‘°λ₯Ό μ§μΌν μ§ μλ €μ£Όμ
¨λ€. νΉν, μ£Όλ¬Έ λ΄μκ³Ό λ©λ΄μ κ΄κ³κ° λ€λλ€ μΈλ°, λ©λ΄μμλ μ£Όλ¬Έ λ΄μμ λν μ 보λ₯Ό κ°μ§ νμκ° μμ΄μ μ΄μ λν΄μ μ΄λ»κ² ννν΄μΌ ν μ§κ° π»μΈ! νν°λκ»μλ μ£Όλ¬Έ λ΄μκ³Ό λ©λ΄ μ¬μ΄μ Bask..
λ¨μ ν
μ€νΈ? λ¨μ ν
μ€νΈλ νλμ λͺ¨λμ κΈ°μ€μΌλ‘ λ
립μ μΌλ‘ μ§νλλ κ°μ₯ μμ λ¨μμ ν
μ€νΈμ
λλ€. μ¬κΈ°μ λͺ¨λμ μ ν리μΌμ΄μ
μμ μλνλ νλμ κΈ°λ₯ λλ λ©μλλ‘ μ΄ν΄ν μ μμ΅λλ€. μ¦, λ¨μ ν
μ€νΈλ μ ν리μΌμ΄μ
μ ꡬμ±νλ νλμ κΈ°λ₯μ΄ μ¬λ°λ₯΄κ² λμνλμ§λ₯Ό λ
립μ μΌλ‘ ν
μ€νΈνλ κ²μΌλ‘, μ΄λ€ κΈ°λ₯μ΄ μ€νλλ©΄ μ΄λ€ κ²°κ³Όκ° λμ¨λ€. μ λλ‘ ν
μ€νΈλ₯Ό μ§νν©λλ€. ν΅ν© ν
μ€νΈ? ν΅ν© ν
μ€νΈλ λͺ¨λμ ν΅ν©νλ κ³Όμ μμ λͺ¨λ κ°μ νΈνμ±μ νμΈνκΈ° μν΄ μνλλ ν
μ€νΈμ
λλ€. μΌλ°μ μΌλ‘ μ ν리μΌμ΄μ
μ μ¬λ¬ κ°μ λͺ¨λλ€λ‘ ꡬμ±μ΄ λκ³ , λͺ¨λλ€λΌλ¦¬ λ©μΈμ§λ₯Ό μ£Όκ³ λ°μΌλ©΄μ(ν¨μ νΈμΆ) κΈ°λ₯μ μνν©λλ€. κ·Έλ κΈ°μ ν΅ν©λ λͺ¨λλ€μ΄ μ¬λ°λ₯΄κ² μ°κ³λμ΄ λμνλμ§ κ²μ¦μ΄ νμνλ°, μ΄λ¬ν λͺ©μ μΌλ‘ μ§νλλ ν
μ€νΈκ°..
@InjectMocks UserService userService; @Mock UserRepository userRepository; @Mock PasswordEncoder passwordEncoder; @Test @DisplayName("μ€λ³΅λ μμ΄λ μ
λ ₯ μ, νμ κ°μ
μ€ν¨") void givenIsExistedUsername_whenSignup_thenFail() { // Given String username = "tester"; String password = "123456789"; SignupRequestDto requestDto = new SignupRequestDto(); requestDto.setUsername(username); requestDto.setPassword(password..