๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ199 [ TIL ] ์ต์ข ํ๋ก์ ํธ_Day 16 ์ค๋ ์งํํ ๋ด์ฉ๋ค ๐ง ์ง๊ธ๊น์ง ์งํํ ๋ด์ฉ๋ค ์ ๋ฆฌV1 (MVP ๊ตฌํ)1. ์ ์ฒด ์ฑ์ฉ ๊ณต๊ณ ์กฐํ API๊ธฐ๋ฅ์ฌ์ฉ์๊ฐ ์ ์ฒด ์ฑ์ฉ ๊ณต๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๊ณ ํํฐ๋ง ๋ฐ ๊ฒ์์ด๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ์กฐํํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.์ธ๋ถ ์ฌํญ๊ธฐ๋ฅ์ค๋ช ์ ์ฒด ๋ฐ์ดํฐ ์กฐํ๋ณ๋์ ๊ฒ์์ด๋ ํํฐ ์กฐ๊ฑด ์์ด ๋ชจ๋ ์ฑ์ฉ ๊ณต๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์ต๋๋ค.ํํฐ๋ง์ ํตํ ๋ฐ์ดํฐ ์กฐํ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์กฐ๊ฑด์ ๋ฐ๋ผ ์กฐ๊ฑด์ ์ค์ ํ์ฌ ์ฑ์ฉ ๊ณต๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์ต๋๋ค.- ํํฐ ์กฐ๊ฑด: ์ง์ญ, ๊ณ ์ฉ ํํ, ํ๋ ฅ, ์ต์/์ต๋ ๊ฒฝ๋ ฅ, ์ฑ์ฉ ์์/๋ง๊ฐ ๊ธฐ๊ฐ, ์๊ฒฉ ์๊ฑด๊ฒ์์ด๋ฅผ ํตํ ๋ฐ์ดํฐ ์กฐํํน์ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ฑ์ฉ ๊ณต๊ณ ์ ๋ชฉ์ ๊ธฐ์ค์ผ๋ก ๊ฒ์ํ์ฌ ๊ด๋ จ ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ์กฐํํ ์ ์์ต๋๋ค.๋ฐ์ดํฐ ์ ๋ ฌ์ฑ์ฉ ๊ณต๊ณ ๋ ์ต์ ๋ฑ๋ก์(createdAt D.. 2025. 2. 27. [ TIL ] ์ต์ข ํ๋ก์ ํธ_Day 15 ์ค๋ ์งํํ ๋ด์ฉ๋ค ๐ง 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. [ ํธ๋ฌ๋ธ ์ํ ] Elasticsearch keyword ํ๋์ ์ค์์ฑ (term ์ฟผ๋ฆฌ๊ฐ ์๋ ๋) Elasticsearch์์ term ์ฟผ๋ฆฌ๊ฐ ๋์ํ์ง ์๋ ๋ฌธ์ ํด๊ฒฐ ๋ฌธ์ ์ํฉ์ฑ์ฉ ๊ณต๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ์ Spring API์ Elasticsearch๋ฅผ ์ฐ๋ํ์ฌ ๊ตฌํํ๋ ์ค, ์๊ฒฉ ์๊ฑด(requiredSkills)์ term ์ฟผ๋ฆฌ๋ฅผ ํตํด ํํฐ๋งํ๋๋ ๋ฐ์ดํฐ๊ฐ ์ ํ ์กฐํ๋์ง ์๋ ํ์์ด ๋ฐ์ํ๋ค.๊ธฐ์กด ์ฟผ๋ฆฌ// ์๊ฒฉ ์๊ฑด ํํฐ๋งif (requestDto.getRequiredSkill() != null) { boolQueryBuilder.filter(f -> f .term(t -> t .field("requiredSkills") .value(requestDto.getRequiredSkill()) ) );}์์ธ ๋ถ์๋จผ์ Ela.. 2025. 2. 25. [ TIL ] ์ต์ข ํ๋ก์ ํธ_Day 14 ์ค๋ ์งํํ ๋ด์ฉ๋ค ๐ง match vs wildcardmatch์ญ์์ธ(Inverted Index)์ ํ์ฉํ๋ ํํ ์คํธ ๊ฒ์(Full-Text Search) ๋ฐฉ์analyzed ๋ ํ๋์์ ํ ํฐํ(Tokenization)์ ํ ์คํธ ์ ๊ทํ๋ฅผ ๊ฑฐ์ณ ๊ฒ์์ด๋ฅผ ๋งค์นญ๋์ ๋ฐฉ์๊ฒ์์ด๋ฅผ ํ ํฐํํ๊ณ , ์ ์ฌํ ๋จ์ด๊น์ง ํฌํจํด์ ๊ฒ์์ผ๋ฐ์ ์ผ๋ก text ํ์ ํ๋์์ ์ฌ์ฉํ๋ฉฐ, standard, ngram, edge_ngram ๋ฑ์ ๋ถ์๊ธฐ๊ฐ ์ ์ฉํ ํฐ ๋จ์๋ก ๊ฒ์ํ๋ฏ๋ก ํน์ ์์น์ ์๋ ๋ฌธ์๋ ์์ ํ ์ผ์น ๊ฒ์์๋ ์ ํฉํ์ง ์์์ฅ์ ๋น ๋ฅธ ๊ฒ์ ์๋ (์ญ์์ธ์ ํ์ฉํ์ฌ ์ต์ ํ๋จ)์ ์ฌํ ๊ฒ์์ด๋ ๋งค์นญ ๊ฐ๋ฅ (ํ ํฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์)์์ฐ์ด ๊ฒ์(NLP)๊ณผ ์ ์ด์ธ๋ฆผ๋จ์ ๋ถ๋ถ ๋ฌธ์์ด ๊ฒ์(contains ๊ฐ์ ๊ฒ์)์๋ ์ ํฉํ.. 2025. 2. 24. [ TIL ] ์ต์ข ํ๋ก์ ํธ_Day 11 ์ค๋ ์งํํ ๋ด์ฉ๋ค ๐ง Elasticsearch ๊ธฐ๊ฐ ๊ฒ์ ์กฐํ ์ฑ๋ฅ ๋น๊ตํ๊ธฐhiringStartAt๊ณผ hiringEndAt์ ํตํด ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ์ Elasticsearch๋ฅผ ์ ์ฉํ์ ๋ ์ฑ๋ฅ์ด ์ผ๋ง๋ ํฅ์๋๋์ง ํ์ธํด๋ดค๋ค. Elasticsearch๋ฅผ ์ ์ฉํ๊ธฐ ์ ํ์ ์๋๋ฅผ JMeter๋ฅผ ์ด์ฉํ์ฌ ์ฑ๋ฅ์ ๋น๊ตํด ๋ณด์๋ค.100๊ฐ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ณ , 10์ด ๋์ 10ํ๋ฅผ ์คํํ์ฌ ์ด 1,000๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํ ์คํธ๋ฅผ ์งํํ๋ค.Elasticsearch ์ ์ฉํ๊ธฐ ์ ํ ์๋๊ฐ ์ฐจ์ด๊ฐ ๋์ ๋๊ฒ ์ค์ด๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค. ์ ์ฉํ๊ธฐ ์ ์๋ 8ms์๋๋ฐ, Elasticsearch๋ฅผ ์ ์ฉํ๊ณ ๋๋ 1ms๊น์ง ๋จ์ด์ก๋ค.ํ ์คํธ ์ฝ๋ ๊ณต๋ถํ๊ธฐ์์ง ๊ณผ์ ์์ ์์ ํ๋ ๊ฒ๋ง ํด๋ณด๊ณ ์ค์ ๋ก ๋ด๊ฐ ์ง์ ํ ์ค.. 2025. 2. 21. ์ด์ 1 2 3 4 5 ยทยทยท 34 ๋ค์