-
Notifications
You must be signed in to change notification settings - Fork 0
Description
๐ ๏ธ ๋ฆฌํฉํ ๋ง์ด ํ์ํ ๋ถ๋ถ
ํ์์ด ์ถ์ ์๋์, ์๊ฐ ์ ์ฒญ ๋ฐ์ดํฐ๊ฐ ๋ง์ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ์ ์์ฒญ๋ ์๊ฐ์ด ์์๋๋ ๊ฒ์ ํ์ธํ๋ค,
(1000๊ฑด ๋์์์ฒญ์ 10๋ง๊ฑด์์ ์์ 600๊ฑด ์ด์ ํ์์์)
๊ทธ๋์ ์ธ๋ฑ์ฑ์ ํตํด ํด๊ฒฐ์ ์๋ํ๋ ์ฝ 6.5์ด๋ง์ ์ ๋ถ ์ฑ๊ณตํ๋ค -> #57
๊ทธ๋ฌ๋, 6.5์ด๋ ์ฌ์ ํ ์ ์ ์ ์ฅ์์ ์ฌ์ ํ ๋๋ฆฌ๋ค๊ณ ์๊ฐ๋์ด, ๊ฐ์๋ฅผ ์ด ๋ ์๊ฐ์ ์ ๋ณด๋ฅผ ์บ์ฑ์ ํด๋ณด๊ธฐ๋ก ํ๋ค.
๊ณํ
1. ์บ์ฑ ๋์
- ์ด๋ฆฐ ๊ฐ์ ์ ๋ณด (hash ์ด์ฉํด ๊ฐ์ id๋ฅผ key๋ก, ๊ฐ์ ์ ๋ณด๋ค์ field์ value๋ก ์ ์ฅ)
- ์๊ฐ์์ด ์ถ์ ๊ฐ๋ฅํ ๊ฐ์ ๋ชฉ๋ก (key : ํ์ id, value : ์ด๋ฆฐ ๊ฐ์ id ๋ชฉ๋ก set)
2. ๊ฐ์ ๋ ์ถ์ ๊ณผ์
- ์๊ฐ์๋ค์ ์์ ์ด ์น์ธ๋ ๊ฐ์ ์ค, ์ถ์ ๊ฐ๋ฅํ ๊ฐ์๊ฐ ์๋์ง ์บ์ ๋จผ์ ํ์ธํ๋ค.
- ์๋ ๊ฒฝ์ฐ ์บ์ฑ๋ ์ด๋ฆฐ ๊ฐ์ ์ ๋ณด์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์๋ ๊ฒฝ์ฐ DB์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์ถ์์ด ๊ฐ๋ฅํ ์ํ์์ ์๋ก ์๊ฐ ์น์ธ๋๋ ํ์์ ๊ฒฝ์ฐ ์น์ธ ์ดํ ๋ฐ๋ก ์บ์ฑ๋๋ค.
3. ์์ ์ ๋ณด๋ ๊ฐ์ ํธ๋์ญ์ , ํ์ ์ ๋ณด๋ ๋น๋๊ธฐ ์์ ํธ๋์ญ์ (+Event๋ฅผ ํตํ ๊ตฌํ)
์ค๊ณ ๊ณผ์ ์์ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋๋ฐ, ๊ฒฐ๊ตญ ๊ตฌํ์ค Event๋ฅผ ๋ฐํํด์ ์บ์ฑ์ ๋ฐ๋ก ์ฒ๋ฆฌํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค
- ๊ฐ์ฌ๊ฐ ์์
์ ์ด ๋ ๊ธฐ๋ํ ํ์์ ์๋ต์ "์์
์ ์ฌ๋ ํ์" ์์ฒด์ ๋ํ ๊ฒ์ด์ฌํ๋ค.
"์ด๋ฆฐ ์์ ", "์๊ฐ์"์ ์ ์ฅํ๋ ์์ ์ ์์ ์ ์ฌ๋ ํ์๋ฅผ ์์ฒญํ๋ ๊ฐ์ฌ ์ชฝ์์ ๊ด์ฌ์ฌ๊ฐ ์๋๋ค. - ๋ฐ๋ผ์, "์์ ์ ์ฌ๋ ํ์"์๋ ๋ฐ๋ก ์ฒ๋ฆฌํ๊ณ , ์์ ์ด ์ด๋ฆฌ๋ฉด ๋น ๋ฅด๊ฒ ๊ทธ์ ๋ํ ์๋ต์ ๋ฐํํด ์ฃผ๊ณ ์ถ๋ค.
- ์์ ๋ณ๊ฐ์ ํธ๋์ญ์ ์ ์ด์ฉํด ์บ์ฑ ์์ฒด๊ฐ ์คํจํ๋๋ผ๋ ์ํฅ์ ๋ฐ์ง ์์์ผ๋ฉด ์ข๊ฒ ๋ค.
- ํ์ง๋ง, "์์ ์ ์ฌ๋ ํ์"์ ํธ๋์ญ์ ์ด ์คํจํ๋ค๋ฉด ์บ์ฑ์ ์งํ๋์ง ์์์ผ๋ฉด ์ข๊ฒ ๋ค.
์ด ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑ์ํค๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด Event๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ๋์๋ค.
์ฒ์์ Event๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋จ์ ์๋น์ค๋ก ๊ตฌํํ๊ณ , @Async ์ @Transactional(propagation = NESTED๋ก ํด๊ฒฐํ ์ ์์ ์ค ์์๋ค.
ํ์ง๋ง, ํ
์คํธ ํด๋ณธ ๊ฒฐ๊ณผ ์์๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ถ๋ชจ ํธ๋์ญ์
์ด ์คํจํด๋ ์์ ํธ๋์ญ์
์ด ์คํจํ์ง ์์๋ค.
์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด TransactionalListner์ Phase ์ค์ ์ After Commit์ผ๋ก ๋๋ฉด์ ํธ๋ฆฌํ๊ฒ ์ปค๋ฐ์์๋ง ์ ์ฅ๋๋ฉด์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ํ๊ฒ ๋ง๋ค ์ ์๋ค.
์ข ํฉํ๋ฉด ๋ด ๋ชฉํ๋ ์๋์ ๊ฐ์ด ์ด๋ฃฐ ์ ์๋ค.
@Async๋ฅผ ํตํด ์์ ์ ์ฌ๋ ํ์์ ๋ํ ์๋ต์ ๋ฐ๋ก ๋๋ ค์ฃผ๊ณ , ์บ์ฑ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ- Transaction์ Require New ์ต์ ์ ํตํด ์บ์ฑ์ ์ํ ์์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์์ฑ
- Phase ์ค์ ์ ํตํด, "์์ ์ ์ฌ๋ ํ์"๊ฐ ์ฑ๊ณตํ์ ๋๋ง ์บ์ฑํ๋๋ก ๊ตฌํ
4. ์ ์ํ ์
- Max Memory๋ 5MB๋ก ์ค์ ํ๋ค -> Memory๋ฅผ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํจ์ผ๋ก ๋น์ฆ๋์ค๋ฅผ ์๊ฐํ๋ฉด 5MB๋ ๋ฟ์ ์ ์์ ๋งํผ ํฌ๋ค. ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์์ ์ผ๋ก set์ผ๋ก ์ ์ฅํ๋ ๊ฒฝ์ฐ ์ฝ 200 ์ด๋ฐ์ ๋ฐ์ดํธ๊ฐ ํ์ํ๋ค.
1๋ง๋ช ์ ํ์์ด ์๋ค๊ณ ํ์ ๋, 2MB๊ฐ ์ต๋์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด 1๋ง๋ช ์ ํ์์ด ๋์์ ๊ฐ์ ํ๋ค๊ณ ํด๋, ์ด๋ฉ์ผ ๋ฐ์ดํฐ๊ฐ 100 ์ด๋ฐ๋์ด๋ฏ๋ก, 2MB์ ๋ฟ๊ธฐ ์ด๋ ต๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก 5MB์ ๊ณต๊ฐ์ด ์๋ค๋ฉด, 1๋ง๋ช ์ ํ์์ด ๋์์ ๊ฐ์ ํ๋ฉด์, ์ฆ์ ์์ ์ ๋ณด๋ฅผ ์บ์ฑํ ์ ์๋ค.
ํ์ฌ 1000๋ช ๋์ ์ถ์์ด ๋ชฉํ์ธ ์์ ์์ ์์ฃผ ์ถฉ๋ถํ ๊ฐ์ด๋ค. (ํ์ฌ EC2 ์คํ์ 1GiB) eviction ์ ์ฑ ์ volitle ttl: ์ฑ์์ ๋ค์ํ ์ข ๋ฅ์ ์บ์ฑ์ ํ์ง๋ง, ๊ฐ์ฅ ํฐ ์ฉ๋์ ์ฐจ์งํ๋ ๊ฒ์ ์ด ์๊ฐ์ ์ ๋ณด์ด๋ค. ๋ฌธ์ ๋ ์๊ฐ์ ์ ๋ณด๋ ์ฌ์ฉ๋์ง ์์ ๋ฐ์ดํฐ ์ผ์๋ก ์คํ๋ ค ์ฌ์ฉ ํ๋ฅ ์ด ๋๋ค๋ ์ ์ด๋ค ์ด๋ ๊ธฐ์กด์ ์บ์ฑ ์ ์ฑ ๋ค๊ณผ ๋ฐ๋์ด๋ค
์๋ํ๋ฉด ํ๋ฒ ์ถ์ํ ํ์์ ์คํ๋ ค ๋ ์ถ์ํ ์ผ์ด ์๊ณ , ์ถ์ํ์ง ์์ ํ์์ด ์๋ก ์ถ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๋ ๋์ค์ ์ด ์ํฉ์ 100% ๋ง๋ ์ ์ ํ ์ ์ฑ ์ด ์๋ค. (๋ณดํต์ ์์ฃผ ์ฐ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์ด๋ ค ๋๋๋ค)
๊ทธ๋๋ง ์ ์ ํด ๋ณด์ด๋ ๊ฒ์ด volitle-ttl์ด๋ค. (์ ์ฑ ์ด ์์ ์๋ ๊ฒฝ์ฐ์ ์๋ก์ด ์ ์ฅ์ด ์ ๋๋ค.) ๊ทธ๋์ volitle-ttl์ ์ ํํ๋ค.
๋ฌธ์ ๋ ์ฑ์์ ์บ์ฑํ๋ ๋ค์ํ ๋ฐ์ดํฐ ์ค์ ์บ์ฑ๋ ๋ฐ์ดํฐ๊ฐ ์๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ ์ผ ์ฌ๋ผ์ ธ๋ ๋ฌธ์ ๊ฐ ์๋ ๋ฐ์ดํฐ๋ ๊ฒ์ด๊ณ , ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค์ ์ฌ๋ผ์ง๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋๋ค.
์ด์ ๊น์ง ์ฌ๋ผ์ ธ์ ์ ๋๋ ๋ฐ์ดํฐ๋ค์ ์ ํ ์๊ฐ์ด ์ค์ ๋น์ฆ๋์ค์ ์ผ๋ก๋ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ค์ด์ฌ์ ๋น์ฆ๋์ค์ ์ธ ์ ํ ์๊ฐ๊ณผ redis exprire time์ ๋๊ฐ์ด ๋ง์ท๋ค. ์ด์ , ์ด ๋ฐ์ดํฐ๋ค์ exprire time์ 2๋ฐฐ๋ก ๋๋ฆฌ๊ณ , ๋ฐ๋ก ์ ํจ ์๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ ๊ณ ๋ คํด๋ดค๋ค.
๊ทธ๋ฌ๋๊น ์ํ์ ๋๋นํด ์ ์ฅ ์ฉ๋์ ๋๋ฆฌ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด ๋ฐฉ๋ฒ์ ๊ธฐ์กด์ ์ผ๋ฐ์ ์ธ ์บ์ฑ๊ณผ ๊ฐ์ ์ํฉ์์ ๋น์ผ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ ์๋ชจํ๋ ๊ฒ์์ผ๋ก ๋ฌธ์ ๊ฐ ๋๊ฒ ์ง๋ง, ์ฐ๋ฆฌ ์๋น์ค์์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์ ์ฅํ๋ ์๋ฃ๊ฐ ์ ์์ผ๋ก ๊ณ ๋ คํ ๋งํด ๋ณด์ธ๋ค. ๋ง์ฝ ์ฉ๋์ด ๊ทธ๋ฆฌ ๋๋ํ์ง ์์๋๋ผ๋ฉด, ์ ํจ์๊ฐ์ ๋ํญ ์ค์ด๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๊ฟจ์ ๊ฒ์ด๋ค. -> ๋๋ค๋ฅธ ์ด์๊ฐ ํ์ํ๋ค- ๊ฐ์๋ฅผ OPEN ์ค์ ์๋ก์ด ํ์์ด ์น์ธ๋ ์ ์๋ค (์ถ์ ๊ฐ๋ฅํ ํ์์ด ๋์ ์ผ๋ก ์๊ฒจ๋ ์ ์์)
-> ๊ฐ์ฌ๊ฐ ํ์์ ์น์ธํ์ ๋, ๊ฐ์๊ฐ ์ด๋ฏธ ์ด๋ ค์๋ค๋ฉด ๋ ๋์ค์ ์บ์ฑํ๋ค. - redis transaction support : redis template์์ ๊ด๋ จ ์ค์ ์ true๋ก ์ค์ ํด์ผ /@transactional ์ ๋ถ์ธ ๋ฉ์๋์์ RedisTemplate๋ฅผ ์ฌ์ฉํ ๋, ์ฐ๋ฆฌ๊ฐ ํ์์ DB๋ฅผ ์ฌ์ฉํ ๋์ ๊ฐ์ด ๋์ํ๋ค. (ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด๊ณ , ๋กค๋ฐฑ์ ๋กค๋ฐฑ ๋ฑ)
๋ฆฌํฉํ ๋ง ์์ ๋ธ๋์น
feature/student-caching
โ Refactoring TODO
- ๋ ๋์ค ์ค์ ์ ์ฉ
- Open๋ ๊ฐ์ ์ ๋ณด์ธ OpenLecture ๊ตฌํ
- ์ถ์ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ AttendanceNumber Repository ์ ๊ฑฐ
- ์๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ LectureStudentRepository ๊ตฌํ
- ์์ ์ ์ด ๋, OpenLecture ์ ๋ณด์ ์๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ ๊ตฌํ
- ์ถ์ ๊ฐ๋ฅํ ๊ฐ์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ณผ์ ์ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ํ์ธ ํ๋ ๊ณผ์ ์ถ๊ฐ
- ํ์์ด ์ถ์์ ์๋ํ ๋๋ ์บ์ฑ์ ๋จผ์ ํ์ธํ๋ ๊ณผ์ ์ถ๊ฐ
- ํ์์ ์น์ธํด์ค ๋, ์ด๋ ค์๋ ๊ฒฝ์ฐ ์บ์ฑํ๋ ๊ณผ์ ์ถ๊ฐ
- ์ ๊ณผ์ ํ ์คํธ ์ถ๊ฐ
- Event๋ฅผ ๋ฐํํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