Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 플루터
- 7879
- nGinder
- formik
- 개발 어렵당.ㅠ
- 월급루팡 일지
- LPOS
- UnsupportedOperationException
- hbase 저장공간 설정
- R2DBC Paging
- 애자일 싫타
- fake jwt
- jsonMarshaller
- intellij
- Loki 로그
- 티스토리챌린지
- reids
- RedirectService
- ㅉ때
- Armeria
- save/update
- OIDC
- 노드간 통신
- pinpoint
- pinpoint 2.5.3
- Ingress Controller Fake
- 논블록킹 성능
- 핀포인트
- jar 배포
- 오블완
Archives
- Today
- Total
대머리개발자
R2DBC + 레디스 성능 테스트 본문
728x90
부하 : nGrinder
R2DBC + 레디스
R2DBC + mysql
쿼리 수행시간이 평균 4ms으로 나오는 EndPoint ( 레디스 )
쿼리 수행시간이 평균 5ms으로 나오는 EndPoint ( mysql )
레디스가 약 63%로 빠르다.
레디스를 적재적소에 사용을 하면 최적화된 피드백을 전달할 수 있다.!!
당영한 이야기지..괜히 캐쉬로 쓰는것이 아니다.
webflux, 논-블로킹, 비동기,..을 사용하는 이유는... 최소한의 자원으로 최대한의 효과를 얻기 위함이다.
성능 향상 keyword
- 논-블로킹으로 처리를 하더라도 step by step으로 하는 것이 아니라 필요에 따라서 동시(병렬)로 처리
- 엔티티가 아닌 DTO로 처리 -> 바인딩하는데 좀 더 걸린다.
: 별다른 로직이 없는데 쿼리 수행시간보다..응답 시간이 생각보다 많이 나온다면 해당 이슈일 확률이 높다!
코루틴..이용
fun get(boardId: Long, topMenuId:Long = 0): APIResult {
val (userId, isAdmin) = ContextUtil.getThreadLocal()
// DTO 처리
val boardDto = getSimple(boardId)
boardDto.bindingMenu(ServiceUtils.getMenuService().get(boardDto.menuId))
// 병렬 처리하고 제일 늦게 끝나는 놈까지. await 한다.
runBlocking {
scope.async(ContextUtil.getThreadContext().asContextElement()) {
async(Dispatchers.IO) { /* 조회수, 좋아요 카운트*/ }
async(Dispatchers.IO) { /* 내가 좋아요 했는쥐? */ }
async(Dispatchers.IO) { /* 권한? */}
async(Dispatchers.IO) { menuOptions(boardDto, topMenuId) }
}.await()
}
// 수행 여부 상관없이 슝 지나간다.
scope.launch(Dispatchers.IO) { asyncHistory(boardId) }
return APIResult(boardDto)
}
Mono.zip 이용.
return Mono.zip(
answerRepository.searchAnswersByUser(formId, filter.pageIndex, filter.pageSize).collectList(),
answerRepository.countAnswersByUser(formId)
).flatMap {
fetchListResponse(it.t1, it.t2.toLong())
}
// return answerRepository.searchAnswersByUser(formId, filter.pageIndex, filter.pageSize)
// .collectList()
// .flatMap {
// answerRepository.countAnswersByUser(formId).flatMap { cnt ->
// fetchListResponse(it, cnt.toLong())
// }
// }
728x90
'개발이야기 > 성능' 카테고리의 다른 글
조금이라도... 나아진 퍼포먼스를 보여주기 위한 비동기 선택 (4) | 2024.09.04 |
---|---|
i5-13600K vs mac-m1 vs 네이버 VM (0) | 2024.01.03 |
이벤트 서버의 성능 테스트 시작(4) (1) | 2023.11.25 |
이벤트 서버의 성능 테스트 시작(3) (1) | 2023.11.23 |
webFlux VS webMVC(2) (1) | 2023.03.02 |