Backend · Data Engineer

박성열Backend × Data, end to end.

제약·헬스케어 제품의 데이터 수집·검증부터 API와 화면까지 설계하고 운영합니다. PM·디자이너와 협업하며 병원 약 8만 곳·진단검사 1,310만 행의 처리 구조를 개선했고, 의료진 수집기·고객 포털을 구현했습니다.

🛠️ 데이터 엔지니어링⚙️ 백엔드
8만 병원
병원 데이터 기반
CRM·타겟 마케팅
1,310만 행
진단검사 데이터
월 단위 증분 적재
0.3초
8만 병원 상세 조회
기존 92초에서 단축
150초→7초
8만 병원과 매칭
62행 업로드 기준
약 3,700명
현장 영업 사용자 규모
꾹 CRM·데이터 배치
연 $5,800
AWS 사용량 기반
사양·아키텍처 조정
About

백엔드와 데이터로 제품의 기반을 설계합니다

제약·헬스케어 B2B 제품의 DB·API·데이터 배치를 중심으로, 인프라와 사용자 화면까지 직접 연결해 운영합니다.

2025.04 입사, 재직 1년 6개월. 모바일 앱 개발로 합류해 서버와 데이터 배치를 인수했습니다. 개발 1명(본인)·PM 1명·디자인 1명 구성에서 꾹과 탁을 개발·운영했고, 레퍼런 포털과 의원급 의료진 수집기를 구현했습니다. 탁은 2026.10 운영 종료·아카이브했습니다.

인수한 FastAPI 서버는 4개 파일에 라우팅·로직·SQL이 섞여 있었습니다. 이를 4계층으로 분리하고 레거시 배치를 Airflow로 재구축했습니다. DB 실행 계획과 운영 지표로 병목을 확인해 조회 성능과 비용을 개선했습니다.

기획·마케팅·디자이너와 요구사항을 정리하고 데이터 계약·운영 문서를 남겼습니다. 레퍼런의 단위·통합·E2E 테스트, 수집기의 장애 재현·회귀 테스트로 검증 범위를 넓혔습니다. 수집 결과의 근거와 복구 이력을 보존해 문제를 재현하고 수정합니다.

  • 🧭
    Backend × Data 오너십데이터 소스→파이프라인→DB→API→운영까지 직접 수행
  • ⚡
    성능 엔지니어링실행 계획·인덱스·사전집계·비동기 병목 개선
  • 🔍
    크로스스택 디버깅DB 콜레이션·멀티워커 캐시·Flutter 상태·딥링크·한글 조합 입력
  • 🛡️
    운영·보안 감각무중단 이관·RDS Blue/Green·PII·내부망 보안 이슈 제기
  • 🔎
    판단과 검증원인·대안·운영 결과를 기록하고 개선이 필요한 한계도 함께 정리
Projects

백엔드·데이터로 만든 B2B 제품

개발·운영한 제품과 최근 구축한 수집·검증 시스템입니다. 병원 약 8만 곳의 데이터를 API·화면에 연결하고 진단검사 1,310만 행의 월별 적재를 구성했습니다.

B2B 영업 CRM · 백오피스 · 모바일
꾹지능형 영업정보 서비스

병원 약 8만 곳의 정보를 제공하는 모바일 CRM과 관리자 웹. 제약사 영업사원(MR)이 방문할 병원을 고르고 매출·개원예정 정보를 확인하는 서비스입니다.

인력 구성 개발 1명(본인) · PM 1명 · 디자인 1명 · 기술 구현 전 영역 단독 담당

