포트폴리오 Portfolio 채성 · 프로덕트 엔지니어풀스택

기본정보

Personal Information
이력서puleugo.dev/resume (A4 2페이지)
연락처010-4057-6373   puleugo@gmail.com
링크

어르다

Auruda

어르다 · 공동창업자 · 개발 총괄

2025.09. – 재직 중

역할 PO로서 문제 정의부터 도메인 설계·구현·배포·운영까지 전담. 운영·마케팅 담당자용 도구를 제작하여 제품 우선순위를 공동 결정함.

규모 교육기관 410곳(전국 17개 시·도) · 학회 자격증 15종 · 가계도 5,687명 · 축어록 531명 · 매칭 등 합산 누적 1.3만 명(2026.01~08) · API 188개 · 테스트 파일 499개

제품하는 일내 역할과 스택
어르다 축어록상담 녹취록·보고서 생성 AI 도구PO · 풀스택 · LLM · WASM FFmpeg · iOS/Android 출시
어르다 가계도표준 표기법 준수 가족관계도 제작 도구렌더링 엔진·DSL · Rust/WASM · Capacitor
어르다 매칭교육기관 검색·멘토링 신청도메인 설계·백엔드 · Next.js · NestJS · PostgreSQL
운영 어드민 · 디스코드 봇비개발자용 콘텐츠 운영 도구설계·운영 · 사내 상시 사용
어르다 축어록 · PO로서 상담사 인터뷰부터 앱 출시까지 수행2026.01. – 현재
  • 수기 전사·비언어 표기의 자동화 (회기당 6시간 → 기계 처리 5분 이내 · 만족도 2.9 → 4.92점)
    문제
    말한 그대로의 정확도와 침묵·말떨림 같은 비언어 표기가 동시에 요구되어, 50분 상담 1회기당 평균 6시간(상담 업무의 29.3%) 소요. 범용 STT(클로바노트 등)는 두 요건 미충족으로 만족도 2.9점에 그침.
    해결
    상담 도메인 특화 LLM 파이프라인(청크 분할 → 전사 → 비언어 표기 → 보고서 생성)을 설계, 기계 처리 시간을 10분 청크 기준 p95 5분 이내로 단축함. 실무자·석·박사 13인 베타에서 전사 정확도·비언어 표기 모두 고평가, 종합 4.92점 획득. 비언어 인식 향상에는 92.3% 동의.
    보안
    전사문·분석 결과·작성본은 서버에서 AES-256-GCM 필드 암호화 후 저장(iv·인증태그·암호문 단일 컬럼), 키는 서버만 보유함. 키 부재·길이 불일치 시 즉시 예외를 발생시켜 평문 저장 사고 자체를 차단함.
    출시
    Next.js PWA를 Capacitor로 래핑, 단일 코드베이스로 iOS·Android 출시함. 오디오 변환·청크 분할은 WASM FFmpeg로 기기에서 처리하여 서버 오디오 비용 없음. 실사용자 39명이 134회기 · 누적 80시간 처리, 53.8%가 2회 이상 재사용함(테스트 계정 제외).
어르다 가계도 · 렌더링 엔진과 표기 언어(DSL) 담당2026.01. – 현재
  • 무한 캔버스 폐기와 고정 레이아웃·자동 배치 전환 (사용자 5,687명 · 카페 주간 인기글 1위(2주 유지) · 월 좋아요 1위)
    문제
    기존 도구는 무제약 캔버스로 3촌 이상 시 인물 위치가 밀려 배치가 붕괴함. 캔버스 고정으로 조작을 단순화함(주 사용자 40·50대).
    해결
    인물 추가 시마다 주변이 연쇄 재배치되던 문제를 자동 배치로 해결함. 의존 노드 수를 중요도 지표로 삼아 중요 인물일수록 크게 배치하여 가시성을 제고함.
  • AI가 가족 관계를 이해하고 반복되는 패턴을 감지하도록 만든 사내 도구(DSL)
    설계
    심리적 관계 16종, 법적 관계 8종, 결혼·이혼·별거 연도를 문법으로 정의하여 그림 대신 텍스트 편집·버전 관리가 가능함(파싱 p95 5.8ms). 그림이 아닌 문법이므로 기계 판독이 가능, 축어록 기록과 연계하여 세대에 걸쳐 반복되는 관계 패턴과 문제의 근본 원인을 AI가 식별하는 도구로 확장 중.
  • Rust/WASM 이식 여부를 벤치마크로 판단, 순수 수치 연산만 채택
    판단
    핫패스를 Rust로 포팅, 파리티 테스트로 TS와 동일 결과를 강제한 뒤 벤치마크로 판정함. FFI 직렬화 비용 19~41배, 순수 수치 연산만 0.8배(약 20% 단축)로 확인되어 해당 경로만 채택함. 임상 데이터는 기기에서 암호화, 발표 시 이름 비공개 처리함.
