https://www.youtube.com/watch?v=Y-kImm8S-58
- ์ฃผ์ : GitHub ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ LLM ๊ธฐ๋ฐ ์ด๋ ฅ์ ์๋ ์์ฑ ์๋น์ค
- ๋์ : ์ด๋ ฅ์ ์์ฑ์ ์ด๋ ค์์ ๋๋ผ๋ ์๋น ๊ฐ๋ฐ์
- AI ๊ธฐ๋ฐ ์ด๋ ฅ์ ์์ฑ ๋ฐ ์์ : ์ฌ์ฉ์์ GitHub ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ค์ ๊ธฐ์ ์ ์ ์ถ ๊ฐ๋ฅํ ์ด๋ ฅ์๋ฅผ AI์ ํจ๊ป ์์ฝ๊ฒ ์ ์ ๋ฐ ์์
- ์ปค๋ฎค๋ํฐ ํ๊ฒฝ ์ ๊ณต: ์ฌ์ฉ์ ๊ฐ ์ด๋ ฅ์๋ฅผ ๊ณต์ ํ๊ณ , ํผ๋๋ฐฑ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋ ฅ์ ์ฅ ์ ๊ณต
- GitHub ์์ ๋ก๊ทธ์ธ์ ํตํด ํ์ ๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ์ ํ ์ ์์ต๋๋ค.
- ๋ง์ดํ์ด์ง์์ ํ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์์ GitHub ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํด AI๊ฐ ์ด๋ ฅ์๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค๋๋ค.
- ์ด๋ ฅ์๋ 3๊ฐ์ง์ ํ ํ๋ฆฟ ์ค 1๊ฐ๋ฅผ ๊ณจ๋ผ ํด๋น ํ์์ผ๋ก ์ด๋ ฅ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ์์ ํ๊ณ ์ถ์ ๋ถ๋ถ์ ์ฌ์ฉ์๊ฐ ๋๋๊ทธ ํ๊ณ ์์ฒญ์ฌํญ์ ์ ๋ ฅํ๋ฉด AI๊ฐ ์ด๋ ฅ์๋ฅผ ์์ ํด์ค๋๋ค.
- ์ง์ ์์ ํ๊ณ ์ถ์ ๋ถ๋ถ์ ์ฌ์ฉ์๊ฐ ์ง์ ์์ ํ ์ ์์ต๋๋ค.
- ์์ฑ๋ ์ด๋ ฅ์๋ PDF ํ์ผ๋ก ๋ค์ด๋ก๋ ๋ฐ์ ์ ์์ต๋๋ค.
- ์ด๋ ฅ์ ํ๋ธ์์ ์ฌ์ฉ์๋ค์ ์ด๋ ฅ์๋ฅผ ๊ณต์ ํ๊ณ ํผ๋๋ฐฑ ๋ฐ์ ์ ์์ต๋๋ค.
- ๊ด์ฌ ์๋ ์ด๋ ฅ์๋ ์ข์์๋ฅผ ๋๋ฅผ ์ ์๊ณ , ์ข์์ ๋๋ฅธ ์ด๋ ฅ์๋ง ์กฐํํ ์ ์์ต๋๋ค.
- ์ง๊ตฐ, ํ๋ ฅ, ์กฐํ์ ์, ์ข์์ ์ ๋ฑ ๋ค์ํ ํํฐ๋ก ์ด๋ ฅ์๋ค์ ์กฐํํด ๋ณผ ์ ์์ต๋๋ค.
- ์นด์นด์คํ์ด API๋ฅผ ํตํด ์ฌ์ฉ์๋ ์ ๊ธฐ ๊ฒฐ์ ๋ฅผ ์งํํด PRO ํ๋์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- FREE ํ๋ ์ฌ์ฉ์๋ ํ๋ฃจ์ 3ํ์ ์ฌ์ฉ๊ถ๋ง ์ฌ์ฉํ ์ ์๊ณ ๋ช๊ฐ์ง ์ ์ฝ์ฌํญ์ด ์กด์ฌํฉ๋๋ค.
- ๋งค์ผ ์์ ์ ๋ฐฑ์๋์์๋ ๋ฐฐ์น์์ ์ ํตํด ๋ง๋ฃ๋ ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํ๊ณ , FREE ํ๋ ์ฌ์ฉ์์ ์ฌ์ฉ๊ถ์ ์ด๊ธฐํํฉ๋๋ค.
๋ฌธ์ ์ํฉ
- ์ ๊ธฐ ๊ฒฐ์ ๋ฐ ์ฌ์ฉ๊ถ ์ด๊ธฐํ๋ฅผ ๋ฐฐ์น๋ก ์ฒ๋ฆฌํ๊ณ ์๋๋ฐ, ํ์ฌ๋ ๋ฐฐ์น ๋ก์ง๋ ์์ฒญ ๋ณต์กํ์ง ์๊ณ , ๋ฐ์ดํฐ ์๋ ๋ง์ง ์์ง๋ง, ๋์ค์ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๊ฒ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ ํ๊ฐ ์ฐ๋ ค๋จ
1. ์์ฐจ์ฒ๋ฆฌ โ ๋ณ๋ ฌ์ฒ๋ฆฌ
- ๊ธฐ์กด์ ์์ฐจ์ ์ผ๋ก ์งํํ๋ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ
- ์ฑ๋ฅ ๊ฐ์ ์ ํ์คํ ๋์ง๋ง, ๋ก๊ทธ์ ๊ฐ๊ฐ์ update ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ์คํ๋๊ณ ์๋ ๊ฒ์ ํ์ธ
2. JPA โ JDBC ์ ํ
- ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ์คํ๋๋ฉด์ ๋ฐฐ์น๋ก ์ผ๊ด์ฒ๋ฆฌ ํ๋๊ฒ์ ์ด์ ์ ์ ํ ์ด๋ฆฌ์ง ๋ชปํ๊ณ ์๋ค๊ณ ํ๋จ
- JPA์ ๊ฐ์ฒด ๋งคํ ๊ธฐ๋ฅ์ด ๋งค์ฐ ํธ๋ฆฌํ๊ธด ํ๋, ํธ๋์ญ์ ๊ด๋ฆฌ, ๋ณ๊ฒฝ ๊ฐ์ง ๋ฑ์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ด ํ์ํ์ง ์๊ณ , ์คํ๋ ค ์ค๋ฒํค๋๊ฐ ๋ฐ์ํด ์ฑ๋ฅ์ด ์ ํ๋๋ ๊ฒ์ ํ์ธ
- ๊ธฐ์กด JpaItemWriter์ JdbcBatchItemWriter๋ก ๋ณ๊ฒฝํด ์ค์ ํด๋ Chunk Size๋ฅผ ๊ทธ๋๋ก ๋ฐ์ํด Batch Update๊ฐ ๋๋๋ก ์์ ํด ์ฑ๋ฅ์ ๊ฐ์
๊ฒฐ๊ณผ
๋ฌธ์ ์ํฉ
- Resume ๋ชจ๋์์ ์ข์์๋ฅผ ๋๋ฅด๊ฑฐ๋, ๋๊ธ์ ์์ฑํ๋ ๊ฒฝ์ฐ, Notification ๋ชจ๋๋ก ์๋ฆผ ์์ฑ ์์ฒญ์ ๋ณด๋ด๋๋ฐ, ๋๊ธฐ๋ก ์์ฒญ์ ๋ณด๋ด๋ค ๋ณด๋ ์์ฒญ์ด ๋ง์์ง์๋ก ์๋ต์๋์ ์ฒ๋ฆฌ๋์ด ์ ํ๋จ
- ์๋ฆผ ์์คํ ํน์ฑ์ ๋ค์์ ์ฌ์ฉ์์ ๋๊ท๋ชจ ํธ๋ํฝ์ ์ฒ๋ฆฌํด์ผํ ๊ฒ์ผ๋ก ์์๋๋๋ฐ, ๊ธฐ์กด ๋๊ธฐ ๋ฐฉ์์ผ๋ก๋ ๊ฐ๋นํ ์ ์์ ๊ฒ ๊ฐ์ ํ ์คํธ ์งํ
JMeter ์ฐ๋ ๋ ๊ทธ๋ฃน ์ค์