Data · AirflowBackend · FastAPIInfra · AWSMobile · FlutterAdmin · React
핵심 기여
  • 인수한 레거시 서버를 4계층으로 재설계. 파일 4개에 섞인 라우팅·로직·SQL을 분리했습니다. 약 8만 병원의 정보를 제공하는 CRM에서 비동기 처리 병목을 교정해 API 최대 6분 → 개선 후 0.2초로 단축했습니다.
  • 병원 대량 조회를 30초에서 0.1초로 단축. 행마다 반복되는 상관 서브쿼리를 CTE로 축약하고 복합 인덱스를 추가했습니다. 실행 계획으로 반복 조회 제거를 확인했습니다.
  • 약 8만 병원의 지역별 매출 비교 조회를 92초 → 0.3초로 단축. 병원 상세의 매출 백분위 계산을 반복 조인에서 4단계 처리로 분리하고 API와 화면에 반영했습니다.
  • 행정구역 개편으로 누락된 병원 약 1,900건 복구. 지역 코드 연결 단절을 확인하고 행정구역 폴리곤 703개의 신구 코드 매핑과 변환 파이프라인을 수정했습니다. 개편 대응 절차를 운영 문서로 남겼습니다.
  • 건강보험심사평가원(심평원)의 병원 공공데이터 이상으로 발생한 알림 1,000건 폭주를 병원별 중복 방지와 임계치 기반 프로시저로 차단했습니다.
  • 다중 워커의 캐시 불일치를 파일 수정시각을 버전 신호로 사용해 해결했습니다. Mixpanel 이벤트 24종을 정의해 사용자 행동을 수집했습니다.
  • WAF 탐지로그 5,045건 분석 → 공격/오탐 분류 + 차단정책 권고, iOS Universal Link 미동작 원인(Apple CDN) 규명.
  • Flutter 앱 A-to-Z 개발·배포·운영 — GetX 상태관리, 딥링크/웹뷰/한글 조합 입력 버그, Crashlytics 관제, MDM 정책 배포.
FastAPIMariaDBAirflowGIS RemappingFlutter/DartReactMixpanelFirebaseAWS
타겟 마케팅 추천 SaaS
탁타겟 마케팅 서비스

등록 사용자 26명·병원 약 8만 곳 대상의 타겟 마케팅 웹 서비스. 병원 공공데이터·매출·진료과 조건을 캠페인에 연결했습니다. 프리오픈 운영 후 2026.10.01 종료하고 데이터 아카이브를 검증했습니다.

인력 구성 개발 1명(본인) · PM 1명 · 디자인 1명 · Backend · Frontend · Data · Infra 전 영역 단독 담당

Backend · FastAPIFrontend · React/ViteData · Snowflake/MariaDBInfra · EC2/CI
Data Analysis · 운영 반영

세그먼트 분석 엔진

등록 사용자 26명의 프리오픈 서비스에서 병원 거래이력의 최근성·빈도·금액(RFM)으로 고객군을 나눴습니다. 한 병원은 한 고객군에만 속하도록 우선순위를 적용하고 함께 팔리는 제품을 찾아 추가 제안 목록을 캠페인에 연결했습니다. 사전집계로 46초 → 0.02초, 반복 조건 조회를 세미조인으로 바꿔 5.3초 → 19ms로 단축했습니다.

Product Scalability · 운영 반영

진단검사 도메인 확장

매출 데이터가 없는 진단검사 사업부에서도 같은 제품을 쓰도록 검사 건수를 기준으로 지표·용어·성과 기능을 전환했습니다. 1,310만 행 전량 로드로 발생한 메모리 부족을 월별 청크로 해결했습니다. 초기 적재는 원자 스왑, 이후에는 최근 6개월을 갱신하는 증분 배치로 구성했습니다.