플랫폼 운영 · 비개발자가 직접 운영하는 콘텐츠 파이프라인2025.09. – 현재
  • [장애 대응] DB 복구 뒤에도 교육기관 목록이 비어 보이던 사고
    문제
    DB 장애 복구 후에도 목록이 계속 비어 있었으나, 알림이 전무하여 개발자가 화면을 직접 열람한 시점에야 이상을 인지함.
    원인
    페처가 5xx를 삼켜 생성한 빈 응답이 24시간 캐시에 저장됨. 예외 은닉으로 인해 장애 발생 원인과 미탐지 원인이 동일함.
    해결
    태그 무효화로 화면을 즉시 복구한 뒤, 5xx는 throw 처리하고 폴백을 캐시 외부로 이동하여 예외가 관측 경로에 노출되도록 조치함.
    평가
    동일 유형 장애는 재발하지 않았으며, 사고 직후 에러 모니터링(Sentry)을 도입하여 예외를 이슈로 수집·대응·기록 중.
  • 교육기관 410곳을 개발자 배포 없이 운영팀이 직접 수정
    • 디스코드 명령 한 줄로 소개글·배너·멘토 정보 수정 시 캐시 무효화까지 자동 수행됨. 사용 의견을 반영하여 명령 15개를 8개로 통합함.
  • 공고 1건 AI 처리 시간 206초 → 18초 (91% 단축)
    • 크롤러 → LLM 구조화 → 디스코드 카드 승인 → 어드민 등록 순으로 연결하고, 모델의 사고(thinking) 모드 해제·응답 스키마 축소로 지연을 단축함.
개발 방식 · AI 산출물을 기계가 채점하는 게이트 (테스트 파일 499개)
  • AI 에이전트 생성 코드의 회귀·임상 표기 위반을 사람 리뷰 전 자동 반려
    • 배치 품질 점수·테스트 중요도 분류·화면 구동 검증을 단일 명령으로 통합함. 가계도 230·축어록 141·백엔드 128개 테스트가 후단에서 실행됨.
  • 배치 개선안 8건 중 3건 채택 · 5건 자동 거부, 사람 판단 없이 표준 위반을 차단
    • 검증자와 생성자를 분리하여 채점기의 배치 함수 내부 호출을 차단하고 최종 좌표만 참조하도록 함. 배치 로직은 자체 출력을 스스로 합격 처리할 수 없음.
    • 깨짐 규칙 8종(세대 단조·부부 인접·간선 충돌 등)은 하드 게이트로 적용, 밀도·종횡비·교차는 비열화만 허용함. 이에 따라 밀도가 상승하더라도 표준(세대=한 줄)이나 가독성을 훼손하는 멀티로우·윤곽 패킹 등 5건이 자동 반려됨. 에이전트는 오케스트레이터·구현자·검수자로 분리하고, 모호한 요청은 검증 가능한 문장으로 재작성하도록 규칙에 명시함.
  • 모델 교체 판정을 청취 대신 계산식으로 수행: CER·IoU 기준선 상시 운용
    • 가상 상담 4종(상담실·울먹임·카페 소음·큰 음성)에 정답 전사문과 비언어 구간을 직접 부착, 전사는 CER=(치환+삭제+삽입)/정답 글자 수, 비언어는 IoU=겹친 시간/합친 시간으로 채점함.
    • STT 3종·구간 탐지 3종을 동일 기준으로 평가하여 CER 3.5% 모델을 채택함. 구간 탐지는 IoU 0.24(정서적 표출 0.09)에 그쳐 LLM 표기로 전환함. 정답 부재 항목은 만점 대신 평가 불가로 제외하여 허위 점수를 방지했으며, 모델 교체 시 본 기준선을 우선 통과시킴.

