실패를 전제로 재시도·동시성 같은 서버의 경계를 설계하고, 프론트엔드와 배포까지 함께 보는 풀스택 개발자입니다. 단순히 동작하는 코드를 넘어서 '왜 이런 문제가 발생했을까?', '왜 이렇게 구현했을까?'를 끊임없이 고민하며, 다른 대안은 없는지 찾고 더 나은 방향으로 개선해 나아가는 것을 중요하게 생각합니다.
이사 견적 요청·매칭, 실시간 채팅, 리뷰·커뮤니티, 관리자 운영을 다루는 이사 견적 매칭 서비스입니다. 견적요청과 실시간 알림을 맡았습니다.
fetch·ReadableStream 기반 SSE 알림 클라이언트 구현 (헤더 인증 유지)NotificationOutbox 큐 + node-cron 워커로 대량 알림 fan-out 분리제출 응답이 대량 알림 발송에서 분리됐고, 워커가 재시작하거나 중간에 실패해도 커서와 시도 횟수 기준으로 이어서 재개됩니다. 토큰 만료와 네트워크 순단은 사용자 개입 없이 복구됩니다.
Next.js, Express, Prisma, PostgreSQL, node-cron, zod, GitHub Actions, PM2
스터디 개설·상세, 오늘의 습관 토글, 집중 타이머를 제공하는 학습 관리 서비스입니다. 스터디 상세·목록, 최근 조회, 응원 이모지를 맡았습니다.
findMany({ id: { in } }) 단일 쿼리로 변경, 순서 재구성·삭제분 필터 처리최근 목록이 조회 시점의 서버 값으로 표시되고, id 개수와 무관하게 쿼리 1회로 처리됩니다. 일부 스터디가 삭제돼도 나머지는 정상 응답합니다.
React, Vite, Express, Prisma
아이돌·스타·일러스트 디지털 포토카드를 사고팔고 교환하는 컬렉션 플랫폼입니다. 마이갤러리와 포토카드 생성을 맡았습니다.
isLoading·isFetching 분리로 재조회 중 필터 UI 마운트 유지me 응답 기준 3단계 게이팅으로 설계ERROR_HANDLER 테이블로 에러 처리 중앙화, 캐시 무효화 누락 수정필터 변경 시 리렌더가 목록 영역으로 한정되고 필터 UI의 상태가 유지됩니다. 잔여 횟수가 두 화면에서 일치하며 생성 직후 새로고침 없이 갱신됩니다.
Next.js, TanStack Query, Tailwind CSS
한의원·대행사·자사 3사와 외주 개발사가 참여한 비대면 진료 이커머스 플랫폼에 기획 단계부터 참여했습니다.
PHP, cURL, 채널톡 Open API, 그누보드5·영카트5
매년 수작업으로 반복하던 재정보고 페이지 갱신 업무를 구조부터 다시 설계했습니다.
연도별 페이지 코드가 표 마크업 포함 수백 줄에서 데이터 배열 수십 줄로 줄었고, 작업 시간은 20~30분에서 10분 이내로 단축됐습니다.
PHP, 그누보드5
Part 1 미니 프로젝트부터 Part 4 팀 프로젝트까지 수행했습니다. (Part 2 공부의 숲, Part 3 최애의 포토, Part 4 무빙)
전문학사
TypeScript, Node.js
React, Next.js, TanStack Query
Express, Prisma, PostgreSQL
SSE·Web Streams, node-cron, zod, GitHub Actions, PM2