임현진.

4대보험·급여·건설노무 도메인 · 3년 3개월차

경력·수치 요약은 이력서에 있습니다. 여기는 제가 맡은 프로젝트별로, 실제로 부딪혀서 풀어낸 문제들을 정리했습니다.

21,671건
보수총액 신고, 이 서비스를 거쳐 처리
52개
단독 구축 로컬 에이전트 자동화 엔드포인트
98.2%
서비스워커 설치 용량 절감
300건
운영 데이터로 직접 대조 검증

어떻게 문제를 푸는지. 버그를 마주치면 먼저 재현 조건부터 좁힙니다. "가끔 안 된다"를 "이 조건에서만 안 된다"로 바꾸고 나면, 원인은 대체로 코드 안에 이미 있습니다. 그리고 한 곳을 고칠 땐 같은 실수가 다른 곳에도 있는지부터 확인합니다 — 아래 사례 중 하나(공무링크)는 정확히 그래서 22곳을 한꺼번에 고친 경우입니다.

공무헬퍼.

정부기관 사이트·설치형 프로그램은 인증서·보안모듈 때문에 서버에서 원격 자동화가 불가능합니다. 사용자 PC에 상주하며 웹의 명령을 받아 대신 조작하는 로컬 에이전트를 C#으로 단독 설계·구현했습니다(52개 자동화 엔드포인트, 3년째 운영).

아키텍처 판단 · 공무링크 연동

로컬 에이전트와의 통신이 5분에서 끊겼다

50~150명을 한 번에 자동화 처리시키면, 에이전트가 끝낼 때까지 브라우저가 단일 요청으로 대기하는 구조라 5분을 넘기면 연결이 끊겼습니다. 클라이언트가 작업 ID를 발급하고 2초 간격으로 진행 건수만 조회하는 폴링으로 바꿔, 에이전트는 백그라운드에서 계속 처리하고 화면은 상태만 따라가게 했습니다.

WebSocket 대신 폴링을 택한 건, 에이전트가 단순 HttpListener 기반이라 실시간 연결 계층을 새로 얹는 비용 대비 이득이 없다고 판단했기 때문입니다.

결과 150명 이상 규모의 일괄 처리가 이 구조로 운영되고 있습니다
아키텍처 트레이드오프

공무링크.

건설 노무·행정 자동화 SaaS. 회원사 335곳이 쓰는 회사 주력 제품이고, 3년째 개발·운영을 맡고 있습니다.

대표 사례

요금제 시스템 · 2026.09

같은 버그가 22곳에 복사돼 있었다

무료 회원이 6개월 지난 작업년월을 조회하면 서버가 403을 돌려주는데, 그 응답을 처리하는 코드가 소스 전체에 한 곳도 없었습니다. 호출부들이 응답 코드를 안 보고 바로 배열로 다루려다 보니 그 자리에서 에러가 나고, 로딩 스피너를 끄는 줄까지 못 가서 화면이 영원히 로딩 중으로 남았습니다.

같은 가드를 호출하는 곳이 22곳이었는데, 응답을 제대로 확인하는 곳은 한 곳뿐이었습니다. 공통 처리 함수를 하나 만들어 22곳(16개 파일) 전부에 적용했습니다. 이 경험이, 지금 진행 중인 요금제(Free/Lite/Pro/Max) 전환에서 등급 판정 로직을 처음부터 한 곳에 모아 설계한 이유이기도 합니다.

시스템적 결함 AI 워크플로
급여 계산 · 2026.09

가불금 공제가 배포 하나로 두 배가 됐다

노무관리에 가불금 같은 기타공제 항목을 새로 넣었는데, 며칠 뒤 국민연금 임의가입 처리에서만 공제액이 두 배로 빠진다는 제보가 들어왔습니다. 5만원이어야 할 게 10만원이 빠져 있었습니다.

파보니 급여를 확정하는 경로가 두 종류였습니다. 최종 금액을 통째로 계산해서 저장하는 쪽과, "기존 금액에서 얼마를 뺀다"는 식으로 저장하는 쪽. 기타공제를 추가하면서 이 두 경로가 같이 쓰는 SQL에 공제액을 한 번 더 빼는 코드를 넣었는데, 뒤쪽 경로는 이미 그 공제가 반영된 값을 넘기고 있었던 겁니다. SQL에서 억지로 맞추는 대신 최종 금액을 만드는 함수 쪽에서 직접 계산하게 바꿨습니다.

