์ด ํ๋ก์ ํธ๋ ์ ํ๋ ๋ฆฌ์์ค ํ๊ฒฝ(AWS t3.small EC2 ์ธ์คํด์ค 2๋, RDS, Redis)์์ ์์ ์ ์ธ ์ด์์ ๋ชฉํ๋ก ํ๋ ๊ณ ์ฑ๋ฅ ํ์คํฐ๋ฒ ํฐ์ผ ์๋งค ์์คํ ์ ๋๋ค. ์๊ฐ์ ์ธ ๋๊ท๋ชจ ํธ๋ํฝ ์ํฉ์์๋ ์์ ์ ์ผ๋ก ๋์ํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ํจ์จ์ ์ธ ๋๊ธฐ์ด ๊ด๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ ํํฉ๋๋ค.
- ์๋ฒ ์์ ์ฑ ํ๋ณด: CPU ์ฌ์ฉ๋ฅ ํผํฌ ์ 80% ์ดํ ์ ์ง
- ์ฌ์ฉ์ ๊ฒฝํ ์ต์ ํ: ํ๊ท ์๋ต ์๊ฐ 5์ด ์ด๋ด ์ ์ง (ํฐ์ผ ์กฐํ๋ถํฐ ๊ฒฐ์ ๊น์ง)
- ์ค์๊ฐ ๋๊ธฐ์ด ์์คํ : Redis ๊ธฐ๋ฐ์ ๊ณต์ ํ ๋๊ธฐ์ด ๊ด๋ฆฌ
- ํจ์จ์ ์ธ ๊ฒฐ์ ์ฒ๋ฆฌ: ๋น๋๊ธฐ ๋ฐฉ์์ ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฐ ์ฃผ๊ธฐ์ ์ํ ์กฐํ
- ์ค์๊ฐ ํฐ์ผ ์ ์ ๋ฐ ๊ฒฐ์ ๊ธฐํ ๋ณด์ฅ: Redis ๊ธฐ๋ฐ ํฐ์ผ ์ฌ๊ณ ์ ์ ์์คํ
- ๋น๋๊ธฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ: ์ธ๋ฉ๋ชจ๋ฆฌ ํ ์์คํ ์ ํตํ ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์ต์ ํ
![๋ฉ์ธํ์ด์ง](https://private-user-images.githubusercontent.com/80209277/363467632-c2b894f4-d381-45f1-9df6-28fead36171e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MTU2MDgsIm5iZiI6MTczODgxNTMwOCwicGF0aCI6Ii84MDIwOTI3Ny8zNjM0Njc2MzItYzJiODk0ZjQtZDM4MS00NWYxLTlkZjYtMjhmZWFkMzYxNzFlLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDA0MTUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFhNTUyOGRiNGU1NDNmMjI3ZmI1OTM1OTRiZjY5OGJjY2IzMTc4ZmRlMjM2ZWI4MWE0OGIzMWQ1ZjhjNGU1ZGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.3dS2Soq_4c7dxNMumL0oAZcAXNb8uULWTFku_yMQ9VI)
![๋ง์ดํ์ด์ง](https://private-user-images.githubusercontent.com/80209277/363467644-87df9a5f-07df-4cf8-a464-f042014fd8a6.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MTU2MDgsIm5iZiI6MTczODgxNTMwOCwicGF0aCI6Ii84MDIwOTI3Ny8zNjM0Njc2NDQtODdkZjlhNWYtMDdkZi00Y2Y4LWE0NjQtZjA0MjAxNGZkOGE2LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDA0MTUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTkzMjEzNDg2MTcxZThhZmZlMzY5YWQ5MDBjNjMyOTZiNDM5MjQ3YjRhOWE5YmJlYTQ3MjI0M2Q4NDYzODgzMDYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.GaYdziaU938TrBICnCx0O2kCuEsFFBHWrk5WmHyLtZc)
![๊ตฌ๋งค ์ฑ๊ณต](https://private-user-images.githubusercontent.com/80209277/363467648-4cfc7c55-f86b-4f69-9416-7817bced7235.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MTU2MDgsIm5iZiI6MTczODgxNTMwOCwicGF0aCI6Ii84MDIwOTI3Ny8zNjM0Njc2NDgtNGNmYzdjNTUtZjg2Yi00ZjY5LTk0MTYtNzgxN2JjZWQ3MjM1LmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDA0MTUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI4Njk3MTk1ZmQzMzZhYWE3YWQyOGQ3NmJjODMzOTJlMGE1NjNmNjMxMzg5NjNiNDAxZTJjNGZiM2Y0MTk3YjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.1jtzytRilU-TbZXEAPgkaH4P8QqHok8sHPs1mWTmXTo)
![์ด๋๋ฏผ ํ์ด์ง](https://private-user-images.githubusercontent.com/80209277/363467625-eacdc384-18a8-48eb-832a-3ce88bc20230.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MTU2MDgsIm5iZiI6MTczODgxNTMwOCwicGF0aCI6Ii84MDIwOTI3Ny8zNjM0Njc2MjUtZWFjZGMzODQtMThhOC00OGViLTgzMmEtM2NlODhiYzIwMjMwLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDA0MTUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMzY2ZiNjg0MzFjNjI2NGNiMjIwM2U1NmRhYTU3MmYyN2M2NjFiZDc1YTkwODU0OTQ0ZDE2NzJkMTZhM2I2ZmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.tPnkujFUSKWGwttxRsCBaAh9Gh1lLKA7VAJUil3eNyk)
![๋ง์ดํ์ด์ง](https://private-user-images.githubusercontent.com/80209277/363467608-7fbeccd3-f301-43dd-b489-886ad27a4c4e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg4MTU2MDgsIm5iZiI6MTczODgxNTMwOCwicGF0aCI6Ii84MDIwOTI3Ny8zNjM0Njc2MDgtN2ZiZWNjZDMtZjMwMS00M2RkLWI0ODktODg2YWQyN2E0YzRlLmdpZj9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA2VDA0MTUwOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWMzY2NlYjRlZjIwNWJhM2IyNzVhMDA4ZDBlYjM2NWJmZTA0M2YyNTVmM2Q3YmVhYzFkOTYyNzBiYWExZTdjODgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.R2imz9i5E1FzWCrK3YDMY7m8hFLV9rPdnkR1HYQ0Ouc)
- ์๋ฆฌ: ์ฒญํฌ ๊ธฐ๋ฐ์ ๋๊ธฐ์ด ๊ด๋ฆฌ ์์คํ
- ๋๊ธฐ์ด ๊ด๋ฆฌ:
- Redis Set์ ์ฌ์ฉํ์ฌ ๊ฐ ํฐ์ผ์ ๋ํ ๋๊ธฐ์ด ์ ์ง
- ์ฌ์ฉ์ ์ง์ ์ ํ์ฌ ๋๊ธฐ์ด์ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๊ธฐ ์์ ํ ๋น
- ์
์ฅ ๊ด๋ฆฌ:
- passChunkSize ๋จ์๋ก ์ ์ฅ ๊ฐ๋ฅํ ๋ฒ์ ๊ด๋ฆฌ
- ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์ฅ ๊ฐ๋ฅ ๋ฒ์๋ฅผ passChunkSize๋งํผ ์ฆ๊ฐ์์ผ ์์ฐจ์ ์ ์ฅ ํ์ฉ
- ์ํ ํ์ธ ๋ฐ ์
๋ฐ์ดํธ:
- ์ฌ์ฉ์์ ๋๊ธฐ ์์๊ฐ ํ์ฌ ์ ์ฅ ๊ฐ๋ฅ ๋ฒ์ ๋ด์ ์๋์ง ํ์ธ
- ์ฌ๊ณ ์ฌ๋ถ๋ ํจ๊ป ์ฒดํฌํ์ฌ ์ ์ฅ ๊ฐ๋ฅ ์ฌ๋ถ์ ๋จ์ ๋๊ธฐ ์ธ์ ์ ์ ๊ณต
- ์๋ฆฌ: ๋น๋๊ธฐ ๊ฒฐ์ ์ฒ๋ฆฌ ๋ฐ ์ํ ๊ด๋ฆฌ
- ๊ฒฐ์ ํ๋ก์ธ์ค:
- ๊ฒฐ์ ์์ฒญ ์ UUID ๊ธฐ๋ฐ์ ๊ฒฐ์ ID ์์ฑ ํ ๋น๋๊ธฐ๋ก ๊ฒฐ์ ์ฒ๋ฆฌ ์์
- CompletableFuture๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๊ฒฐ์ ์ฒ๋ฆฌ ๊ตฌํ
- ์ํ ๊ด๋ฆฌ:
- Caffeine ์บ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ์ํ ๊ด๋ฆฌ
- ๊ฒฐ์ ID๋ฅผ ํค๋ก ์ฌ์ฉํ์ฌ ๊ฒฐ์ ์ ๋ณด ๋ฐ ์ํ ์ ์ฅ
- ๊ฒฐ์ ์๋ฃ ํ ์ฒ๋ฆฌ:
- ๊ฒฐ์ ์ฑ๊ณต ์ QueueService๋ฅผ ํตํด ๊ตฌ๋งค ์ ๋ณด ์ฒ๋ฆฌ
- ๊ฒฐ์ ์คํจ ์ CompensationService๋ฅผ ํตํด ์ฌ๊ณ ๋ฐ ์ํ ๋กค๋ฐฑ
- ์๋ฆฌ: Redis๋ฅผ ํ์ฉํ ์ค์๊ฐ ์ฌ๊ณ ๊ด๋ฆฌ
- ์ฌ๊ณ ๊ด๋ฆฌ:
- Redis์ ๊ฐ ํฐ์ผ์ ์ฌ๊ณ ์๋ ์ ์ฅ
- ์์์ ๊ฐ์ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๋์์ฑ ๋ฌธ์ ํด๊ฒฐ
- ์ฌ๊ณ ๋๊ธฐํ:
- TicketScheduleService๋ฅผ ํตํด ํ๋งค ์ ์ Redis์ ์ฌ๊ณ ์ ๋ณด ์ ๋ฐ์ดํธ
- ์๋ฆฌ: ์ธ๋ฉ๋ชจ๋ฆฌ ํ๋ฅผ ํ์ฉํ ๋น๋๊ธฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ์ ์:
- InMemoryQueue์ ๊ตฌ๋งค ๋ฐ์ดํฐ(PurchaseData) ์ ์ฅ
- ํ๊ฐ ๊ฐ๋ ์ฐผ์ ๊ฒฝ์ฐ ์ง์ ๋ฐฑ์คํ๋ฅผ ์ ์ฉํ ์ฌ์๋ ๋ก์ง ๊ตฌํ
- ์ฃผ๋ฌธ ์ฒ๋ฆฌ:
- ์ฃผ๊ธฐ์ ์ผ๋ก(5์ด๋ง๋ค) ํ์์ ๋ฐฐ์น ๋จ์๋ก ์ฃผ๋ฌธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๋ฐฐ์น ํฌ๊ธฐ๋ ํ์ ํ์ฌ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์กฐ์
- ๋ฐ์ดํฐ ์ผ๊ด์ฑ:
- ์ฃผ๋ฌธ ์ ๋ณด์ ์ฒดํฌ์ธ ์ ๋ณด๋ฅผ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด ์ผ๊ด ์ฒ๋ฆฌ
- JDBC batch update๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ์ฐ ์ต์ ํ
- ์ฅ์ ๋ณต๊ตฌ:
- ์๋ฒ ์ฌ์์ ์ ๋ก๊ทธ ํ์ผ์ ๋ถ์ํ์ฌ ๋ฏธ์ฒ๋ฆฌ๋ ์ฃผ๋ฌธ ๋ณต๊ตฌ
- ์ฒ๋ฆฌ ์คํจํ ์ฃผ๋ฌธ์ ๋ํ ์ฌ์๋ ๋ฉ์ปค๋์ฆ ๊ตฌํ
-
์ธ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ
- Caffeine ์บ์๋ฅผ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ ์บ์ฑ
- ์๋ต ์๊ฐ 29% ๋จ์ถ
- Caffeine ์บ์๋ฅผ ์ด์ฉํ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ ์บ์ฑ
-
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ
- Skip Lock ์ ์ด์ฉํ ๋์์ฑ ์ ์ด (
SELECT ... FOR UPDATE SKIP LOCKED
)- ์๋ต ์๊ฐ 68% ๋จ์ถ Wiki
- Skip Lock ์ ์ด์ฉํ ๋์์ฑ ์ ์ด (
-
๋น๋๊ธฐ ๋ฐ ๋ฐฐ์น ์ฒ๋ฆฌ
- CompletableFuture๋ฅผ ์ด์ฉํ ๋น๋๊ธฐ ๊ฒฐ์ ์ฒ๋ฆฌ
- ์ฃผ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ปค์คํ ์ธ๋ฉ๋ชจ๋ฆฌ ํ ๊ตฌํ
- JDBC ๋ฐฐ์น ์ ๋ฐ์ดํธ๋ฅผ ํตํ ๋ฒํฌ ์ฐ์ฐ ํจ์จํ
- RPS 23% ํฅ์ Wiki
-
๋๊ธฐ์ด ์์คํ ์ค๊ณ
- ํฐ์ผํ ์ ์๋น์ค ๊ฐ์ฉ์ฑ ํ๋ณด๋ฅผ ์ํ ๋๊ธฐ์ด ์์คํ ๋์
- 5000๋ช ๋์ ์ ์์์๋ ๋ฉ์ธ ์๋ฒ CPU ์ฌ์ฉ๋ฅ 50% ์ดํ๋ก ์์ ์ฑ ํ๋ณด Wiki
-
์์คํ ์์ ์ฑ ๋ฐ ๋ณต๊ตฌ ์ ๋ต
- ์ง์ ๋ฐฑ์คํ๋ฅผ ํ์ฉํ ์ฌ์๋ ๋ก์ง ๊ตฌํ
- ์ฅ์ ์ํฉ ๋๋น ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ ๊ตฌํ (๋ก๊ทธ ๊ธฐ๋ฐ ๋ณต๊ตฌ)
์ ํฌ๋ ํ twoDari์ ๋๋ค. ์ฌ์ฉ์์ ์ถ์ ๋ฅผ ์ด์ด์ฃผ๋ ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์ด๋ฆ | ์ญํ | ์ฃผ์ ๊ธฐ์ฌ | GitHub |
---|---|---|---|
๊นํ์ข | ๋ฐฑ์๋ | MySQL๋น๋๊ธฐ ์ฒ๋ฆฌ, ๋ฐฐ์น ์ฒ๋ฆฌ, ํ๋ก ํธ์๋ ํ๋ฉด ๊ตฌ์ฑ | @bellringstar |
๊น๊ท์ | ๋ฐฑ์๋ | ์บ์ฑ์ ๋ต, Redis๋ฅผ ์ฌ์ฉํ ๋๊ธฐ์ด, ํ๋ก ํธ์๋ ํ๋ฉด ๊ตฌ์ฑ | @kkyu0718 |
๊นํ์ค | ๋ฐฑ์๋ | devops, ์ค์ผ์ฅด๋ง ์์ , ๋ค์ํ ๋ชจ๋ ๊ฐ ์ฐ๊ณ ๋ฐ ์ฑ๋ฅ ๊ฐ์ | @HyeonJun0530 |
๋ฐ๋ฏผ์ง | ๋ฐฑ์๋ | Redis๋ฅผ ์ฌ์ฉํ ๋๊ธฐ์ด ๋ก์ง, ํ๋ก์ ํธ ๋ชจ๋ํ | @minnim1010 |