대표 의사결정 · 사용자 업로드 자동매핑
01 · 문제 정의병원 마스터 8만 건과 전수 비교해 62행 업로드에도 150초가 걸렸습니다. 게이트웨이의 60초 제한 때문에 정상 작업이 실패로 보였습니다.
02 · 의사결정타임아웃만 늘리지 않고 ID 인덱스·지역 선분할로 매칭 비용을 먼저 줄인 뒤, NDJSON 스트리밍으로 실제 진행률을 전달했습니다.
03 · 결과62행 업로드의 매칭을 150초 → 7초로 단축했습니다. 310행 업로드도 진행률을 확인하며 완료할 수 있게 했습니다.
04 · 트레이드오프프론트 스트림 파싱과 미들웨어 처리가 복잡해지는 대신, 스트리밍 응답에만 압축을 우회하고 기존 동기 API를 fallback으로 유지했습니다.
핵심 기여
  • Snowflake → MariaDB 전면 이관. 29개 테이블·11개 뷰와 병원 공공데이터를 이관하고 47개 파일의 DB 연결 참조를 전환했습니다. 연결 API를 통일해 라우터·서비스의 비즈니스 로직을 유지하고 SQL 방언·문자열 비교 차이를 수정했습니다.
  • 필터 조건을 SQL로 번역하는 filter_sql 엔진 — must/any/not 버킷을 AND/OR/AND NOT로, 식별자 화이트리스트로 주입 방어. 핵심 뷰 실체화(CTAS+인덱스)로 타겟 COUNT 60초+ → 0.2초 (8만+ 병원 뷰)
  • 성과분석 재정의. 캠페인 제품과 타겟병원의 교집합으로 성과를 매핑하고 기간집계·병원목록까지 연결해 캠페인 효과를 일관된 기준으로 조회하도록 구현했습니다.
  • 사용자 데이터 업로드·병원 매핑 전체 구현: 16개 엔드포인트, 5단계 마법사, 이름·주소 유사도 매칭과 PII 스캔·차단 적용.
  • 타겟 추출 엔진과 UX: 변수 카탈로그, 값 검색 미리보기(디바운스 + 무한 스크롤), 필수/선호/제외 조건, 등급별(RBAC) 데이터 가시성.
  • EC2 x86 → ARM 무중단 이관. 네트워크 인터페이스·IP 전환과 CI 러너 재등록으로 배포를 연결했습니다. 해당 EC2 비용은 약 71% 줄었으며, 아래 AWS 연간 절감액에 포함됩니다.
FastAPInumpySQL OptimizationSnowflakeMariaDBReact/Vite/TSAWS EC2/ALB
의사·병원 정보 B2B 고객 포털 · 2026.08~09
레퍼런검색·변경 추적·구독 범위

의사·병원 정보를 검색하고 변경을 추적하는 고객 포털. Java/Spring Boot·MSSQL·Vue로 구현해 사내 시연 환경에 배포하고 2026.09.16 인계본을 확정했습니다.

Backend · Java/Spring BootFrontend · Vue/TypeScriptData · MSSQL/MyBatis검증 · JUnit/Vitest/Playwright
Query Performance

대표행과 문자열 비교 비용 분리

대표 근무행을 적재 때 사전 계산하고 인덱스를 구성해 무필터 의사 목록을 368ms → 21ms로 줄였습니다. 문자열 비교 규칙의 CPU 비용을 분리해 통합검색도 356ms → 43ms로 개선했습니다.

Verification & Handoff

테스트와 인계 가능한 실행 환경

백엔드·프론트의 단위 테스트와 통합·E2E 테스트를 구성했습니다. 인계본의 클린룸 빌드와 설정·데이터 계약·운영 체크리스트를 준비했습니다.

핵심 기여
  • 구독 범위를 서버에서 강제. 계정의 조회 가능 범위를 쿼리에 주입하고 익명 호출을 거절했습니다. 요청 수 제한에 열람 행 예산을 더해 대량 조회의 경계를 설정했습니다.
  • 최신 대표행 규칙을 데이터 처리 한 곳으로 통합. 화면마다 다른 의사가 보이지 않도록 기준을 모으고 갱신 절차와 원천 데이터 계약을 문서화했습니다.
  • 보안 장치의 한계까지 인계. 단일 인스턴스 카운터와 토큰 무효화 등 보완할 항목을 완료 기능과 구분했습니다.
Java 21Spring BootMyBatisMSSQLVueTypeScriptGitLab CI
레퍼런 데이터 수집 · 의원급 공식 홈페이지 · 2026.08~현재
의료진 수집·검증근거와 실행 기록을 남기는 파이프라인

의료진 이름·약력·공개 근거를 수집하고 운영 반영 단계까지 검증. 원 입력 기관과 모델 관찰값을 분리하고 지점·명단·OCR 충돌을 확인합니다. 수집·독립 검증·최종 승인·외부 적재 확인은 각각의 상태로 기록합니다.

