[Spring] CollectionUtils ํ™œ์šฉํ•œ null, empty ์ฒดํฌ
ยท
Backend/Jave&Spring
์ž๋ฐ”์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ ์–ธ์ œ๋‚˜ ์กฐ์‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ NullPointerException์ด๋‹ค.์‹ค์ œ๋กœ ์ตœ๊ทผ ์‹ค๋ฌด์—์„œ null ์ฒดํฌ๋ฅผ ๊ผผ๊ผผํžˆ ์•ˆํ–ˆ๋‹ค๊ฐ€ ์šด์˜์—์„œ ์—๋Ÿฌ๊ฐ€ ์ฐํžˆ๋Š” ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๐Ÿ˜ฑ ๊ทธ๋ฆฌ๊ณ  List๊ฐ€ null ์ธ์ง€์™€ ๋น„์—ˆ๋Š”์ง€๋ฅผ ๋ชจ๋‘ ํ™•์ธํ•ด์ค˜์•ผ ํ•  ์ผ์ด ์ƒ๊ฒผ๋Š”๋ฐ, Spring์—์„œ ์ œ๊ณตํ•˜๋Š” CollectionUtils์„ ์“ฐ๋ฉด ํ•œ ๋ฒˆ์— ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. 1. null vs empty์šฐ์„  null๊ณผ empty์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.์•„๋ž˜ ๊ทธ๋ฆผ์€ null๊ณผ empty์˜ ์ฐจ์ด๋ฅผ ์•„์ฃผ ์ž˜ ์„ค๋ช…ํ•ด์ฃผ๋Š” ์งค์ด๋‹ค. ์™ผ์ชฝ ์นธ์„ ๋ณด๋ฉด ํœด์ง€์˜ ์ฃผ์š” ๋‚ด์šฉ๋ฌผ์ธ ํฐ ๋ถ€๋ถ„(๋ฐ์ดํ„ฐ)๊ฐ€ ์—†๊ณ , ํœด์ง€๋ฅผ ๋‹ด๊ณ  ์žˆ๋˜ ํœด์ง€์‹ฌ(๊ฐ์ฒด)๋Š” ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.์˜ค๋ฅธ์ชฝ ์นธ์„..
[ํšŒ๊ณ ] ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ, ๋Œ€์™ธํ™œ๋™ ํšŒ๊ณ 
ยท
Project
์˜ค๋žœ๋งŒ์— ์“ฐ๋Š” ํ”„๋กœ์ ํŠธ์™€ ๋Œ€์™ธํ™œ๋™ ํšŒ๊ณ ์ž…๋‹ˆ๋‹ค๐Ÿ™‚ ํ”„๋กœ์ ํŠธ์™€ ์ทจ์—… ์ค€๋น„๋กœ ์ •์‹ ์—†๋Š” ๋‚˜๋‚ ์„ ๋ณด๋‚ด๊ณ  ์žˆ๋Š”๋ฐ, ๊ฒฝํ—˜ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ฑฐ์˜ 1๋…„ ๋™์•ˆ ์ง„ํ–‰ํ–ˆ๋˜ ํ™œ๋™์„ ๋˜๋Œ์•„ ๋ณด๊ณ  ์‹ถ์–ด์„œ ์ ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.(์ทจ์—… ์ „์— ์‹œ๊ฐ„๋˜๋Š”๋Œ€๋กœ ๋น„๊ณต๊ฐœ๋กœ ๋‚ด์šฉ์„ ์กฐ๊ธˆ์”ฉ ์ ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๊ณต๊ฐœ๋œ ์ง€๊ธˆ์€ ์ทจ์—…ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค)+ ์ง€๊ธˆ์€ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค...1. ์‹œ์ž‘ ๊ณ„๊ธฐ ์ž‘๋…„๋ถ€ํ„ฐ ์ทจ์—… ์ค€๋น„์™€ ๋ณ‘ํ–‰ํ•˜๋ฉฐ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ทจ์ค€ ์ค‘์—๋„ ๊ฐœ๋ฐœ์„ ์†์— ๋†“๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ณ , ํ˜‘์—…ํ•˜๋Š” ๊ฐ์„ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ „๊ณต๊ณผ SSAFY์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์•„์‰ฌ์› ๋˜ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์‚ฌ์šฉ ์„œ๋น„์Šค๋ฅผ ๋ชป ๋งŒ๋“ค์–ด๋ดค๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ํฌํŠธํด๋ฆฌ์˜ค์— ์“ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์งง์€ ๊ธฐ๊ฐ„ ๋™์•ˆ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋‹ˆ, ๋‹จ์ˆœํžˆ ๊ตฌํ˜„ํ•˜๊ณ  ๋ฐฐํฌํ•˜..
[Spring /JUnit] Mock ๊ฐ์ฒด์™€ ์ฃผ์†Œ๊ฐ’ ๋น„๊ต ๋ฌธ์ œ - Argument(s) are different! : org.mockito.exceptions.verification.opentest4j.ArgumentsAreDifferent
ยท
Backend/Jave&Spring
โ—๏ธ์—๋Ÿฌ ๋ฉ”์‹œ์ง€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/Jave&Spring
ํ”„๋กœ์ ํŠธ์˜ ์ดˆ๊ธฐ ๋ฒ„์ „์—๋Š” ๋”ฐ๋กœ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ ์—†์—ˆ๊ณ , React Native์—์„œ Firebase๋ฅผ ์ด์šฉํ•ด ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๋‚˜๋Š” ์ดํ›„ ํ”„๋กœ์ ํŠธ์— ํ•ฉ๋ฅ˜ํ•ด Spring์œผ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ๋„ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด Firebase๋กœ ๋ฐœ๊ธ‰๋œ ํ† ํฐ์„ ์‚ฌ์šฉํ•ด ํ”„๋ก ํŠธ์—”๋“œ์™€ ์ธ์ฆ ์ฒด๊ณ„๋ฅผ ํ†ตํ•ฉํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.  ๊ตฌํ˜„์„ ์œ„ํ•ด Firebase Token์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ๊ณ , ํ† ํฐ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด Spring Security๋„ ํ•™์Šตํ•ด์•ผ ๋๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ firebase๊ฐ€ ํฌํ•จ๋œ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ๊นŒ์ง€ ๋งŽ์€ ์‚ฝ์งˆ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ , ๊ตฌํ˜„ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค!     Firebase Token? ์šฐ์„  Firebase Token์— ๋Œ€ํ•ด ..
LeetCode 127 : Word Ladder(๋‹จ์–ด ์‚ฌ๋‹ค๋ฆฌ/๋‹จ์–ด ๋ณ€ํ™˜)
ยท
Algorithm/LeetCode
https://leetcode.com/problems/word-ladder/description/   ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์— ์žˆ๋Š” '๋‹จ์–ด ๋ณ€ํ™˜' ๋ฌธ์ œ์™€ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ์ด๋‹ค. ๋‹ค๋งŒ, ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์— ์žˆ๋Š” ๋ฌธ์ œ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 50๊ฐœ๋กœ, ์ตœ๋Œ€ ๋‹จ์–ด ๊ฐœ์ˆ˜๊ฐ€ 5000๊ฐœ์ธ LeetCode์™€๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.  ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ๋จผ์ € ํ’€๊ณ , ๋‹จ์–ด ๊ฐœ์ˆ˜๊ฐ€ ํฐ LeetCode์—์„œ ์ ์  ์ตœ์ ํ™”๋ฅผ ํ•˜๋ฉด์„œ ํ’€์—ˆ๋‹ค.     ๋ฌธ์ œ(ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ) ๋‹จ์–ด ์‚ฌ์ „์ธ `wordList`๋ฅผ ์ด์šฉํ•ด `beginWord`์—์„œ `endWord`๊นŒ์ง€ ๋ณ€ํ™˜ํ•˜๋Š” ์‹œํ€€์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.`beginWord -> S1 -> S2 -> ... -> Sk` ๋ชจ๋“  ์ธ์ ‘ํ•˜๋Š” ๋‹จ์–ด ์Œ์€ ํ•œ ๊ธ€์ž๋งŒ ๋‹ค๋ฅด๋‹ค.๋ชจ๋“  ๋‹จ์–ด๋Š” `wordList`์— ์†ํ•œ๋‹ค. `beginWord`๋Š” `w..
[Project/4th] ์ง€์—ญ ๊ธฐ๋ฐ˜ ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
ยท
Project
ํ”„๋กœ์ ํŠธ์—์„œ ์ง€์—ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ธ๊ตฌ์ง ๊ฒŒ์‹œ๊ธ€์„ ๋“ฑ๋กํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.  ์ด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„์— ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ–ˆ๊ณ , ๊ตฌํ˜„์— ๋งŽ์€ ์‹œ๊ฐ„์„ ํˆฌ์žํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ ๊ณผ์ •์„ ๋˜์งš์–ด๋ณด๊ณ  ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค!  ๊ตฌํ˜„์„ ์œ„ํ•ด ๋น„์Šทํ•˜๊ฒŒ ๋™๋„ค ๊ธฐ๋ฐ˜์˜ ์„œ๋น„์Šค(๋‹น๊ทผ๋งˆ์ผ“, ๋ฐฐ๋ฏผ..)์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๋งŽ์ด ์ฐพ์•„๋ดค์—ˆ๋‹ค. ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€๋Š” ์•Œ ์ˆ˜ ์—†์—ˆ์ง€๋งŒ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ๋‹น๊ทผ๋งˆ์ผ“ ํด๋ก  ์ฝ”๋”ฉ๊ณผ ์—ฌ๋Ÿฌ ํ…Œํฌ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋‚˜๋ฆ„๋Œ€๋กœ ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.     ๊ธฐ๋Šฅ ์†Œ๊ฐœ  ๊ตฌ์ธ๊ตฌ์ง ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ ์‹œ, ๊ตฌ์ธ๊ตฌ์ง์˜ ์ƒ์„ธ ์กฐ๊ฑด๊ณผ ๊ฑฐ์  ์ง€์—ญ(ex. ์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ ์—ญ์‚ผ๋™)์„ ์ž…๋ ฅํ•œ๋‹ค. ๊ตฌ์ธ๊ตฌ์ง ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ์‹œ, ๊ฑฐ์  ์ง€์—ญ(ex. ์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ..
giraffe_
๐ŸŒฑ ๋ฌด๋Ÿญ๋ฌด๋Ÿญ ์ž๋ผ๋‚˜๋Š” ๊ฐœ๋ฐœ ๊ธฐ๋ก