{"id":49820364,"url":"https://github.com/prgrms-fullcycle-devcourse/webfull_9_10_j-park_be","last_synced_at":"2026-05-13T10:06:57.410Z","repository":{"id":345459524,"uuid":"1179484684","full_name":"prgrms-fullcycle-devcourse/webfull_9_10_J-park_BE","owner":"prgrms-fullcycle-devcourse","description":"Team 제이팍 - 등불 프로젝트의 백엔드 작업 공간","archived":false,"fork":false,"pushed_at":"2026-04-13T06:26:15.000Z","size":616,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-13T07:25:26.915Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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":"CHANGELOG.md","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-12T04:24:56.000Z","updated_at":"2026-04-13T05:39:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/prgrms-fullcycle-devcourse/webfull_9_10_J-park_BE","commit_stats":null,"previous_names":["prgrms-fullcycle-devcourse/webfull_9_10_j-park_be"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/prgrms-fullcycle-devcourse/webfull_9_10_J-park_BE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_J-park_BE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_J-park_BE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_J-park_BE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_J-park_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_J-park_BE/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prgrms-fullcycle-devcourse%2Fwebfull_9_10_J-park_BE/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32977380,"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:31.447Z","updated_at":"2026-05-13T10:06:57.398Z","avatar_url":"https://github.com/prgrms-fullcycle-devcourse.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 등불(Lampfire) 백엔드\n\n\u003e 미루기 쉬운 목표를 사용자에 페이스에 맞추어 관리해주는 **등불** 서비스의 백엔드 서버입니다.\n\n---\n\n## 📌 프로젝트 소개\n\n등불은 “발등에 불 떨어지기 전에 조금씩 해내기”를 돕는 목표 관리 서비스입니다.  \n목표를 생성하고, 오늘 할 분량을 확인하고, 타이머로 실제 수행 시간을 기록할 수 있습니다.\n\n---\n\n## 🚀 주요 기능\n\n### 🔥 핵심 기능\n\n| 기능 | 설명 |\n|------|------|\n| 기본 할당량 추천 | 목표 생성 시 입력한 목표량과 기간을 기반으로 하루 할당량을 자동 계산 |\n| 사용자 맞춤 할당량 추천 | 최근 공부량과 수행 결과를 반영하여 개인화된 할당량을 동적으로 재계산 |\n| 익명 사용자 지원 | 로그인 없이도 서비스 사용 가능 |\n| 카카오 로그인 | OAuth 로그인으로 사용자 데이터 연동 지원 |\n| 캐시 최적화 | Redis 및 In-Memory 캐싱으로 조회 성능 개선 |\n\n\n### 🎯 목표 관리\n\n| 기능 | 설명 |\n|------|------|\n| 목표 생성 | 새로운 목표 생성 |\n| 목표 조회 | 전체 목표 목록 조회 |\n| 오늘 목표 조회 | 오늘 수행해야 할 목표 조회 |\n| 달성률 조회 | 오늘 목표 달성률 확인 |\n| 목표 상세 조회 | 특정 목표 상세 정보 조회 |\n| 목표 수정/삭제 | 목표 수정 및 삭제 |\n\n---\n\n### ⏱️ 타이머 기능\n\n| 기능 | 설명 |\n|------|------|\n| 타이머 시작 | 목표 기반 타이머 시작 |\n| 타이머 조회 | 실행 중 타이머 조회 |\n| 타이머 종료 | 타이머 종료 및 시간 반영 |\n| 시간 기록 | 목표별 공부 시간 누적 |\n\n---\n\n### 👤 사용자 기능\n\n| 기능 | 설명 |\n|------|------|\n| 내 정보 조회 | 사용자 정보 조회 |\n| 프로필 수정 | 닉네임, 이미지 수정 |\n| 카카오 로그인 | OAuth 기반 로그인 |\n| 로그아웃 | 세션 종료 |\n\n---\n\n### 📊 기타 기능\n\n| 기능 | 설명 |\n|------|------|\n| 카테고리 조회 | 목표 카테고리 목록 조회 |\n| 랭킹 조회 | 사용자 랭킹 조회 |\n| 위험도 조회 | 현재 위험도 분석 |\n\n---\n\n## 🛠 기술 스택\n\n| 영역 | 기술 |\n|------|------|\n| Language | TypeScript |\n| Runtime | Node.js |\n| Framework | Express |\n| Database | PostgreSQL |\n| ORM | Prisma |\n| Cache | Redis |\n| Docs | Swagger |\n| Test | Jest, Supertest |\n| Deploy | Docker, Render |\n\n---\n\n## 🗂 프로젝트 구조\n\n```bash\n.\n├── prisma/\n├── src/\n│   ├── config/\n│   ├── controllers/\n│   ├── middlewares/\n│   ├── routes/\n│   ├── services/\n│   ├── types/\n│   └── main.ts\n├── tests/\n````\n\n---\n\n## ⚙️ 실행 방법\n\n### 1. 패키지 설치\n\n```bash\nnpm install\n```\n\n### 2. 환경 변수 설정\n\n| 변수명             | 설명                     |\n| --------------- | ---------------------- |\n| NODE_ENV        | 실행 환경 설정 (개발/운영)       |\n| PORT            | 서버 실행 포트               |\n| REDIS_URL       | Redis 서버 연결 주소         |\n| REDIS_MONITOR   | Redis 요청 로그 출력 여부      |\n| JWT_SECRET      | JWT 토큰 서명 키            |\n| ALLOWED_ORIGINS | 허용된 CORS 도메인           |\n| URL             | 백엔드 서버 기본 URL          |\n| AWS_REGION      | AWS 서비스 리전             |\n| S3_BUCKET_NAME  | S3 버킷 이름               |\n| S3_DOMAIN       | S3 파일 접근 도메인           |\n| CDN_DOMAIN      | CDN 접근 도메인             |\n| DATABASE_URL    | 데이터베이스 연결 문자열          |\n| DIRECT_URL      | DB 직접 연결 URL (마이그레이션용) |\n\n\n---\n\n### 3. DB 실행\n\n```bash\ndocker compose up -d\n```\n\n### 4. Prisma 설정\n\n```bash\nnpm run db:generate\nnpm run db:migrate\n```\n\n### 5. 서버 실행\n\n```bash\nnpm run dev\n```\n\n| 서비스     | 주소                                                               |\n| ------- | ---------------------------------------------------------------- |\n| API     | [http://localhost:3000](http://localhost:3000)                   |\n| Swagger | [http://localhost:3000/api-docs](http://localhost:3000/api-docs) |\n\n---\n\n## 📦 스크립트\n\n| 명령어              | 설명           |\n| ---------------- | ------------ |\n| npm run dev      | 개발 서버 실행     |\n| npm run build    | 빌드           |\n| npm run start    | 실행           |\n| npm run lint     | ESLint 검사    |\n| npm run lint:fix | ESLint 자동 수정 |\n| npm run format   | 코드 포맷        |\n| npm run test     | 테스트 실행       |\n\n### DB 관련\n\n| 명령어         | 설명               |\n| ----------- | ---------------- |\n| db:generate | Prisma Client 생성 |\n| db:migrate  | 마이그레이션           |\n| db:studio   | DB GUI           |\n| db:reset    | DB 초기화           |\n| db:seed     | 시드 데이터           |\n\n---\n\n## 📡 API\n\n### 🎯 Goal API\n\n| Method | Endpoint              | 설명    |\n| ------ | --------------------- | ----- |\n| POST   | /goals                | 목표 생성 |\n| GET    | /goals                | 목표 조회 |\n| GET    | /goals/today          | 오늘 목표 |\n| GET    | /goals/today/complete | 달성률   |\n| GET    | /goals/:goalId/detail | 상세 조회 |\n| PATCH  | /goals/:goalId        | 수정    |\n| DELETE | /goals/:goalId        | 삭제    |\n\n---\n\n### ⏱️ Timer API\n\n| Method | Endpoint      | 설명          |\n| ------ | ------------- | ----------- |\n| GET    | /timers       | 실행 중 타이머 조회 |\n| POST   | /timers/start | 타이머 시작      |\n| POST   | /timers/end   | 타이머 종료      |\n\n---\n\n### 👤 User API\n\n| Method | Endpoint            | 설명     |\n| ------ | ------------------- | ------ |\n| GET    | /users/me           | 내 정보   |\n| PATCH  | /users/profile      | 프로필 수정 |\n| GET    | /users/kakao/start  | 로그인 시작 |\n| GET    | /users/kakao/finish | 로그인 완료 |\n| POST   | /users/logout       | 로그아웃   |\n\n---\n\n### 📊 기타 API\n\n| Method | Endpoint    | 설명   |\n| ------ | ----------- | ---- |\n| GET    | /categories | 카테고리 |\n| GET    | /rankings   | 랭킹   |\n| GET    | /risks      | 위험도  |\n\n---\n\n## 🔐 인증 방식\n\n* JWT 기반 인증\n* httpOnly 쿠키 사용\n* 카카오 OAuth 로그인 지원\n\n---\n\n## ⚡ 캐시 전략\n\n* Redis 사용\n* 연결 실패 시에도 서버 정상 동작 (Fail-safe 구조)\n\n---\n\n## 🚀 배포\n\n| 항목   | 내용         |\n| ---- | ---------- |\n| 환경   | Render     |\n| 컨테이너 | Docker     |\n| 버전   | v1.1.0     |\n| 배포일  | 2026-04-19 |\n\n---\n\n## 📄 변경 이력\n\n- version: v1.1.0\n- deployedAt: 2026-04-19\n- 변경 사항: [CHANGELOG.md](CHANGELOG.md#%EF%B8%8F-v110---2026-04-19) 참고\n\n---\n\n## 🧪 테스트\n\n* Jest + Supertest 기반\n* 주요 API 통합 및 성능 테스트 포함\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_j-park_be","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_j-park_be","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprgrms-fullcycle-devcourse%2Fwebfull_9_10_j-park_be/lists"}