๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ๏ธ ์ตœ์ข…ํ”„๋กœ์ ํŠธ28

[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 24 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐRedis์™€ MySQL ๋™๊ธฐํ™” ๋กœ์ง ๋ฆฌํŒฉํ† ๋ง๋”๋ณด๊ธฐ์ˆ˜์ •ํ•˜๊ธฐ ์ „ ๋กœ์ง@Component@RequiredArgsConstructorpublic class HistoryScheduler { private final UserFindByService userFindByService; private final HistoryRepository historyRepository; private final RedisTemplate redisTemplate; /** * Redis์— ์ €์žฅ๋œ ๊ฒ€์ƒ‰๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ DB์— ์ €์žฅํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. * * 30๋ถ„๋งˆ๋‹ค ์‹คํ–‰์ด ๋˜๋ฉฐ, ๊ฐ ์‚ฌ์šฉ์ž์˜ ๊ฒ€์ƒ‰์–ด๋ฅผ Redis์—์„œ ๊ฐ€์ ธ์™€์„œ DB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. .. 2025. 3. 5.
[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 19 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง ๊ฐœ์ธ ๋ฐœํ‘œ ์˜์ƒ ๋ฌธ์„œ ์ค€๋น„ํ•˜๊ธฐ1. ์˜์‚ฌ๊ฒฐ์ •_์ „์ฒด ์ฑ„์šฉ ๊ณต๊ณ  ์กฐํšŒ API (ํ•„ํ„ฐ๋ง, ๊ฒ€์ƒ‰์–ด ํฌํ•จ)์— Elasticsearch ์ ์šฉ[ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ ]์‚ฌ์šฉ์ž๊ฐ€ ์กฐ๊ฑด ์„ ํƒ ๋ฐ ๊ฒ€์ƒ‰์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•˜๋Š” API๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.Elasticsearch๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.[ ์ฃผ์š” ๋กœ์ง ]์ฃผ์š” ๋กœ์ง์€ ์ด ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์ง‘๋‹ˆ๋‹ค.์ฒซ์งธ, ์ง€์—ญ, ๊ฒฝ๋ ฅ ๋“ฑ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด๊ฐ€ ์—†๋‹ค๋ฉด ์ „์ฒด ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.๋‘˜์งธ, ์ง€์—ญ, ํ•™๋ ฅ, ๊ฒฝ๋ ฅ, ์ฑ„์šฉ ๊ธฐ๊ฐ„ ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ์„ ํƒํ•˜์—ฌ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์…‹์งธ, ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๊ฒ€์ƒ‰์–ด๊ฐ€ ํฌํ•จ๋œ ์ฑ„์šฉ ๊ณต๊ณ  ์ œ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ จ.. 2025. 3. 1.
[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 18 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง ์ค‘๊ฐ„ ๋ฐœํ‘œ ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ์ด๋ฒˆ ์ค‘๊ฐ„ ๋ฐœํ‘œ๋ฅผ ๋‚ด๊ฐ€ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค! ์ตœ์ข… ๋ฐœํ‘œ๋Š” ํ•  ์ž์‹ ์ด ์—†์–ด์„œ....PPT์— ๋“ค์–ด๊ฐ€์•ผ ํ•  ๋‚ด์šฉ ์ •๋ฆฌํ•˜๊ณ  ๋‚ด์šฉ๋“ค ์ดํ•ดํ•˜๋ฉด์„œ ๋ฐœํ‘œ ๋Œ€๋ณธ ์ž‘์„ฑํ•˜๊ณ  ํ•˜๋‹ค ๋ณด๋‹ˆ ํ•˜๋ฃจ๊ฐ€ ์ง€๋‚˜๊ฐ„ ๊ฒƒ ๊ฐ™๋‹ค..๊ฐœ์ธ ๊ตฌํ˜„์‚ฌํ•ญ ๋‚ด์šฉ ์ •๋ฆฌํ•˜๊ธฐ๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„๋ฅผ ์œ„ํ•ด ๊ฐœ์ธ์ด ์ง„ํ–‰ํ•œ ๊ตฌํ˜„์‚ฌํ•ญ๋“ค์„ ์ •๋ฆฌํ–ˆ๋‹ค. ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ • ํ๋ฆ„์„ ๋Œ€์ถฉ ์ •๋ฆฌํ•ด๋†จ๊ณ  ๋‚ด์ผ ์•„์นจ๋ถ€ํ„ฐ ํ•ด์„œ ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ ํ›„ ์˜์ƒ ์ดฌ์˜ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค! ๋‚ด์ผ ๊ณ„ํš โฐ๊ฐœ์ธ ์˜์ƒ ์ค€๋น„ํ•˜๊ธฐ๋ฐœํ‘œ ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ+ ์ถ”๊ฐ€ ๊ณ„ํš์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค ~_~ 2025. 2. 27.
[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 17 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง ์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ์ •๋ฆฌV1 (MVP ๊ตฌํ˜„)1. ์ „์ฒด ์ฑ„์šฉ ๊ณต๊ณ  ์กฐํšŒ API๊ธฐ๋Šฅ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด ์ฑ„์šฉ ๊ณต๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ  ํ•„ํ„ฐ๋ง ๋ฐ ๊ฒ€์ƒ‰์–ด๋ฅผ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.์„ธ๋ถ€ ์‚ฌํ•ญ๊ธฐ๋Šฅ์„ค๋ช…์ „์ฒด ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ณ„๋„์˜ ๊ฒ€์ƒ‰์–ด๋‚˜ ํ•„ํ„ฐ ์กฐ๊ฑด ์—†์ด ๋ชจ๋“  ์ฑ„์šฉ ๊ณต๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ•„ํ„ฐ๋ง์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ์ฑ„์šฉ ๊ณต๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.- ํ•„ํ„ฐ ์กฐ๊ฑด: ์ง€์—ญ, ๊ณ ์šฉ ํ˜•ํƒœ, ํ•™๋ ฅ, ์ตœ์†Œ/์ตœ๋Œ€ ๊ฒฝ๋ ฅ, ์ฑ„์šฉ ์‹œ์ž‘/๋งˆ๊ฐ ๊ธฐ๊ฐ„, ์ž๊ฒฉ ์š”๊ฑด๊ฒ€์ƒ‰์–ด๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒํŠน์ • ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ฑ„์šฉ ๊ณต๊ณ  ์ œ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ด€๋ จ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๋ฐ์ดํ„ฐ ์ •๋ ฌ์ฑ„์šฉ ๊ณต๊ณ ๋Š” ์ตœ์‹  ๋“ฑ๋ก์ˆœ(createdAt D.. 2025. 2. 27.
[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 16 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง Elasticsearch ๋™์  ์ฟผ๋ฆฌ ์ž‘์„ฑํ•˜๊ธฐํ•„ํ„ฐ๋ง์ด ํ•„์š”ํ•œ ์กฐ๊ฑด๋“ค์„ ๋™์  ์ฟผ๋ฆฌ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. ํ•„ํ„ฐ๋ง์— ๋“ค์–ด๊ฐ€๋Š” ์กฐ๊ฑด๋“ค์ด ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์•„์„œ Elasticsearch์˜ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์› ๋‹ค. Bool ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ must์™€ filter ์ค‘์—์„œ ์„ ํƒํ•ด์•ผ ํ–ˆ๊ณ , ์ €์žฅํ•˜๋Š” ํ•„๋“œ๋„ keyword์™€ text ์ค‘์—์„œ ์„ ํƒํ•ด์•ผ ํ–ˆ๋‹ค. ๊ฐ๊ฐ์˜ ํŠน์ง•์„ ์ฐพ์•„๋ณด๋ฉด์„œ ๋ญ๊ฐ€ ๋” ์ ํ•ฉํ•œ์ง€ ์ƒ๊ฐํ•ด๋ณด๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.ํ•˜์ง€๋งŒ filter ์•ˆ์—์„œ๋„ term ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์„ ํƒํ•ด์•ผ ํ–ˆ๊ณ , ๋งŽ์€ ์„ ํƒ์‚ฌํ•ญ์ด ์กด์žฌํ–ˆ๋‹ค. ํŠœํ„ฐ๋‹˜์˜ ํžŒํŠธ๋ฅผ ํ†ตํ•ด ๋™์  ์ฟผ๋ฆฌ๋ฅผ ์™„์„ฑํ–ˆ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ๋„ ํ™•์ธํ–ˆ๋‹ค.API์™€ ์—ฐ๋™ํ•œ ํ›„ ์„ฑ๋Šฅ ํ™•์ธํ•˜๊ธฐAPI๋ฅผ ์—ฐ๋™ํ•œ ํ›„ Po.. 2025. 2. 25.
[ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ] Elasticsearch ์ธ๋ฑ์Šค ์‚ฝ์ž… ๋ฐ ์กฐํšŒ ์‹คํŒจ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ธฐ (์ธ๋ฑ์Šค, ๋งคํ•‘, ID ์ค‘๋ณต) Elasticsearch ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋ฐ ์กฐํšŒ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ • Elasticsearch์— CSV ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋˜์ง€ ์•Š์•„ ์›์ธ์„ ๋ถ„์„ํ•˜๊ณ  ํ•ด๊ฒฐํ–ˆ๋˜ ๊ณผ์ •์„ ์ •๋ฆฌํ•ด ๋ดค๋‹ค.๋ฐœ์ƒํ•œ ๋ฌธ์ œ์™€ ์›์ธ ๋ถ„์„1.  ์ธ๋ฑ์Šค ๋„ค์ด๋ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฌธ์ œ ์ƒํ™ฉElasticsearch์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” "job-opening"์œผ๋กœ ์„ค์ •ํ–ˆ์ง€๋งŒ, ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๋•Œ๋Š” "job_opening"์œผ๋กœ ์กฐํšŒํ•˜๋Š” ์‹ค์ˆ˜๋ฅผ ๋ฒ”ํ–ˆ๋‹ค.Kibana์—์„œ ์กฐํšŒ ์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•˜๋‹ค.ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ธ๋ฑ์Šค๋ช…์„ ์ƒ์ˆ˜(static final)๋กœ ์ •์˜ํ•˜์—ฌ, ์ƒ์„ฑ๊ณผ ์กฐํšŒ ์‹œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ–ˆ๋‹ค.public static final String INDEX_NAME = "job-opening"; 2. ๋™์  ๋งคํ•‘(@Postconstr.. 2025. 2. 25.