์ „์ฒด ๊ธ€

๊ฒ€์ƒ‰๊ฒฐ๊ณผ 64 ๊ฐœ
[Docker] Docker ์ •๋ฆฌ

Docker(๋„์ปค)๋ž€? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ด๋‹ค. ์ปจํ…Œ์ด๋„ˆ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ๋“ค์ด ํŒจํ‚ค์ง•๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์ •๋ง์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. Dockerfile์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํ•จ๋œ ๋„์ปค ์ด๋ฏธ์ง€ ์ƒ์„ฑ -> ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋ฐ ๋นŒ๋“œ Dockerfile ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ํŒŒ์ผ ๊ตฌ์„ฑ ์š”์†Œ FROM COPY RUN CMD ENTRYPOINT LABEL ENV ARG ... Docker Image Build Docker Image๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ…œํ”Œ๋ฆฟ(ํ‹€) ์—ญํ•  docker image build -t ์ด๋ฏธ์ง€[:ํƒœ๊ทธ๋ช…] -f Dockerfile๋ช… ..

[Elasticsearch] Spring Boot์—์„œ ์š”์ฒญํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜๋ฐ›๋Š” ๋ฒ•

A ์ธ๋ฑ์Šค์—์„œ ๋ฝ‘์•„์˜จ ๋ฆฌ์ŠคํŠธ๋ฅผ B ์ธ๋ฑ์Šค์— ์š”์ฒญํ•˜์—ฌ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์•„์•ผ ํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ–ˆ๋‹ค. ์ด ๋•Œ ์š”์ฒญํ•œ ๋ฆฌ์ŠคํŠธ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฐ›๊ธธ ์›ํ–ˆ์ง€๋งŒ Elasticsearch์—์„œ๋Š” ์ด๋Ÿฐ ๊ธฐ๋Šฅ์ด ์—†์—ˆ๋‹ค... ๊ทธ๋ž˜์„œ ๊ตฌ๊ธ€๋ง์„ ํ–ˆ๋”๋‹ˆ ์—ญ์‹œ ๋จผ์ € ๊ณ ๋ฏผํ•ด๋ณธ ๋ถ„๋“ค์ด ๊ณ„์…จ๋‹ค. [๐Ÿ‘๐Ÿป ์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ] https://danthetech.netlify.app/Backend/how-sort-by-specific-order-using-elasticsearch Search ๊ฒฐ๊ณผ๋ฅผ ์š”์ฒญํ•œ ์ˆœ์„œ๋Œ€๋กœ Sortingํ•˜์—ฌ Return ๋ฐ›๋Š”๋ฒ• ๊ธ€์„ ์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ ์ด ๋ธ”๋กœ๊ทธ๋Š” Elasticsearch(์ดํ•˜ ES)์— ๊ด€ํ•œ ๊ธ€์ด์ง€๋งŒ, ES์™€์˜ ํ†ต์‹ ์„ python์„ ์ด์šฉํ•ด์„œ ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ url์„ ์ด์šฉํ•œ query๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ถ„์—๊ฒŒ๋Š” ..

[Elasticsearch] SpringBoot์— Elasticsearch ์—ฐ๋™ํ•˜๊ธฐ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ Elasticsearch๋กœ ๊ฒ€์ƒ‰์—”์ง„์„ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ”„๋ก ํŠธ์—์„œ ๊ฒ€์ƒ‰์–ด๋ฅผ SpringBoot ์„œ๋ฒ„๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด SpringBoot์—์„œ Elasticsearch์— api๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋กœ์ง์„ ์งœ์•ผํ•œ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ๋Š” Elasticsearch์˜ Search API๋งŒ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๋‹ค!!! ๐Ÿ›  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ SpringBoot 2.7.3 Java 8 Elasticsearch 7.9.1 ๐Ÿ““ ์ฐธ๊ณ ์ž๋ฃŒ [์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ ์‹ค๋ฌด ๊ฐ€์ด๋“œ] ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋‚ด์šฉ์ด ๋„ˆ๋ฌด ์ž˜ ๋‚˜์™€์žˆ์–ด์„œ ์ฐธ๊ณ ํ•˜์˜€๋‹ค. ์•„์‰ฌ์šด ์ ์€ ์ €์ž๋Š” ์—˜๋ผ์Šคํ‹ฑ์„œ์น˜ 6๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ... ๋‚˜๋Š” ์ด ์ฑ…์˜ High Level Rest ํด๋ผ์ด์–ธํŠธ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ฒ•์„ ์ ์šฉํ•ด๋ณด์•˜๋‹ค. ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป build.gradle dependency ์ถ”๊ฐ€! d..

[SpringBoot] Spring Rest Docs ์ ์šฉ (gradle 7๋ฒ„์ „)

