본문 바로가기
반응형

Performance20

Public API의 CDN 캐시 API의 캐시 중에는 모든 사용자 (로그인/비로그인 관계없이) 동일한 응답값을 줘야하는 것들이 있다. 로그인/비로그인에 관계없이 항상 일정한 데이터가 사용자 UI에 필요한 경우이다. 이를테면 인프런 서비스의 상단 헤더에 노출되는 강의 카테고리 (1 depth, 2depth, 3depth) 같은 경우. 이 캐시 데이터는 서비스의 모든 페이지에서 호출하고 있다보니 페이지 조회수 만큼 캐시 API를 호출하게 된다. Redis 캐시 -> 로컬 캐시 등으로 캐싱처리를 해도 결국 서버로 가는 조회 요쳥수가 개선되는 것은 아니고, 서비스 전체에서 가장 많이 호출되는 API 영역이 개선된 것이 아니다. SSR을 CDN으로 캐시 해도, SSG로 정적 페이지를 만들어도 헤더 영역은 사용자별 로그인 구분을 위해 CSR로 구.. 2024. 4. 14.
Promise Pool로 성능 개선하기 (feat. Promise.all) Node.js 환경에서는 다수의 비동기 작업을 처리하기에 적합하다. 예를 들어, 다음과 같은 상황이 있다고 가정해보자. ID 별로 조회만 가능한 외부 서비스에서 대량의 건수를 API로 조회해야하는 경우 join, subquery 로 조회시 성능과 DB의 부하가 심하여, id 별로 쿼리를 나눠서 조회해야하는 경우 대량으로 이벤트 메세지를 발행해야하는 경우 등등 다량의 Promise 작업들은 백엔드 애플리케이션 작업에서는 언제든지 발생할 수 있다. 이럴때 Node.js 환경에서는 Promise.all 을 통해 쉽게 해결할 수 있다. 여기서 Promise.all 보다 좀 더 성능을 개선할 수 있는 방법을 보자. 개요 수백개 이상의 Promise 작업들은 보통 한번에 Promise.all을 수행하지 않는다. 예.. 2023. 5. 5.
PostgreSQL (Aurora) 10 vs 11 버전 성능 비교 PostgreSQL은 버전별로 굉장히 많은 개선이 있다. 2022년 1월 13일 현재, AWS RDS Aurora는 PostgreSQL 버전을 10, 11, 12, 13까지 지원하고 있다. 실제 PostgreSQL은 14까지 나와있으며, 현재 Aurora가 아닌 RDS는 14 RC1 까지 준비되었다. 10 버전이 이미 출시된지 4년 이상 지났고, 현재까지 메이저 14버전까지 출시되면서 성능/자원관리/기능등 여러 개선이 있었다. 특히나 인덱스가 10.x에서 비효율적으로 작동하는 부분이 굉장히 크기 때문에 이를 버전 업그레이드를 통해 성능개선 효과를 볼 필요가 있다. 10 vs 11 비교 PostgreSQL의 10 ~ 14버전 간 여러 기능 비교 중, 인덱스 & 제약조건에 관한 비교를 본다. PostgreS.. 2022. 1. 13.
PostgreSQL에서 Order By가 선적용되는 슬로우 쿼리 해결책 PostgreSQL 10.x 를 사용하다보면 간혹 옵티마이저가 잘못된 판단을 할때가 있습니다. 이번 경우에는 Order By 가 선 적용되는 실행계획을 어떻게 개선할지 알아보겠습니다. 1. 문제 상황 이를 테면 아래 쿼리의 경우 보통 1~5초 정도 수행됩니다. SELECT "vouchers"."id" FROM "vouchers" AS "vouchers" WHERE "course_id" in (select "id" from "courses" WHERE ("slug" = '코딩테스트-자바-실전' AND "deleted_at" IS NULL)) AND "user_id" in (select "id" from "users" WHERE ("deleted_at" IS NULL)) AND "deleted_at" IS .. 2021. 8. 21.
Spring Batch 파티셔닝 (Partitioning) 활용하기 지난 시간에 소개 드린 멀티쓰레드 Step과 더불어 파티셔닝 (Partitioning)은 Spring Batch의 대표적인 Scalling 기능입니다. 서비스에 적재된 데이터가 적을 경우에는 Spring Batch의 기본 기능들만 사용해도 큰 문제가 없으나, 일정 규모 이상이 되면 (ex: 매일 수백만 row가 추가되는 상황에서의 일일 집계) 서버를 Scalling (Up or Out) 하듯이 배치 애플리케이션 역시 확장이 필요합니다. 이런 문제를 고려해서 Spring Batch 에서는 여러 Scalling 기능들을 지원하는데요. 대표적으로 다음과 같습니다. Multi-threaded Step (Single process / Local) 단일 Step을 수행할 때, 해당 Step 내의 각 Chunk를 별.. 2021. 1. 20.
Querydsl (JPA) 에서 Cross Join 발생할 경우 JPA 기반의 환경에서 Querydsl를 사용하다보면 @OneToOne 관계에서 Join 쿼리 작성시 주의하지 않으면 Cross Join이 발생할 수 있습니다. CrossJoin 이란 집합에서 나올 수 있는 모든 경우를 이야기 합니다. 예로 A 집합 {a, b}, B 집합 {1,2,3}이며 이들의 CrossJoin은 AxB로 다음과 같습니다. {(a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3)} 당연히 일반적인 Join보다 성능상 이슈가 발생하게 됩니다. 이번 시간에는 어떤 경우에 이런 Cross Join이 발생하는지, 어떻게 해결할 수 있는지 확인해보겠습니다. 모든 코드는 Github에 있습니다. 1. 테스트 환경 테스트 환경은 다음과 같습니다. Spring Boot .. 2020. 11. 16.

728x90
반응형