검증 타입체크·린트·E2E 225건이 그대로 유지되는지 확인 후 반영
금전 계산 버그 AI 워크플로

그 외 이 프로젝트에서

다른 대행기관 현장 이름이 화면에 보였던 데이터 격리 버그 대행기관 경계 없이 근로자 식별번호만으로 조회하던 함수가 원인. 조회 범위를 기관 코드로 제한하고 운영 데이터 300건으로 대조 검증.
붙여넣기로만 재현되는 국적 오판정 버그 주민번호를 타이핑하면 정상, 붙여넣으면 인덱스가 밀려 오판정. 재현 조건을 특정해 원인 규명, 테스트 14건 추가.
배포 다음 날 아침마다 접속이 막히던 문제 서비스워커 설치 용량을 358개 71.6MB → 76개 1.3MB로 축소(98.2%↓). 브라우저 HTTP 캐시와 중복되던 프리캐시를 걷어냄.

뱃지가 붙은 사례는 최근 만든 에이전트 워크플로(원인 조사·초안 작성은 에이전트, 원인 검토·수정 범위 판단·머지는 직접)로 처리했습니다.

현장링크.

건설 일용직 근로자용 크로스플랫폼 앱. 구글 플레이·앱스토어에 출시돼 있습니다.

2026.07

로그인 안 해도 남의 체크리스트가 열렸다

현장 근로자 앱 API를 점검하다가 로그인 여부를 확인하지 않는 체크리스트 저장·조회 엔드포인트를 몇 개 찾았습니다. 요청값만 바꾸면 자기 배정 건이 아닌 것도 처리되는 구조였습니다.

같이 발견한 건 사진 업로드 쪽 버그였는데, 여러 장 찍으면 같은 파일명으로 저장돼서 앞서 찍은 사진이 덮어써지고 있었습니다. 로그인 가드와 소유권 검증을 넣고, 사진 파일명에 항목 번호를 넣어 분리했습니다.

인증 우회(IDOR) AI 워크플로

건설HR.

신규 서비스를 0부터 배포 가능한 상태까지 단독으로 구축 중인 제품입니다.

2026.06 · 단독

0에서 시작하며 가장 먼저 걸러낸 건 제 실수였다

초반 며칠은 속도를 내려고 DB 접속 정보를 코드에 바로 넣어뒀습니다. 배포 전에 스스로 점검하다가 알아채고 환경변수로 옮겼습니다. 감출 일은 아니라고 생각해서 그냥 적어둡니다.

보안 셀프체크

개인 프로젝트

ddalkkak — 두뇌 퍼즐 웹게임. 게임 로직과 문제은행 무결성을 Vitest로 보증하고, 출시 후에도 콘텐츠 확장·SEO·GA 분석·유튜브 쇼츠 자동 생성까지 직접 붙이며 운영 중입니다.

2026.09

제가 만든 퍼즐인데 답이 하나가 아니었다

직접 만든 퍼즐 게임 문제 181개를 다시 검수하다가, 의도한 것과 다른 답도 나올 수 있는 문제 19건을 찾았습니다. 그중 하나는 시소 그림이 물리 법칙과 반대로 그려져 있었는데, 좌표를 직접 넣어 모멘트를 계산해보니(왼쪽 24 : 오른쪽 12) 왼쪽이 내려가야 하는 게 맞았습니다. 그림이 틀린 거였습니다.

다른 하나는 받침 유무로 갈리는 문제였는데, 예시 단어들이 우연히 "고유어인지"로도 똑같이 갈려서 의도치 않은 규칙으로도 같은 답이 나왔습니다. 두 규칙이 서로 다른 답을 내는 단어를 예시에 추가해서 막았습니다.

원칙 정답은 하나도 바꾸지 않고, 그림·예시 쪽만 고쳐 유일한 답을 유지
개인 프로젝트 AI 워크플로

기술 스택.

도메인
4대보험급여·노무전자계약 건설 행정정부기관 EDI
주력
SvelteKitSvelte 4·5TypeScript MariaDB / MySQLNode.js
실무 투입 경험
C#DockernginxPM2 PuppeteerPG 결제PWA VitestPlaywrightJWT

React·Vue는 실무로는 안 써봤습니다. 컴포넌트·상태 관리 개념은 SvelteKit과 겹치는 부분이 있어서, 필요하면 짧은 시간 안에 따라잡을 수 있다고 보고 있습니다.

Contact

임현진 · 인하대학교 화학공학과 · 갱신 2026.09