๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

ํ”„๋กœ์ ํŠธ ์ค‘ ๋‹ด๋‹น ๊ธฐ๋Šฅ์€ ์•„๋‹ˆ์ง€๋งŒ 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..
Spring AOP Annotation @Aspect Spring Bean ํด๋ž˜์Šค์—๋งŒ ์ ์šฉ ๊ฐ€๋Šฅ ์–ด๋“œ๋ฐ”์ด์Šค ์ข…๋ฅ˜ @Around: ํ•ต์‹ฌ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ ์ „๊ณผ ํ›„(@Before + @After) @Before: ํ•ต์‹ฌ๊ธฐ๋Šฅ ํ˜ธ์ถœ ์ „(ex. Client์˜ ์ž…๋ ฅ ๊ฐ’ Validation ์ˆ˜ํ–‰) @After : ํ•ต์‹ฌ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ ์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ์–ธ์ œ๋‚˜ ๋™์ž‘(try, catch์˜ finally() ์ฒ˜๋Ÿผ ๋™์ž‘) @AfterReturning : ํ•ต์‹ฌ๊ธฐ๋Šฅ ํ˜ธ์ถœ ์„ฑ๊ณต ์‹œ (ํ•จ์ˆ˜์˜ Return ๊ฐ’ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) @AfterThrowing : ํ•ต์‹ฌ๊ธฐ๋Šฅ ํ˜ธ์ถœ ์‹คํŒจ ์‹œ, ์ฆ‰ ์˜ˆ์™ธ(Exception)๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋™์ž‘(ex. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ email์ด๋‚˜ SMS ๋ณด๋ƒ„) ํฌ์ธํŠธ์ปท ํฌ์ธํŠธ์ปท Expression Langua..
์˜ค๋Š˜ ์Šคํ”„๋ง ์ˆ™๋ จ์ฃผ์ฐจ ์™„๋ฃŒ ๐Ÿ™ ์‹ค์Šต ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‚˜๋Š” Entity ๋ฅผ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๋Š” ๊ฒƒ์„ ๋ณ„๋กœ ์„ ํ˜ธํ•˜์ง€ ์•Š๊ณ , @Builder ํŒจํ„ด์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€์žฅ ์ข‹์•„ํ•จ! ๐Ÿ”ฅ ๊ทธ๋ฆฌ๊ณ  RequestDto ์—์„œ toEntity(), ResponseDto ์—์„œ of() ๋กœ Entity -> dto, dto -> Entity ๋ฅผ ํ•ด์ค€๋‹ค! public static ProductResponseDto of(Product product) { return ProductResponseDto.builder() .id(product.getId()) .title(product.getTitle()) .link(product.getLink()) .image(product.getImage()) .lprice(product.getLprice(..
KIMHYEYUN
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)