{"id":49820378,"url":"https://github.com/prgrms-fullcycle-devcourse/webfull_9_10_tomado_be","last_synced_at":"2026-05-13T10:06:59.021Z","repository":{"id":345456590,"uuid":"1180546138","full_name":"prgrms-fullcycle-devcourse/webfull_9_10_Tomado_BE","owner":"prgrms-fullcycle-devcourse","description":"프로그래머스 웹 풀스택 9기 10회차 토마두 BE","archived":false,"fork":false,"pushed_at":"2026-04-13T05:01:26.000Z","size":232,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-04-13T07:05:34.248Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prgrms-fullcycle-devcourse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-13T06:34:51.000Z","updated_at":"2026-04-13T05:01:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/prgrms-fullcycle-devcourse/webfull_9_10_Tomado_BE","commit_stats":null,"previous_names":["prgrms-fullcycle-devcourse/webfull_9_10_tomado_be"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/prgrms-fullcycle-devcourse/webfull_9_10_Tomado_BE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Tomado_BE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Tomado_BE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Tomado_BE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Tomado_BE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prgrms-fullcycle-devcourse","download_url":"https://codeload.github.com/prgrms-fullcycle-devcourse/webfull_9_10_Tomado_BE/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Tomado_BE/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32977384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T06:31:55.726Z","status":"ssl_error","status_checked_at":"2026-05-13T06:31:51.336Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-13T10:06:34.514Z","updated_at":"2026-05-13T10:06:59.006Z","avatar_url":"https://github.com/prgrms-fullcycle-devcourse.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Tomado-BE (Backend) — 개발환경 템플릿 (TypeScript + Express)\n\n이 레포는 **백엔드 팀 공통 개발환경(코드 구조/실행 명령/환경변수/문서화/코드 품질 규칙)** 을 빠르게 맞추기 위한 템플릿입니다.\n\n- **Language**: TypeScript\n- **Framework**: Express\n- **Database**: Supabase (PostgreSQL)\n- **ORM**: Prisma\n- **API Docs**: Swagger\n- **Code Quality**: ESLint, Prettier\n\n- **API 명세(초안)**: [Notion 문서](https://www.notion.so/API-321296d38a608020a3f2e3730ac04fda?source=copy_link)\n\n---\n\n## 빠른 시작\n\n### 요구사항\n\n- Node.js 20+\n- npm\n\n### 0) 의존성 설치\n\n```bash\nnpm install\n```\n\n### 1) 환경변수 준비\n\n```bash\ncp env/example.env env/local.env\n```\n\n필요 시 `env/local.env` 값을 수정하세요.\n\n- **Supabase 사용 시**: `DATABASE_URL`에 Supabase Postgres 연결 문자열을 넣습니다.\n\n---\n\n## 서버 실행\n\n```bash\nnpm run dev\n```\n\n- Health check: `GET /health`\n- Swagger UI: `GET /docs`\n\n---\n\n## Prisma\n\n```bash\nnpm run generate\n```\n\n## 폴더/파일 컨벤션\n\n- `src/`: Express 서버 코드\n  - `src/index.ts`: 서버 엔트리 포인트(실행 시작점)\n  - `src/app.ts`: Express 앱 생성(미들웨어/라우터 등록)\n  - `src/env.ts`: 환경변수 로딩/검증(zod)\n  - `src/routes/`: 라우팅(엔드포인트) 정의\n  - `src/controllers/`: 요청/응답 처리(컨트롤러)\n  - `src/services/`: 비즈니스 로직\n  - `src/repositories/`: DB 접근(Repository) 및 영속성 계층\n- `prisma/`: Prisma 스키마\n  - `prisma/schema.prisma`: DB 모델 정의(변경 시 `npx prisma generate` 권장)\n- `docs/`: 문서\n  - `docs/api/README.md`: API 명세 운영(초안/동기화 전략) 가이드\n- `env/`: 환경변수 템플릿\n  - `env/example.env`: 팀 공통 기본값 템플릿\n  - `env/local.env`: 개인 로컬 설정(커밋 금지)\n\n---\n\n## 문서(Documentation) 운영 가이드\n\n### Swagger(OpenAPI) 문서\n\n- **접속**: `GET /docs`\n- **역할**: REST API를 **자동 문서화**하고, 개발 중에 **요청/응답을 빠르게 확인**하는 용도입니다.\n- **관리 위치**: 현재는 `src/docs/swagger.ts`에서 기본 스펙을 생성하고, 향후에는\n  - 코드 주석 기반(JSDoc)으로 스펙을 확장하거나,\n  - `docs/api/openapi.yaml`을 소스 오브 트루스로 두고 서버에서 서빙하는 방식으로 전환할 수 있습니다.\n\n### API 명세(팀 합의 문서)\n\n- 현재 초안은 Notion에서 관리합니다: [Notion 문서](https://www.notion.so/API-321296d38a608020a3f2e3730ac04fda?source=copy_link)\n- 권장: Notion(논의/결정 기록) + OpenAPI 파일(코드/테스트/모킹용 “실행 가능한 스펙”)의 역할을 분리하고, 최종적으로는 OpenAPI 파일을 레포에 커밋해 **프론트/백이 같은 스펙을 바라보게** 합니다.\n\n### 환경변수 문서\n\n- `env/example.env`는 **팀 공통 템플릿**이고, `env/local.env`는 **개인 로컬 값**입니다.\n- 필수 키:\n  - `DATABASE_URL`: Supabase(Postgres) 또는 로컬 Postgres 연결 문자열\n  - `PORT`: 서버 포트\n\n### 코드 품질(ESLint/Prettier) \u0026 커밋 훅\n\n- `npm run lint`: 코드 규칙 검사(잠재 버그/안티패턴 방지)\n- `npm run format`: 포맷 자동 정리(팀 스타일 통일)\n- Husky + lint-staged:\n  - 커밋 시 변경된 파일만 Prettier 포맷을 자동 적용합니다.\n\n---\n\n## 다음 단계(팀 합의 후 확장)\n\n- 인증(JWT), 에러 핸들링, 로깅(pino) 표준 미들웨어 추가\n- 테스트(Jest/Vitest) 및 CI 구성\n- OpenAPI 파일(`docs/api/openapi.yaml`)을 기준으로 스펙/코드 동기화 규칙 확정\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_tomado_be","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_tomado_be","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_tomado_be/lists"}