왁타버스 게임즈

Waktaverse Games

왁타버스 게임즈 · 백엔드 개발자 나무위키

2024.04. – 2025.06.

역할 팀의 백엔드 운영·유지보수 담당. 팀원 입장에서 배치 폐기·리팩터링·테스트 도입을 쿼리 수와 로그를 근거로 건의하여 관철함.

규모 트위치 구독자 국내 1위(103만 명) 스트리머 팬덤의 게임 배포 플랫폼 · MAU 5만 명 규모 · API 약 135개 · 2023.09.–2025 운영

  • 구글 엑셀 동기화(Reconciliation) 배치 폐기와 어드민 전환
    문제
    비개발자의 직접 수정을 위해 초기에는 스프레드시트를 원본으로 두고, 시트 전량5분마다 1회 DB에 동기화함(하루 288회 · 월 8,640회). 서비스 성장에 따라 팀 내 영향 범위 최대 로직이 되었고, 필드 추가 등 요구사항 변경이 예정되어 현 구조로는 수정이 곤란했음.
    원인
    데이터 원본이 시트에 있어 변경 여부와 무관하게 전량 upsert가 필요했고, 필드 1개 추가 시 시트·배치·DB 3개소를 동시 수정해야 했음.
    측정
    구조 변경 근거로 월 8,640회 실행 × 실행당 쓰기 180회 = 월 약 155만 회를 산출함. 실제 변경은 월 20회에 불과, 나머지는 전량 불필요한 쓰기였음.
    평가
    본 수치로 배치 폐기를 건의하여 합의를 확보, 서버리스 환경에 AdminJS를 통합하여 데이터 원본을 DB로 이관하고 운영자 2명의 작업 환경을 어드민으로 전환함. 기존 요구(비개발자의 직접 수정)는 유지하면서 변경 지점이 1개소로 축소되어, 이후 필드 추가는 어드민 수정으로 완결됨. 배너 교체 시 Swagger로 업로드한 링크를 시트에 붙여 넣던 절차도 어드민 업로드로 통합함. 쓰기는 월 155만 회에서 변경 시에만 20회로 감소, 운영비는 약 70% 절감됨.
    채택
    선례가 없던 서버리스 배포 절차를 정리하여 제출한 PR adminjs-docs#15가 2025.06. 머지되어 docs.adminjs.co 공식 가이드로 게시 중임.12
  • 핵심 도메인·B2B 도메인 등 실패 비용이 큰 경로부터 E2E 적용, 테스트 250개(커버리지 19.54%)
    • 팀에 테스트는 물론 레이어별 책임·도메인 객체 개념이 부재하여 마틴 파울러 등 영문 자료 5종을 직접 번역하며 학습함. 커버리지 수치 위주의 단위 테스트보다 E2E 우선 구축이 무중단 운영 중인 API 135개 보호에 효과적이라고 판단함.
    • 장애 요인이던 테스트 간 데이터 간섭은 트랜잭션 롤백 격리 프레임워크를 제작하여 제거하고 오픈소스로 공개함.34 테스트 작성이 불가하던 약 600줄 절차지향 엑셀 업로더는 리팩터링을 제안하여 책임 단위로 분리했고, 해당 과정을 컨퍼런스에서 「괴물 메서드 리팩터링과 성능 개선하기」 발표로 공유함.5

참고

References
블로그 ko.puleugo.dev [1] /216 · [3] /201 · [5] /209   깃허브 github.com/puleugo [2] nestjs-adminjs-serverless · [4] typeorm-transaction-rollback