Python · CLI/MCPLLM 수집·독립 검증Windows/WSL · Chrome/CDPpytest · 장애 재현
대표 의사결정 · 모델 시간 초과를 실행기 결함과 분리
01 · 관찰큰 프롬프트를 보낸 최종 검증에서 출력·브라우저 활동 없이 시간 초과가 발생했습니다.
02 · 원인 재현지연 입력을 읽는 자식 프로세스로 85KB 중 65,536바이트만 전달되고 EOF가 도착하지 않는 현상을 재현했습니다.
03 · 변경·검증저장된 프롬프트 파일을 stdin으로 연결하고 로그·프로세스 감시를 분리했습니다. 220KB·1.1MB 입력의 길이·SHA와 취소·시간 초과를 확인했습니다.
04 · 해석 범위입력 전송 복구와 전체 승인·적재 완료를 구분했습니다. 브라우저 자리 대기와 종료 문제는 별도 원인으로 추적했습니다.
데이터 품질·복구·평가
  • 공개 근거와 지점 검증. 모델이 작성한 기관 정보로 원 입력을 덮어쓰지 않고, 부분 명단이나 접속 실패를 빈 명단으로 처리하지 않았습니다. 뒤 단계 OCR 합의가 이전 판독 충돌을 지우지 못하게 했습니다.
  • 성공 기관부터 인계. 일부 실패가 전체 후속 처리를 막지 않도록 실행·감독 풀을 분리했습니다. Chrome 대기·탐색·종료를 구분하고 하위 프로세스가 끝날 때까지 자원 소유권을 유지했습니다.
  • 기존 결과를 보존하는 복구. 인증·한도·인프라·품질 실패를 구분하고 입력·정책·시도별 원문·SHA를 보존했습니다. 복구 전후 성공 기관의 상태와 결과 파일의 SHA를 대조해 정상 결과를 보존했습니다.
  • 평가 조건부터 검증. 같은 수집 원문을 고정해 모델 결과를 짝지어 비교했습니다. 프롬프트와 정답집의 의료진 범위 충돌을 발견해 정확도 우열 해석을 정정했습니다.
PythonPydanticJSON SchemaSHA-256Chrome/CDPpytest
꾹 데이터 배치 플랫폼 · 2026.02~현재
수집부터 안정적인 적재까지Airflow · 데이터 품질 · 장애 복구

약 3,700명의 현장 영업 사용자를 지원하는 데이터 배치를 1인 설계·개발·운영. 병원 공공데이터·계열사 매출·채용공고·앱 이벤트를 수집해 MariaDB 마트와 제품 API에 연결했습니다.

Python · AirflowMariaDB · Snowflake · S3Docker · WSL · GitLab CI/CD
Data Pipeline

대용량 동기화의 메모리 부족 해결

진단검사 1,310만 행의 전량 로드를 월별 청크·최근 6개월 증분으로 전환했습니다. 서버사이드 커서로 10만 행씩 읽고 임시 테이블 적재 후 원자 교체해 메모리 고갈과 조회 공백을 줄였습니다. 161개 테이블의 개발 DB 미러와 스키마 차이 보강도 구성했습니다.

Data Quality

빈 원천이 운영 데이터 소실로 번지지 않도록

빈 원천으로 거래처 약 1.5만 행이 소실된 사고 뒤, 평소 변동폭과 비교해 계열사별 행수 10% 급감 시 적재를 차단하는 다중 검증을 도입했습니다. 벌크 적재의 이스케이프·예약어 오류도 수정했습니다.

