์ „์ฒด ๊ธ€

KEEP ๊ตณ์ด ๋ง์„ ํ•˜์ง€ ์•Š์•„๋„ ์ •ํ•ด์ง„ ๋ฒ”์œ„๊นŒ์ง€ ์•Œ์•„์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜์˜€๋‹ค. ์ด๋ฒˆํ”„๋กœ์ ํ‹€์—์„œ GIT์„ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋•Œ๋ณด๋‹ค ๋งŽ์ด์จ๋ด์„œ ๋งค์šฐ์ข‹์•˜๊ณ  ์‹ค๋ ฅ์žˆ๋Š” ํŒ€์›๋“ค ๋•๋ถ„์— ๋ฐฐ์›Œ๊ฐ„๊ฒŒ ๋งŽ๋‹ค. ์„ค๊ณ„๋‹จ๊ณ„์—์„œ ERD์™€ API๋ช…์„ธ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ํ•„์š”ํ•œ API๊ธฐ๋Šฅ๋“ค๊ณผ Entitiy์™€ ํ•ด๋‹น Entity๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฉด๋ฐ€ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์—ฌ ์‹ค ์„œ๋ฒ„ ๊ตฌ์ถ•๋‹จ๊ณ„์—์„œ ๋น ๋ฅด๊ฒŒ ๋ชฉํ‘œํ–ˆ๋˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ ํ• ์ˆ˜์žˆ๋˜ ์  ํŒ€์›๊ณผ์˜ ์›ํ™œํ•œ ์†Œํ†ต์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ง„ํ–‰๋„ ๋ฐ ๋ฌธ์ œ์  ๊ณต์œ ๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ PROBLEM ๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ํ™”๋ฉด๊ณต์œ ๋ฅผ ํ†ตํ•œ ํ•ด๊ฒฐ๋ฐฉํ•œ ๋…ผ์˜ @Valid๋ฅผ ์ด์šฉํ•œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์„ ๊ธ€๋กœ๋ฒŒ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋กœ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์•„์ง ์ดํ•ด๋„๊ฐ€ ๋ถ€์กฑํ•ด์„œ ํ•˜์ง€๋ชปํ–ˆ๋‹ค. ์„ค๊ณ„ ๋‹จ๊ณ„์—์„œ ๋ฐฑ์˜คํ”ผ์Šค์˜ ๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ์„ ๊นŠ๊ฒŒ ์ƒ๊ฐ ..
์˜ค๋Š˜๋กœ 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
๐Ÿ’