BBAK-jun 님의 상세페이지[3팀 박준형] Chapter 4-2 코드 관점의 성능 최적화

과제 체크포인트

배포 링크

과제 요구사항

  • 배포 후 url 제출

  • API 호출 최적화(Promise.all 이해)

  • SearchDialog 불필요한 연산 최적화

  • SearchDialog 불필요한 리렌더링 최적화

  • 시간표 블록 드래그시 렌더링 최적화

  • 시간표 블록 드롭시 렌더링 최적화

과제 셀프회고

기술적 성장

새로 학습한 개념

  • Promise.all을 통한 API 호출 최적화 방법과 병렬 처리의 이점
  • React.memo의 propsAreEqual 함수 활용법
  • Reference value vs Primitive value의 성능 차이
  • useContext의 범위 제한을 통한 렌더링 최적화
  • Native element vs React Component의 성능 차이점
  • Computed value의 시간복잡도 최적화 방법

기존 지식의 재발견/심화

  • useMemo, useCallback의 실제 성능 효과 체감
  • 드래그앤드롭에서 발생하는 리렌더링 패턴 이해
  • React DevTools Profiler 활용 경험

구현 과정에서의 기술적 도전과 해결

  • SearchDialog에서 발생한 불필요한 연산 식별 및 해결 과정
  • 시간표 블록 드래그/드롭 시 렌더링 최적화 구현 방법
  • 성능 병목 지점 찾기 위한 디버깅 과정

작성 예시:

  • 성능 병목 발견 → 원인 분석 (useMemo 누락) → 해결 방법 적용 (계산 최적화)
  • 불필요한 리렌더링 발견 → 컴포넌트 분석 → memo와 propsAreEqual 적용

코드 품질

특히 만족스러운 구현

  • 어떤 최적화 기법이 가장 효과적이었는지
  • 코드 가독성과 성능을 모두 고려한 구현 부분
  • 재사용 가능한 최적화 패턴 구현

수치 포함 예시:

  • "API 호출 시간이 Promise.all 적용 후 50% 단축"
  • "검색 결과 렌더링 시 React.memo로 불필요한 리렌더링 80% 감소"
  • "드래그 시 전체 테이블 리렌더링에서 해당 테이블만 리렌더링으로 개선"

리팩토링이 필요한 부분

  • 아직 최적화되지 않은 컴포넌트나 함수
  • 복잡도가 높아 개선이 필요한 로직
  • 성능 개선 여지가 남아있는 부분

코드 설계 관련 고민과 결정

  • 최적화와 코드 복잡성 사이의 균형점 찾기
  • 컴포넌트 분리 기준 설정
  • 상태 관리 구조 개선 결정

학습 효과 분석

가장 큰 배움이 있었던 부분

  • 실제 성능 향상을 체감할 수 있었던 최적화 기법
  • 이론과 실무의 차이를 느낀 부분
  • 측정 도구를 통해 객관적으로 확인한 성능 개선 효과

측정 도구 활용 예시:

  • console.log를 통한 API 호출 시간 측정
  • React DevTools Profiler로 렌더링 성능 확인
  • Network 탭을 통한 중복 요청 방지 확인
  • Performance 탭을 통한 메인 스레드 블로킹 시간 측정

추가 학습이 필요한 영역

  • 더 깊이 있게 학습하고 싶은 최적화 기법
  • 브라우저 렌더링 엔진에 대한 이해
  • 메모리 누수 방지 및 관리 방법

실무 적용 가능성

  • 현재 또는 향후 프로젝트에 적용 가능한 기법들
  • 팀 내 공유할 만한 베스트 프랙티스
  • 성능 모니터링 및 측정 방법론

실무 연결 예시:

  • 대량 데이터 테이블 최적화 경험을 실제 관리자 페이지에 적용 가능
  • 검색 최적화 패턴을 다른 필터링 기능에 재사용 가능
  • 캐시 매니저 패턴을 API 중심 애플리케이션에 활용 가능

과제 피드백

과제에서 모호하거나 애매했던 부분

  • 최적화 목표나 기준이 명확하지 않았던 부분
  • 성능 측정 방법에 대한 가이드라인
  • 어느 정도까지 최적화해야 하는지에 대한 기준

과제에서 좋았던 부분

  • 실제 성능 개선을 체험할 수 있었던 점
  • 다양한 최적화 기법을 실습할 수 있었던 점
  • 실무에서 자주 마주치는 문제들을 다룬 점

리뷰 받고 싶은 내용

성능 최적화 관련

  • "현재 구현한 최적화 기법 중에서 실무에서 우선순위가 높은 것과 낮은 것을 구분해서 조언해주실 수 있나요?"
  • "드래그앤드롭 최적화에서 사용한 방법이 일반적인 베스트 프랙티스에 부합하는지 검토해주실 수 있을까요?"

코드 구조 관련

  • "컴포넌트 분리 기준에서 성능과 가독성을 모두 고려했는데, 더 나은 구조화 방안이 있을까요?"
  • "현재 Context 격리 방식이 적절한지, 더 효율적인 상태 관리 구조가 있는지 조언해주실 수 있나요?"

측정 및 모니터링 관련

  • "성능 개선 효과를 측정한 방법이 적절한지, 더 정확한 측정 방법론이 있는지 알고 싶습니다."
  • "실무에서 성능 모니터링을 지속적으로 하기 위한 도구나 방법론을 추천해주실 수 있나요?"

실무 적용 관련

  • "현재 학습한 최적화 기법들을 실제 프로덕션 환경에 적용할 때 주의해야 할 점들이 있을까요?"
  • "팀 단위에서 성능 최적화를 체계적으로 관리하기 위한 가이드라인을 제안해주실 수 있을까요?"

과제 피드백

안녕하세요 준형님! 마지막 과제도 잘 진행해주셨네요 ㅎㅎ 그동안 너무 고생 많으셨습니다!! 면접은 잘 보셨나요!? ㅋㅋㅋ 믿어의심치않습니다. 그리고 생일축하드려요!!!


성능 최적화 관련

"현재 구현한 최적화 기법 중에서 실무에서 우선순위가 높은 것과 낮은 것을 구분해서 조언해주실 수 있나요?"

흠.. 우선순위를 따질 수 있을까요? 우선순위는 서비스에서 해결해야 하는 우선순위에 따라 달라질 것 같아요..!

"드래그앤드롭 최적화에서 사용한 방법이 일반적인 베스트 프랙티스에 부합하는지 검토해주실 수 있을까요?"

일반적인 베스트 프랙티스라는게 있으면 좋겠는데... 이게 상황에 따라 달라질 수 있다보니 뭐라고 답변드리가 어렵네요 ㅎㅎ 다만 지금과 같은 방식으로 최적화 하는 방법은 무척 좋아보이네요! 다양한 상황에 대응할 수 있을 것 같아요!

코드 구조 관련

"컴포넌트 분리 기준에서 성능과 가독성을 모두 고려했는데, 더 나은 구조화 방안이 있을까요?"

props를 하나하나 비교하는 부분이 가독성에 좋나? 라고 하면 그렇지 않다고 생각해요 ㅎㅎ 컴포넌트가 확장될 떄 마다 입력해줘야 하는게 같이 늘어나니까요!

그리고 이런 코드가 있는데요,

    <DayFilter days={searchOptions.days} onChangeSearchOption={handleSearchOptionChange} />
    <GradeFilter grades={searchOptions.grades} onChangeSearchOption={handleSearchOptionChange} />

아마 저라면 이렇게 표현했을 것 같아요..!

    <DayFilter value={searchOptions.days} onChange={handleSearchOptionChange} />
    <GradeFilter value={searchOptions.grades} onChange={handleSearchOptionChange} />

그리고 아예 이렇게 표현할 수 있도록 설계해보면 어땠을까요!?

    <DayFilter {...searchOptions.days} />
    <GradeFilter {...searchOptions.grades} />

"현재 Context 격리 방식이 적절한지, 더 효율적인 상태 관리 구조가 있는지 조언해주실 수 있나요?"

레이아웃이 어떻게 설계되는지에 따라 Context의 설계방법도 달라질 수 있다고 생각해요 ㅎㅎ 지금 구조에서는 사실 각각의 컴포넌트가 ScheduleTable 컴포넌트가 Context를 하나씩 가지는게 더 간단하면서도 효과적인 방법이라고 생각합니다. 그런데 ScheduleTable 간의 시간표 이동까지 고려한다면 현재 설계된 방식이 더 적합하겠죠?

측정 및 모니터링 관련

"성능 개선 효과를 측정한 방법이 적절한지, 더 정확한 측정 방법론이 있는지 알고 싶습니다."

직접 측정하신게 아닌 것 같아서... 준형님께서 직접 해보시면 좋겠어요. 개인적으로 %로 표현하는 것 보단 실제 시간으로 표현하는게 더 임팩트가 크답니다 ㅎㅎ %의 경우 와닿지가 않아요.

"실무에서 성능 모니터링을 지속적으로 하기 위한 도구나 방법론을 추천해주실 수 있나요?"

보통 센트리를 많이 사용하는 것 같아요!

실무 적용 관련

"현재 학습한 최적화 기법들을 실제 프로덕션 환경에 적용할 때 주의해야 할 점들이 있을까요?"

정해진 답은 없다! 라는 것만 인지해주시면 될 것 같습니다 ㅎㅎ 프로젝트마다, 서비스마다, 설계마다 적절한 최적화 방식이 다 다르니까요. 유연하게 생각하는 과정이 필요해요!

"팀 단위에서 성능 최적화를 체계적으로 관리하기 위한 가이드라인을 제안해주실 수 있을까요?"

어떤 수치를 관리할지를 먼저 정하면 좋답니다 ㅋㅋ 관리를 하기보단 "이 때 최적화 하자!" 라는 기준을 정하는게 좋지 않나 싶어요. 저희팀은 "문제가 드러났을 때 해결하자" 라는 주의라서, 그 이전까지는 굳이 성능에 대해 손대진 않고 있어요.

혹은 SRE와 관련된 내용을 찾아보시면 좋답니다! Lighthouse나 webvitals 같은걸 토대로 정해도 좋고, 혹은 경쟁사와 비교하는 방법도 있어요!


항상 PR 질문의 너무 AI가 만들어준 느낌이라 이게 정말 준형님께서 궁금해 하는게 맞나? 라는 생각이 들어요. 이것도.. 컨셉이겠죠!? ㅋㅋ 고생하셨습니다!