Spring ์ ์ฌ์ฉํ RestfulAPI ๊ฐ์ธ ํ๋ก์ ํธ
Spring ์ผ๋ก ๋ง๋ MSA ๊ตฌ์กฐ์ ์ข ๋ชฉํ ๋ก ๋ฐฉ ํ๋ก์ ํธ์ ๋๋ค.
์ฌ์ฉ์๋ ์ข ๋ชฉํ ๋ก ๋ฐฉ์ ํตํด ์ฃผ์ ์ ๋ณด(์ฐจํธ, ์์) ๋ฑ์ ๋ฐ์๋ณผ ์ ์์ต๋๋ค.
์ฌ์ฉ์๋ ๋ด์คํผ๋ ๊ธฐ๋ฅ์ ํตํ์ฌ ํ๋ก์ฐํ ์ฌ๋์ ๊ธ์ด๋ ํ๋์ ๋ณด๋ฅผ ๋ฐ์๋ณผ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์์ ๋กญ๊ฒ ์ข ๋ชฉ์ ๋ํ์ฌ ํ ๋ก ํ ์ ์๋ ์ปค๋ฎค๋ํฐ(๊ธ, ๋๊ธ, ์ข์์) ๊ธฐ๋ฅ์ด ์ ๊ณต๋ฉ๋๋ค.
- 24.01.24์ผ ~ 24.03.04์ผ
Java 17
- ํ๋ ์์ํฌ(Framework) : Springboot(3.x,2.x)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database) : MySQL (8.0.22)
- ๋ถ์ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ฉ์์ง : Redis (7.2.4), Kafka (5.5.1), Zookeeper (5.5.1)
- ์ง์์ ํตํฉ ๋ฐ ๋ฐฐํฌ(CI/CD) : Jenkins (2.444)
- ์ปจํ ์ด๋ํ ๋ฐ ๊ฐ์ํ : Docker (25.0.0)
- ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE) : IntelliJ 2202.3.3
๋ฌธ์
- ๊ฒ์๊ธ ์ข์์ ์ ๊ตฌํ ์ ๋ฐ์ํ ๋ ์ด์ค ์ปจ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- Redis์
incr
๋ช ๋ น์ด๋ฅผ ํ์ฉํ์ฌ ์ข์์ ์๋ฅผ ์ ์ฅํ๊ณ , ์ค์ผ์ค๋ฌ ๊ธฐ๋ฐ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ํตํด DB์ ๋ฐ์ํ์์ต๋๋ค. - ๋ ์ด์ค ์ปจ๋์ ๋ฌธ์ ํด๊ฒฐ์ ์ํ ๋ฝ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค.
์งํ | ๋ฝ ์์ | ๋๊ด์ ๋ฝ | ๋น๊ด์ ๋ฝ | Redis |
---|---|---|---|---|
์๋ต ์ฑ๊ณต๋ฅ (%) | 100% | 39% | 100% | 100% |
์ข์์ ์ ๋ฐ์ ๋น์จ (%) | 27% | 39% | 100% | 100% |
์๋ต ์๋ (ms) | 18 | 43 | 420 | 13 |
๊ฒฐ๋ก
- Redis์
incr
๋ช ๋ น์ด ์ฌ์ฉ ์ ์ข์์ ์๊ฐ 100% ๋ฐ์๋์๊ณ , ์๋ต ์๋๊ฐ 13ms๋ก ์ต๋ 32๋ฐฐ ๋นจ๋์ต๋๋ค.
๋ฌธ์
- FanOutOnWrite ๋ฐฉ์์ ๋ด์คํผ๋ ๊ตฌํ ์ ํ๋ก์ ์ ๋งํผ์ ๋ด์คํผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ฌ ์๋ฒ์ ๋ถํ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ๋ฉ์์ง ๋ธ๋ก์ปค์ธ Kafka๋ฅผ ํ์ฉํ์ฌ ๋ด์คํผ๋ ์๋น์ค์์ ๋ฉ์์ง๋ฅผ ์์ฐจ์ ์ผ๋ก ์๋นํ๋ ๋ฐฉ์์ผ๋ก ์ ํํ์ต๋๋ค.
- ๋ด์คํผ๋ ์์ฑ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค.
์งํ | Kafka ์ฌ์ฉ ์ | Kafka ์ฌ์ฉ ํ |
---|---|---|
์๋ต์๊ฐ (ms) | 2,697 | 15 |
CPU ์ฌ์ฉ๋ฅ | 42% | 5% |
๊ฒฐ๊ณผ
- Kafka๋ฅผ ํ์ฉํ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ์ฌ ์ต๋ ์๋ต ์๋๋ฅผ 180๋ฐฐ ๊ฐ์ ํ๊ณ , CPU ์ฌ์ฉ๋ฅ ์ 1/8 ์ ๊ฐํ์ต๋๋ค.
๋ฌธ์
- 5๋
์น ์ฐจํธ ์ ๋ณด์ธ 360๋ง๊ฐ์ ์ผ๋ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์
์ ์ฑ๋ฅ์ด JPA
saveAll()
๋ฉ์๋ ์ฌ์ฉ ์ 7์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- MySQL์ ๋ฒํฌ ์ธ์ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ์๋ฅผ 1/1000๋ก ์ค์ด๊ณ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ์ ์ฉํ์ต๋๋ค.
์งํ | JPA saveAll() | ๋ฒํฌ ์ธ์ํธ ์ ์ฉ | ๋ฉํฐ ์ฐ๋ ๋ ์ ์ฉ |
---|---|---|---|
์ ์ฅ ์ํ ์๊ฐ | 7h 1m 35s | 32s | 32s |
๊ฒฐ๊ณผ
- ๋ฒํฌ ์ธ์ํธ์ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ 100๋ฐฐ ์ด์ ์ฑ๋ฅ์ ๊ฐ์ ํ์ต๋๋ค.
๋ฌธ์
- 360๋ง๊ฐ์ ์ผ๋ด ํ ์ด๋ธ ํ์ด์ง ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด 1์ด๊ฐ ๋์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ฟผ๋ฆฌ์
where
์ ์กฐ๊ฑด์ ๋ง๊ฒ ์ข ๋ชฉ์ฝ๋์ ๋ ์ง๋ฅผ ๋ณตํฉ์ธ๋ฑ์ค๋ก ์ค์ ํ์ต๋๋ค.
ํ์ด์ง ์กฐ๊ฑด | ์ธ๋ฑ์ค ์ ์ฉ ์ | ์ธ๋ฑ์ค ์ ์ฉ ํ |
---|---|---|
ํ๋ฌ์น ๋ฐ์ดํฐ ์กฐํ | 1.66s | 0.00s |
์ผ๋ ์น ๋ฐ์ดํฐ ์กฐํ | 1.70s | 0.00s |
๊ฒฐ๊ณผ
- Where์ ์กฐ๊ฑด์ ๋ง๋ ๋ณตํฉ์ธ๋ฑ์ค ์์ฑ์ผ๋ก 100๋ฐฐ ์ด์ ํ์ด์ง ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๊ฐ์ ํ์ต๋๋ค.