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

๋‚ด์ผ๋ฐฐ์›€์บ ํ”„91

[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 33 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง ํŠœํ„ฐ๋‹˜๊ป˜ ์ˆ˜๋ฃŒ ํ›„ ์–ด๋–ป๊ฒŒ ์ค€๋น„ํ•˜๋ฉด ์ข‹์„์ง€ ๋ฌผ์–ด๋ณด๊ธฐ์ˆ˜๋ฃŒ ํ›„์— ํ˜ผ์ž ๊ณต๋ถ€๋ฅผ ์ง„ํ–‰ํ•  ์ƒ๊ฐ์„ ํ•˜๋‹ˆ ์—„์ฒญ ๋ง‰๋ง‰ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋ญ๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ์‹œ๊ฐ„์„ ์ž˜ ๋ณด๋‚ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผ์ด ๋งŽ์ด ๋˜์—ˆ๋‹คํ˜ผ์ž ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ํŠœํ„ฐ๋‹˜๊ป˜ ์ฐพ์•„๊ฐ€์„œ ๋ฌผ์–ด๋ณด๊ณ  ๋‹ต๋ณ€์„ ์–ป๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.๊ทธ๋ ‡๊ฒŒ ํŠœํ„ฐ๋‹˜๊ป˜ ์–ป์€ ๊ฟ€ํŒ(?)๋“ค์„ ์—ฌ๊ธฐ์— ์ •๋ฆฌํ•ด๋‘˜ ์ƒ๊ฐ์ด๋‹ค!์šฐ์„  ํŠœํ„ฐ๋‹˜๊ป˜์„œ ๋ฉด์ ‘์„ ์œ„์ฃผ๋กœ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•˜์…จ๋‹ค!์ง€๊ธˆ์€ ํ˜„์—… ๊ฒฝํ—˜๋„ ์—†๊ณ , ์•„์ง ๋ชจ๋ฅด๋Š” ๊ฒƒ๋„ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ฅ์„œ๋ฅผ ๋งŽ์ด ๋‚ด๊ณ  ๋ฉด์ ‘์„ ๋งŽ์ด ๋ณด๋Ÿฌ๋‹ค๋‹ˆ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.๋ฉด์ ‘์„ ๊ณ„์† ๊ฒฝํ—˜ํ•˜๋‹ค ๋ณด๋ฉด ๋งŽ์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.๋ฉด์ ‘์—์„œ ์–ด๋–ค ์งˆ๋ฌธ๋“ค์ด ๋‚˜์—๊ฒŒ ์˜ค๋Š”์ง€, ๋‚ด๊ฐ€ ๋ชฐ๋ž๋˜ ๋ถ€๋ถ„์€ ์–ด๋””์ธ์ง€๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๊ณ  ์ค€๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค!๊ทธ๋ ‡๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์ธ ๋ฉด.. 2025. 3. 15.
[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 30 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐsearchHistoryTaskHendler๋”๋ณด๊ธฐpackage com.project.cheerha.domain.searchhistory.scheduler;import com.project.cheerha.domain.searchhistory.entity.SearchHistory;import com.project.cheerha.domain.searchhistory.repository.SearchHistoryRepository;import com.project.cheerha.domain.user.entity.User;import com.project.cheerha.domain.user.service.UserFindByService;import org.junit.ju.. 2025. 3. 11.
[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day26 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ ๋ถ„์„์„ ํ™œ์šฉํ•œ ์กฐํšŒ ๊ฐœ์„  + ์ž๋™ ์™„์„ฑ API ๋ถ„๋ฆฌํ•˜๊ธฐNori ๋ถ„์„๊ธฐ & Nori Tokenizer๊ฐœ๋…๊ฐœ๋…Nori ๋ถ„์„๊ธฐNori Tokenizer์„ค๋ช…Elasticsearch์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•œ๊ธ€ ์ „์šฉ ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐํ•œ๊ธ€์„ ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” Tokenizer์š”์•ฝํ•œ๊ธ€์„ ๋ถ„์„ํ•˜๋Š” ์™„์„ฑ๋œ ๋ถ„์„๊ธฐ (Analyzer)ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋‹จ์–ด๋ฅผ ๋‚˜๋ˆ„๋Š” Tokenizer์„ค์ • ๋ฐฉ์‹analyzer: "nori"tokenizer: "nori_tokenizer"Nori ๋ถ„์„๊ธฐํ•œ๊ธ€ ํ…์ŠคํŠธ๋ฅผ ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค."๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž" → ["๋ฐฑ์—”๋“œ", "๊ฐœ๋ฐœ", "์ž"]์–ด๋ฏธ, ์กฐ์‚ฌ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค."๊ฐœ๋ฐœ์ž๊ฐ€" → ["๊ฐœ๋ฐœ", "์ž"]์‚ฌ์šฉ์ž ์‚ฌ์ „ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.ex) "AI๊ฐœ๋ฐœ์ž" → "AI", .. 2025. 3. 8.
[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day 25 ์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง Elasticsearch ๋ถ€๋ถ„ ๊ฒ€์ƒ‰ + ์ž๋™ ์™„์„ฑ ๊ณต๋ถ€ํ•˜๊ธฐ & ๊ตฌํ˜„ํ•˜๊ธฐNori ๋ถ„์„๊ธฐ๋Š” ํ•œ๊ธ€์„ ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋ถ„์„ํ•œ๋‹ค.n-gram ๋ถ„์„๊ธฐ๋ฅผ ํ†ตํ•ด ํ…์ŠคํŠธ๋ฅผ ์ผ์ •ํ•œ ๊ธธ์ด์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ„์–ด ์ธ๋ฑ์‹ฑํ•  ์ˆ˜ ์žˆ๋‹ค.min_gram - ์ตœ์†Œmax_gram - ์ตœ๋Œ€→ ๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋„ tokenizer๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ถ€๋ถ„ ๊ฒ€์ƒ‰ + ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์จ๋ณผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ๊ณ ๋ฏผ ์‚ฌํ•ญQ. Nori-๋ถ„์„๊ธฐ๋Š” ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ๋กœ ๋ถ„์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ํ˜•ํƒœ์†Œ๊ฐ€ ์•„๋‹Œ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ์›ํ•˜๋Š” ๊ฒฐ๊ด๊ฐ’์„ ์–ป์ง€ ๋ชปํ•˜๋Š” ๊ฑธ๊นŒ?A.Nori ๋ถ„์„๊ธฐ๋Š” ํ˜•ํƒœ์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ˜•ํƒœ์†Œ๊ฐ€ ์•„๋‹Œ ๋‹จ์–ด๋Š” ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค!์‚ฌ์šฉ์ž ์‚ฌ์ „ ๋“ฑ๋ก์ด๋‚˜ ngram ๋ถ„์„๊ธฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค... 2025. 3. 6.
[ 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.