대표 의사결정 · 많이 쓰는 프로세스보다 설명되지 않는 메모리를 추적
01 · 현상WSL과 Airflow가 멈췄지만 상위 프로세스 메모리만으로 호스트의 커밋 한도 고갈을 설명할 수 없었습니다.
02 · 원인 추적이벤트 로그의 시스템 커밋·프로세스·커널 풀을 비교하고 NT Native API로 핸들·섹션을 분석해 관리 에이전트의 누수를 특정했습니다.
03 · 복구·관측VM 재기동과 밀린 스케줄 처리로 복구했습니다. 메모리·핸들·서비스 헬스를 관측하고 누수 근거를 담당 팀에 전달했습니다.
04 · 운영 판단프로세스 실행 여부와 서비스 응답을 구분했습니다. 원인 수정 전에는 임시 완화책으로 재발 위험을 관리했습니다.
안정적인 배치를 위한 설계
  • 실패와 배포의 범위 분리. Airflow DAG 9개와 태스크별 프로세스로 실행 환경을 격리하고, 일부 외부 API 실패 허용·공통 재시도를 구성했습니다. 격리 검증 뒤 머지 후 1분 내 배포하며 실행 중 태스크를 보호했습니다.
  • 인증 장애의 원인 확인과 하류 보호. Snowflake 로그인 오류·인증 정책을 대조해 키페어 거부 원인을 찾고 코드·정책 수정으로 복구했습니다. 전날 매핑 재사용으로 하류 배치를 이어가되 신규 정보 반영 지연을 감수했습니다.
  • 이벤트 시간과 중복·지연 처리. Mixpanel 일 약 1천 건을 UTC 수집 후 KST로 재필터했습니다. 이벤트 ID 중복 제거, 일자별 멱등 재적재, 최근 3일 재수집, 제한 재시도로 지연 이벤트와 호출 제한을 처리했습니다.
  • 운영 일정에 맞춘 마스터 전환. 대표 병원 그룹으로 키·병합 규칙을 재설계하고 개발에서 검증했습니다. 운영의 기존 경로를 유지해 설정으로 전환 시점을 선택하도록 구성했습니다.
  • 호스트와 서비스 수명 관리. Docker Desktop 크래시를 WSL 네이티브 dockerd 전환으로 해결했습니다. 탁 종료 뒤에는 전용 동기화만 제거하고 개발 미러의 실행 이력·스케줄은 보존했습니다.
AirflowPythonMariaDBSnowflakeGitLab CIDocker/WSLPowerShell
↳ 제품을 받쳐주는 분석·수집 시스템
프로덕트 데이터 분석

사용자 활동 분석 대시보드

일 약 1천 건의 Raw Export 적재와 최신 실시간 이벤트를 결합해 활성 사용자·행동 지표를 제공합니다. 시간대 재필터·이벤트 ID 중복 제거·최근 3일 재수집으로 정합성을 보완했습니다. 부분 적재일을 실시간으로 덮어써 당일 사용자가 누락되던 문제를 수정했고, 일별 스냅샷으로 과거 분모를 보존했습니다. 기간·근무일·순위·미사용자 계산은 단위 테스트로 확인했습니다.

FastAPIReact/ViteMixpanel Export APIMariaDB
데이터 수집 파이프라인

개원예정 병·의원 탐지 크롤러

채용공고 판독·개원 시점 판단과 규칙 기반 필드 추출을 분리하고, 머니핀 사업자등록·심평원 정보와 병합했습니다. 2026.07.02 자체 수집으로 전환해 소배치·체크포인트·3일 결과 재사용·2단 워치독을 운영합니다. 병원특성 추출률은 8% → 88%, 개원예정일은 20% → 60%입니다.

업체 911건·자체 315건의 서로 다른 기간 표본 비교이며 정확도 지표는 아닙니다. 수집 공고 3,447건 중 522건(약 15%)은 OCR 경로로만 회수했습니다. 머니핀의 만료 직전 쿠키 문제는 30분 여유 판정과 경계값 테스트로 보완했습니다.

PythonOCRClaude(LLM)ThreadPoolGeocoding
How I Code · 코드 관점

동작뿐 아니라 구조와 근거로 보여드립니다

운영에서 적용한 설계 판단을 정리했습니다. 아래 두 코드는 회사 코드·데이터를 포함하지 않도록 개념을 재구성한 공개용 예시입니다.

🔌

교체 가능한 DB 추상화

mariadb·snowflake 모듈이 동일한 공개 API(init/get/close pool)를 제공하도록 설계. 덕분에 Snowflake → MariaDB 전면 이관을 라우터·서비스 수정 없이 import 교체만으로 완료.

⚡

성능을 코드로 증명

약 8만 병원의 상세 비교 조회를 92초에서 0.3초로 단축했습니다. 실행 계획에서 반복 조인을 확인해 4단계로 분리했습니다. API의 비동기 처리 병목은 별도로 진단·교정했습니다.

🧱

레이어드 아키텍처

꾹·탁 백엔드를 routers → services → repositories → models로 분리했습니다. 요청 검증·도메인 판단·SQL 접근의 변경 범위를 나눴습니다. 이후 활동 대시보드 단위 테스트와 레퍼런·의료진 수집기의 회귀 검증으로 범위를 확장했습니다.

🛡️

방어적인 백엔드

JWT 파싱 + 민감정보(password·uuid·ip) 자동 마스킹 로깅 미들웨어, SQL 식별자 화이트리스트 + placeholder 바인딩으로 주입 차단, ALB health-check 로그 분리, 대용량 응답 GZip ~85% 압축.

🔁

프론트 비동기 경쟁 제어

AbortController + 시퀀스 토큰으로 stale 응답을 드롭하고, IntersectionObserver 무한 스크롤 + 디바운스, React Strict Mode 이중 마운트 버그까지 코드로 대응(useCandidates).

📱

모바일 상태 일관성

Flutter GetX MVC(view·controller·service·store 분리) + 찜 상태를 낙관적 업데이트 3단계(local→confirmed→rollback)로 동기화. 공용 위젯 추출과 Freezed 불변 모델 + 하위호환 역직렬화.

레거시 FastAPI 서버 재설계 — Before / After
Before4개 파일에 라우팅·로직·SQL 혼재
→재설계
Router요청 검증·응답 매핑
Service도메인 로직
RepositorySQL · DB 접근 캡슐화
ModelPydantic 요청/응답 스키마
connection_scope.py · 공개용 예시
# 공개용 재구성: DB 연결의 반환 책임을 한곳에 둡니다.
from contextlib import contextmanager

@contextmanager
def connection_scope(acquire, release):
    connection = acquire()
    try:
        yield connection
    finally:
        release(connection)

def fetch_by_id(acquire, release, item_id):
    with connection_scope(acquire, release) as conn:
        with conn.cursor() as cursor:
            cursor.execute(
                "SELECT id FROM items WHERE id = %s",
                (item_id,),
            )
            return cursor.fetchone()
month_windows.py · 공개용 예시
# 공개용 재구성: [시작, 끝) 범위를 월별로 나눕니다.
from datetime import date

def month_windows(start: date, stop: date):
    if start >= stop:
        raise ValueError("start must precede stop")
    cursor = start
    while cursor < stop:
        next_month = (
            date(cursor.year + 1, 1, 1)
            if cursor.month == 12
            else date(cursor.year, cursor.month + 1, 1)
        )
        end = min(next_month, stop)
        yield cursor, end
        cursor = end
Business Impact · 비용 절감

기능만이 아니라 비용도 직접 줄였습니다

운영비 구조를 직접 분석해 줄인 결과입니다. 제가 찾아서 실행한 절감액을 연 기준으로 정리했습니다.

AWS 연 ~$5,800 절감 사용량 기반 인프라 개선과 외부 수집 내재화
연 ~$5,800
AWS 인프라 비용 — 지표 기반 사양 조정

CloudWatch로 CPU·메모리 사용량을 확인해 인스턴스 사양 조정과 Graviton(ARM) 전환을 실행했습니다. 외부 클라우드 운영사(MSP)의 연 약 $2,155 절감안과 비교해 연 약 $5,800을 절감했습니다.

2026.07 자체 전환
외주 수집 내재화 — 업체 API 호출 0건

2026.07.02 자체 수집 전환 후 업체 API 호출 0건을 확인해 계약 해지 판단 근거를 제공했습니다. 판정·추출·운영 복구를 내부에서 관리하도록 전환했습니다.

Infra · Ops · Beyond Code

코드 너머의 시스템·운영

인프라·배포·데이터 배치를 운영하고, 보안 진단 대응과 시니어 개발자 채용 면접에 참여했습니다.

CI/CD사내 최초 GitLab CI/CD 도입

운영 대상 EC2의 수동 배포를 GitLab Runner 기반 자동 배포로 전환했습니다. 서버와 GitLab 간 통신을 연결하고 배포 절차를 파이프라인으로 구성했습니다. 빌드·검증 러너 통합은 후속 개선 과제로 정리했습니다.

Data레거시 배치 → Airflow 재구축

