Skip to content

[회원가입]프로파일링 결과 및 개선 사항

yanggwangseong edited this page Dec 26, 2024 · 4 revisions

📈 Flame Graph 분석 결과

[POST] /auth/sign-up

🔗 Flame Graph HTML

🔥 Flame Graph 보기

📝 분석 요약

주요 문제 및 성능 병목

  1. crypto 모듈에서 createHash 또는 etag 생성 과정에서 성능 병목

    • 문제: 해시 생성 과정에서 높은 CPU 점유율 발생.
    • 해결 방안:
      • 해시 생성 최적화.
      • 필요에 따라 메모리 캐시 활용.
  2. saveRefreshToken 문제

    • 문제: 토큰 저장 시 불필요한 쿼리 호출로 인한 성능 저하.
    • 해결 방안:
      • 쿼리 호출 최소화.
      • 트랜잭션 처리 최적화.
  3. jwt.sign 동기 함수 호출 문제

    • 문제: 동기적으로 호출될 때 높은 CPU 사용량.
    • 해결 방안:
      • 비동기 방식으로 전환.
      • 필요 시 JWT 캐싱 도입.
  4. RegisterMemberDto에서 class-transformerclass-validator 문제

    • 문제: 대량의 DTO 변환 및 유효성 검증 시 CPU 과부하.
    • 해결 방안:
      • 변환 및 검증 최소화.
      • 불필요한 필드 제거 및 DTO 최적화.

추가 개선 사항

  1. Date 타입 변환 문제

    • 문제: 데이터베이스에서 날짜 데이터를 가져올 때, new Date 객체로 변환 작업이 부하를 초래.
    • 해결 방안:
      • 변환 작업을 필요한 경우에만 수행.
      • 애플리케이션 내 변환 로직 최적화.
  2. SELECT 필드 최적화

    • 문제: 불필요한 필드까지 조회하여 쿼리 성능 저하.
    • 해결 방안:
      • 필요한 필드만 명시적으로 SELECT.
  3. 불필요한 Relation 제거

    • 문제: 필요하지 않은 관계를 가져오는 작업으로 성능 저하.
    • 해결 방안:
      • 필요한 관계만 명시적으로 로드.
  4. NestJS PickType 사용 지양

    • 문제: PickType 사용 시 모든 필드를 불러오는 비효율 발생.
    • 해결 방안:
      • DTO를 명시적으로 작성하여 필요한 필드만 포함.

  • crypto 모듈에서 createHash 또는 etag 생성 과정에서 성능 병목
  • saveRefreshToken
  • jwt sign 동기 함수 사용 문제
  • RegisterMemberDto에서 class-transformer와 class-validation에서 문제
  1. Date 타입 db에서 가져올 때 new Date 객체로 변환되는 문제
  2. select 필드는 항상 필요한 필드만 가져오기
  3. 불필요한 relation 제거
  4. dto에서 PickType 같은 NestJS mapped-type을 지양 해야한다.
Clone this wiki locally