자보히르 (네드)

백엔드 개발자 & PostgreSQL DBA

요약

PostgreSQL을 중심으로 신뢰할 수 있는 백엔드 시스템을 만드는 백엔드 개발자 자보히르입니다. 복식부기 원장, PostgreSQL 모니터링 플랫폼, 실제 ESP32 센서로 검증한 IoT 파이프라인, Saga/Outbox 기반 라이브커머스 같은 시스템을 직접 설계하고 배포했습니다. 데이터베이스 설계와 성능 최적화, 동시성 제어와 트랜잭션 정합성에 강점이 있습니다. 4년 동안 NestJS와 Java/Kotlin/Spring Boot로 일했으며, 우즈베키스탄의 Sigma Software와 LeverX Group, 그리고 UAE, 홍콩, 방글라데시의 제조, F&B, AI 서비스 기업을 위한 프리랜서 백엔드와 DB 시스템을 개발했습니다.

기술

언어
TypeScript, MicroPython, Java, Lua, Kotlin
프레임워크
NestJS, Prisma, zod, GraphQL, Spring Boot, Spring Data JPA, Bucket4j, Spring Cloud Gateway
데이터베이스
PostgreSQL, TimescaleDB, MongoDB, Redis
인프라
Docker, Caddy, node-pg-migrate, GitHub Actions, Flyway, Cloudflare, Toss Payments, OpenTelemetry, Jaeger
메시징
Socket.IO, BullMQ, MQTT, Apache Kafka, WebSocket (STOMP)
테스트
Jest, Vitest, k6, JUnit 5, Testcontainers
프론트엔드
React, Vite, Tailwind CSS, Recharts, Leaflet, Next.js
하드웨어
ESP32

경력

백엔드 개발자 (원격, 타슈켄트)

2024.09 – 2025.08

Sigma Software

  • 주문 목록 API p95 1.4초 → 210ms: 복합 인덱스를 추가하고 N+1 쿼리를 JOIN 하나로 합침 (Grafana p95 그래프 전후 비교)
  • Redis 캐시 도입 후 주 DB로 오는 반복 읽기 쿼리 약 45% 감소 (pg_stat_statements calls 전후 비교)
  • Streaming Replication 기반 Primary–Standby HA 구성에 참여, Primary 장애 시 5~10초 안에 Standby로 failover
  • 유럽 고객사의 주문·청구서 API를 Java/Kotlin, Spring Boot로 설계하고 Flyway 기반 버전 관리 마이그레이션 도입

백엔드 개발자 & PostgreSQL DBA (원격, 타슈켄트)

2022.10 – 2024.05

LeverX Group

  • PostgreSQL 13 → 15 메이저 업그레이드를 logical replication으로 서비스 중단 없이 완료
  • 내부 시스템 간 데이터 교환 연동 서비스를 만들어 수작업 연동 업무를 없앰
  • 대용량 리포트에 페이지네이션과 배치 내보내기를 적용해 서버 부하 없이 분할 처리
  • 단위·통합 테스트를 작성해 CI에 연결, 느린 DB 쿼리 최적화

백엔드 & 데이터베이스 개발자 (원격)

2021.11 – 2025.09

프리랜서

프로젝트

PG Insight

운영 중

누구나 가입해 자신의 PostgreSQL을 등록하고, 본인이 등록한 DB만 보는 오픈 멀티테넌트 모니터링 서비스

NestJS, TypeScript, Prisma, PostgreSQL, TimescaleDB, Socket.IO, React, Vite, Tailwind CSS, Recharts, Jest, Vitest, Docker, Caddy

  • 테넌트 격리: 전역 가드가 모든 :targetId 라우트의 소유자를 확인하고, 남의 대상에는 403이 아니라 404를 돌려줍니다. 보호되지 않은 변경 라우트가 추가되면 테스트가 실패합니다
  • SSRF 방어: DNS 응답의 모든 IP를 검사하고 연결을 검증한 IP에 고정합니다(TLS SNI 유지). 프로덕션에서 platform-db, 169.254.169.254, 127.0.0.1을 거부했습니다

LedgerCore

운영 중

돈이 새로 생기거나 사라지지 않고, 어떤 이체도 두 번 적용되지 않는 PostgreSQL 복식부기 원장

NestJS, TypeScript, PostgreSQL, node-pg-migrate, zod, React, Vite, Vitest, k6, Docker, Caddy, GitHub Actions

  • 동시성 정확성: 순서가 정해진 행 락으로 부하 테스트 12/12에서 deadlock 0, fault 0. reversal race를 찾아 테스트로 고쳤습니다
  • 불변식은 DB에: 차변 = 대변 규칙을 COMMIT 시점 트리거로 검사하고, 부하 중에도 백업에서 복원한 DB에서도 imbalance 0

Smart Farm

운영 중

ESP32 센서 → MQTT → 파이프라인 → 규칙 → 펌프 → 다시 기기로 닫히는 온실 실시간 IoT 모니터링과 자동 관수

NestJS, TypeScript, GraphQL, MongoDB, Redis, BullMQ, MQTT, Socket.IO, React, Vite, Leaflet, ESP32, MicroPython, Jest, Docker, Caddy

  • IoT 데이터가 사라지지 않음을 측정으로 증명: MongoDB 132초 중단에 24/24, 백엔드 20초 중단에 7/7. 수정 전 코드의 유실(12건 중 1건, 배포 때 1건)도 먼저 측정했습니다
  • 보안 감사와 수정: 가입 시 ADMIN 상승, 임의 필드 쓰기, 타 회원 리소스 접근, OTP 무제한 추측, 하드코딩된 JWT 키 등 12개 이상을 프로덕션 악용 여부부터 확인한 뒤 닫았습니다

FlashDrop

운영 중

4가지 동시성 전략으로 초과 발급 없는 선착순 쿠폰 발급을 구현하고 k6로 측정해 비교

Java, Spring Boot, Spring Data JPA, PostgreSQL, Redis, Lua, Flyway, Bucket4j, JUnit 5, Testcontainers, k6, Docker, Caddy, Cloudflare

  • 문제를 숫자로 증명: 락 없음 방식이 50장 대신 300장을 발급했고, remaining_quantity는 0이 아니라 46에 머물렀습니다
  • 올바른 해법 3가지: 나머지 세 방식은 300건 중 정확히 50건만 통과시켰고 DB에도 정확히 50행

LiveCommerce

운영 중

라이브 방송 중 한정 수량 특가를 처리하는 플랫폼: 재고 100개에 구매 시도 1,000건, 초과 판매 0건

Kotlin, Spring Boot, Spring Cloud Gateway, Spring Data JPA, PostgreSQL, Apache Kafka, WebSocket (STOMP), Flyway, Toss Payments, OpenTelemetry, Jaeger, Next.js, TypeScript, Tailwind CSS, JUnit 5, k6, Docker, Caddy

  • 정확성: 재고 100개에 구매 시도 1,000건, 3회 반복에서 초과 판매 0, 결제·판매 불일치 0, HTTP 오류 0. 매 실행 끝에 불변식 5개 확인
  • 장애 내성: Kafka나 결제 DB를 실제로 멈춰도 이벤트 유실 0, 이중 결제 0 (카오스 테스트)

학력

서원대학교

경영학사, 글로벌비즈니스전공

2022.08 – 2026.08

MIT Group (DevEx Academy)

백엔드 개발 부트캠프

언어

우즈베크어
모국어
한국어
TOPIK II 6급, 업무 소통 가능
영어
기술 문서와 논의 이해 가능, 회화는 기초
러시아어
이해 가능, 간단한 대화