경력·수치 요약은 이력서에 있습니다. 여기는 제가 맡은 프로젝트별로, 실제로 부딪혀서 풀어낸 문제들을 정리했습니다.
어떻게 문제를 푸는지. 버그를 마주치면 먼저 재현 조건부터 좁힙니다. "가끔 안 된다"를 "이 조건에서만 안 된다"로 바꾸고 나면, 원인은 대체로 코드 안에 이미 있습니다. 그리고 한 곳을 고칠 땐 같은 실수가 다른 곳에도 있는지부터 확인합니다 — 아래 사례 중 하나(공무링크)는 정확히 그래서 22곳을 한꺼번에 고친 경우입니다.
정부기관 사이트·설치형 프로그램은 인증서·보안모듈 때문에 서버에서 원격 자동화가 불가능합니다. 사용자 PC에 상주하며 웹의 명령을 받아 대신 조작하는 로컬 에이전트를 C#으로 단독 설계·구현했습니다(52개 자동화 엔드포인트, 3년째 운영).
50~150명을 한 번에 자동화 처리시키면, 에이전트가 끝낼 때까지 브라우저가 단일 요청으로 대기하는 구조라 5분을 넘기면 연결이 끊겼습니다. 클라이언트가 작업 ID를 발급하고 2초 간격으로 진행 건수만 조회하는 폴링으로 바꿔, 에이전트는 백그라운드에서 계속 처리하고 화면은 상태만 따라가게 했습니다.
WebSocket 대신 폴링을 택한 건, 에이전트가 단순 HttpListener 기반이라 실시간 연결 계층을 새로 얹는 비용 대비 이득이 없다고 판단했기 때문입니다.
건설 노무·행정 자동화 SaaS. 회원사 335곳이 쓰는 회사 주력 제품이고, 3년째 개발·운영을 맡고 있습니다.
무료 회원이 6개월 지난 작업년월을 조회하면 서버가 403을 돌려주는데, 그 응답을 처리하는 코드가 소스 전체에 한 곳도 없었습니다. 호출부들이 응답 코드를 안 보고 바로 배열로 다루려다 보니 그 자리에서 에러가 나고, 로딩 스피너를 끄는 줄까지 못 가서 화면이 영원히 로딩 중으로 남았습니다.
같은 가드를 호출하는 곳이 22곳이었는데, 응답을 제대로 확인하는 곳은 한 곳뿐이었습니다. 공통 처리 함수를 하나 만들어 22곳(16개 파일) 전부에 적용했습니다. 이 경험이, 지금 진행 중인 요금제(Free/Lite/Pro/Max) 전환에서 등급 판정 로직을 처음부터 한 곳에 모아 설계한 이유이기도 합니다.
노무관리에 가불금 같은 기타공제 항목을 새로 넣었는데, 며칠 뒤 국민연금 임의가입 처리에서만 공제액이 두 배로 빠진다는 제보가 들어왔습니다. 5만원이어야 할 게 10만원이 빠져 있었습니다.
파보니 급여를 확정하는 경로가 두 종류였습니다. 최종 금액을 통째로 계산해서 저장하는 쪽과, "기존 금액에서 얼마를 뺀다"는 식으로 저장하는 쪽. 기타공제를 추가하면서 이 두 경로가 같이 쓰는 SQL에 공제액을 한 번 더 빼는 코드를 넣었는데, 뒤쪽 경로는 이미 그 공제가 반영된 값을 넘기고 있었던 겁니다. SQL에서 억지로 맞추는 대신 최종 금액을 만드는 함수 쪽에서 직접 계산하게 바꿨습니다.
뱃지가 붙은 사례는 최근 만든 에이전트 워크플로(원인 조사·초안 작성은 에이전트, 원인 검토·수정 범위 판단·머지는 직접)로 처리했습니다.
건설 일용직 근로자용 크로스플랫폼 앱. 구글 플레이·앱스토어에 출시돼 있습니다.
현장 근로자 앱 API를 점검하다가 로그인 여부를 확인하지 않는 체크리스트 저장·조회 엔드포인트를 몇 개 찾았습니다. 요청값만 바꾸면 자기 배정 건이 아닌 것도 처리되는 구조였습니다.
같이 발견한 건 사진 업로드 쪽 버그였는데, 여러 장 찍으면 같은 파일명으로 저장돼서 앞서 찍은 사진이 덮어써지고 있었습니다. 로그인 가드와 소유권 검증을 넣고, 사진 파일명에 항목 번호를 넣어 분리했습니다.
신규 서비스를 0부터 배포 가능한 상태까지 단독으로 구축 중인 제품입니다.
초반 며칠은 속도를 내려고 DB 접속 정보를 코드에 바로 넣어뒀습니다. 배포 전에 스스로 점검하다가 알아채고 환경변수로 옮겼습니다. 감출 일은 아니라고 생각해서 그냥 적어둡니다.
ddalkkak — 두뇌 퍼즐 웹게임. 게임 로직과 문제은행 무결성을 Vitest로 보증하고, 출시 후에도 콘텐츠 확장·SEO·GA 분석·유튜브 쇼츠 자동 생성까지 직접 붙이며 운영 중입니다.
직접 만든 퍼즐 게임 문제 181개를 다시 검수하다가, 의도한 것과 다른 답도 나올 수 있는 문제 19건을 찾았습니다. 그중 하나는 시소 그림이 물리 법칙과 반대로 그려져 있었는데, 좌표를 직접 넣어 모멘트를 계산해보니(왼쪽 24 : 오른쪽 12) 왼쪽이 내려가야 하는 게 맞았습니다. 그림이 틀린 거였습니다.
다른 하나는 받침 유무로 갈리는 문제였는데, 예시 단어들이 우연히 "고유어인지"로도 똑같이 갈려서 의도치 않은 규칙으로도 같은 답이 나왔습니다. 두 규칙이 서로 다른 답을 내는 단어를 예시에 추가해서 막았습니다.
React·Vue는 실무로는 안 써봤습니다. 컴포넌트·상태 관리 개념은 SvelteKit과 겹치는 부분이 있어서, 필요하면 짧은 시간 안에 따라잡을 수 있다고 보고 있습니다.
임현진 · 인하대학교 화학공학과 · 갱신 2026.09