미리보기
기본 정보

실질적 해결을 위한 고객 중심 개발자 석지인입니다. 믿을 수 있고 이해할 수 있는 프론트엔드를 위해 함께 노력하고 싶습니다. 물류 및 스포츠 도메인의 B2B 스타트업에서 일했고, 창업 프로젝트 MVP의 프론트엔드를 개발 중입니다. 사내외 모든 사용자의 적절한 경험을 제약 없이 그려내고자 계속해서 도전하고 있습니다.
기술 스택
Git, JavaScript, TypeScript, React, Next.js, zustand, react-query, scss, TailwindCSS, Figma, AWS, GitHub, Docker, github-actions, HTML/CSS
경력
체인시프트
프론트엔드 개발자
2025.04. ~ 2025.06. (3개월)
AI 마케팅 모니터링 서비스 'ChainShift' Console MVP 개발 (프론트엔드 50%, 2025. 6)
D3.js, rechart, tailwindCSS, shadcn/UI, Zustand, Vercel
차트 리포트 3 페이지를 개발했습니다.
바이브 코딩으로 1주 안에 4개 차트 구현과 API 연동 등 영업 데모에 필요한 최소 요건 구현에 성공했습니다.
피봇에 대비한 '랜딩 페이지 템플릿' Web App 개발 (100%, 2025. 5)
TypeScript, Next.js 15, tailwindCSS, shadcn/UI, Vercel
아이템 피봇을 고려하여, 서로 다른 서비스의 랜딩 페이지를 만들 수 있도록 개발했습니다.
AI 마크업 후 사용자 의견을 수집하여 기능을 추가했습니다. (앱 데모 슬라이더, FAQ 토글, 이메일 등록 등)
개발자 사용자를 고려해 CMS를 생략, 본문 SSR과 상수/컴포넌트 정리 및 사용법 주석 작성에 집중했습니다.
비용 실시간 모니터링 AI Console MVP 전역 리팩토링 (프론트엔드 100%, 2025. 4)
TypeScript, Next.js 15, tailwindCSS, shadcn/UI, Tanstack React Query, React Hook Form, Axios, Docker, PostgreSQL
기존 코드는 전체 프로젝트 단위의 공통 요소가 부족해 작업에 가속이 붙지 않았고, 일관적인 UI/UX를 만들기 어려워 비전문적인 인상을 주었습니다. 전역 상태 관리 흐름 & 경로 접근 관리 & 에러 리팩토링으로 코드를 줄이고, 개발 생산성을 향상시켰습니다(백엔드 협업 시 확인해야 했던 API 파일 15개 삭제 등).
리팩토링 방법 : 공통화
API 호출/응답 활용 공통화: Axios instance + Tanstack React Query 커스텀 훅으로 API 호출 로직 일괄 처리
경로 접근 관리 공통화: Next Auth + 미들웨어 (로그인 상태별 제한)
에러 공통화: React Hook Form + Compound Component Pattern로 입력 에러 설정, onError용 범용 HTTP 에러 핸들러로 API 응답 에러 일괄 처리
리팩토링 결과
rewrite 함수로 대체한 15개 개별 API route 파일 삭제, 관련 문서를 Postman 1개로 축소
서버 에러 메시지 직접 사용 및 커스텀 모두 용이
주식회사핏투게더
QA 엔지니어 | 소프트웨어개발팀
2023.08. ~ 2024.03. (8개월)
축구 데이터 분석 올인원 서비스 '오코치' - 소프트웨어 파트 QA 엔지니어 (Web, Windows/macOS, iPadOS)
비디오, 데이터 사이언스, 웹, 모바일, 하드웨어 등 10명 이상의 개발자와 협업했습니다.
Jira 프로젝트로 커뮤니케이션 비용을 줄였습니다, 전사 QA TF로 테스트 벤치, 지원사양 등을 마련했습니다.
주식회사물류대장(LogisticsDaejang)
CX 매니저, QA 매니저 | 플랫폼기획팀
2022.06. ~ 2023.08. (1년 3개월)
물류 업무 B2B SaaS(OMS/WMS) '물류대장' - QA 매니저 (Web, Android/iOS)
입력 관련 컴포넌트 디자인 시스템을 마련하고, 데이터 소스 기준으로 용어를 통일했습니다(유비쿼터스 언어).
mySQL을 통한 물류 데이터 QA를 수행하고, 스케줄 관리를 위해 이슈/버그 트래커를 도입했습니다.
(주)연합뉴스
인물정보 담당 사원 | 출판국 DB센터
2021.08. ~ 2022.03. (8개월)
유료 인물 검색 및 취재 용도의 인물 정보 담당 사원
카카오톡, 문자, 팩스 등 프로필 제공자에게 친숙한 수단으로 본인 동의 프로필 제공률을 30%로 높였습니다.
레이아웃 개선으로 응답 양식을 1 페이지로 50% 단축해, 응답 중에 페이지가 누락되는 문제를 해결했습니다.
프로젝트
useJiin
개인
2025.06. ~ 진행 중
개요 | 랜딩 페이지형 개발자 포트폴리오
상세 | 프론트엔드 1인 | 2025. 6 -
역할 | 1인 개발
스킬 | TypeScript, Next.js 15, TailwindCSS, Shadcn/UI, React Hook Form, Yarn, npm-check-updates, Vercel, AWS Route 53, JetBrain Junie
인터랙티브 UI와 시맨틱 마크업에 유의하며 개발하고 있습니다.
알바폼 AlbaForm
코드잇 스프린트
2024.09. ~ 2024.11.
개요 | 사장님과 알바생이 폼으로 소통하는 구인구직 플랫폼 (가장 비슷한 서비스: 알바몬)
상세 | 팀 프로젝트(프론트엔드 5인) | 2024. 9 - 2024. 11
역할 | 프론트엔드 개발, 프로젝트 리딩, 컨벤션 / GitHub / 자동배포 설정
스킬 | TypeScript, Next.js 14, SCSS, Zustand, Tanstack React Query, React Hook Form
성과 |
채용공고 사이트의 SEO score 100 달성 (Google Lighthouse)
루트를 서버 컴포넌트로 유지하도록, 클라이언트만의 루트를 생성해 React Query Client 전역 적용문제: 루트를 서버 컴포넌트로 유지하기 위해 Tanstack React Query를 Root에 적용하지 못하고 나누어 적용하다 보니, 같은 Query Client를 사용해도 따로 관리되는 문제가 발생했습니다.
해결: Root Layout을 서버 컴포넌트로 유지하는 클라이언트 컴포넌트만의 전역 설정 방법을 고안했습니다. 클라이언트 사이드 요소를 별도 컴포넌트로 분리하면, Root Layout이 서버 컴포넌트로 남아 프로젝트 전체가 클라이언트 컴포넌트가 되지 않는 것을 발견하고 분리된 컴포넌트를 ClientSideSetUp이라고 이름 붙였습니다.
결과: 위 방법으로 QueryClientProvider를 전역 적용하는 리팩토링을 수행했고, defaultQueryClient를 적용하는 중복 코드를 삭제하고 하나의 Query Client로 서버 상태를 관리하게 되었습니다.
상태 관리가 적용된 조립식 Form 컴포넌트 개발 → 초기에 공통 적용해 form의 디자인, 상태 관리를 통일
문제: 이전 프로젝트에서 팀원마다 react-hook-form 사용 수준에 차이가 있었습니다. Tanstack React Query의 Query Client처럼 공통된 form 설정을 적용하고자 했습니다.
해결: Compound Component Pattern으로 제작한 Form 컴포넌트의 각 부분에 useFormContext로 라이브러리가 정의한 타입을 공통 적용하여, Form 컴포넌트에 react-hook-form을 사전 적용했습니다.
결과: Form 컴포넌트를 조립식으로 만드는 동시에, 단일 형태 컴포넌트처럼 form 상태관리를 미리 적용할 수 있었습니다. 공통 Form 컴포넌트 적용 시점을 앞당겨 빠르게 디자인과 유효성 검사 등 상태 관리를 통일했습니다.
사용자 상태 6종별 접근 권한 관리 통일
문제: 페이지 접근 제한을 위해 페이지마다 useRouter를 적용했더니 속도가 느리고, useRouter 함수를 선언하는 찰나에 제한된 영역이 노출되었습니다.
해결: 페이지 내 제한된 영역을 페이지별 ProtectedContent 컴포넌트로 분리했습니다. 렌더링 시점을 사용자 확인 후로 다르게 하여 순간 노출을 차단했습니다.
결과: 제한 페이지에 리다이렉트를 위한 HOC withAuth를 공통 적용하고 페이지 컴포넌트는 서버 컴포넌트로 변경해 속도를 개선했습니다.
오픈마인드 Open Mind
코드잇 스프린트
2024.06. ~ 2024.06.
개요 | 질문과 답변으로 소통하는 소셜 Q&A 플랫폼 (가장 비슷한 서비스: ask.fm)
진행 | 프로젝트(4인) | 2024. 6
역할 | 프론트엔드 개발, 컨벤션・GitHub 설정
스킬 | JavaScript, React.js, CSS Module, Axios, Storybook
성과 |
무한 스크롤 등 상황별 질문 불러오기 기능 구현 (렌더링 이슈로 인한 API 요청 오류 방지)
문제: 질문 데이터를 불러올 때, API 요청이 아예 일어나지 않거나, 무한히 반복해서 일어나는 문제가 발생했습니다. IntersectionObserver를 이용한 무한 스크롤의 경우 질문 추가 로드 함수가 observer에 의존성이 있어, 질문이 추가 로드될 때 observer가 반복 재정의 되며 API 무한 요청이 발생했습니다.
해결: 질문 불러오기를 트리거할 상태를 'isHydrated'로 정의하고, 그 외 의존성은 재사용하여 API 함수 호출을 트리거하지 못하게 했습니다(useRef, useMemo, useCallback 등 React Hook으로 캐싱/참조). 또한 끝까지 스크롤하면 스크롤 관찰을 바로 해제하여, 스크롤이 멈춰 있을 때나 질문 추가 로드가 진행 중일 때 화면 끝에 새로 도달한 것처럼 반복해서 API 요청을 보내지 않도록 했습니다.
결과: 질문이 0인 피드에 질문을 새로 등록했을 때, 한 피드를 보고 뒤로 가기 후 다른 피드로 갔을 때, URL을 바꿔 다른 피드로 접속했을 때, 피드를 생성 기록이 로컬 히스토리에 있을 때 등 다양한 상황에서 에러 없이 데이터를 출력할 수 있었습니다.
대외활동
Oracle 데이터베이스 교재 베타 테스터
이지스퍼블리싱
2025
- ≪Do It! Oracle로 배우는 데이터베이스 입문≫ 개정판 출간 직전, 틀리거나 어려운 부분과 변경안 제안을 정리해 출판사에 전달했습니다.
- 학습 내용을 토대로, MVP 개발 시 직접 데이터를 조작해 개발 서버/데이터 없이 프론트엔드 UI를 확인할 수 있었습니다(Docker, PostgreSQL).
교육
코드잇 스프린트 부트캠프 (1248시간, NCS 5수준)
사설 교육 | 프론트엔드 트랙
2024.04. ~ 2024.10. | 수료
코멘토
사설 교육 | QA 테스트 자동화 구축하고 QA 실무 역량 퀀텀 점프하기 Selenium w Python
2023.08. ~ 2023.09. | 수료
연세대학교
대학교(학사) | 신학, 문헌정보학
2015.03. ~ 2021.08. | 졸업
그로우앤베터
사설 교육 | 일잘러 주니어를 위한 CX 101
2022.04. ~ 2022.05. | 수료
Y-DEC (Yonsei Digital Experience Center)
사설 교육 | UI/UX 디자인을 위한 디지털 프로토타이핑
2021.05. ~ 2021.05. | 수료
자격증
ISTQB CTFL Certified Tester
CTFL | ISTQB(국제 소프트웨어 테스팅 자격 인증 위원회)
2023.08.
SW테스트전문가(CSTS)
일반등급 | TTA(한국정보통신기술협회)
2023.08.
사서자격증
2급정사서 | 한국도서관협회
2021.09.
KBS한국어능력시험
1급 | KBS
2021.03.
외국어
영어
일상 회화 가능
자기소개
갑자기(?) 개발자가 된 이유, 문제 더 많이 해결하기
전공부터 경력, 지금의 개발자 지원까지 언뜻 제각각으로 보이는 이력은 '사용자가 편하도록 문제를 해결한다.'는 하나의 비전으로 그려졌습니다. 제품을 만드는 과정 전체를 경험한 끝에 가장 잘할 수 있는 일로 개발을 선택했습니다.
기술 협업 경험 1. 물류 스타트업에서 기술적인 한계를 풀고 사용자와 비즈니스를 돕기
물류에서 중요한 지도 기능을 위해 유연성이 높은 구글 맵 API로의 변환을 추진하고, 이를 통해 이용자를 만족시켜 사용자 이관에 성공한 경험이 있습니다.
처음엔 데이터 수정 요청을 보고 고객사의 엔드유저인 배송기사가 우리 팀의 앱을 사용하지 않는다는 것을 알아냈습니다. 문제 해결을 위해 배송트럭이 출발하기 전인 새벽에 물류창고에 가서 배송팀을 만나고, 배송 동행 인터뷰로 이슈를 발굴했습니다.
그런데 개발자로부터 최중요 이슈인 배송지도 개선이 불가능하다는 답을 듣고, React Native 앱에 React Native 호환성이 낮은 네이버 지도 API가 적용되어 있음을 알게 되었습니다. 물류 도메인에서의 지도 기능의 중요성을 설득해 가장 유연한 구글 맵 API로의 변환이 이루어졌고, 요구사항이 구현되어 사용자를 만족시킬 수 있었습니다.
기술적인 한계를 풀어 사용자를 도울 수 있다는 것을 배운 후, 기술 문제 해결을 위해 CX 매니저로 개발팀과 적극적으로 협업하면서 회사의 요청으로 QA로 직무를 전환하게 되었습니다. 정확한 출입고 데이터 제공을 위해 mySQL을 배워 QA에 적용하는 등, 문제 해결을 위한 시도는 계속되었습니다.
제품과 문제를 보는 눈이 커지고 해결을 위해 더 많이 도전할수록 문제를 해결하는 개발자에게도 이것을 기대하게 되었습니다. 문제를 발견하고, 중요도를 판별할 줄 알고, 방법을 연구하는 개발자가 어떤 기여를 할 수 있는지 알기에 프로그래밍을 공부해 직접 그런 개발자가 되기로 했습니다.
언제나 문제 해결사였고, 더 많은 문제를 해결하기 위해 개발을 시작했습니다. 디지털 프로덕트와 그 제작 과정의 문제를 해결하기 위해 끊임 없이 공부하며 기술자산을 만들어 왔습니다. 이제는 기술로 문제를 푸는 동료가 되어 기여하겠습니다.
기술 협업 경험 2. 공통함수로 디버깅 코드 작성 생략하고 팀 프로젝트 생산성 향상시키기
공통 에러 핸들러로 API 에러 처리 코드 작성을 생략하고 어려운 문제에 집중한 경험이 있습니다.
현업에서 각각의 개발자가 각각의 시점에 개발하다 보니, 비일관적인 에러 메시지를 리팩토링 하는 데 많은 시간과 노력이 필요한 것을 보았습니다. 팀 프로젝트에서 같은 과정을 거치며, 완벽하지 않더라도 최대한 일찍 공통 함수를 적용하는 아이디어를 떠올리게 되었습니다.
프로젝트 초반에 공통 에러 핸들러를 만들자 단일함수로 교체하고 Tanstack React Query로 전역 적용하는 것이 어렵지 않았습니다. 이 에러 핸들러 1개를 발전시킴으로써 프로젝트 전체의 에러 처리를 다듬을 수 있었습니다.
에러 확인 코드를 작성할 필요가 없어져 생산성 증가를 체감했고, 대신 SSR 등 어려운 기능을 공부해 적용하는 데 집중할 수 있었습니다.
HTTP 상태코드 기준으로 제목 기본값을, Request body의 data나 error 메시지로 본문 기본값을 채워, 모든 API 에러 메시지가 alert 형태로 전달되도록 구성하였습니다.
커스텀 메시지 Props로 에러 메시지를 직접 정의할 수 있어 기획적인 아이디어에 대응하기 쉬웠습니다.
개발자를 위해서 브라우저 콘솔에도 제목, 타임 스탬프와 함께 에러 메시지가 남도록 하였습니다. 따라서 개발 과정에서도 에러 메시지를 확인하기 위한 코드를 작성할 필요가 없었습니다.
Tanstack React Query의 중첩을 받아들일 수 있도록 다양한 타입을 정의하여 모든 API 요청에서 에러가 나지 않도록 제작했습니다.
기술 협업 경험 3. 협업이 중단되지 않도록 코드 보호 Git 컨벤션 만들고 회의 단축하기
Github 컨벤션을 통해 Git 관련 문제를 방지한 경험이 있습니다.
첫 프로젝트 때, 팀원 모두가 팀 프로젝트 개발 경험이 없다 보니 충돌을 해결하는 과정에서 코드가 이전으로 돌아가거나, 누락되거나, resolve 되지 않은 코드가 그대로 커밋되는 등 Git 히스토리 관련 충돌 문제가 지속적으로 발생하였습니다.
문제를 해결하기 위해 Linear History 라는 선형적 버전 관리 방식을 탐구하였습니다. 커밋이 어떤 PR에서 merge 되었는지 알기 어려운 문제가 있지만, 커밋 메시지에 이슈 번호를 추가하여 GitHub 이슈를 링크하는 방식으로 해결할 수 있었습니다. 커밋 히스토리를 선형으로 관리하면서 해당 커밋이 어떤 작업과 연관이 되어있는지 직관적으로 알 수 있어 프로젝트 히스토리 추적및 진척사항을 파악하는 것도 유용하였습니다.
길어진 회의 시간을 효과적으로 단축한 경험이 있습니다.
매번 공유가 많다 보니 회의가 몇 시간씩 길어지는 문제가 생겼습니다. 회의 시간은 유익하고 필요한 시간이었으나 피로로 인해 논의가 자주 멈추거나, 필요한 논의를 하지 못하게 되거나, 집중도 저하로 회의 후 논의 결과가 적용되지 않는 등 커뮤니케이션 문제가 발생하였고 작업 간에 조금씩 오차가 생겼습니다.
이를 해결하기 위해 실무 사례를 조사하다 Github Discussions를 알게 되었습니다. QA, 논의, 투표 등 Repository 내의 코드와 관련된 다양한 주제를 나누는 도구였습니다.해당 기능을 활용해 회의 전에 논의할 내용을 미리 Discussions에 올리는 컨벤션을 정했습니다. Discussions에 있는 내용만을 회의에서 다루니 시간이 단축되었고, 사전에 글로 정리해 공유하니, 보다 상세한 논의도 쉽게 할 수 있었습니다.
이를 통해 개발자에게 코드 작성 뿐 아니라 협업이 얼마나 중요한지 배울 수 있었습니다. 경험을 바탕으로, 효율적이고 지속가능한 커뮤니케이션을 위해 협업하는 동료들을 살피고, 함께 고민하며 방법을 모색하겠습니다.