개발 · 서비스 기획 직무 지원 중

안이준

서비스를 만들어본 사람/무엇을 고칠지 찾는 사람

결제·정산·주문 백엔드를 직접 만들어본 경험으로,
사용자가 불편을 느끼는 지점을 찾고 실현 가능한 개선을 제안합니다.

숫자로 보는 실서비스 경험

프론트엔드 개발자와 2인 팀으로 실서비스를 출시하며, 백엔드 전체와 QA를 맡아 만든 결과입니다.

🔌
100+
API 엔드포인트 설계·구현
REST API 설계부터 Supabase Edge Functions 배포까지 백엔드 단독 담당
🛡️
0건
배포 후 크리티컬 버그
120개 이상의 테스트 케이스와 Postman 시나리오로 배포 전 검증
⚙️
30+
DB 트리거 · 자동화 파이프라인
pg_cron, pg_net 기반으로 멤버십 갱신과 정산을 사람 손 없이 처리
💳
0건
포인트 이중 차감
보상 트랜잭션과 DB UNIQUE 제약으로 결제 정합성 확보
🤖
40%↓
구현 시간 단축 (Cursor AI)
AI 코드 생성과 5단계 검증 프로세스로 개발 속도 30~40% 향상
🧪
120+
테스트 케이스 직접 작성
경계값, 레이스 컨디션, Silent Failure 등 예외 상황 검증

직접 설계하고 구현한 시스템

요구사항을 기능으로 옮기고, 설계·구현부터 QA·배포까지 참여한 프로젝트입니다.

🌐
MateU · Social System
소셜 피드 & 관계 시스템

팔로우 기반 소셜 피드와 미디어 접근 제어 구조를 설계·구현했습니다. 누가 어떤 콘텐츠를 볼 수 있는지를 정책으로 정의하고, 그 정책을 DB와 API에 반영했습니다.

4단계 미디어 접근 제어 (공개 / 팔로워 / 구독자 / 비공개)
Signed URL 기반 미디어 보안 — 미인증 직접 접근 차단
JOIN 쿼리와 커서 페이지네이션으로 N+1 문제 해결, 응답 40% 개선
RLS 정책으로 DB 레벨 데이터 격리
TypeScriptSupabase Edge FunctionsPostgreSQL RLSSigned URL
Notion에서 자세히 보기
💎
MateU · Membership
멤버십 구독 & 유료 콘텐츠 시스템

월정액 구독 자동 갱신, 포인트 결제, 유료 콘텐츠 접근 제어까지 결제 흐름 전체를 구축했습니다. 운영자가 매번 확인하지 않아도 갱신과 정산이 돌아가도록 자동화했습니다.

보상 트랜잭션으로 부분 실패 시 자동 롤백
pg_cron + pg_net 기반 멤버십 자동 갱신 파이프라인
Cron 실행 결과 로깅으로 Silent Failure 탐지
UNIQUE 제약과 배열 검증으로 포인트 이중 차감 방지
Denopg_cronpg_netPostgreSQL Triggers
Notion에서 자세히 보기
🛒
E-Commerce · Payments
이커머스 스토어 & 결제·정산 시스템

장바구니, 주문, 결제, 정산으로 이어지는 이커머스 백엔드를 구축했습니다. 장바구니 도입으로 기존 주문 구조가 한계에 부딪히자, 운영 중인 서비스를 멈추지 않고 테이블을 재설계했습니다.

주문 테이블 1개 → 4개 정규화 마이그레이션 (무중단, 하위 호환 유지)
TossPayments 결제 흐름에 JWE 암호화 기반 지급대행(v2) 정산 로직 확장
판매자 · 플랫폼 · 구매자 3자 정산 자동화
TossPaymentsPostgreSQLNode.jsJWE
Notion에서 자세히 보기
🧠
AI · LLM 학습
LLM Fine-Tuning & PEFT 실습

AI를 서비스에 붙이려면 모델이 어떻게 학습되는지부터 알아야 한다고 생각해 LLM 파인튜닝을 독학하고 실습했습니다.

LoRA · QLoRA 원리 학습 및 실습
모델 선택 → 데이터 준비 → 학습 → 배포까지 파인튜닝 과정 정리
합성 데이터와 수동 검수 데이터를 섞은 데이터 품질 관리
OpenAI API 연동 및 프롬프트 설계
PythonLoRAQLoRAOpenAI API
Notion에서 자세히 보기

문제를 발견하고 바꾼 경험

맡은 역할 밖이라도 사용자가 불편을 겪는 지점을 찾아 근거와 함께 제안했습니다.

