๐ฅ๏ธ ์ต์ข ํ๋ก์ ํธ28 [๊ธฐ๋ฅ ๊ฐ์ ] “31s ๊ฑธ๋ฆฌ๋ ์ฟผ๋ฆฌ๋ฅผ 146ms๋ก ์ค์ธ ์ด์ผ๊ธฐ” ๐ ์ฐ๋ น๋๋ณ ์ธ๊ธฐ ํค์๋, 31s์์ 146ms๊น์ง! ์ฑ๋ฅ ๊ฐ์ ์ฌ์ ๐ญ ๋ฌธ์ ์ธ์ ์๋น์ค ๋ด์์ ์ ๊ณตํ๋ "์ฐ๋ น๋๋ณ ์ธ๊ธฐ ํค์๋" ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ํต๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถ์ฒ ๊ธฐ๋ฅ๊ณผ ์ฐ๋๋๋ ํต์ฌ ๊ธฐ๋ฅ์ด์๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋๋ง๋ค ์๋ต ์๋๊ฐ ์ง๋์น๊ฒ ๋๋ฆฌ๋ค๋ ํผ๋๋ฐฑ์ด ๋ค์ด์ค๊ธฐ ์์ํ๋ค. ๐ข ์ฑ๋ฅ ํ ์คํธ ๊ฒฐ๊ณผ ๋ก์ปฌ ์กฐํ ์๊ฐ : 31.49์ด๋ฐฐํฌ ์๋ฒ : 504 Gateway Timeout ๋ฐ์JMeter ๋ถํ ํ ์คํธ : ์๋ฌ์จ 90% ์ด์ ๐ ํต๊ณ ํ์ด์ง์กฐ์ฐจ ์ด๋ฆฌ์ง ์๋ ์ํฉ..์ด์ ํ๊ฒฝ์์๋ ์ฌ์ค์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ํ์๋ค. ๐ ํ์ฌ ๊ตฌ์กฐ ๋ถ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ธฐ์กด ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด์๋ธ ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ๋ค๋จ๊ณ ์ง๊ณ ๋ฐฉ์์ผ๋ก ์์ฑ๋์ด ์์๋ค. ํด๋น ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ผ๋ก ๋์ํ.. 2025. 4. 4. [๊ธฐ๋ฅ ๊ฐ์ ] ์๋ ์์ฑ + ๋ถ๋ถ ๊ฒ์, ๊ฐ์ด ์ฐ๋ฉด ์ ๋๋ ์ด์ (feat. Nori ์ ์ฉ) ๐ ํ๊ธ ํํ์ ๋ถ์๊ธฐ๋ก ๊ฒ์ ์ ํ๋ ๊ฐ์ ํ๊ธฐ: Nori + ์๋์์ฑ ๋ถ๋ฆฌ ์ ๋ต ๐ญ ๋ฌธ์ ์ธ์ ๊ธฐ์กด์๋ ์ฑ์ฉ ๊ณต๊ณ ๊ฒ์์ ๋ถ๋ถ ๊ฒ์(N-gram)๊ณผ ์๋ ์์ฑ(Edge N-gram) ๊ธฐ๋ฅ์ ํจ๊ป ์ ์ฉํ๊ณ ์์๋ค.๊ธฐ๋ณธ์ ์ธ ๊ฒ์์ ๊ฐ๋ฅํ์ง๋ง, ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ๋ ์ ํํ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ๋ฐ์ํ๋ค. ๐ ์์์ฌ์ฉ์๊ฐ "์นด๋"๋ผ๋ ๋จ์ด๋ฅผ ํฌํจํ ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ์ฐพ๊ณ ์ถ์ ๋, ์๋ ์์ฑ ๊ธฐ๋ฅ์ด ํจ๊ป ๋์ํ๋ฉด์์นด๋ก ์์ํ๋ ์ ํ ๋ค๋ฅธ ์ฑ์ฉ ๊ณต๊ณ ๋ค๊น์ง ํจ๊ป ๊ฒ์๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.๊ฒฐ๊ณผ์ ์ผ๋ก ์ํ๋ ๊ฒฐ๊ณผ๋ณด๋ค ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๊ฐ ํจ๊ป ๋ ธ์ถ๋๋ฉด์ ์ฌ์ฉ์๋ ์ ํํ ๊ฒ์์ด ์ด๋ ต๋ค๋ ์ธ์์ ๋ฐ๊ฒ ๋์๋ค. ๐งฑ ๊ธฐ์กด ์ธ๋ฑ์ค ๊ตฌ์กฐ์ ํ๊ณ ๊ธฐ์กด ์ธ๋ฑ์ค ์ค์ ์์๋ title, requiredSkills.. 2025. 4. 3. [ํธ๋ฌ๋ธ์ํ ] N-gram๊ณผ Edge-Ngram์ ํจ๊ป ์ผ๋๋? ๊ฒ์ ์ ํ๋ ๋ฌธ์ ์ ํด๊ฒฐ ๊ณผ์ ๐ฅ ์์์น ๋ชปํ ๊ฒ์ ๊ฒฐ๊ณผ? N-gram + Edge-Ngram์ด ๋ง๋ ๋ฌธ์ ๐ ๋ฐ์ํ ๋ฌธ์ ์ฒ์์๋ ๊ฒ์ ๊ธฐ๋ฅ์ ๊ฐํํ๊ธฐ ์ํด ๋ถ๋ถ ๊ฒ์(N-gram)๊ณผ ์๋ ์์ฑ(Edge-Ngram) ๋ ๊ธฐ๋ฅ์ ๋์์ Elasticsearch์ ์ ์ฉํ๋ค.๊ฒ์์ด๊ฐ ์ค๊ฐ์ ํฌํจ๋ ๋จ์ด๋ ์ฐพ๊ณ , ๋์์ ์ ๋ ฅํ ๊ธ์์ ์๋ถ๋ถ์ผ๋ก ์๋ ์์ฑ๊น์ง ๋๋๋ก ํ ๊ฒ์ด์๋ค.ํ์ง๋ง... ์ค์ ๊ฒ์์์ ์์ํ์ง ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋ฑ์ฅํ๊ธฐ ์์ํ๋ค. ๐ ์์ 1) ๊ฒ์์ด: ๋ฏธ๋ ธ ๋ฏธ๋ ธ๊ฐ ํฌํจ๋ ์ ํํ ๋จ์ด๋ฅผ ์ฐพ๊ณ ์ถ์์ง๋ง,N-gram๊ณผ Edge-Ngram์ด ํจ๊ป ์ ์ฉ๋ ํ๋๊ฐ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋๋ค.๊ฒฐ๊ณผ์ ์ผ๋ก ๊ด๋ จ ์๋ ํค์๋๊น์ง ํฌํจ๋ ๊ฒฐ๊ณผ๊ฐ ๋ ธ์ถ๋์๋ค. ๐ ์์ 2) ๊ฒ์์ด: ์นด๋์นด๋๋ฅผ ๊ฒ์ํ์ ๋, ์นด๋์ ๋ฌด๊ดํ ์นด๋ก ์์ํ๋ ๋จ์ด.. 2025. 4. 3. [๊ธฐ๋ฅ ๊ฐ์ ] ์ฑ์ฉ ๊ณต๊ณ ๊ฒ์ ์๋ 48ms → 14ms, ์ด๋ป๊ฒ ๊ฐ๋ฅํ์๊น? ๐ QueryDSL์์ Elasticsearch๋ก, ์ฑ์ฉ ๊ณต๊ณ ์กฐํ ์ฑ๋ฅ ๊ฐ์ ๐ญ ๋ฌธ์ ์ธ์ ์ฒ์์๋ MySQL + QueryDSL ๊ธฐ๋ฐ์ผ๋ก ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ์กฐํํ๊ณ ์์๋ค.๋จ์ ์กฐํ ์ฑ๋ฅ ์์ฒด๋ ๋น๊ต์ ๋น ๋ฅธ ํธ์ด์๋ค.ํ์ง๋ง ์๋น์ค๊ฐ ์ฑ์ฅํ๋ฉด์ ๋ถ๋ถ ๊ฒ์์ด๋ ์๋ ์์ฑ ๋ฑ ๊ฒ์ ํธ์ ๊ธฐ๋ฅ์ ํ์ฅํด์ผ ํ ํ์์ฑ์ด ์ปค์ก๊ณ , ์ด๋ฅผ QueryDSL๋ง์ผ๋ก ๊ตฌํํ๊ธฐ์ ๊ตฌ์กฐ์ ํ๊ณ๊ฐ ์์๋ค.ํนํ ์ ์ฒด ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ๋์์ผ๋ก ํค์๋ ๊ธฐ๋ฐ ๊ฒ์์ด๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ๋ ๊ธฐ๋ฅ์ Elastisearch๊ฐ ๋ ์ ํฉํ ๊ธฐ์ ์ด๋ผ๊ณ ํ๋จํ๋ค. ๐ Elasticsearch ๋์ ๋ฐฐ๊ฒฝ์ฑ์ฉ ๊ณต๊ณ ๊ฒ์ ๊ธฐ๋ฅ์ ๋จ์ ํค์๋ ์กฐํ์ ๊ทธ์น์ง ์๊ณ ๋ถ๋ถ ๊ฒ์, ์๋ ์์ฑ ๋ฑ ๊ฒ์ ํธ์ ๊ธฐ๋ฅ์ ํ์ฅํ ํ์๊ฐ ์์๋ค.ํ์ง๋ง MyS.. 2025. 4. 3. [๊ธฐ๋ฅ ๊ฐ์ ] ๊ฒ์์ด ์ ์ฅํ ๋๋ง๋ค DB์ ์ธ๋ฑ์ค ๊ฐฑ์ … ๊ด์ฐฎ์๊น? ๐ Redis๋ฅผ ํ์ฉํ ์ต๊ทผ ๊ฒ์ ๊ธฐ๋ก ์กฐํ ์ฑ๋ฅ ๊ฐ์ ๊ธฐ ๐ญ ๋ฌธ์ ์ธ์ ์ฌ์ฉ์๊ฐ ๊ฒ์์ด๋ฅผ ์ ๋ ฅํ ๋๋ง๋ค ํด๋น ๊ฒ์์ด๊ฐ ์ฆ์ DB์ history ํ ์ด๋ธ์ ์ ์ฅ๋๊ณ ์์๊ณ ,์กฐํ ์์ฒญ๋ ๋งค๋ฒ DB์์ ์ง์ ์ฒ๋ฆฌํ๊ณ ์์๋ค.์ฒ์์๋ ํฐ ๋ฌธ์ ๊ฐ ์์์ง๋ง,์ฌ์ฉ์ ์๊ฐ ๋์ด๋๋ฉด์ ๊ฒ์ ์์ฒญ๊ณผ ์ ์ฅ ์์ฒญ์ด ๋งค์ฐ ๋น๋ฒํด์ก๊ณ , ์์ฐ์ค๋ฝ๊ฒ ์๋์ ๊ฐ์ ๊ณ ๋ฏผ์ด ์๊ฒผ๋ค. โ ๋งค ์์ฒญ๋ง๋ค ์ ์ฅ์ด ์ผ์ด๋๋ฉด ์ธ๋ฑ์ค๋ฅผ ๊ณ์ ๊ฐฑ์ ํด์ผ ํ๋๋ฐ, ๊ทธ ๋น์ฉ์ ๊ด์ฐฎ์๊น?โ ์ค์๊ฐ ์ฒ๋ฆฌ์๋ DB ๋์ ๋ ๊ฐ๋ฒผ์ด ์ ์ฅ์๊ฐ ๋ซ์ง ์์๊น? ๐ ๋์ ๋ฐฐ๊ฒฝ: ๊ณ ๋ฏผ ๋์, ์ Redis์์๊น?์กฐํ์ ์ ์ฅ ์์ฒญ์ด ๋งค์ฐ ๋น๋ฒํด์ง๋ฉด์, ๊ธฐ์กด์ฒ๋ผ ๋งค๋ฒ DB์ ์ ๊ทผํ๋ ๊ตฌ์กฐ๋์ธ๋ฑ์ค ์ฌ์์ฑ ๋น์ฉ๊ณผ ์๋ต ์ง์ฐ์ด๋ผ๋ ์ธก๋ฉด์์ ํจ์จ์ ์ด์ง ์์๋ค.์ฒ์์ DB ํ.. 2025. 4. 2. [ํธ๋ฌ๋ธ์ํ ] @Setting์ ์ผ๋๋ฐ ์ ์ธ๋ฑ์ค๊ฐ ์ ๋ ๊น? ๐งจ Elasticsearch ์ธ๋ฑ์ค ์ค์ ์ด ์ ๋๋ค?! @Setting ์คํจ ๊ธฐ๋ก ๐ฅ๋ฌธ์ ์ํฉSpring Boot + Spring Data Elasticsearch ํ๊ฒฝ์์Elasticsearch์์ ๊ฒ์ ์ฑ๋ฅ ๊ฐ์ ์ ์ํด n-gram, edge-ngram ๊ธฐ๋ฐ ์ธ๋ฑ์ค ์ค์ ์ ์ ์ฉํ๋ ค๊ณ ํ๋ค.์๋์ ๊ฐ์ด job-opening-settings.json์ ์์ฑํ๊ณ ,Spring Data Elasticsearch์ @Setting ์ด๋ ธํ ์ด์ ์ ํตํด ์๋์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ค.๋๋ณด๊ธฐ job-opening-settings.json { "settings": { "analysis": { "filter": { "ngram_filter": { "type": "ng.. 2025. 4. 2. ์ด์ 1 2 3 4 5 ๋ค์