{"id":40234645,"url":"https://github.com/lemoncloud-io/capstone25-t7-aim","last_synced_at":"2026-01-19T23:04:56.722Z","repository":{"id":317128584,"uuid":"1063748188","full_name":"lemoncloud-io/capstone25-t7-aim","owner":"lemoncloud-io","description":"capstone-t7-aim","archived":false,"fork":false,"pushed_at":"2025-11-12T19:36:33.000Z","size":397,"stargazers_count":1,"open_issues_count":7,"forks_count":1,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-11-12T21:15:17.672Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lemoncloud-io.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":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":"2025-09-25T04:18:11.000Z","updated_at":"2025-11-12T16:28:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"a013d4e5-ea2f-41c4-85f8-da82564d6f25","html_url":"https://github.com/lemoncloud-io/capstone25-t7-aim","commit_stats":null,"previous_names":["lemoncloud-io/capstone25-t7-aim"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/lemoncloud-io/capstone25-t7-aim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemoncloud-io%2Fcapstone25-t7-aim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemoncloud-io%2Fcapstone25-t7-aim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemoncloud-io%2Fcapstone25-t7-aim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemoncloud-io%2Fcapstone25-t7-aim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lemoncloud-io","download_url":"https://codeload.github.com/lemoncloud-io/capstone25-t7-aim/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lemoncloud-io%2Fcapstone25-t7-aim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28588971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-19T20:45:59.482Z","status":"ssl_error","status_checked_at":"2026-01-19T20:45:41.500Z","response_time":67,"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-01-19T23:04:55.978Z","updated_at":"2026-01-19T23:04:56.713Z","avatar_url":"https://github.com/lemoncloud-io.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# capstone25-t7-aim\n\n## Prerequisite\n\n시작하기 전에 다음이 설치되어 있는지 확인하세요:\n\n- **Node.js** \u003e= 22.x ([다운로드](https://nodejs.org/))\n- **npm** \u003e= 10.x\n- **Git** ([다운로드](https://git-scm.com/))\n\n추가로 `nvm` 를 설치해주면 편리함. (search by google)\n\n## Getting Started\n\n1. **저장소 클론**\n\n    ```bash\n    git clone git@github.com:lemoncloud-io/capstone25-t7-aim.git\n    cd capstone25-t7-aim\n    ```\n\n2. **의존성 설치**\n\n    ```bash\n    node --version       # v22.15.1\n    npm ci\n    ```\n\n3. **Docker 시작**\n\n    MongoDB와 LocalStack 등의 필요한 서비스를 Docker로 실행:\n\n    ```bash\n    docker-compose up -d\n    ```\n\n    서비스 중지:\n\n    ```bash\n    docker-compose down\n    ```\n\n4. **환경 변수 설정**\n\n    각 애플리케이션에 `.env` 파일을 생성해야 합니다:\n\n    **Backend 환경 변수:**\n\n    ```bash\n    cp apps/backend/.env.example apps/backend/.env\n    ```\n\n    **Frontend 환경 변수:**\n\n    ```bash\n    cp apps/frontend/.env.example apps/frontend/.env\n    ```\n\n    필요에 따라 생성된 `.env` 파일의 값을 수정하세요.\n\n5. **개발 서버 시작**\n\n    ```bash\n    npm start\n    ```\n\n    - 프론트엔드: http://localhost:5173\n    - 백엔드 API: http://localhost:4000\n\n    **또는 개별 시작:**\n\n    ```bash\n    # 프론트엔드만\n    npm run frontend\n\n    # 백엔드만\n    npm run backend\n    ```\n\n6. **프로덕션 빌드 및 실행**\n\n    프로덕션 환경에서 실행하려면 먼저 빌드를 수행해야 합니다:\n\n    ```bash\n    # 전체 빌드\n    npm run build\n    ```\n\n    **또는 개별 빌드:**\n\n    ```bash\n    # 백엔드 빌드\n    npm run build:backend\n\n    # 프론트엔드 빌드\n    npm run build:frontend\n    ```\n\n    **프로덕션 모드 시작:**\n\n    ```bash\n    # 프로덕션 빌드 후 시작 (빌드 + 시작)\n    npm run start:prod\n\n    # 또는 개별 시작\n    npm run start:prod:backend  # 백엔드 프로덕션\n    npm run start:prod:frontend # 프론트엔드 프리뷰\n    ```\n\n## 프로젝트 구조\n\n```\ncapstone25-t7-aim/\n├── apps/\n│   ├── frontend/               # React + Vite 애플리케이션\n│   │   ├── public/\n│   │   │   └── aim_logo.svg    # 브랜드 자산\n│   │   ├── src/\n│   │   │   ├── apis/           # API 호출 모듈 (통합)\n│   │   │   ├── components/     # 재사용 가능한 UI 컴포넌트\n│   │   │   ├── pages/          # 페이지 컴포넌트\n│   │   │   ├── utils/          # 프론트 전용 유틸\n│   │   │   ├── App.tsx\n│   │   │   ├── main.tsx\n│   │   │   ├── index.css\n│   │   │   └── vite-env.d.ts\n│   │   ├── package.json\n│   │   ├── vite.config.ts\n│   │   ├── tsconfig.json\n│   │   ├── tsconfig.build.json\n│   │   ├── tailwind.config.js\n│   │   ├── postcss.config.js\n│   │   └── jest.config.ts\n│   │\n│   └── backend/                # Express API 서버\n│       ├── src/\n│       │   ├── apis/           # API 라우트 (정리/통합)\n│       │   ├── models/         # Mongoose 모델\n│       │   ├── services/       # 비즈니스 로직/작업자\n│       │   ├── repositories/   # 데이터 접근 계층\n│       │   ├── lib/            # 공용 라이브러리 (예: S3 client 등)\n│       │   ├── utils/          # 백엔드 유틸\n│       │   ├── app.ts          # Express 앱 설정\n│       │   └── server.ts       # 서버 진입점\n│       ├── package.json\n│       ├── tsconfig.json\n│       ├── jest.config.ts\n│       ├── nodemon.json\n│       └── .env.example\n│\n├── packages/\n│   └── shared/            # 공유 타입과 유틸리티\n│       ├── src/\n│       │   ├── index.ts   # 메인 익스포트\n│       │   ├── types.ts   # 공유 TypeScript 타입\n│       │   └── utils.ts   # 공유 유틸리티 함수\n│       ├── package.json\n│       ├── tsconfig.json\n│       └── jest.config.json\n│\n├── apps/\n│   └── aim-hello-api/          # AIM 분석 API (Gemini 연계)\n│       ├── data/               # 프롬프트 자산 (json/yml)\n│       │   ├── system-prompt.json\n│       │   ├── system-prompt.yml\n│       │   ├── user-prompt.yml\n│       │   └── user-prompt-00.yml\n│       ├── src/\n│       │   ├── api/\n│       │   ├── service/\n│       │   │   ├── gemini-service.ts\n│       │   │   └── types.ts\n│       │   ├── utils.ts\n│       │   ├── engine.ts\n│       │   ├── express.ts\n│       │   └── index.ts\n│       ├── handler.js\n│       ├── jest.config.json\n│       ├── package.json\n│       ├── tsconfig.json\n│       └── env/\n│\n├── sample/                # 샘플 파일들\n├── tmp/                   # 임시 파일들\n├── volume/                # Docker 볼륨\n│   ├── cache/\n│   ├── lib/\n│   └── logs/\n│\n├── docker-compose.yml     # Docker Compose 설정\n├── package.json           # 루트 워크스페이스 설정\n├── LICENSE\n├── README.md\n└── GEMINI.md              # Gemini 관련 문서\n```\n\n### 주요 디렉토리 설명\n\n- `apps/frontend` — Vite 기반 React 앱\n    - `src/apis` 프론트 API 호출 모듈 통합\n    - `src/components`, `src/pages`, `src/utils`\n    - `public/aim_logo.svg` 브랜드 자산\n\n- `apps/backend` — Express REST API\n    - `src/apis` 라우트, `src/services` 비즈니스 로직, `src/models` 데이터 모델\n    - `src/repositories`, `src/lib`, `src/utils` 로 관심사 분리\n\n- `apps/aim-hello-api` — AIM 분석 API (Gemini)\n    - `data/` 프롬프트 자산: system/user prompt (json/yml)\n    - `src/service/gemini-service.ts` Gemini 연계 서비스\n    - ENV로 프롬프트 디렉터리/프로필 선택 가능(아래 참고)\n\n- `packages/shared` — 공통 타입/유틸\n\n- `volume/` — Docker 영구 저장소 (LocalStack/MongoDB 등)\n\n## 💻 개발\n\n### 개발 모드 시작하기\n\n**프론트엔드와 백엔드 모두 시작:**\n\n```bash\nnpm start\n```\n\n**개별 시작:**\n\n```bash\n# 프론트엔드만\nnpm run frontend\n\n# 백엔드만\nnpm run backend\n```\n\n### 공유 코드 사용하기\n\n앱에서 공유 타입과 유틸리티 임포트:\n\n```typescript\nimport { ApiResponse } from '@shared/types';\nimport { createAsyncDelay } from '@shared/utils';\n```\n\n## 빌드\n\n### 프로덕션 빌드\n\n**모든 워크스페이스 빌드:**\n\n```bash\nnpm run build\n```\n\n**개별 빌드:**\n\n```bash\n# 백엔드 빌드\nnpm run build:backend\n\n# 프론트엔드 빌드\nnpm run build:frontend\n```\n\n### 빌드 결과물\n\n- **프론트엔드**: `apps/frontend/dist/` - 배포 준비된 정적 파일\n- **백엔드**: `apps/backend/dist/` - 컴파일된 JavaScript 파일\n\n### 프로덕션 빌드 실행\n\n**프로덕션 서버 시작:**\n\n```bash\nnpm run start:prod\n```\n\n**또는 개별 실행:**\n\n```bash\n# 백엔드 프로덕션\nnpm run start:prod:backend\n\n# 프론트엔드 프리뷰\nnpm run start:prod:frontend\n```\n\n### 빌드 [aim-hello-api]\n\n`aim-hello-api` 기준 모노레포 구성 설정\n\n1. 모듈(필수) 설치: `npm i --save lemon-core -w aim-hello-api`\n1. 모듈(개발) 설치: `npm i --save-dev lemon-devkit -w aim-hello-api ttypescript@1.5.15 nodemon@2.0.20 typescript@4.7.4 ts-transformer-keys@0.4.3 ts-node@8.1.0 @types/node@17.0.42 @types/supertest@2.0.10 jest@27.5.1 ts-jest@27.1.5 ts-node@8.1.0 superagent@5.3.1 supertest@4.0.2 tsconfig-paths@4.1.2`\n1. 모듈 빌드: `npm run build -w aim-hello-api`\n1. 모듈 실행(로컬): `npm run start -w aim-hello-api`\n\n- API 로컬 실행후 `http :8000` 호출시 아래와 같은 결과 얻음 (httpie 도구 설치 필요)\n\n```sh\n❯ http :8000/\nHTTP/1.1 200 OK\nAccess-Control-Allow-Origin: *\nConnection: keep-alive\nContent-Length: 123\nContent-Type: text/html; charset=utf-8\n\naim-hello-api/0.25.1010\nlemon-core/^4.0.7\nmodified/2025-10-10 15:30:36\nenv/ENV= NAME=none STAGE=local\nenv/REPORT_ERROR_ARN=\n```\n\n### 프롬프트 자산 및 ENV (aim-hello-api)\n\n- 기본 디렉터리: `apps/aim-hello-api/data`\n- 주요 파일: `system-prompt.json|yml`, `user-prompt.yml`, `user-prompt-00.yml`\n- 권장 환경 변수:\n    - `PROMPT_DIR=apps/aim-hello-api/data`\n    - `USER_PROMPT_PROFILE=user-prompt.yml` (예: `user-prompt-00.yml`로 변경 가능)\n    - `GEMINI_API_KEY=\u003cyour-key\u003e`\n\n서비스는 json/yml를 자동 인식하도록 구성(로더 적용 PR 기준)되며, 포맷/프로필을 ENV로 전환할 수 있습니다.\n\n## 테스트\n\n### 테스트 실행\n\n```bash\nnpm run test:backend\nnpm run test:frontend\n```\n\n## 코드 품질\n\n### Linting\n\n**모든 워크스페이스 린팅:**\n\n```bash\nnpm run lint\n```\n\n**자동 수정:**\n\n```bash\nnpm run lint:fix\n```\n\n### 포매팅\n\n**코드 포맷팅:**\n\n```bash\nnpm run format\n```\n\n**포맷 검사:**\n\n```bash\nnpm run format:check\n```\n\n### 설정 파일\n\n- **ESLint**: `.eslintrc.json` - TypeScript, Prettier 통합\n- **Prettier**: `.prettierrc` - 일관된 코드 스타일\n\n## 기술 스택\n\n### 프론트엔드\n\n- **React 18** - UI 라이브러리\n- **TypeScript** - 타입 안정성\n- **Vite** - 빠른 빌드 도구 및 개발 서버\n- **TailwindCSS** - 유틸리티 우선 CSS 프레임워크\n- **Jest** - 테스팅 프레임워크\n\n### 백엔드\n\n- **Express.js** - 웹 프레임워크\n- **TypeScript** - 타입 안정성\n- **Node.js** - 런타임 환경\n- **Jest** - 테스팅 프레임워크\n- **Nodemon** - 개발 자동 재시작\n\n### 공유\n\n- **TypeScript** - 공유 타입 및 인터페이스\n- **공통 유틸리티** - 재사용 가능한 함수\n\n### 개발 도구\n\n- **npm workspaces** - 모노레포 관리\n- **ESLint** - 코드 린팅\n- **Prettier** - 코드 포매팅\n- **ts-node** - TypeScript 실행\n- **concurrently** - 여러 명령어 동시 실행\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flemoncloud-io%2Fcapstone25-t7-aim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flemoncloud-io%2Fcapstone25-t7-aim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flemoncloud-io%2Fcapstone25-t7-aim/lists"}