์‹ธํ”ผ์—์„œ ์ง„ํ–‰ํ•œ ๊ณตํ†ตํ”„๋กœ์ ํŠธ ๋•Œ API ๋ช…์„ธ์„œ๋กœ Swagger๊ฐ€ ์•„๋‹Œ Spring Rest Docs๋ฅผ ์ฑ„ํƒํ–ˆ๋‹ค. ๊ทธ ๋•Œ ์ ์šฉํ•˜๋Š” ๋ฒ•์„ ๋…ธ์…˜์— ๋Œ€์ถฉ ์ ์–ด๋†จ๋Š”๋ฐ ์ด๋ฒˆ์— ์ ์šฉํ•˜๋ฉด์„œ ๊น”๋”ํ•˜๊ฒŒ(?) ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๐Ÿ‘๐Ÿป ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ์„ ๋•Œ Spring Rest Docs์˜ ์žฅ์  - ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ ๋ฌธ์„œํ™”๊ฐ€ ๋˜๊ธฐ๋•Œ๋ฌธ์— ํ•ญ์ƒ ์ตœ์‹ ํ™” ๋˜์—‰์žˆ๊ณ  ํ’ˆ์งˆ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. - ๋ฌธ์„œํ™” ๋์„ ๋•Œ Swagger๋ณด๋‹ค๋Š” ํ”„๋ก ํŠธ๊ฐ€ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. - Request, Response์— ๊ด€ํ•œ ์„ค๋ช…์„ ์–ด๋…ธํ…Œ์ด์…˜์ด ์•„๋‹Œ ํ…Œ์ŠคํŠธ ์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด spring ์„œ๋ฒ„์˜ ์ฝ”๋“œ๊ฐ€ ์ข€ ๋” ๊น”๋”ํ•ด๋ณด์ธ๋‹ค. ๐Ÿ‘Ž๐Ÿป Spring Rest Docs์˜ ๋‹จ์  - ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์งœ๋Š”๊ฒŒ ๋„ˆ๋ฌด๋„ˆ๋ฌด๋„ˆ๋ฌด ๊ท€์ฐฎ๋‹ค... ์ •๋ง๋กœ... ๋‹จ์ ์„ ์ž˜ ๊ทน๋ณตํ•˜๋ฉด ๋ฟŒ๋“ฏํ•œ..

[Item12] toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ

toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ Object์˜ ๊ธฐ๋ณธ toString ๋ฉ”์„œ๋“œ๋Š” ์ปค์Šคํ…€์œผ๋กœ ์ž‘์„ฑ๋œ ํด๋ž˜์Šค์— ์ ํ•ฉํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†๊ณ , ํด๋ž˜์Šค์ด๋ฆ„@ํ•ด์‹œ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. toString์˜ ์ผ๋ฐ˜ ๊ทœ์•ฝ ์ค‘... ๊ฐ„๊ฒฐํ•˜๋ฉด์„œ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ์˜ ์œ ์ตํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ ๋ชจ๋“  ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋ผ ์‹ค์ „์—์„œ toString์€ ๊ทธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ์ฃผ์š” ์ •๋ณด ๋ชจ๋‘๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ–ˆ์„ ๋•Œ {Jenny=PhoneNumber@123dsdfa12l} ์ด๋Ÿฐ ์ •๋ณด๋ณด๋‹ค๋Š” {Jenny=707-349-1284}๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ›จ์”ฌ ์œ ์ตํ•œ ์ •๋ณด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. โžก๏ธ ์Šค์Šค๋กœ๋ฅผ ์™„๋ฒฝํžˆ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•œ๋‹ค. ๊ณ ๋ คํ•ด๋ณผ ์‚ฌํ•ญ ๋ฐ˜ํ™˜๊ฐ’์˜ ํฌ๋งท์„ ๋ฌธ์„œํ™”ํ• ์ง€ ์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ „ํ™”๋ฒˆํ˜ธ๋‚˜ ํ–‰๋ ฌ ๊ฐ™..

[Item11] equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ

equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ equals๋ฅผ ์žฌ์ •์˜ํ•œ ํด๋ž˜์Šค ๋ชจ๋‘์—์„œ hashCode๋„ ์žฌ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด hashCode์˜ ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์–ด๊ธฐ๊ฒŒ ๋˜์–ด ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ HashMap, HashSet ๋“ฑ์˜ ์›์†Œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค. - equals ๋น„๊ต์— ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด, hashCode ๋ฉ”์„œ๋“œ๋Š” ๋ช‡ ๋ฒˆ์„ ํ˜ธ์ถœํ•ด๋„ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. - equals๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๊ฐ™๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค๋ฉด, hashCode๋Š” ๋˜‘๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. - equals๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅด๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋”๋ผ๋„, hashCode๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค. equals๊ฐ€ ๋‘ ๊ฐ์ฒด๋ฅผ ๊ฐ™๋‹ค๊ณ ..

[Item10] equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ

equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ ํด๋ž˜์Šค๋ฅผ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๋ฉด ์ธ์Šคํ„ด์Šค๋Š” ์˜ค์ง ์ž๊ธฐ ์ž์‹ ๊ณผ๋งŒ ๊ฐ™๊ฒŒ ๋œ๋‹ค. ๋‹ค์Œ ์ƒํ™ฉ์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด ์žฌ์ •์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ตœ์„ ์ด๋‹ค. ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋‹ค. ์ธ์Šคํ„ด์Šค์˜ '๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ(logical equality)'์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†๋‹ค. ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์žฌ์ •์˜ํ•œ equals๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์—๋„ ๋”ฑ ๋“ค์–ด๋งž๋Š”๋‹ค. ํด๋ž˜์Šค๊ฐ€ private์ด๊ฑฐ๋‚˜ package-private์ด๊ณ  equals ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ผ์ด ์—†๋‹ค. equals๋ฅผ ์žฌ์ •์˜ํ•ด์•ผ ํ•  ๋•Œ?! ์ƒ์œ„ ํด๋ž˜์Šค์˜ equals๊ฐ€ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ์„ ๋น„๊ตํ•˜๋„๋ก ์žฌ์ •์˜๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์ฃผ๋กœ ๊ฐ’ ํด๋ž˜์Šค๋“ค์ด ์—ฌ๊ธฐ ํ•ด๋‹นํ•œ๋‹ค. equals๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ ๋”ฐ๋ผ์•ผํ•  ์ผ๋ฐ˜ ๊ทœ์•ฝ ๋ฐ˜์‚ฌ์„ฑ(reflexivity) : null์ด ์•„๋‹Œ ๋ชจ..