단일 스크립트를 Airflow DAG 9개로 재구성하고 처리기마다 별도 프로세스로 환경변수·import 캐시를 격리했습니다. 일부 외부 API 태스크의 실패를 격리하되 전처리 실패는 배치 실패로 처리하도록 구분했습니다.

InfraAWS RDS 무중단 버전 업그레이드

보안 패치가 필요했지만 재부팅 다운타임이 서비스에 부담이라, RDS Blue/Green Deployments로 MariaDB 10.11.9 → 10.11.16을 무중단 적용했습니다.

Security보안 진단과 접근 경계 검토

개인정보 안전성·인프라 취약점 진단에 대응했습니다. 서비스와 배치의 접근 권한 및 네트워크 경계를 검토하고 구조 개선을 제안했습니다.

FinOpsAWS 비용 연 약 $5,800 절감

CloudWatch 사용량을 근거로 사양과 인스턴스 아키텍처를 변경했습니다. 위 비용 절감 섹션과 동일한 성과이며 별도로 합산하지 않습니다.

Collaboration시니어 개발자 채용 면접 패널 참여

팀에 합류할 시니어 개발자의 서류 검토와 면접에 참여했습니다.

IntegrationSAP 연동 현대화

RFC 전용 프로토콜은 라이브러리 의존과 디버깅 제약이 커서, ERP 연동을 SAP PO OData API(HTTP) 방식으로 전환해 표준 스택에서 다루도록 했습니다.

Automation콘솔 전용 데이터 수집 자동화

GUI 콘솔로만 제공되는 데이터를 Selenium 세션 자동화(구글 OAuth 로그인·세션 연장)로 정기 수집하도록 만들어 수작업을 제거했습니다.

Development Workflow · AI 활용

불편을 발견하고 자동화와 AI로 해결합니다

Claude·Codex는 구현과 리뷰를 보조하는 도구로 활용합니다. 요구사항·설계·운영 검증은 직접 책임지며, 반복 실행 절차를 성열봇으로 묶었습니다.

AI 활용 역량 · 직접 겪은 면접 업무의 불편을 해결

면접관으로 참여하면서 답변을 기억하고, 다음 질문을 생각하고, 그 자리에서 평가까지 해야 하는 부담을 느꼈습니다. 필요한 기능을 직접 정리해 음성인식·후속 질문 추천·평가 초안을 연결한 작은 보조 도구를 자발적으로 만들고 실제 면접에 사용했습니다.

자막과 원문으로 답변을 다시 확인하고, 질문·평가 제안을 참고하되 최종 판단은 직접 했습니다. AI를 개발뿐 아니라 일상 업무에도 적용하고, 필요한 도구로 구현해 사용하는 역량을 보여주는 사례입니다.

🤖
성열봇 SungYul-Bot
자율 개발 에이전트 하네스

Jira 하위 작업을 받아 구현·기능 테스트·리뷰·변경 요청(MR)·CI 확인을 연결하는 봇을 만들었습니다. 자동 생성한 MR만 처리하고 위험한 Git 작업과 시크릿 노출을 제한하도록 실행 범위를 정했습니다.

① Jira 폴링 · 티켓 점유 락→ ② 요구 분석 (설명·스크린샷·댓글)→ ③ 영역 자동 판정 FE·BE·Data→ ④ 브랜치·구현·MR 자동 생성→ ⑤ Playwright 기능 테스트→ ⑥ 코드 리뷰·수정 반영→ ⑦ 가드레일 머지 · CI 추적 · 핫픽스
🔁 자율 점화 — 운영 시간대 내 N분 간격 자동 실행(스케줄링) ❓ 모호하면 자동 질의 — Jira 댓글로 질문 후 답변 폴링 🛡️ 가드레일 — 자기 MR만 머지, revert·force-push·시크릿 노출 금지
작업 절차와 검증 원칙 자세히 보기
1

이슈 인입

이슈 트래커에서 요구사항 정의 → 컨텍스트 정리

2

설계·구현

설계·우선순위를 정하고 구현 도구로 실행

3

로컬 검증

커밋 전에 API·쿼리를 직접 돌려 확인

4

코드 리뷰

코드 리뷰 결과를 확인하고 수정 사항 반영

5

MR · 자동화

feature 브랜치 → glab MR → Jira 자동 In Review 전이

6

머지·동기화

머지 후 각 레포 main 복귀 + pull, 운영 반영 가드

⚙️ 개발 원칙 (실제 룰)

  • 실제 경로 검증 — API·SQL 실행, 단위·통합·E2E 및 장애 재현 테스트. 변경한 동작과 실패 경로를 함께 확인
  • 브랜치·MR 위생 — 작업마다 새 브랜치, BE/FE 각각 MR, 충돌 시 rebase
  • 운영 안전 가드 — Flutter devMode 확인 후 푸시, 운영 DB 대량 쓰기는 수동 검증
  • 변경 범위별 리뷰 — 주요 변경과 마일스톤에서 리뷰 결과 확인
  • 기록 우선 — 결정·트러블슈팅을 세션 로그로 남겨 다음 작업의 컨텍스트로

🔌 오케스트레이션 스택 · MCP

이슈·변경 관리기능 테스트 Jira MCPGitLab · glabConfluence MCPMixpanel MCPFigma MCP
검증 후 운영 반영개발 속도의 체감 수치 대신 API·쿼리·기능 테스트 결과를 확인
Tech Stack

데이터와 백엔드를 중심으로 연결합니다

🛠️

데이터 엔지니어링

AirflowETL·증분적재SnowflakeMariaDB/MySQL동적 DAG 팩토리실패 격리공공데이터 파이프라인
⚙️

백엔드

PythonFastAPIJava · Spring BootMyBatis · MSSQL레이어드 아키텍처SQLAlchemySQL 최적화JWT·RBACNDJSON 응답
📊

데이터 분석

RFMMarket BasketMixpanelDAU/WAU/MAU이벤트 택소노미pandas · numpy대시보드 설계
☁️

인프라 · DevOps · 보안

AWS EC2(ARM)RDS Blue/GreenALB·Route53·S3GitLab CI/CDnginx·systemdWAF 분석PII 스캔·차단
🧩

제품 클라이언트

ReactVueVite · TypeScriptFlutter · DartGetXFirebase
Earlier Work

시작점 — 프론트 · 모바일 프로젝트

React·Flutter로 앱과 웹을 만들고 스토어 배포까지 해본 시기입니다. 학교 프로젝트와 KB국민은행 사내벤처 파견에서 기본기를 쌓았습니다.

2024.10 – 2024.12 · ㈜데이터랩스 계약직

파피루스

KB국민은행 사내벤처 파견 · Flutter 개발

AI 도서 큐레이팅 앱 화면 약 80% 구현. 바코드 인식·소셜 로그인·푸시 알림을 연결하고 iOS·Android 스토어에 배포했습니다.

FlutterGetX · MVVMFirebaseML Kit
2024.03 – 2024.06 · 산학

탐식당 🏅

Front(2) · Back(2) · AI(1)

㈜탐나는식탁의 학생식당 플랫폼 앱. 캡스톤디자인 경진대회 금상.

FlutteriOS/AndroidFirebaseAI
Education & Career
  • 2025.04 – 현재GC (녹십자홀딩스) · 커머셜솔루션팀기획 요구사항의 기술 설계부터 웹·앱·백엔드·데이터·인프라 개발·배포·운영 전담
  • 2024.10 – 2024.12㈜데이터랩스 계약직 · KB국민은행 사내벤처 파견Flutter 엔지니어 · AI 도서 큐레이팅 앱 파피루스 개발·배포
  • 2019.03 – 2024.08명지대학교 컴퓨터공학과 (조기졸업)학점 4.21 / 4.5
  • 2020.08 – 2022.02육군 제2군단 102정보통신단 만기전역정보보호병
Certifications & Awards
  • 📜
    정보처리기사2024.12 · 한국산업인력공단
  • 🗄️
    SQLD (SQL 개발자)2024.12 · 한국데이터베이스진흥센터
  • 🥇
    캡스톤디자인 경진대회 금상2024.06 · 탐식당 / 명지대 컴퓨터공학과
  • 🎖️
    육군 참모총장 표창장2021.12 · 육군 최정예300 워리어(사이버)