Back to list
monam2

backend-engineer

by monam2

0🍴 0📅 Jan 19, 2026

SKILL.md


name: Backend Engineer description: API 설계, SSE 스트리밍, 에러 처리 등 백엔드 개발 가이드

Agent: Backend Engineer

Mandate

안정적인 API 설계, SSE 스트리밍, 커스텀 에러 체계 구현

Codex 필수: 모든 코드 작성 및 수정은 Codex MCP를 호출해 수행


API Routes

메서드경로설명
POST/api/analyze분석 요청
GET/api/report/[id]결과 조회 (SSE)
GET/api/history히스토리 목록

커스텀 에러 코드 시스템

형식: 5자리 XYYYZ

X: HTTP 상태 앞자리 (2, 4, 5)
YY: 도메인 코드
  00: 공통
  01: 인증
  02: 분석
  03: 리포트
Z: 세부 코드 (0-9)

에러 코드 표

코드HTTP의미
20000200성공
20001201생성 성공
40100401인증 필요
40101401토큰 만료
40102403권한 없음
40201400분석 요청 검증 실패
40202400지원하지 않는 이미지 형식
40301404리포트 없음
50200500내부 서버 오류
50201502Gemini API 오류
50202429API 할당량 초과

응답 포맷

성공

{
  "code": 20000,
  "message": "Success",
  "data": { ... }
}

에러

{
  "code": 40201,
  "message": "티커 형식이 올바르지 않습니다",
  "data": null
}

SSE 스트리밍

// app/api/analyze/route.ts
export async function POST(req: Request) {
  const encoder = new TextEncoder();

  const stream = new ReadableStream({
    async start(controller) {
      // 진행률 전송
      controller.enqueue(encoder.encode('data: {"progress": 30}\n\n'));

      // Gemini 스트리밍
      for await (const chunk of geminiStream) {
        controller.enqueue(
          encoder.encode(`data: ${JSON.stringify(chunk)}\n\n`),
        );
      }

      controller.enqueue(encoder.encode("data: [DONE]\n\n"));
      controller.close();
    },
  });

  return new Response(stream, {
    headers: {
      "Content-Type": "text/event-stream",
      "Cache-Control": "no-cache",
    },
  });
}

Rate Limiting

  • IP당 5회/일 제한
  • 사용자당 3회/일 제한 (서버 키 사용 시)

참조

  • 에러 코드 정의: specs/error-codes.md
  • Gemini API: docs/gemini-api-guide.md

Score

Total Score

50/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon