최기환

성능·아키텍처 Frontend Engineer

PDF 다운로드

Experience

프론트엔드 개발자

Nov 2024 - Present
주식회사엑셈

인스턴스 통합 모니터링 대시보드 개발

카드형 2-depth 흐름을 고밀도 그리드 기반 1-depth 허브로 재설계해 한 화면 비교와 즉시 RTM/PA 이동이 가능하도록 바꿨습니다. useFrozenData, useDeferredValue, memo 최적화로 폴링·리사이즈가 겹치는 구간의 렌더 총량을 150회에서 5회로 96.7% 줄이고, INP를 400ms대에서 100ms대로 안정화했습니다.

  • restart/start/stop 인터페이스의 PollingManager로 화면별 타이머를 묶어 선언적으로 폴링 주기를 제어하도록 일원화했습니다.

  • 서로 영향을 주는 필터·조회 상태와 반복되던 저장/복원 로직을 중앙 저장소와 버전 기반 마이그레이션으로 정리해 수정 범위를 국소화했습니다.

  • API 전면 교체 시점에 Vue 연장 대신 React와 사내 디자인 시스템 기반으로 재구축해 구조 부채 누적을 줄였습니다.

  • 카드형 2-depth 구조를 고밀도 그리드 1-depth 허브로 바꿔 한 화면 비교와 즉시 RTM/PA 이동 흐름을 확보했습니다.

  • useFrozenData 기반 데이터 스냅샷 유지, useDeferredValue 저우선 렌더, memo 최적화로 렌더 총량을 96.7% 줄이고 INP를 안정화했습니다.

대규모 데이터 화면용 공용 데이터 그리드 개발

공용 그리드에서 table 태그 기반 구조의 한계를 넘기 위해 div + virtualization 렌더링으로 전환하고, 테이블 레벨 이벤트 위임과 React.memo의 값 기반 comparator(areTableRowPropsEqual)로 불필요한 리렌더를 줄였습니다. 그 결과 DOM 노드 90% 감소와 리사이즈 처리 22ms→0.5ms 개선을 확인했습니다.

  • table 태그 기반 구조는 virtualization, 고정 컬럼, 그룹 헤더, 리사이즈 조합에서 레이아웃 제약이 커 통합 테스트로 기존 동작을 고정한 뒤 div 기반 렌더링으로 마이그레이션했습니다.

  • Cell absolute 1차 구조에서 Row absolute + Cell flex 2차 구조로 재설계해 열 조작 동작과 레이아웃 제약을 일치시켰고, DOM 노드 90% 감소와 리사이즈 처리 22ms→0.5ms 개선을 확인했습니다.

  • 행 가상화(virtualization)로 DOM 마운트 범위를 뷰포트 중심으로 제한하고, React.memo + areTableRowPropsEqual 비교 함수로 VirtualItem을 참조가 아닌 index/start/size 값으로 비교해 불필요한 리렌더를 줄였습니다.

  • columnSizing은 안정적으로 전달하고 셀·행 개별 상호작용 대신 테이블 레벨 이벤트 위임을 적용해 핸들러 수와 상호작용 처리 비용을 낮췄습니다.

  • Core - State - UI 계층 분리와 기능 호환표를 기준으로 Storybook 시나리오, 브라우저 통합 테스트, 회귀 타깃 문서를 함께 운영해 기능 조합 회귀를 관리했습니다.

차세대 데이터베이스 성능 모니터링 제품 개발

차세대 DB 모니터링 제품에서 위젯 빌더, 상태 관리, 저장소 추상화, SQL 분석 UX를 확장 가능한 구조로 재설계했습니다. 5개 차트 타입의 설정·검증·미리보기를 어댑터/레지스트리 구조로 분리하고, 전역 스토어 20개를 Context API 기반 지역 스토어로 전환했으며, persist 저장 엔진 교체만으로 로컬 스토리지 기반 레이아웃 저장을 DB 영구 저장으로 하루 만에 마이그레이션했습니다.

  • line/area/bar/scatter/table 5개 차트 타입을 어댑터/레지스트리 구조로 묶고, 설정 폼·zod 검증 스키마·미리보기 컴포넌트를 타입별 모듈로 분리해 신규 위젯 추가 시 공통 빌더가 아니라 해당 타입만 확장하도록 재설계했습니다.

  • 불필요한 전역 Zustand 스토어 20개를 Context API 기반 지역 스토어로 전환하고 storeFactoryProvider, selector hook, store API, persist/global 옵션을 단일 규약으로 추상화해 초기화 리렌더 50% 감소, 전역 상태 사이드 이펙트 제거, 보일러플레이트 70% 감소를 이끌었습니다.

  • webEnvStateStorage(getItem/setItem/removeItem) 인터페이스로 추상화해 Zustand persist 미들웨어의 저장 엔진만 교체할 수 있게 만들었고, 기존 저장 로직을 유지한 채 로컬 스토리지 기반 대시보드 레이아웃 저장을 DB 영구 저장으로 하루 만에 마이그레이션했습니다.

  • One SQL Detail, Plan Change, SQL Scatter, Monaco 기반 SQL 에디터 등 SQL 분석 핵심 화면을 구현해 실행 계획 비교, diff 시트, 바인드 변수 하이라이팅·값 치환, 드릴다운 같은 분석 UX를 제품 기능으로 연결했습니다.

레거시 프론트엔드 안정화 및 진단 구조 개선

레거시 ExtJS FE에서 암묵적 통신 규칙과 수동 추적 흐름을 정리하고, 브라우저 진단 도구와 스타터킷을 공용화해 원인 추적·환경 진입 비용을 낮췄습니다.

  • 팀 공용 브라우저 진단 도구를 구축해 console.log 없이 SQL 응답을 실시간으로 확인하고 컴포넌트를 IDE로 바로 추적할 수 있게 해, 레거시 ExtJS 이슈의 원인 추적 진입 비용을 낮췄습니다.

  • 전역 WS·IMXWS 공통 모듈에 JSDoc과 사용 예시 링크를 추가해 호출 규칙과 응답 해석 기준을 문서화하면서, 화면별 추측에 의존하던 통신 로직 분석 비용을 줄였습니다.

  • ExtJS 이벤트 콜백에서 function 문맥으로 this가 깨지던 지점을 추적해 arrow function으로 고정하고, 인스턴스 트리 선택 시 RTS 상태 검증이 잘못되던 문제를 바로잡았습니다.

  • mfo_v5_starter에 레포·서브모듈·환경 감지·config.json 생성·실행 절차를 중앙화해, 수 시간 걸리던 레거시 환경 셋업을 몇 분 내 시작 가능한 흐름으로 줄였습니다.

프리랜서 개발자

Jun 2023 - Dec 2023
크몽

총 12건 프로젝트에서 기획부터 개발·배포까지 End-to-End를 직접 수행했습니다.

CloudFront, 로드 밸런싱, HTTPS를 적용해 배포 안정성과 운영 신뢰성을 관리했습니다.

Cafe24, AWS, Vercel 환경에서 서비스를 운영하며 5점 만점 리뷰 9건을 받았습니다.

Technical Writing

설계 의사결정과 구조적 사고를 보여주는 글을 대표 1개와 최신 4개로 큐레이션했습니다.

최신 글

Awards & Activities

항해 플러스 프론트엔드 1기

팀 스파르타

Jan 2024

프론트엔드 심화 과정 (최우수 수료)

핵심 학습 내용 및 성과

  1. JavaScript 엔진 레벨 최적화: V8 엔진 히든 클래스 동작 원리 분석 및 최적화 기법 습득.
  2. React 내부 동작 원리 심화 이해: React diff 알고리즘 및 Hook 동작 방식 구현.
  3. 테스트 주도 개발 역량 확보: 유닛/통합/E2E 테스트 학습 및 TDD 실습.
  4. React Fiber 아키텍처 발표: 동기적 Stack 렌더링 vs 비동기적 Fiber 비교 분석 발표.

학습 성과: 프론트엔드 개발의 표면적 사용법을 넘어 내부 동작 원리를 깊이 이해함으로써, 성능 최적화와 문제 해결 능력을 크게 향상시켰습니다.

Certificates

TOEIC: 925점 YBM, Mar 2022

Skills

핵심 문제 해결 사례를 보완하는 기술 스택 요약입니다.

Languages

TypeScriptJavaScriptHTML/CSS

Frameworks & Libraries

ReactAstroZustandTanStack TableTanStack QueryTanStack Virtual

Testing

VitestPlaywright

Tools

ViteGit

Education

동의대학교 정보통신공학과 (부전공: 응용 소프트웨어 공학)
Mar 2017 - Mar 2024