[Spring/Redis] lettuce-core ๋ฒ„์ „ ๋ฌธ์ œ - Caused by: io.lettuce.core.RedisCommandExecutionException: NOAUTH Authentication required.
ยท
Backend/Spring Boot
โš ๏ธ ๋ฌธ์ œ ์ƒํ™ฉ Spring Boot์—์„œ Gradle์— ์žˆ๋Š” Dependency์˜ ๋ฒ„์ „์„ ์ •๋ฆฌํ•˜๋˜ ์ค‘์— Redis ์‚ฌ์šฉ์„ ์œ„ํ•œ Lettuce ์˜์กด์„ฑ์„ ์ˆ˜์ •ํ•˜๋˜ ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ์‚ฌ์šฉํ•˜๋Š” Lettuce ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œ์ ์œผ๋กœ ์ ์–ด์คฌ์—ˆ๋‹ค.implementation 'io.lettuce:lettuce-core:6.0.0.RELEASE' ํ•˜์ง€๋งŒ ํ˜„์žฌ Spring Boot ๋ฒ„์ „์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ๋•Œ๋„๋ก ์ˆ˜์ •ํ•ด์คฌ๋‹ค.implementation 'io.lettuce:lettuce-core' ๋นŒ๋“œ๋Š” ์ œ๋Œ€๋กœ ๋˜์ง€๋งŒ ๋Ÿฐํƒ€์ž„ ์ค‘์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. โ—๏ธ์—๋Ÿฌ ๋ฉ”์‹œ์ง€Caused by: io.lettuce.core.RedisCommandExecuti..
[ํšŒ๊ณ ] ์‹ ์ž… ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ทจ์—…
ยท
์ทจ์ค€
๊ธฐ๋‚˜๊ธด ์ทจ์ค€ ๋์— ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ํšŒ์‚ฌ์—์„œ Spring์œผ๋กœ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ๋Œ€ํ•™ ์ž…ํ•™๋ถ€ํ„ฐ ์กธ์—…, ์‹ธํ”ผ, ์ทจ์ค€๊นŒ์ง€ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ–ˆ๊ณ , ๊ณ ์ƒ์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ •์„ ๋Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. ์ „๊ณต์ž์˜ ์ง„๋กœ ๊ณ ๋ฏผ ๊ณ ๋“ฑํ•™์ƒ ๋•Œ๊นŒ์ง€ ๋ฌธ๊ณผ์˜€๋Š”๋ฐ, ์ˆ˜๋Šฅ ์ ์ˆ˜์— ๋งž์ถฐ์„œ ๊ต์ฐจ์ง€์›์œผ๋กœ ๋“ค์–ด์™€ ์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ ์ปดํ“จํ„ฐ ์ „๊ณต์ž๊ฐ€ ๋˜์—ˆ๋‹ค.์‚ฌ์‹ค ์›๋ž˜ ์ƒ๊ฐํ•˜๋˜ ๊ณผ๋„ ์•„๋‹ˆ์—ˆ๊ณ , ์ „๊ณต์ด ์•ˆ ๋งž๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ด 2ํ•™๋…„๊นŒ์ง€๋Š” ์ง„์ง€ํ•˜๊ฒŒ ์ „๊ณผ๋‚˜ ํŽธ์ž…์„ ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ 3~4ํ•™๋…„ ๋™์•ˆ ์›น, ์•ˆ๋“œ๋กœ์ด๋“œ ๋“ฑ์„ ๋‹ค๋ฃจ๋Š” ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์‹ค์Šต๊ณผ ํ”„๋กœ์ ํŠธ๋ฅผ ํ–ˆ๋‹ค.์ „๊ณต ๊ธฐ์ดˆ๋งŒ ๋“ค์—ˆ๋˜ 1~2ํ•™๋…„ ๋•Œ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ง์ ‘ ์›น์ด๋‚˜ ์•ฑ ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์žฌ๋ฏธ์žˆ์–ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ๊ธฐํš์— ํฅ๋ฏธ๊ฐ€ ์ƒ๊ธฐ๋ฉฐ ์Šคํƒ€ํŠธ์—… ์„œ..
[Spring] CollectionUtils ํ™œ์šฉํ•œ null, empty ์ฒดํฌ
ยท
Backend/Spring Boot
์ž๋ฐ”์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ ์–ธ์ œ๋‚˜ ์กฐ์‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ NullPointerException์ด๋‹ค.์‹ค์ œ๋กœ ์ตœ๊ทผ ์‹ค๋ฌด์—์„œ null ์ฒดํฌ๋ฅผ ๊ผผ๊ผผํžˆ ์•ˆํ–ˆ๋‹ค๊ฐ€ ์šด์˜์—์„œ ์—๋Ÿฌ๊ฐ€ ์ฐํžˆ๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๐Ÿ˜ฑ ๊ทธ๋ฆฌ๊ณ  List๊ฐ€ null ์ธ์ง€์™€ ๋น„์—ˆ๋Š”์ง€๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•ด์ค˜์•ผ ํ•  ์ผ์ด ์ƒ๊ฒผ๋Š”๋ฐ, Spring์—์„œ ์ œ๊ณตํ•˜๋Š” CollectionUtils์„ ์“ฐ๋ฉด ํ•œ ๋ฒˆ์— ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. 1. null vs empty์šฐ์„  null๊ณผ empty์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.์•„๋ž˜ ๊ทธ๋ฆผ์€ null๊ณผ empty์˜ ์ฐจ์ด๋ฅผ ์•„์ฃผ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ๋Š” ์งค์ด๋‹ค. ์™ผ์ชฝ ์นธ์„ ๋ณด๋ฉด ํœด์ง€์˜ ์ฃผ์š” ๋‚ด์šฉ๋ฌผ์ธ ํฐ ๋ถ€๋ถ„(๋ฐ์ดํ„ฐ)๊ฐ€ ์—†๊ณ , ํœด์ง€๋ฅผ ๋‹ด๊ณ  ์žˆ๋˜ ํœด์ง€์‹ฌ(๊ฐ์ฒด)๋Š” ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.์˜ค๋ฅธ์ชฝ ์นธ์„..
[ํšŒ๊ณ ] ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ, ๋Œ€์™ธํ™œ๋™ ํšŒ๊ณ 
ยท
Project
์˜ค๋žœ๋งŒ์— ์“ฐ๋Š” ํ”„๋กœ์ ํŠธ์™€ ๋Œ€์™ธํ™œ๋™ ํšŒ๊ณ ์ž…๋‹ˆ๋‹ค๐Ÿ™‚ ํ”„๋กœ์ ํŠธ์™€ ์ทจ์—… ์ค€๋น„๋กœ ์ •์‹ ์—†๋Š” ๋‚˜๋‚ ์„ ๋ณด๋‚ด๊ณ  ์žˆ๋Š”๋ฐ, ๊ฒฝํ—˜ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ฑฐ์˜ 1๋…„ ๋™์•ˆ ์ง„ํ–‰ํ–ˆ๋˜ ํ™œ๋™์„ ๋˜๋Œ์•„ ๋ณด๊ณ  ์‹ถ์–ด์„œ ์ ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.(์ทจ์—… ์ „์— ์‹œ๊ฐ„๋˜๋Š”๋Œ€๋กœ 3์›”๋ถ€ํ„ฐ ๋น„๊ณต๊ฐœ๋กœ ๋‚ด์šฉ์„ ์กฐ๊ธˆ์”ฉ ์ ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๊ณต๊ฐœ๋œ ์ง€๊ธˆ์€ ์ทจ์—…ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค)1. ์‹œ์ž‘ ๊ณ„๊ธฐ ์ž‘๋…„๋ถ€ํ„ฐ ์ทจ์—… ์ค€๋น„์™€ ๋ณ‘ํ–‰ํ•˜๋ฉฐ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ทจ์ค€ ์ค‘์—๋„ ๊ฐœ๋ฐœ์„ ์†์— ๋†“๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ณ , ํ˜‘์—…ํ•˜๋Š” ๊ฐ์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ „๊ณต๊ณผ SSAFY์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์•„์‰ฌ์› ๋˜ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์‚ฌ์šฉ ์„œ๋น„์Šค๋ฅผ ๋ชป ๋งŒ๋“ค์–ด๋ดค๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ํฌํŠธํด๋ฆฌ์˜ค์— ์“ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์งง์€ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋‹ˆ, ๋‹จ์ˆœํžˆ ๊ตฌํ˜„ํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์—์„œ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋..
[Spring /JUnit] Mock ๊ฐ์ฒด์™€ ์ฃผ์†Œ๊ฐ’ ๋น„๊ต ๋ฌธ์ œ - Argument(s) are different! : org.mockito.exceptions.verification.opentest4j.ArgumentsAreDifferent
ยท
Backend/Spring Boot
โ—๏ธ์—๋Ÿฌ ๋ฉ”์‹œ์ง€org.mockito.exceptions.verification.opentest4j.ArgumentsAreDifferent      ๐Ÿ’ป ๊ฐœ๋ฐœ ํ™˜๊ฒฝFramework : `Spring Boot 3.2.3`DB : `MySQL`(๋กœ์ปฌ), `H2`(ํ…Œ์ŠคํŠธ)Library : `JPA`, `QueryDSL 5.0.0`Test : `JUnit`     ๐Ÿ”Ž ์›์ธSpring์—์„œ Junit์œผ๋กœ Controller ๋‹จ์˜ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ • ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•˜๋Š”๋ฐ, `verify()` ๋ถ€๋ถ„์—์„œ ๊ฒ€์ฆ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.  @Nested @DisplayName("๊ตฌ์ธ ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •") public class updateHiringPostTest { private Long postId; pr..
[Spring/Security] Firebase๋ฅผ ํ™œ์šฉํ•œ ์ธ์ฆ ๊ตฌํ˜„
ยท
Backend/Spring Boot
ํ”„๋กœ์ ํŠธ์˜ ์ดˆ๊ธฐ ๋ฒ„์ „์—๋Š” ๋”ฐ๋กœ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์—†์—ˆ๊ณ , React Native์—์„œ Firebase๋ฅผ ์ด์šฉํ•ด ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๋‚˜๋Š” ์ดํ›„ ํ”„๋กœ์ ํŠธ์— ํ•ฉ๋ฅ˜ํ•ด Spring์œผ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ๋„ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด Firebase๋กœ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์„ ์‚ฌ์šฉํ•ด ํ”„๋ก ํŠธ์—”๋“œ์™€ ์ธ์ฆ ์ฒด๊ณ„๋ฅผ ํ†ตํ•ฉํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.  ๊ตฌํ˜„์„ ์œ„ํ•ด Firebase Token์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๊ณ , ํ† ํฐ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด Spring Security๋„ ํ•™์Šตํ•ด์•ผ ๋๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ firebase๊ฐ€ ํฌํ•จ๋œ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ๊นŒ์ง€ ๋งŽ์€ ์‚ฝ์งˆ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ , ๊ตฌํ˜„ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค!     Firebase Token? ์šฐ์„  Firebase Token์— ๋Œ€ํ•ด ..
giraffe_
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก