-
Notifications
You must be signed in to change notification settings - Fork 0
[회원가입]프로파일링 결과 및 개선 사항
yanggwangseong edited this page Dec 26, 2024
·
4 revisions
-
crypto
모듈에서createHash
또는etag
생성 과정에서 성능 병목- 문제: 해시 생성 과정에서 높은 CPU 점유율 발생.
-
해결 방안:
- 해시 생성 최적화.
- 필요에 따라 메모리 캐시 활용.
-
saveRefreshToken
문제- 문제: 토큰 저장 시 불필요한 쿼리 호출로 인한 성능 저하.
-
해결 방안:
- 쿼리 호출 최소화.
- 트랜잭션 처리 최적화.
-
jwt.sign
동기 함수 호출 문제- 문제: 동기적으로 호출될 때 높은 CPU 사용량.
-
해결 방안:
- 비동기 방식으로 전환.
- 필요 시 JWT 캐싱 도입.
-
RegisterMemberDto
에서class-transformer
와class-validator
문제- 문제: 대량의 DTO 변환 및 유효성 검증 시 CPU 과부하.
-
해결 방안:
- 변환 및 검증 최소화.
- 불필요한 필드 제거 및 DTO 최적화.
-
Date
타입 변환 문제-
문제: 데이터베이스에서 날짜 데이터를 가져올 때,
new Date
객체로 변환 작업이 부하를 초래. -
해결 방안:
- 변환 작업을 필요한 경우에만 수행.
- 애플리케이션 내 변환 로직 최적화.
-
문제: 데이터베이스에서 날짜 데이터를 가져올 때,
-
SELECT
필드 최적화- 문제: 불필요한 필드까지 조회하여 쿼리 성능 저하.
-
해결 방안:
- 필요한 필드만 명시적으로 SELECT.
-
불필요한 Relation 제거
- 문제: 필요하지 않은 관계를 가져오는 작업으로 성능 저하.
-
해결 방안:
- 필요한 관계만 명시적으로 로드.
-
NestJS
PickType
사용 지양-
문제:
PickType
사용 시 모든 필드를 불러오는 비효율 발생. -
해결 방안:
- DTO를 명시적으로 작성하여 필요한 필드만 포함.
-
문제:
- crypto 모듈에서 createHash 또는 etag 생성 과정에서 성능 병목
- saveRefreshToken
- jwt sign 동기 함수 사용 문제
- RegisterMemberDto에서 class-transformer와 class-validation에서 문제
- Date 타입 db에서 가져올 때 new Date 객체로 변환되는 문제
- select 필드는 항상 필요한 필드만 가져오기
- 불필요한 relation 제거
- dto에서 PickType 같은 NestJS mapped-type을 지양 해야한다.
아래는 프로젝트 데이터베이스 설계 ERD입니다: