{"id":49820417,"url":"https://github.com/prgrms-fullcycle-devcourse/webfull_9_10_sabujak_fe","last_synced_at":"2026-05-13T10:07:12.372Z","repository":{"id":344048214,"uuid":"1180014699","full_name":"prgrms-fullcycle-devcourse/webfull_9_10_Sabujak_FE","owner":"prgrms-fullcycle-devcourse","description":"프로그래머스 웹 풀스택 9기 10회차 사부작 FE","archived":false,"fork":false,"pushed_at":"2026-04-13T07:13:45.000Z","size":17036,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-13T07:20:25.958Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://webfull-9-10-sabujak-fe.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","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":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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-12T16:00:42.000Z","updated_at":"2026-04-13T07:13:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/prgrms-fullcycle-devcourse/webfull_9_10_Sabujak_FE","commit_stats":null,"previous_names":["prgrms-fullcycle-devcourse/webfull_9_10_sabujak_fe"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/prgrms-fullcycle-devcourse/webfull_9_10_Sabujak_FE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Sabujak_FE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Sabujak_FE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Sabujak_FE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Sabujak_FE/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_Sabujak_FE/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_Sabujak_FE/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32977393,"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:43.765Z","updated_at":"2026-05-13T10:07:12.359Z","avatar_url":"https://github.com/prgrms-fullcycle-devcourse.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n---\n\n# 사부작(Sabujak)\n\n\u003e 너 몰래 사부작사부작, 특별한 날 한 번에 열리는 비밀 롤링페이퍼\n\n## 🔗 링크 (Links)\n- **배포 주소**: https://webfull-9-10-sabujak-fe.vercel.app\n\n---\n\n## 🛠 기술 스택 (Tech Stack)\n\n### **Frontend**\n\n| 영역              | 기술 |\n|------------------|------|\n| Build            | Vite |\n| UI               | React |\n| Language         | TypeScript |\n| Package Manager  | pnpm |\n| Styling          | Tailwind CSS |\n| State (Client)   | Zustand |\n| State (Server)   | TanStack Query |\n| HTTP             | Axios |\n| Validation       | Zod |\n| Deployment       | Vercel |\n\n### **Backend**\n\n| 영역              | 기술 |\n|------------------|------|\n| Language         | TypeScript |\n| Package Manager  | pnpm |\n| Server           | Express |\n| Deployment       | Render |\n| Container        | Docker |\n| Testing          | Jest |\n| Database         | Neon PostgreSQL |\n| ORM              | Drizzle ORM |\n| API Spec         | OpenAPI |\n| Monitoring       | Sentry |\n| Logging          | Pino |\n\n### **DevOps / QA**\n\n| 영역              | 기술 |\n|------------------|------|\n| CI               | GitHub Actions |\n| CD               | Render |\n| Monitoring       | Sentry |\n| Git Hooks        | Husky, lint-staged |\n| Testing          | Jest |\n| Logging          | Pino |\n\n---\n\n## 📂 폴더 구조 (Folder Structure)\n\n```text\nsrc/\n ├── assets/        # 이미지, 폰트, 아이콘 등 정적 파일\n ├── features/      # 도메인 단위 기능\n ├── pages/         # 라우팅되는 페이지 컴포넌트\n ├── shared/        # 전역에서 공통으로 사용하는 것들\n │   ├── api/           # API 요청 함수\n │   ├── components/    # 공통 컴포넌트\n │   │   ├── layout/    # 레이아웃\n │   │   └── ui/        # 버튼, 인풋 등 기본 UI\n │   ├── hooks/         # 공통 커스텀 훅\n │   ├── query/         # TanStack Query 관련 설정\n │   ├── store/         # 전역 상태 관리\n │   ├── types/         # 공통 타입 정의\n │   └── utils/         # 유틸 함수\n ├── styles/        # 전역 스타일 (css, tailwind 설정 등)\n └── App.tsx        # 최상위 컴포넌트\n```\n\n---\n\n## 📝 커밋 컨벤션 (Commit Convention)\n\n저희 프로젝트는 원활한 협업을 위해 다음과 같은 커밋 메시지 규칙을 따릅니다.\n\n| 태그 | 설명 |\n| --- | --- |\n| **Feat** | 기능 추가 |\n| **Fix** | 버그 수정 |\n| **Docs** | 문서 수정 (README, TIL 등) |\n| **Style** | 코드 포맷팅, 세미콜론 누락 등 (코드 로직 변경 없음) |\n| **Refactor** | 코드 리팩토링 (기능 변경 없이 구조 개선) |\n| **Test** | 테스트 코드 추가 혹은 수정 |\n| **Deploy** | 배포 관련 작업 |\n| **Chore** | 빌드 업무 수정, 패키지 매니저 설정 등 (프로덕션 코드 변경 없음) |\n| **Merge** | 브랜치를 합치다가 난 충돌을 해결했을 때 수정 |\n\n---\n\n## 🚀 로컬 실행 방법 (Getting Started)\n\n프로젝트를 로컬 환경에서 실행하고 테스트하는 방법입니다.\n\n### 1. 레포지토리 클론 및 폴더 이동\n```bash\ngit clone https://github.com/prgrms-fullcycle-devcourse/webfull_9_10_Sabujak_FE\n\ncd webfull_9_10_Sabujak_FE\n```\n\n### 2. 패키지 설치\n```bash\npnpm install\n```\n\n### 3. 환경 변수 설정\n프로젝트 최상위 경로에 `.env` 파일을 생성하고 `.env.example`을 참고하여 환경 변수를 채워주세요.\n\n### 4. 프로젝트 실행\n```bash\npnpm dev        # 개발 모드 실행\n\npnpm start      # 프로덕션 실행\n```\n\n---\n\n## 🧑‍💻 팀원 소개 (Team)\n\n| 프로필 | 이름 | 역할 | GitHub |\n|--------|------|------|--------|\n| \u003cimg src=\"https://github.com/labyrinth30.png\" width=\"50\" /\u003e | 이윤하 | Backend | [@labyrinth30](https://github.com/labyrinth30) |\n| \u003cimg src=\"https://github.com/insu1170.png\" width=\"50\" /\u003e | 김인수 | Backend | [@insu1170](https://github.com/insu1170) |\n| \u003cimg src=\"https://github.com/s576air.png\" width=\"50\" /\u003e | 한재민 | Frontend | [@s576air](http://github.com/s576air) |\n| \u003cimg src=\"https://github.com/supersoldier132.png\" width=\"50\" /\u003e | 송창욱 | Frontend | [@supersoldier132](https://github.com/supersoldier132) |\n| \u003cimg src=\"https://github.com/yomiyoni.png\" width=\"50\" /\u003e | 이연희 | Frontend | [@yomiyoni](https://github.com/yomiyoni) |\n\n---\n\n## 문서\n\n- [Orval 가이드](./docs/orval-usage.md): 배포된 OpenAPI URL 기준으로 API client와 TanStack Query 훅을 생성하는 방법\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_sabujak_fe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_sabujak_fe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_sabujak_fe/lists"}