김영인 프로필 사진
서울 강동구구직 중

김영인 | Frontend Developer

정량 지표로 병목을 진단하고 개선 효과를 수치로 검증하며, 성능 문제를 구조적으로 해결합니다. 변경 영향 범위를 예측할 수 있는 코드 아키텍처를 설계해, 빠른 개선이 안정적으로 쌓이는 환경을 만듭니다.

기술 스택

Languages

TypeScriptJavaScript

Frontend

ReactNext.js (App Router)HTML5CSS3Radix UIshadcn/ui

Styling

Tailwind CSSStyled Components

Data / State

TanStack Query (React Query)ZustandRedux Toolkit

Forms / Validation

React Hook FormZod

Testing

VitestReact Testing Library (RTL)PlaywrightMSW

Backend / DB

Supabase (PostgreSQL/Auth/Storage)MySQL

Image / Media

ImageKit (CDN/이미지 변환)

Notifications

Firebase Cloud Messaging

DevOps / Tools

GitGitHubVercelAWS S3ESLint 9PrettierHuskylint-staged

AI Tools

Claude CodeCursor AI

주요 프로젝트

Private Project

Harvester-LALA

Private
2026.01 ~ 2026.04창업 프로젝트 · 스타트업 전환 중 (6명) | 프론트엔드 리드

댓글 수집 및 AI 분석을 기반으로, 사용자의 추가 관여 없이 평판을 자동 수집·분석·관리하는 B2B 웹 서비스입니다.

Next.js 15React 18TypeScript 5TanStack Query 5Zustand 4AxiosReact Hook FormZodTailwind CSSRadix UIFirebase Cloud MessagingVitestReact Testing LibraryPlaywrightESLint 9Husky

주요 담당 역할

  • 사이드바 리사이즈 인터랙션을 rAF 기반 스케줄링으로 전환해 체감 성능을 안정화하고(INP 80ms대), 프레임 드랍을 줄였습니다.
  • 592줄 단일 훅에 집중되어 있던 폼 상태·검증·분기 로직을 RHF+Zod로 재설계해, 핵심 훅 코드 74%·조립 컴포넌트 77%를 줄이고 검증 규칙을 스키마 단일 선언으로 통일했습니다.
  • TanStack Query의 캐시 키가 시나리오 토글 순서에 의해 흔들리던 문제를 정리해 중복 요청/캐시 분산 가능성을 낮췄습니다.
  • 레이어 간 의존성 방향이 제각각이고 구현 위치 기준이 없어 리팩토링마다 탐색 비용이 컸던 상황에서, FSD 구조(엔티티/공유/도메인)를 중간 도입하고 ESLint 규칙으로 의존성 방향을 고정해 아키텍처 일관성을 확보했습니다.
  • FCM 알림이 포그라운드·백그라운드 환경에서 통합 처리되지 않고 멀티탭에서 중복 수신이 발생해, 전 환경 파이프라인을 통합하고 BroadcastChannel 동기화로 중복 처리를 차단했습니다.
  • AppSidebar에 WAI-ARIA(role/aria-*)와 키보드 조작 핸들러를 반영해 접근성 중심 UI를 구현했습니다.
  • Vitest+MSW 테스트 인프라를 구축하고 통합/E2E 인증 전략을 문서화했으며, CI와 커밋 전 자동화(ESLint/Prettier/lint-staged/Husky)로 품질을 지속 검증했습니다.
  • 쿠키 보안 옵션과 프론트-백 DTO 형식 정합성을 검증 기준으로 명문화해, 보안 오설정과 인터페이스 불일치를 구조적으로 차단했습니다.

주요 도전 과제 (1)

Myblog screenshot

Myblog

2025.08 ~ 2025.09개인 프로젝트 (100%)

Velog에서 부족했던 해시태그 AND 필터·검색을 직접 구현해, 내용이 기억나지 않을 때 해시태그로 빠르게 재탐색할 수 있는 위키형 개인 기술 블로그입니다.

Next.js 15React 19TypeScript 5TanStack Query 5Zustand 5Supabase (PostgreSQL/Auth/Storage)Tailwind CSS 4shadcn/uiZod

