๐ซ NETicket
No Error Ticket!
๋์์ ์์๊ฐ ๋ง์์ ธ๋ No Error!
๋จ๋
๋
ธ์ ๋๊ตฌ๋ ๋ด ํฐ์ผ์ NETicket์์ ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ!
์ ํฌ ์๋น์ค๋ ๊ฐํธํ๊ณ ์ง๊ด์ ์ธ ๋ ์ด์์์ผ๋ก,
๋ถํธํ ์๋งค ๊ณผ์ ์ ์ต์ํํด ๋ชจ๋๊ฐ ์ฝ๊ฒ ์ด์ฉํ ์ ์๋ ์๋งค ์ฌ์ดํธ์
๋๋ค.
๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ์ฅ์น์์ ์ผ๊ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋๋ก,
๋ฐ์ํ ๋์์ธ์ผ๋ก ์ค๊ณํ์ต๋๋ค.
๋๊ท๋ชจ ํธ๋ํฝ ๋ถํ ํ
์คํธ๋ฅผ ํ๋ฉฐ,
์ต์ ๋น์ฉ์ผ๋ก ์์คํ
์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ ํฅ์์ ์ค์ ์ ๋๊ณ ํ๋ก์ ํธ๋ฅผ ์งํํ์ต๋๋ค.
ํ ๋ฒ์ 50K์ ์๋งค ์์ฒญ์ด ๋ฐ์ํ์ ๋,
1000 TPS์ ์ฒ๋ฆฌ๋์ผ๋ก ํ๊ท ์๋ต์๋ ์ฝ 1์ด ๋ด์ธ๋ก Error ์์ด ์ด์ ์ค์
๋๋ค. | ์ด๋ฆ | GITHUB |
|---|---|
| ์ฅ์งํ๐ฐ | https://github.com/jangjh45 |
| ๊น๊ฑด์จ | https://github.com/ChoonB |
| ์์ฑํ | https://github.com/dltngurxodud |
| ์ด์ ์ง | https://github.com/Yujin-17 |
์ฃผ์๊ธฐ๋ฅ๐ง
- Scheduling ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์๋งค ์คํ ์๊ฐ์ ๊ณต์ฐ์ ๋จ์ ์ข์ ์๋ฅผ Redis Cache์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ
- ๊ณ ๊ฐ์ด ์ ํํ ํฐ์ผ ์๋งํผ Write Back ๋ฐฉ์์ผ๋ก Redis Cache์ ์๋ ๊ณต์ฐ์ ๋จ์ ์ข์ ์๋ฅผ ์ฐจ๊ฐํด ๋น ๋ฅธ ์๋ต ์๊ฐ ๋์ถ
- ํ ๋ฒ์ 50K ์ด์์ ์์ฒญ์ ํ๊ท ์๋ต์๊ฐ ์ฝ 1์ด ๋ด์ธ๋ก ์๋งค ๊ฐ๋ฅ
- ๊ด๋ฆฌ์๋ง ์ ๊ทผ ๊ฐ๋ฅํ Admin ๊ณต์ฐ ๊ด๋ฆฌ ํ์ด์ง์์ ๊ณต์ฐ ์ถ๊ฐ๋ฅผ ํ ์ ์์ผ๋ฉฐ, ์ถ๊ฐ๋๋ ๊ณต์ฐ์ ์ด๋ฏธ์ง ์ ๋ก๋๋ AWS S3๋ฅผ ํตํด ์์ ์ ์ผ๋ก ์ฒ๋ฆฌ
- Redis Cache์ ์๋ ๊ฐฑ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด, ๋ฐ์ดํฐ๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋์ง๋ง, ์ฅ์ ์ํฉ์ ๋๋นํด ๊ด๋ฆฌ์ ์ ์ด ์์คํ ์ถ๊ฐ. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅ ๊ฐ๋ฅ
- Redis Cache์ ์ด์์ด ์๊ธฐ๋ฉด Redis CLI๋ฅผ ํตํ์ง ์๊ณ , ๊ด๋ฆฌ์ ํ์ด์ง์์ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋๋ก ๊ตฌ์ฑ
- ํค์๋ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋ถํ ํด ์ฌ๋ฌ ๋จ์ด๋ก ๊ตฌ์ฑ๋ ํค์๋ ์ฒ๋ฆฌ
- title๊ณผ place์์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ๋จ์ด๋ฅผ ํฌํจํ๋ event๋ฅผ ์ฐพ๋ ๊ฒ์ ์กฐ๊ฑด
- ์๋งค ๊ฐ๋ฅ ์ฌ๋ถ์, ๋ ์ง๋ฅผ ๊ณ ๋ คํ ์ ๋ ฌ ์์
- ๊ฒ์ ์กฐ๊ฑด์ ์ผ์นํ๋ ์ ์ฒด ์ด๋ฒคํธ ์ ๊ณ์ฐ์ ์ด์ฉํ Pagination
- ๋ง์ดํ์ด์ง์์ ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ์ต๊ทผ์ ์๋งคํ ๊ณต์ฐ๋ถํฐ ์ ๋ ฌ
- ์์ง ์์ํ์ง ์์ ๊ณต์ฐ๋ง ์ฌ์ฉ์๊ฐ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์๋งค ์ทจ์ ๊ฐ๋ฅ
๐ ์ฌ์ฉ์์ ์ํํ๊ณ ๋๊น ์๋ ์๋น์ค ์ ๊ณต ์ํ ๋์ TPS์ ๋น ๋ฅธ ์๋ต์๋
์ ํฌ ํ๋ก์ ํธ์ ์ฃผ์ ๋ชฉํ๋ ์ฌ์ฉ์๊ฐ ํญ์ ์ํํ๊ณ ๋๊น ์๋ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ ์ํด, ๋๊ท๋ชจ ํธ๋์ญ์
์ํฉ์์๋ ์์ ์ ์ด๋ฉด์๋ ๋์ TPS์ ๋น ๋ฅธ ์๋ต์๋๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๋ค์ํ ๊ธฐ์ ์ ์์๋ฅผ ์ ์ ํ๊ฒ ํ์ฉํ์์ต๋๋ค.
์ฐ์ , ๋ถ์ฐ ์ฒ๋ฆฌ ์ํคํ
์ฒ์ In-memory caching, Database Tuning ๋ฑ์ ๊ธฐ์ ์ ์กฐํฉํ์ฌ ์์ ์ ์ด๋ฉด์๋ ๋์ TPS์ ๋น ๋ฅธ ์๋ต์๋๋ฅผ ์คํํ์์ต๋๋ค.
ํนํ, Redis Cache๋ฅผ ํ์ฉํ์ฌ In-memory Data Store๋ฅผ ๊ตฌ์ถํ์ฌ ์๋ต์๋๋ฅผ ํฌ๊ฒ ํฅ์ํ์ต๋๋ค.
๋ํ, ๋ถํ ๋ถ์ฐ์ ์ํ Load Balancing๊ณผ ์์ ํ์ฅ ๋ฐ ์ถ์๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ Auto Scaling์ ๋์
ํ์ฌ, ์๋ฒ ๋ถํ๋ฅผ ์ ์ ํ๊ฒ ๋ถ์ฐํ๊ณ ํธ๋ํฝ ๋ณํ์ ๋ฐ๋ผ ์ ์ ํ ์์์ ํ ๋นํจ์ผ๋ก์จ, ํธ๋ํฝ ๊ธ์ฆ ์์๋ ๋๊น ์๋ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก, HikariCP์ MySQL์ Tuning ํ์ฌ Database ์ฐ๊ฒฐ์ ์ต์ ํํ๊ณ , ์๋ฒ ๋ถ์ฐ์ ํตํด ๋ณ๋ชฉ ํ์์ ์๋ฐฉํ์ฌ ์์ ์ ์ธ ์๋น์ค๋ฅผ ๊ตฌํํ์์ต๋๋ค.
์ด๋ฌํ ๋ค์ํ ๊ธฐ์ ์ ์์๋ค์ ์ ์ ํ๊ฒ ์กฐํฉํ์ฌ, ์ ํฌ ์๋น์ค๋ ๋์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ๋์์ ์ ์งํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ค์ ์ธ์ ๋ ์ํํ๊ณ ๋๊น ์๋ ์๋น์ค๋ฅผ ๊ฒฝํํ ์ ์๊ฒ ๋์์ต๋๋ค.
๐ธ ๋ฐ์ดํฐ์ ์ ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํด, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ๋ณด
์ ํฌ๋ Redis๋ฅผ ๋์
ํ์ฌ ๋์ TPS์ ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ํ๋ณดํ์์ผ๋, ์ค๋ณต ๋ฐ์ดํฐ๋ก ์ธํ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ ๋ฌธ์ ๊ฐ ์๊ฒผ์ต๋๋ค. ์ด์ ๋์ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ์๋์ ๊ฐ์ ์บ์ ์ ๋ต์ ์๋ฆฝํ์์ต๋๋ค.
๋จผ์ ์ฐ๊ธฐ ์ ๋ต์ผ๋ก Write Back ๋ฐฉ์์ ๋์
ํ์ฌ, ํฐ์ผ์ ๋จ์ ์ข์ ์ ๋ฐ์ดํฐ ์์ ์ ์บ์์๋ง ๋ณ๊ฒฝ์ฌํญ์ด ๊ธฐ๋ก๋๊ณ , ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋ Database์ ๋๊ธฐํํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋น ๋ฅธ ์๋ต ์๊ฐ๊ณผ Database์ ๋ถํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
ํนํ, Redis์ Single Thread ํน์ฑ๊ณผ ์์์ ์ฐ์ฐ์ ์ฌ์ฉํด ๋ฝ์ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋์์ฑ ์ ์ด๋ฅผ ํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํ๋ณดํ ์ ์์์ต๋๋ค.
์ฝ๊ธฐ ์ ๋ต์ Look Aside ๋ฐฉ์์ ๋์
ํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋๋ง๋ค ์บ์๋ฅผ ๋จผ์ ํ์ธํ๊ณ , Cache miss์ ๊ฒฝ์ฐ Database์์ Data๋ฅผ ๊ฐ์ ธ์ ์บ์์ ์ ์ฅํ ํ ํด๋ผ์ด์ธํธ์ ๋ฐํํฉ๋๋ค. ์ด ๋ฐฉ์์ ํตํด Database์ ์บ์ ๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
์ข
ํฉ์ ์ผ๋ก Redis๋ฅผ ํตํด ๋๊ท๋ชจ ํธ๋์ญ์
์ํฉ์์์ ๋์์ฑ ์ ์ด๋ฅผ ํ๋ฉด์, ์์ ์บ์ ์ ๋ต์ผ๋ก ๋ฐ์ดํฐ์ ์ ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํ๋ณดํ ์ ์์์ต๋๋ค.
๐ APM์ ํ์ฉํด์ ์์คํ ์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ง์์ ์ผ๋ก ๊ด๋ฆฌ
๋๊ท๋ชจ ํธ๋์ญ์
์ํฉ์์ ๋์์ฑ ์ ์ด๋ฅผ ์ํํ๋ฉฐ, ํ๋ก์ ํธ์ ์ฑ๋ฆฐ์ง ํฌ์ธํธ ์ค ํ๋๋ก APM์ ํ์ฉํ ๋ชจ๋ํฐ๋ง์ ๋์
ํ์์ต๋๋ค.
์ด๋ฅผ ํตํด ์์คํ
์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ง์์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๊ฐ์ ํ ์ ์์์ต๋๋ค.
์ ํฌ ํ์ Grafana, Cloud Watch ๋ฐ Pinpoint์ ๊ฐ์ ๋ค์ํ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์คํ
์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ์์ต๋๋ค.
ํนํ, Grafana์ Cloud Watch๋ฅผ ํตํด EC2, Elastic Cache, ALB, RDS, Auto Scaling ๋ฑ์ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ ์ ์์์ต๋๋ค.
๋ํ, Pinpoint๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋ชฉ ํ์์ด ๋ํ๋๋ ์ง์ ์ ํ์ธํ๊ณ ๊ฐ์ ํ ์ ์์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋น์ค์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ์ ์งํ๊ณ ๊ฐ์ ํ ์ ์์์ผ๋ฉฐ, ์ฌ์ฉ์๋ค์๊ฒ ์ต์์ ์๋น์ค ๊ฒฝํ์ ์ ๊ณตํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ข
ํฉ์ ์ผ๋ก, ์ด๋ฌํ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ค์ ํ์ฉ์ ํตํด ์์คํ
๋ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋น ๋ฅด๊ฒ ์ง๋จํ๊ณ ์์ ๋ฐ ๊ฐ์ ์์
์ ์ํํ ์ ์์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋ก์ ํธ๋ ์์ ์ฑ๊ณผ ๋์ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ์ฑ๊ณต์ ์ธ ๊ตฌํ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค.
๐ ๋น์ฉ์ ์ต์ํํ๋ฉด์๋ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๋ ๊ฐ์ฑ๋น ์ต์ ํ ์ ๋ต
์ ํฌ๋ ์ต์ ๋น์ฉ์ผ๋ก๋ ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฉฐ, ์ด๋ฅผ ์ํด ๋ค์ํ ๊ธฐ์ ์ ์ธ ๋ฐฉ๋ฒ๊ณผ ์ ๋ต์ ์ธ ์ค๊ณ๋ฅผ ์ฑํํ์์ต๋๋ค.
EC2๋ ์ง์ ๋ฒ์ ๋ณด๋ค 20% ์ ๋ ดํ Graviton2 arm64 ์ํคํ
์ณ ๊ธฐ๋ฐ์, ๋ฌด๋ฃ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ t4g.small ์๋ฒ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์๋ฒ ํ์ฅ์ด ํ์ํ ๊ฒฝ์ฐ ๋น์ฉ์ด ๋ ๋ฐ์ํ๋ Scale Up ๋ฐฉ์๋ณด๋ค Load Balancing์ ์ด์ฉํด Scale Out ๋ฐฉ์์ ์ํ์ ํ์ฅ์ผ๋ก ๋น์ฉ์ ์ต์ํ ํ์์ต๋๋ค.
๊ณต์ฐ ์๋งค ์ฌ์ดํธ์ ํน์ฑ์ ์๋งค ์คํ ์๊ฐ๋์ ํธ๋ํฝ์ด ์ง์ค๋๋ ํ์์ด ๋ฐ์ํฉ๋๋ค. ๊ทธ๋์ Auto Scaling์ ์ค์ ํด ์คํ ์๊ฐ ์ง์ ๊ณผ ํธ๋์ญ์
์ด ๋ชฐ๋ฆฌ๋ ์ํฉ์์๋ง ์๋ฒ ์ธ์คํด์ค ํ์ฅ์ ํ๊ณ , ์๋ฒ ๋ถํ๊ฐ ์๋ ๋๋ถ๋ถ์ ์๊ฐ์๋ ์๋ฒ ์ธ์คํด์ค๊ฐ ์ต์๋ก ์ ์ง๋ฉ๋๋ค. ์๋ฒ ์๋ฅผ ๋์ ์ผ๋ก ์กฐ์ ํ์ฌ ์์ ์ฌ์ฉ๋์ ์ต์ ํํ๊ณ ๋น์ฉ ์ ๊ฐ ํจ๊ณผ๋ฅผ ๊ทน๋ํํ ์ ์์์ต๋๋ค.
์ด๋ฅผ ํตํด ๋์ ๊ฐ์ฉ์ฑ๊ณผ ์ฑ๋ฅ์ ์ ์งํ๋ฉด์๋ ๋น์ฉ์ ์ต์ํํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ๊ฐ์ฑ๋น ์ธก๋ฉด์์๋ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋๋ก ํ์ต๋๋ค.
๐ Tech Stack
๐ฉ DB
๐ DevOps
โ Test
๐ฅ Monitoring
๊ธฐ์ ์ ์์ฌ ๊ฒฐ์ ๊ณผ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ก ์ฑ๋ฆฐ์ง ํฌ์ธํธ๋ก ์ค์ ํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด
์๋งค ์๋น์ค ๋ก์ง์์ โ๋จ์ ์ข์ ์โ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ง์ผ์ผ ํ๊ณ ,
๋ง์ ํธ๋์ญ์ ์ ์ฒ๋ฆฌํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋น ๋ฅธ ์๋ต ์๋๋ก ์๋งค ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ค์ผ ํฉ๋๋ค.
1. ํธ๋์ญ์
์ถฉ๋ ๋ฌธ์ ๋ฅผ ๋น๊ด์ ๋ฝ์ผ๋ก ํด๊ฒฐ
2. ๋น๊ด์ ๋ฝ ์ ์ฉ ์ ์๋ ๋ฌธ์ ๋ฅผ Redis Cache๋ก ํด๊ฒฐ
3. ๋ ๋์ ๋ชฉํ์น๋ฅผ Scale Out์ผ๋ก ํด๊ฒฐ
4. ์๋ฒ ํ์ฅ์ผ๋ก ์ธํ ๋น์ฉ ๋ฌธ์ ๋ฅผ AutoScaling์ผ๋ก ํด๊ฒฐ
5. APM์ผ๋ก ์ฐพ์ ๋ณ๋ชฉํ์์ Hikari, MySQL ํ๋์ผ๋ก ํด๊ฒฐ
๐ ์ ํฌ๋ ํธ๋ฌ๋ธ ์ํ ์ ๊ฐ ๋จ๊ณ์์ ์ฑ๋ฅ์ด ์ด๋ ์ ๋๊น์ง ๊ฐ์ ๋์๋์ง ์์๋ณด๊ธฐ ์ํด,
ํ๋ก์ ํธ ๋ด๋ด Apache Jmeter๋ฅผ ํตํด ๋ถํํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค.
ํ๊ท ์๋ต ์๋(ms)์ ์ฒ๋ฆฌ๋(TPS, Transacion Per Second)์ ์์ฃผ๋ก ์ ๋ฆฌํด ๋์์ต๋๋ค.
์ฑ๋ฅ๊ฐ์ ํญ๋ชฉ ๋ณด๋ฌ๊ฐ๊ธฐ





