TILπŸ”₯

μ±Œλ¦°μ§€λ°˜ κ°•μ˜λ₯Ό λ‹€μ‹œ λ“€μœΌλ©΄μ„œ 곡뢀 !!πŸ™‹‍♀️!! μ˜€λŠ˜μ€ S3와 EDA μ–΄λŠμ •λ„~? AWS S3(Simple Storage Service)? 파일 μ„œλ²„μ˜ 역할을 ν•˜λŠ” μ„œλΉ„μŠ€ 일반적인 파일 μ„œλ²„λŠ” νŠΈλž˜ν”½μ΄ 증가함에 λ”°λΌμ„œ μž₯λΉ„λ₯Ό μ¦μ„€ν•˜λŠ” μž‘μ—…μ΄ ν•„μš”ν•œλ°, S3λŠ” 이와 같은 것을 λŒ€μ‹ ν•΄μ€€λ‹€. νŠΈλž˜ν”½μ— λ”°λ₯Έ μ‹œμŠ€ν…œμ μΈ λ¬Έγ„΄μ œλ₯Ό κ±±μ •ν•  ν•„μš”κ°€ 없어진닀. 또, νŒŒμΌμ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ 지정할 수 μžˆμ–΄μ„œ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμŠ€νŒ… μš©λ„λ‘œ μ‚¬μš©ν•˜λŠ” 것을 방지할 수 μžˆλ‹€. νŠΉμ§• λ§Žμ€ μ‚¬μš©μžκ°€ 접속해도 이λ₯Ό κ°λ‹Ήν•˜κΈ° μœ„ν•œ μ‹œμŠ€ν…œμ μΈ μž‘μ—…μ„ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€. μ €μž₯ν•  수 μžˆλŠ” 파일 수의 μ œν•œμ΄ μ—†λ‹€. μ΅œμ†Œ 1λ°”μ΄νŠΈμ—μ„œ μ΅œλŒ€ 5TB의 데이터λ₯Ό μ €μž₯ν•˜κ³  μ„œλΉ„μŠ€ν•  수 μžˆλ‹€. νŒŒμΌμ— 인증을 λΆ™μ—¬μ„œ λ¬΄λ‹¨μœΌλ‘œ μ—‘μ„ΈμŠ€ν•˜μ§€ λͺ»ν•˜λ„둝 ν•  수 μžˆλ‹€..
였늘둜 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..
KIMHYEYUN
'TILπŸ”₯' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘ (3 Page)