- ํ๋ก์ ํธ ์ด๋ฆ : Godok(๊ณ ๋ , Go่ฎ)
- ํ๋ก์ ํธ ๋ชฉํ
- ๊ฒ์ ์ต์ ํ : 10,000,000 ๊ฑด ์ด์์ ์ฑ ์ ๋ณด๋ฅผ ๋ค์ํ ๊ฒ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ณ ๊ฐ์๊ฒ ์ ๊ณต
- ๋์์ฑ ์ ์ด : ๋์ผํ ์ฑ ์ ๋ํด ๋์์ ์ฌ๋ฌ ๊ฐ์ ์ฃผ๋ฌธ ๋ฐ์ ์ ๋๋ฝ ์๋ ์ฃผ๋ฌธ ์ฒ๋ฆฌ
- ๊ฒ์ ์๋ ์์ฑ
- ๊ธฐ๊ฐ๋ณ ๋ญํน ์๋น์ค : ์ผ์ ๊ธฐ๊ฐ ๋์ ํ๋งค๋ ์ฑ ์ ๋ณด๋ฅผ ๊ณ ๊ฐ์๊ฒ ์ ๊ณตํ์ฌ ์ฑ ์ถ์ฒ
- ํ๋ก์ ํธ ๋๋ฌ๋ณด๊ธฐ
- | ์ด๋ฆ | ์ฃผํน๊ธฐ | |
---|---|---|---|
๐ฉ๐ปโ๐ป | ์์ค์ | https://github.com/hobambi | |
๐ฉ๐ปโ๐ป | ์ดํ๋น | https://github.com/HBLEEEEE | |
๐ฉ๐ปโ๐ป | ์กฐ์ฑ์ฌ | https://github.com/ssungcohol | |
๐ฉ๐ปโ๐ป | ํ์นํ | https://github.com/gkstmdgus |
๊ฒ์ ์ฑ๋ฅ ๊ฐ์
- ์ผ๋ฐ์ธ๋ฑ์ค - ํํฐ์ index ์ ์ฉ ํ ํค์๋๋ like๋ฅผ ์ด์ฉํ ๊ฒ์
- ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ง ์์ผ๋ฉด ํํฐ ์ ์ฉ ์ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ง ๋ชปํ๋ค. ํํฐ์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ์ฌ ๊ฒ์ ์๋๊ฐ ํฅ์๋๊ธฐ๋ ํ์ง๋ง ๋ชจ๋ ํํฐ๋ฅผ ์ ์ฉํ๊ธฐ์๋ ๋ฌด๋ฆฌ๊ฐ ์์๋ค.
- ํ๋์ ์ฟผ๋ฆฌ์๋ ํ๋์ ์ธ๋ฑ์ค๋ง ์ ์ฉ์ด ๊ฐ๋ฅ
- ๋ชจ๋ ํํฐ๋ฅผ ๋ณตํฉ ์ธ๋ฑ์ค๋ก ๋ฌถ์ผ๋ฉด ๊ธฐ๋ฅ์ด ํ์
- like๋ก ๋ชจ๋ ๋ฌธ์๋ฅผ ํ์ํ๋ ๊ฒ์ ๋นํจ์จ์
- Full text ์ธ๋ฑ์ค - title์ Fulltext ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ ๊ฒ์
- Mysql์ Fulltext index๋ฅผ ์ ์ฉํด ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๋ ค๊ณ ์๋. Fulltext index๋ ์ญ์์ธ ๋ฐฉ์์ผ๋ก ์์ดํ๋ฏ๋ก ํค์๋ ๊ฒ์ ์ ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ฌ์ฃผ์ง๋ง, ํ๊ณ์ ๋ ๋ช ํ.
- ๊ธฐ๋ณธ parser์ ํ๊ณ
- ํํฐ๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ฉ ์ ๋๋ ค์ง๋ ํ์ ๋ฐ์
- ์ ํ๋ ๋ฌธ์ ๋ฐ์
- Elastic Search - Mysql ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ์ฌ ๊ฒ์ ์์ง์ผ๋ก ์ฌ์ฉ
- ํ๊ธ ํํ์ ๋ถ์๊ธฐ (Nori Tokenizer)๋ฅผ ์ฌ์ฉํ์ฌ title, author๋ฅผ ์ญ์์ธ
- Ngram, Stop-word๋ณด๋ค ์ธ๋ฐํ ํ๊ธ ๋ถ์์ด ๊ฐ๋ฅํด์ก๊ณ ๊ฒ์ ๊ฒฐ๊ณผ์ ์ ํ๋๊ฐ ์ฌ๋ผ๊ฐ๋ค.
- ํ๋์ ์ฟผ๋ฆฌ์ ์ฌ๋ฌ ์ธ๋ฑ์ค ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ฒ์ ์๋๊ฐ ํฅ์
๋์์ฑ ์ ์ด
- Optimistic vs Pessimistic
- Optimistic
- NONE :ย ๋ณ๋์ ์ต์
์ ์ฌ์ฉํ์ง ์์๋ Entity์ @Version์ด ์ ์ฉ๋ ํ๋๋ง ์์ผ๋ฉด ๋๊ด์ ์ ๊ธ์ด ์ ์ฉ
- OPTIMISTIC(read) :ย Entity ์์ ์์๋ง ๋ฐ์ํ๋ ๋๊ด์ ์ ๊ธ์ด ์ฝ๊ธฐ ์์๋ ๋ฐ์ํ๋๋ก ์ค์ ํฉ๋๋ค.์ฝ๊ธฐ์์๋ ๋ฒ์ ์ ์ฒดํฌํ๊ณ ํธ๋์ญ์
์ด ์ข
๋ฃ๋ ๋๊น์ง ๋ค๋ฅธ ํธ๋์ญ์
์์ ๋ณ๊ฒฝํ์ง ์์์ ๋ณด์ฅ
- OPTIMISTIC_FORCE_INCREMENT(write) : ๋๊ด์ ์ ๊ธ์ ์ฌ์ฉํ๋ฉด์ ๋ฒ์ ์ ๋ณด๋ฅผ ๊ฐ์ ๋ก ์ฆ๊ฐ ์ํค๋ ์ต์
- Pessimistic
- PESSIMISTIC_READ : dirty read๊ฐ ๋ฐ์ํ์ง ์์ ๋๋ง๋ค ๊ณต์ ์ ๊ธ(Shared Lock)์ ํ๋ํ๊ณ ๋ฐ์ดํฐ๊ฐย UPDATE,ย DELETEย ๋๋ ๊ฒ์ ๋ฐฉ์ง ํ ์ ์์ต๋๋ค.
- PESSIMISTIC_WRITE :ย ๋ฐฐํ์ ์ ๊ธ(Exclusive Lock)์ ํ๋ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์
์์ย READ,ย UPDATE,ย DELETEย ํ๋ ๊ฒ์ ๋ฐฉ์ง ํ ์ ์์ต๋๋ค.
- ESSIMISTIC_FORCE_INCREMENT :ย ์ด ์ ๊ธ์ย PESSIMISTIC_WRITE์ ์ ์ฌํ๊ฒ ์๋ ํ์ง๋งย @Version์ด ์ง์ ๋ Entity์ ํ๋ ฅํ๊ธฐ ์ํด ๋์
๋์ดย PESSIMISTIC_FORCE_INCREMENTย ์ ๊ธ์ ํ๋ํ ์ ๋ฒ์ ์ด ์
๋ฐ์ดํธ ๋ฉ๋๋ค.
- Optimistic๊ณผ Pessimistic ์คํ ๊ฒฐ๊ณผ
- ํ์ฌ ์๋น์ค์์๋ PESSIMISTIC_WRITE๋ง ์ ๋๋ก ์๋ํ๋ค.
- Optimistic์ ์ฑ๋ฅ์ ์ข์ง๋ง ์ฃผ๋ฌธ์ด ํญ์ฃผํ๋ ๊ฒฝ์ฐ ํธ๋์ญ์
์ ์์ํ ๋ ์ ์ฅํ ๋ฒ์ ๊ฐ๊ณผ ํธ๋์ญ์
์ด ๋๋๊ณ ๋ ํ ์ฒดํฌํ ๋ฒ์ ๊ฐ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ด ๋ ์ ์๋ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ์งํํ๋ ์๋น์ค์๋ ์ ํฉํ์ง ์๋ค.
- ๋ํ Force_Increment ์ต์
์ ๊ฒฝ์ฐ ์ง์ํ๋ DB์ ์ข
๋ฅ๊ฐ ์ ํด์ ธ ์๋๋ฐ, ํ์ฌ ์ฌ์ฉ ์ค์ธ mysql์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- PESSIMISTIC_READ๋ ์ด๋ค ํธ๋์ญ์
์ด ์์ ์ค์ผ ๋ ๋ค๋ฅธ ํธ๋์ญ์
์์ ์ฝ๊ธฐ๋ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ํ์ฌ ์คํ์์๋ ๋ชจ๋ ํธ๋์ญ์
๋ค์ด ์์ ํ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ ์ ํฉํ์ง ์๋ค.
- ํ์ฌ ํ๋์ ํ
์ด๋ธ์๋ง ์์ฒญ์ด ์์ผ๋, ์บ์ ์๋ฒ๋ฅผ ํตํด Lock๋ฅผ ์ ์ ํ๊ณ , ์ต๋ ์ ์ ๊ฐ๋ฅ ์๊ฐ๊ณผ ์ต๋ ๋๊ธฐ ์๊ฐ์ ์ค์ ํ์ฌ DeadLock ์ํ์ด ์๋ Redisson ๋ถ์ฐ๋ฝ์ ์ถํ ์๋น์ค ํ์ฅ์ ๊ณ ๋ คํ์ฌ ์ ์ฉํ์๋ค.
- Redisson Distribution Lock ์ ์ฉ ๋ฌธ์ ๋ฐ
- ๋ฌธ์
- ํ์ฌ lock์ ์ ๊ฑฐํ ์ค๋ ๋์์ lock์ ํด์ ํ๊ณ , ํธ๋์ญ์
์ ์ข
๋ฃํ๋ฉฐ ๋ณ๊ฒฝ ์ฌํญ commit
- ๋ค์ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์๋ฃ ์ ์ lock์ ์ทจ๋ํ๊ณ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์
- ์ฆ, ๋จ์ ์ฌ๊ณ ๋์ด ์์ ๋๊ธฐ ์ ์ ์ฌ๊ณ ๋์ ์ฝ์ด์ค๋ฉฐ ๋์์ฑ ๋ฌธ์ ๋ฐ์
- ํด๊ฒฐ ๊ณผ์
- ํธ๋์ญ์
์ข
๋ฃ ์ดํ lock์ ํด์ ํ์ฌ, ์์ ์ด ์๋ฃ ๋ ํ ๋ค์ ์ค๋ ๋๊ฐ ์ฌ๊ณ ๋์ ์ฝ๋๋ก๊ณ ํจ
- ์ฌ๊ณ ๋ ์์ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ ์ฃผ๋ฌธ ๋ฉ์๋์๋ ํธ๋์ญ์
์์ด, ์ฌ๊ณ ๋ ์์ ๋ฉ์๋์๋ง ํธ๋์ญ์
์ ๊ฑธ์ด์ค
=> ํธ๋์ญ์
์ ์ด์ค์ผ๋ก ๊ฑธ์ด์ค ๊ฒฝ์ฐ, ๋ชจ๋ ํธ๋์ญ์
commit ์์ ์ด ์ธ๋ถ ํธ๋์ญ์
์์ ์ผ๋ก ํต์ผ ๋๊ธฐ ๋๋ฌธ
- ํด๊ฒฐ
- DB ์ ์ฅ ๋ฉ์๋์๋ง @Transaction์ ๋จ๊ฒจ, ๋ฐ์ดํฐ ์์ ์ดํ Lock์ ํด์ ํ๊ฒ ํจ
์ํท ๋ธ๋ ์ด์ปค
- ํ์ฌ ์๋น์ค์์ ์๋ผ์คํฑ ์์น๊ฐ ์ฐ์ด๋ ์์ฒญ
- ๊ฒ์ ๋ฒํผ์ ๋๋ฌ์ ์นดํ
๊ณ ๋ฆฌ + ํค์๋๋ฅผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ
- ๊ฒ์ ํ์ด์ง์์ ํํฐ ์ ์ฉ ๋ฒํผ์ ๋๋ฌ์ ํํฐ ๊ฒ์์ ํ๋ ๊ฒฝ์ฐ
- ํ์ด์ง ๋ฒํผ์ ๋๋ฌ ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๊ฒฝ์ฐ
- ํ์ด์ง ๋ฌธ์ ๋ฐ์
- ํ์ฌ ํ์ด์ง ๋ฐฉ์ = ์ปค์ ํ์ด์ง๋ค์ด์
- Mysql๊ณผ ์๋ผ์คํฑ ์์น์ ์ปค์ ๊ฐ์ด ๋ฌ๋ผ ๋ฌธ์ ๋ฐ์ (์๊ณ ๋ฆฌ์ฆ์ด ๋ค๋ฆ)
- ์ปค์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํ์ด์ง ์ด๋์์๋ ์ถ๊ฐ์ ์ธ ์์
์ด ํ์
- ๋์ฒ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค - 2๊ฐ์ง
- ์ด๋ค ํ์ด์ง์ ์๋์ง ๊ฐ์ ์ํท ์คํ์ 1ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋ค.
- ์์ฒญํ ํ์ด์ง ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ปค์ ๊ฐ์ ๋ชจ๋ ์ฐพ์์์ ์ปค์ ๋ฆฌ์คํธ๋ฅผ ๊ต์ฒดํ๋ค.
- ์ ํ ๋ฐฉ๋ฒ : ์ฒซ ๋ฒ์งธ ์๋๋ฆฌ์ค ์ ํ๊ณผ ์ด์
- ์ ์ ํ ๋ฐฉ๋ฒ์ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ์ ํฉ
- ํ์ง๋ง, ์ฐ๋ฆฌ ์๋น์ค์๋ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ
- ์ด์ : Mysql์ ์๋
- ์ ์ด์ ์๋ผ์คํฑ ์์น๋ก ๋์ด๊ฐ ์ด์ ๊ฐ Mysql์ ์๋์๋ค. ๋ง์ ํํฐ๋ฅผ ์ ์ฉํ๋ฉด ํ ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ค์ ๋ฌธ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ํ ํ์ด์ง๊ฐ ์๋ ์ฌ๋ฌ ํ์ด์ง์ ์ปค์๋ฅผ ๋ชจ๋ ์ฐพ์์ค๋ ๋ก์ง์ Mysql์ด ํ๋ฉด, ๊ฒฐ๊ณผ๋ ์๋ด๋ ํ์์์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ธ์จ๋ค๊ณ ํ๋ค ํด๋ผ์ด์ธํธ๋ ํ์ผ์์ด ๋ก๋ฉ์ฐฝ์ ๋ณด๋ฉฐ ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
Batch
1. Batch ์ค๊ณ ๋ฐ ์์ธ ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ๋ฐ์ดํฐ์ ์ค์์ฑ๊ณผ DB ์ ๊ทผ์ฑ
- DB์ ์์ฃผ ์ ๊ทผํ๋ ๊ฒ์ ์ข์ง์๋ค. ๋ฐ๋ผ์ ์ค๋ ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ฅผ Redis์์ ์ ์ฅํ๊ณ ์๋ค๊ฐ 02์์ ์ผ๊ด์ ์ผ๋ก DB์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์ํ๋ค.
- ํ์ง๋ง ์ฃผ๋ฌธ ๋ฐ์ดํฐ๋ ์๋น์ค์์ ๋งค์ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ ํ๋ฐ์ฑ์ด ๋์ Redis์ ์ ์ฅํด ๋๋ ๊ฒ์ ์ข์ง ์๋ค.
- ๋ฐ๋ผ์ redis์๋ ๊ฐ์ฅ ๋ง์ด ์ฐพ๊ฒ ๋๋ main ํ์ด์ง์์ ์ด์ ํ๋ฆฐ ์ฑ
๋ค์ ๋ํ ranking๋ง ๋ฃ์ด ๋๋ ๊ฒ์ผ๋ก ์ค๊ณํ๋ค.
- ์์ธ ์ฒ๋ฆฌ
- ํ์ฌ๋ ๊ฐ์ง ์ฃผ๋ฌธ์ ์ถ๊ฐํ์ฌ ์ด์ ์ bestseller 1~8๋ฑ๊น์ง ๋ค์ด๊ฐ๋, ์ค์ ์๋น์ค์์๋ ๊ทธ๋ด ์ ์๋ค.
- ๋ฐ๋ผ์ ์ด์ ํ๋ฆฐ ์ฑ
์ข
๋ฅ๊ฐ 8๊ถ ๋ฏธ๋ง์ธ ๊ฒฝ์ฐ ๋ถ์กฑํ ์ฑ
๋ค์ ์ฑ์ ์ฃผ๋๋ก ๊ตฌ์ํ์๋ค.
- Batch ์ ์ฉ ๋ฌธ์ ๋ฐ ํด๊ฒฐ
- ๋ฌธ์
- summonRank()๋ผ๋ ๋ณต์กํ ๋ฉ์๋๊ฐ service์ ๋ค์ด๊ฐ ์๋๋ฐ, batch ๋ก ๋นผ์ฃผ๊ณ ์ถ์์ผ๋ ๋ถ๊ฐ๋ฅํ์๋ค.
- ์์ธ
- @Transaction ์์ batch๋ฅผ ๋ฃ์ ์ ๊ฐ ์๋ค. Jobrepository์ ๊ธฐ๋ณธ ์ค์ ์ด ์ธ๋ถ ํธ๋์ญ์
์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- batch ๋ด๋ถ์์ @Transactional์ ๋ถ์ธ ๋ฉ์๋๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ธ๋ฐ ๋ง์ฝ ๋ ํฐ Transaction์์ ๋ค์ด๊ฐ ์๋ค๋ฉด ๋ด๋ถ transaction์ด ๋๋๋ ์ปค๋ฐ์์ ์ด ๋๋ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํด๊ฒฐ
- ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ TransactionTemplate๊ฐ ์๋ก์ด ํธ๋์ญ์
์ ์์ฑํ๋๋ก ๊ฐ์ ํ์ฌ ์ธ๋ถ ํธ๋์ญ์
๊ณผ ๋ณ๊ฐ๋ก ์ปค๋ฐํ๊ฒ ๋ง๋ค์ด ๋ฐ๋๋ฝ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ํ์ง๋ง ์ธ๋ถ ํธ๋์ญ์
๊ณผ ๋ด๋ถ ํธ๋์ญ์
์ StepExecution ์ํ์ ์ผ๊ด์ฑ์ด ๊นจ์ง ์ ์๊ฒ ๋ ์ ๋ ์๋ค.
- ๋ฐ๋ผ์ Job ์คํ ์ธ๋ถ์์ ์์๋ก ํธ๋์ญ์
์ ์์ํ์ง ๋ชปํ๋๋ก ํ ๊ฒ์ด๋ค.