1. WebClient(blocking)
ํ๊ท ์๋ต์๋ : 1304ms
99% ์ (์ต์
์ ๊ฒฝ์ฐ) : 4155ms
TPS : 365.4/sec
2. WebClient(non-blocking)
ํ๊ท ์๋ต์๋ : 987ms
99% ์ (์ต์
์ ๊ฒฝ์ฐ) : 4162ms
TPS : 477.8/sec
3. Kafka
ํ๊ท ์๋ต์๋ : 608ms
99% ์ (์ต์
์ ๊ฒฝ์ฐ) : 2245ms
TPS : 761.3/sec
ํ์ฅ์ฑ ์ธก๋ฉด์์๋ Kafka๊ฐ ํจ์ฌ ๋ ์ข์ ๊ฒ์ผ๋ก ์์๋๋, ํธ๋ํฝ์ด ์์ฒญ๋๊ฒ ๋ชฐ๋ฆฌ๋ ๊ฒ์ด ์๋๊ณ ๋น์ฉ์ ์ธ ์ธก๋ฉด์ ๊ณ ๋ คํด์ผ ํ๋ค๋ฉด WebClient ๋น๋๊ธฐ ์์ฒญ๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์
3๏ธโฃ GitHub API๋ฅผ ํตํด ์ฌ์ฉ์ ๋ ํฌ์งํ ๋ฆฌ ๋ชฉ๋ก ์กฐํ ์ฑ๋ฅ ๊ฐ์ - ์๋ต์๋ ์ฝ 60๋ฐฐ ๊ฐ์
๋ฌธ์ ์ํฉ
- GitHub API๋ฅผ ์ฌ์ฉํด์ ์กฐํํ๋ ๊ฒ์ธ๋ฐ ์๋ต์๊ฐ์ด ์๋นํ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ํฉ
- ์ฒ์ ํ์ ๊ฐ์ ํ ํ์์ธ ๊ฒฝ์ฐ, ์จ๋ณด๋ฉ ํ์ด์ง์์ ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ ์ ๋ ฅํ๊ณ ์์ ๋ ๋ฏธ๋ฆฌ ํธ์ถํด ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ์์์
- ์ปค๋ฎค๋ํฐ์์ "์ ์ด๋ ฅ์ ๋ง๋ค๊ธฐ"๋ฅผ ํด๋ฆญํ๋ฉด ๋ ํฌ์งํ ๋ฆฌ ์กฐํํ๋๋ฐ ์ฝ 3~4์ด์ ์๊ฐ์ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์ํฉ์ด ๋ฐ์
- ๊ทธ๋ฌ๋, ์๊ฐ์ด ์ค๋ ์์๋๋ ๋ถ๋ถ์ด GitHub API์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ก์ง์ ์์ ํ๊ฑฐ๋ ๊ฐ์ ํ ์ ์์
๋ฌธ์ ํด๊ฒฐ
- ๋ ํฌ์งํ ๋ฆฌ ๋ชฉ๋ก์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ์ ๊ณ , ์งง์ ์๊ฐ ์ฌ์ด์ ์ด๋ ฅ์์ ๋ฃ์ ์ ๋์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์์ฑ๋๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋จ
- ํด๋น ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํด๋๊ณ ์ด๋ค๋ฉด ์ด์ ์ด ๋งค์ฐ ํด ๊ฒ์ผ๋ก ์์
- 1์๊ฐ์ ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ Redis์ ์บ์ฑํ๋ฏ๋ก ์ฒซ ์์ฒญ ๋ง๊ณ ๋ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ด ๊ฑฐ์ ์๋๋ก ๊ฐ์
- ์บ์ฑ ์๋
- ํํฐ ์์ฒด๋ฅผ ์บ์ฑํ์๋ Cache Hit ํ๋ฅ ์ด ๋๋ฌด ๋ฎ์ ์ฑ๋ฅ ๊ฐ์ ์ด ์๋จ
- ๊ฐ ์ด๋ ฅ์ ์ ๋ณด๋ฅผ ์บ์ฑํด๋ดค์ผ๋, ํํฐ ๊ฒ์์์ ์ฟผ๋ฆฌ ์์ฑํ๋ ๋ถ๋ถ์์ ์ฑ๋ฅ์ด ๋งค์ฐ ์ ํ๋๋ ๊ฒ์ด๋ผ ๊ฐ์ ๋ถ๊ฐ
- ํํฐ ๊ฒ์ ๋ก์ง ์์ฒด๋ฅผ ์ต์ ํ ์๋
- ์ฝ๋๋ฅผ ๋ค์ ๋ณด๋ regex๋ฅผ ์ฐ๋ ๋ถ๋ถ์ด ๋ง์๋๋ฐ ํด๋น ๋ฐฉ์์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ค์บํ๋ฏ๋ก ์ฑ๋ฅ์ด ์ ํ๋๋ ๊ฒ ํ์ธ
- regex๋ฅผ is๋ก ๋ณ๊ฒฝํ๊ณ , ๋ฐฐ์ด ๋ด ๊ฐ๋ณ ์์์ ๋ํด ๋น๊ตํ ๋ elemMatch๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํด ์ผ์น ํญ๋ชฉ์ ์ฐพ์ผ๋ฉด ์ค์บ์ ์ค๋จํ๋๋ก ๊ฐ์
- ๋ถํ์ํ ์ฟผ๋ฆฌ ์กฐ๊ฑด ์ ๊ฑฐ ๋ฐ ๋จ์ํ
1๏ธโฃ ์กฐํ์ ์ง๊ณ ๊ตฌํ์ ๋์ผ ์ฌ์ฉ์๊ฐ ์๋ก๊ณ ์นจํ ๋๋ง๋ค ๊ณ์ํด์ ์กฐํ์๊ฐ ์ฆ๊ฐ
- ํน์ ํ ์กฐ๊ฑด ์์ด ํด๋น ์ด๋ ฅ์๋ฅผ ์กฐํํ ๋๋ง๋ค ์กฐํ์๊ฐ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ์กฐํ์ ์ ๋ณด์ ์ ๋ขฐ์ฑ์ ๋จ์ด๋จ๋ฆด ์ ์๋ค๊ณ ํ๋จ
- Redis์ ์ด๋ ฅ์ ID์ ์ฌ์ฉ์ IP ์ฃผ์๋ฅผ ํฉ์น ๋ฌธ์์ด์ 1์๊ฐ ๋์ ์ ์ฅํ๋๋ก ์ค์ ํด ํด๊ฒฐ
- ์ฒ์ ์ด๋ ฅ์๋ฅผ ์กฐํํ ๊ฒฝ์ฐ ์กฐํ์๊ฐ ์ฆ๊ฐํ์ง๋ง ๊ทธ ์ดํ 1์๊ฐ ๋์์ ๋์ผ ์ด๋ ฅ์๋ฅผ ์กฐํํด๋ ์กฐํ์ ์ง๊ณ๋์ง ์์
- Redis์ TTL์ค์ ์ ํตํด ํธ๋ฆฌํ๊ฒ ๊ด๋ฆฌ ๊ฐ๋ฅ
2๏ธโฃ MongoDB์์ ํ์ด์ง๋ค์ด์ ์ ์ฉ์ 10๋ง๊ฑด ๋ฐ์ดํฐ ๊ธฐ์ค ์ด 8000 ํ์ด์ง์์ ์ฝ 4000 ํ์ด์ง๋ถํฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์๋ฌ ๋ฐ์
- MongoDB๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ ์ง๊ณ ํ์ดํ๋ผ์ธ ์ํ์ ๋ฉ๋ชจ๋ฆฌ์์๋ง ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํ์ธ
- ์ด ๊ณผ์ ์์ ๋๋์ ๋ฌธ์๋ฅผ ์ ๋ ฌํ๊ณ ์ง๊ณํ๋ค๋ณด๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ณผํด ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒ
- ํนํ ํ์ด์ง ์ฒ๋ฆฌ์ ์ ์ฒด ํ์ด์ง์ ์ ์ฒด ๋ฌธ์ ๊ฐ์ ์ง๊ณ ๊ณผ์ ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๊ณผ๋จ
- allowDiskUse(true) ์ค์ ์ ํตํด ๋์คํฌ๋ฅผ ์ถ๊ฐ๋ก ์ฌ์ฉํด ์ฐ์ฐ์ ์๋ฃํ ์ ์๋๋ก ํ์ฉํด ํด๊ฒฐ
- Payment ๋ชจ๋์ ๋ฐฐ์น์์
๊ณผ Member ๋ชจ๋์ ๋ฐฐ์น์์
์ ์์ฐจ์ ์ผ๋ก ์งํํด์ผ ํ๋ ์ํฉ
- Payment ๋ชจ๋์ ์์ ์๋ฃ ์ด๋ฒคํธ๋ฅผ Kafka๋ฅผ ํตํด ๋ฐ์ผ๋ฉด Member ๋ชจ๋์ด ์์ ์ ์์
- ๊ทธ๋ฌ๋ Kafka์ ํธ๋์ญ์ ๊ณผ Spring Batch์ ํธ๋์ญ์ ์ด ์ถฉ๋ํ๋ฉด์ ๋ฐฐ์น์์ ์ด ์คํจ
- Kafka ์ด๋ฒคํธ ํธ๋ค๋ฌ์ Transactional ์ค์ ์ Propagation.NOT_SUPPORTED ๋ก ์ค์ ํด ๊ธฐ์กด์ ์์ฑ๋ ํธ๋์ญ์ ์ด ์๋ ์์ ํธ๋์ญ์ ์์ด ์งํํ๋๋ก ์ค์
- Batch Job์ ์คํ์ํค๋ ๋ก์ง์ ๋ณ๋์ ๋ฉ์๋๋ก ๋นผ๊ณ , Propagation.REQUIRES_NEW ๋ก ์ค์ ํ์ฌ ์๋ก์ด ํธ๋์ญ์ ์์ ์คํํ๋๋ก ์ค์ ํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ






