본문 바로가기

엄성준

프론트엔드 개발자 · Autowini

꾸준히 노력하는 4년차 개발자입니다.

소개

2023년 7월부터 Autowini에서 프론트엔드 개발을 담당하며 Autowini와 WiniLogis의 Web, Mobile 및 Admin 서비스를 개발하고 운영하고 있습니다.

JSP 기반 레거시 서비스를 React 환경으로 전환하는 과정에서 초기 프로젝트 세팅과 구조 설계부터 상태 관리 개선, 성능 및 SEO 최적화까지 프론트엔드 전반의 업무를 수행했습니다.
또한 기존 서비스의 유지보수와 신규 기능 개발뿐 아니라 CI/CD 구축, 인증 시스템 개발 등 다양한 영역의 업무를 경험했습니다.

최근에는 Claude Code를 중심으로 개발 프로세스를 개선하고 있습니다.
화면 이미지 기반 UI 구현, Agentation을 활용한 UI 및 비즈니스 로직 개선, Claude Code Hooks를 활용한 Playwright와 Vitest 테스트 자동화 등을 업무에 적용했습니다.
작업 계획과 설계, 진행 과정 및 결과를 Artifact로 관리하는 방식도 도입하여 개발부터 테스트까지의 과정을 효율화하고 기존 대비 개발 시간을 50% 이상 단축한 경험이 있습니다.

업무 중 해결하지 못한 문제는 퇴근 후에도 원인을 찾아보며 해결하려고 노력하는 편입니다.
그 과정에서 얻은 경험과 기술은 블로그에 기록하며 정리하고 있습니다.

경력

Autowini프론트엔드 개발 · 2023.07 ~ 재직 중

AutowiniWeb · Mobile · Admin · 프론트엔드 개발

한국 중고차를 해외 바이어에게 파는 수출 플랫폼입니다.

  1. 레거시 페이지 React 전환 (Web · Mobile)

    • JSP 레거시를 React · TypeScript 로 단계적으로 옮기고, 처음 세팅 · 폴더 구조 · 공통 아키텍처 설계를 주도
    • JSP 안에 React 를 부분 삽입해 전환 위험을 줄인 뒤, 전체 레이아웃을 React SPA 로 바꿔 화면 접힘 · 리소스 중복 로딩 해결
    • Web 은 필터 검색 · 통합 검색 · 찜 목록 · 운송 정보 · 파츠위니 통합 검색, Mobile 은 찜 목록 · 최근 본 매물 · 운송 정보를 차례로 분리
    • 흩어진 React 프로젝트를 web-www-front · web-mobile-front 로 통합하고 공통 UI · 로직을 모듈화해 중복 코드 약 20% 감소
    • 필터 검색 페이지 리소스 로딩 구조 개선과 지연 로딩으로 같은 시나리오 기준 로딩 45초 → 20초
    • 글로벌 헤더 · 푸터를 React 로 만들고 SmartLink 로 JSP · React 이동을 분기, Lighthouse 성능 · 접근성 평균 10점대 → 70점대
    • Vite manualChunks 로 React 코어를 vendor 청크로 분리하고 Akamai CDN 캐시 정책을 고쳐 정적 리소스 재다운로드 최소화
    • 15개 언어 JSON 을 언어 · 페이지 단위로 동적 로딩해 초기 번들 약 100KB 감소
    • SearchParams 상태 관리로 검색 조건을 URL 에 유지하고, Skeleton UI · 이미지 지연 로딩 · 찜 낙관적 업데이트 적용
  2. 디자인 시스템 · 테스트 · 배포 자동화

    • 디자이너와 디자인 토큰 기반 디자인 시스템을 만들고 Tailwind CSS 로 전환
    • Styled-Components 를 Emotion 으로 옮겨 SSR 환경의 스타일 깜빡임(FOUC) 대응
    • Vitest 로 주요 유틸 테스트, Playwright 로 주요 사용자 시나리오 E2E 환경 구축
    • Bitbucket Pipelines CI/CD 구축, SSH 키 인증 · rsync 증분 배포 · Akamai Fast Purge 캐시 무효화 · 배포 결과 알림 봇 연동
    • Claude Code 중심 개발 과정(화면 이미지로 첫 UI, Hooks 로 테스트 자동 생성, Artifact 로 계획 · 진행 관리)으로 개발 시간 50% 이상 단축
  3. Keycloak 인증 시스템 (Web · Admin)

    • Keycloakify 로 로그인 · 회원가입 · 비밀번호 찾기 등 인증 화면 7종을 React 로 커스터마이징
    • Web · Admin 인증 화면을 한 테마로 묶고 i18next · 구글 시트 번역으로 15개 언어 지원
    • 가입 뒤 Buyer · Seller 전환 페이지를 만들어 인증과 서비스 가입 흐름을 연결
    • Axios 인터셉터와 updateToken() 으로 액세스 토큰 자동 갱신과 공통 API 인증 처리
  4. Admin 채팅 시스템

    • stomp.js WebSocket 으로 실시간 메시지 송수신과 채팅 목록 동기화, 수신 때 TanStack Query refetch 로 목록 갱신
    • JSP 리스트 옆 iframe 채팅으로 시작해 React 통합 페이지로 옮기고, 리스트 · 채팅 너비를 끌어서 조절
    • 이미지 붙여넣기 · 드래그 업로드, 이미지가 다 뜬 뒤에도 채팅 하단 고정
    • visibilitychange 와 디바운스로 새 메시지가 오면 브라우저 탭 제목으로 알림
    • AVIF 이미지가 일부 Windows PC 에서 깨진 jpg 로 받아지던 문제를 Canvas 변환으로 해결
    • react-markdown 기본 스타일 때문에 어긋나던 채팅 UI · 아랍어 정렬을 필요한 스타일만 재정의해 정리
  5. 영상 플레이어 화질 선택

    • Hls.js 플레이어에 360p · 480p · 720p 직접 선택 기능 추가
    • AUTO 는 측정한 대역폭과 화질별 요구 대역폭을 비교해 고르도록 구성
작업 2개 더 보기접기
  1. 클레임 접수 시스템 (Web · Mobile · App)

    • 웹 · 모바일 · 앱 웹뷰에서 함께 쓰는 채팅 UI 기반 클레임 접수 화면
    • 구글 시트 번역을 JSON 으로 받아 오는 스크립트를 만들어 7개 언어 지원
    • TanStack Query useMutation 으로 처리 단계별 성공 · 실패 로직 분리
  2. 카히스토리 · 수리 이력

    • 웹 · 모바일 카히스토리 조회 페이지 개발(JSP)
    • 차량 도막 정보 · 수리 이력 등록 · 수정 화면과 조회 템플릿 개발

React · TypeScript · TanStack Query · Zustand · Tailwind CSS · Emotion · Keycloak · stomp.js · Vitest · Playwright · Vite · JSP

WiniLogisWeb · Mobile · 단독 풀스택 개발

해상 운송 견적 · 부킹 · 선적 일정을 다루는 물류 서비스입니다.

  1. 빌드 · SEO · 성능 개선

    • Webpack 5 를 Vite 로 옮겨 개발 서버 구동 39초 → 148ms
    • Claude Code 로 50개 넘는 파일의 환경 변수 참조 177곳을 process.env 에서 import.meta.env 로 일괄 전환
    • 페이지 단위 지연 로딩 · 코드 분할로 메인 번들 약 77% 감소, Lighthouse 성능 34점 → 70점 이상
    • Styled-Components 를 Tailwind CSS 로 옮겨 런타임 스타일 생성 비용 제거
    • WebP 이미지, 영상 화질 조정 · CDN, Hero 리소스 preload · fetchPriority 로 LCP 개선
    • 메타 태그 중복을 막는 SeoHelmet 을 만들고 범용으로 다듬어 react-head-safe 로 npm 공개
    • canonical 과 사이트맵 인덱스(main · oceanfreight · shipping-schedule · blog · review) 구축
    • 번역 JSON 을 네임스페이스로 나눠 동적 로딩, 미사용 의존성 30개(레거시 18 · depcheck 12)와 안 쓰는 번역 키 정리
  2. 전역 상태 Redux Toolkit → Zustand

    • Redux Toolkit 보일러플레이트를 걷어 내고 상태를 담는 규칙(값 3개 이상은 객체)을 정함
    • 스토어별 persist 로 필요한 상태만 localStorage 에 저장
    • Redux Toolkit · react-redux · redux-persist 를 제거하고 코드 2,169줄 → 1,179줄(약 45% 단축)
  3. 국가 데이터 DB 이관 · 전용 API

    • 프론트엔드 상수 파일(2,230줄)에 있던 전화 국가번호를 DB 로 옮기고 국가 전용 API 신설
    • 전체 코드를 돌려주던 기존 API 대신 써서 응답 크기 229KB → 12.6KB, 상수 파일 제거로 번들 11.3KB 추가 감소
    • TanStack Query select 로 데이터를 바꿔 주어 기존 24개 파일의 로직은 그대로 유지
  4. 배포 이관 (Jenkins → Bitbucket Pipelines)

    • 기존 Jenkins 배포 파이프라인을 Bitbucket Pipelines 로 옮겨 Autowini 와 배포 방식을 표준화
    • Pipelines Schedules 로 사이트맵을 하루 한 번 자동으로 만들어 배포
  5. PWA

    • 네이티브 앱 없이 데스크톱 · 모바일 홈 화면에 설치
    • Service Worker 로 오프라인에서도 데이터 확인
작업 4개 더 보기접기
  1. Shipping Blog · Buyer Review

    • 블로그 목록 · 상세(무한 스크롤 · 모바일 스와이프) 개발과 반응형 리뉴얼
    • Admin 글 작성 · 수정 · 공개 설정, React-Quill 에디터와 이미지 순서 드래그
    • 관리자가 쓴 HTML 을 DOMPurify 로 정제해 렌더링
    • Buyer Review 게시판과 리뷰 영상 팝업 재생
  2. 운임 조회 · 비회원 부킹 · 견적 메일

    • 로그인하면 회원 정보를 자동 입력하고, 비회원은 기존 회원인지 확인해 자동으로 부킹
    • 도착 국가별 운임 조회와 티켓 모양의 운임 카드 UI
    • Admin 에서 부킹 정보로 견적(Quotation) 메일을 여러 명에게 발송
  3. 유로화 · 인보이스

    • 인보이스 PDF 다운로드(Web), Admin 인보이스 생성 · 수정과 PDF · Excel 내보내기
    • EUR 환율을 24시간 저장해 두고 최소 호출로 유로 환산, 유로 기준 인보이스 발행
  4. 부킹 리퀘스트 · 관리자 화면

    • 반응형 부킹 리퀘스트 화면과 요청 · 상담 채팅 기능
    • Admin 부킹 단계 · 요청 기록 · 상담 · 이메일 기록 관리 화면과 회원 관리 CRUD
    • How It Works 5단계 안내 페이지, 메인 리뉴얼, Admin 디자인을 Tailwind CSS 로 리뉴얼
    • 헤더 · 모바일 사이드바를 리팩터링해 잘림 문제를 고치고 코드 1,249줄 감축

React · TypeScript · Vite · TanStack Query · Zustand · Tailwind CSS · Styled-Components · React-Quill · React-pdf · i18next

오픈소스

기여한 저장소

오픈소스 자세히 →

다루는 기술

주로 쓰는 것
React · TypeScript · Next.js
상태 · 데이터
TanStack Query · Zustand
스타일
Tailwind CSS
테스트
Vitest · Playwright
빌드 · 배포
Vite · Bitbucket Pipelines · Vercel
AI
Claude Code · Gemini API

연락

일 제안, 글에 대한 의견, 음악 라이선스 문의 모두 메일로 받습니다.