주요 담당 역할

  • 글 목록(`/posts`)·검색(`/search`)에서 `q`·`sort`·`tag`(복수 해시태그 id)를 URLSearchParams로 동기화해 새로고침·공유·뒤로가기 시 동일 필터·정렬 상태를 재현했습니다.
  • 검색 결과 로딩 시 빈 화면과 레이아웃 점프가 발생해, `Suspense`와 Skeleton fallback으로 전환 구간의 시각적 흔들림을 제거했습니다.
  • 마크다운 렌더 시 잘못된 HTML 중첩과 hydration 오류가 발생할 수 있어, `next/image`·GFM·구문 강조·Mermaid를 커스텀 컴포넌트로 교체해 렌더 안정성을 확보했습니다.
  • Supabase RPC·인덱스 기반으로 다중 해시태그 AND 조건과 정렬(최신/인기/좋아요/오래된 순)을 조합한 목록·검색 쿼리를 구성하고, 클라이언트는 TanStack Query `useInfiniteQuery`와 Intersection Observer로 무한 스크롤을 구현했습니다.
  • 글·댓글·좋아요·이미지 업로드 등을 Server Actions로 모으고 Zod로 입력을 검증한 뒤 Supabase(PostgreSQL, Storage, RPC)를 호출하는 구조로 구성했습니다.
  • Supabase OAuth와 Next.js Middleware로 `/admin`·`/profile` 등 보호 라우트를 두고, 관리자 권한에 따라 UI와 서버 로직을 함께 제한했습니다.
  • `generateMetadata`로 글·목록·검색·해시태그 맥락별 메타·OG를 동적으로 구성하고 `sitemap.xml`·`robots.txt`로 크롤링 경로를 정리했습니다.
posts
search
profile
create

주요 도전 과제 (1)

승룡이네집 도서 검색 시스템 screenshot

승룡이네집 도서 검색 시스템

2025.03 ~ 2025.04개인 프로젝트 (100%)

군 복무 중 700~800권 규모 도서에 대한 검색 시스템이 없고 수기·분산 관리로 자료와 실제 위치가 어긋나던 문제를 해결하기 위해 개발한 도서 위치 안내 서비스입니다.

Next.js 15React 19TypeScriptTailwind CSS이전: MySQL (AWS RDS)변경: Supabase (PostgreSQL)이전: AWS S3변경: Supabase StorageImageKit CDNVercel

주요 담당 역할

  • 모달 오픈 시 배경이 스크롤되고 레이아웃이 흔들리는 문제를 `useLayoutEffect`로 body 스크롤 고정·top 보정을 선행 적용해 시각적 흔들림을 차단했습니다.
  • 검색 결과 표지는 lazy 로딩을 기본으로 두되 뷰포트 내 첫 8개에만 `priority`를 적용해, 초기 표지 LCP 지연을 줄이면서 불필요한 preload 비용은 최소화했습니다.
  • 초기 로딩 시 콘텐츠 공백과 렌더 점프가 발생해, `Suspense`와 Skeleton fallback으로 전환 구간의 시각적 흔들림을 제거했습니다.
  • 위치 상세는 검색 컨텍스트에서 Intercepting/Parallel route 모달로 오버레이하고, `/location/:id` 직접 접근 시에는 전용 페이지로 렌더되도록 두 진입 방식을 모두 지원했습니다.
  • URL Query(`/?query=...`)로 검색 상태를 유지해 새로고침/공유 시 동일 결과를 재현했습니다.
  • `ilike` 기반 부분 매칭 검색을 적용하고, 결과가 없을 때도 안내 UI로 검색 흐름을 유지했습니다.
  • 검색 중 로딩 인디케이터와 추천 검색어 클릭 플로우를 제공해 사용 흐름이 끊기지 않게 했습니다.
  • `generateMetadata`로 검색/상세 페이지별 SEO 및 Open Graph를 동적으로 생성했습니다.

주요 도전 과제 (1)

학력

동국대학교(서울) 식품생명공학과 졸업

2018.02 ~ 2023.07

교양 수업에서 프로그래밍을 처음 접한 후, 소프트웨어로 문제를 해결하고 서비스를 직접 배포할 수 있다는 점에 매력을 느껴 졸업 전 개발자로 전향을 결심했습니다.