🧭
메인 네비게이션 구조 개선MateU 앱 · 백엔드 담당으로서 제안
문제
피드, 스토어, 방송, 채팅, 검색, 탐색, 좋아요, 관리자 스케줄까지 하단 탭에 버튼이 과도하게 노출. 처음 쓰는 사용자가 어디서 시작할지 판단하기 어려움
근거
경쟁 앱 네비게이션을 캡처해 비교. 잘 설계된 앱은 하단 탭을 4~5개로 절제하고, 검색과 탐색을 하나로 묶어 운영
제안
검색·탐색 통합, 일반 사용자에게 불필요한 관리자 스케줄 버튼은 메뉴 안으로 이동
결과
작업량 증가를 이유로 한 초기 반대를 비교 자료로 설득해 1~2주 뒤 실서비스에 반영
📋
QA 이슈 관리 방식 정비MateU 앱 · 2인 팀 출시 준비
문제
QA 전담 인력이 없고, 버그를 말로 전달하면 누락되거나 서로 다르게 이해될 위험
실행
백엔드와 프론트엔드 화면을 함께 테스트하고, 버그를 구글 시트에 정리한 뒤 노션에 재현 조건·우선순위·담당 영역으로 분류해 공유
흐름
문서를 보고 프론트엔드에서 수정 → 제가 재검증해 결과 업데이트하는 수정·확인 루프를 만듦
결과
배포 후 크리티컬 버그 0건으로 출시
🏬
지표에 안 잡히는 기회손실 발견유니클로 매장 PT 근무
문제
고층 집기 최상단의 접힌 상품에 고객 손이 닿지 않음. 주변에 직원이 없으면 구매를 포기하고 지나침
원인
집기 도입으로 재고 효율은 올랐지만, 고객이 상품에 닿는 마지막 단계가 설계에서 빠짐. 매출 지표에는 드러나지 않는 손실
실행
최상단 걸어두기 진열 전환 방안을 정리하고, 인원이 줄어드는 시간대에 해당 구역 동료에게 먼저 살펴봐 달라고 요청
결과
그냥 지나치는 고객이 줄어듦. 시스템이 만든 빈틈은 결국 사람과 운영으로 메운다는 것을 배움

실전에서 마주친 문제와 해결

운영 중 발생한 버그와 설계 이슈를 직접 발견하고 원인을 찾아 해결한 사례입니다.

📄
실시간 피드 중복·누락
문제
offset 방식에서 새 게시물이 올라오면 피드 항목이 중복 노출되거나 누락
원인
페이지 요청 사이에 새 데이터가 들어오면 offset 기준이 밀려 같은 데이터를 두 번 조회하거나 건너뜀
해결
published_at 기준 커서 페이지네이션으로 전환. WHERE published_at < :cursor로 삽입 영향 차단
구독 만료 후 권한 누수
문제
만료된 구독자가 Cron 실행 전까지 유료 콘텐츠에 계속 접근
원인
접근 제어가 status = 'active'만 확인. Cron이 돌기 전 시간차를 고려하지 않음
해결
status = 'active' AND expired_at > NOW() 이중 검증으로 실시간 만료 판정
🔇
성공으로 기록된 실패 (Silent Failure)
문제
자동 갱신 후 응답은 성공(200)인데 알림이 발송되지 않음
원인
채팅방 생성 실패로 chatRoomIdnull이 되며 알림 블록 전체가 건너뛰어짐. 오류는 로그에만 남고 결과는 성공으로 기록
해결
실패한 구독 ID를 results.errors에 명시 기록해 응답만 보고도 부분 실패를 파악하도록 개선
🗄️
주문 테이블 1 → 4 정규화
문제
장바구니 도입 후 store_orders 단일 테이블로는 한 주문에 여러 상품을 담을 수 없음
원인
초기 설계에서 주문·상품·결제·배송 정보를 한 테이블에 저장
해결
store_orders / store_order_items / store_shipments / store_shipment_items로 분리. FK 의존 순서대로 옮기며 기존 API 하위 호환 유지
💰
일부 상품 포인트 오적립
문제
포인트 적립 금액이 일부 상품에서만 기대값과 다르게 계산됨
원인
distribution_rate가 비어 있는 상품에서 잘못된 기본값 사용. 상품 유형별 우선순위 규칙 부재
해결
product_source최우선 판단 기준으로 정하고, 빈 값 처리 순서를 명시

AI에 맡길 것과 사람이 판단할 것을 나누기

반복 작업은 AI에 맡기고, 요구사항 정의와 예외 상황 검증은 직접 했습니다.

🤖
구현 시간 30~40% 단축, 남은 시간은 검증에
Cursor AI로 Edge Function 기본 구조, TypeScript 타입, SQL 트리거 초안 같은 반복 작업을 줄이고, 확보한 시간을 결제 예외 상황 검증, 권한 설계, 이중 처리 방지 로직에 썼습니다. AI에게 정확히 지시하려면 먼저 기능의 흐름과 예외를 정리해야 했고, 이 과정이 자연스럽게 요구사항을 정의하는 연습이 되었습니다.
⚙️
AI에 맡긴 일
  • Edge Function 기본 구조 생성 — 반복되는 Deno + Supabase 패턴 제거
  • TypeScript 타입 생성 — DB 스키마 기반 인터페이스
  • SQL 트리거 초안 — pg_net 호출 트리거 패턴
  • 테스트 시나리오 목록 — 동시 요청 등 예외 상황 목록화
직접 검증한 일
  • 요구사항 점검 — 비즈니스 로직 오류와 빠진 조건 확인
  • 타입 검사deno check로 정적 검증
  • 실행 로그 확인 — Supabase 대시보드로 결과 추적
  • 예외 시나리오 테스트 — 권한 허점, 구독 만료 경계값, 이중 차감, Cron 재실행

기술과 협업 도구

서비스가 어떻게 만들어지고 돌아가는지 이해하는 데 쓰는 도구들입니다.

자격증
AWS SAA SQLD 리눅스마스터 2급 네트워크관리사 2급
언어 · 런타임
TypeScript JavaScript Node.js Deno Java Python
데이터베이스 · 백엔드
PostgreSQL Supabase RLS pg_cron · pg_net DB Triggers Supabase Edge Functions
결제 · 연동
TossPayments JWE 결제 멱등성 설계 정산 파이프라인
협업 · 기획 도구
Notion Google Sheets Postman Swagger Git Cursor AI OpenAI API

배운 것을 글로 정리합니다

개발하며 배운 것과 문제를 해결한 과정을 기록합니다.