주가 데이터 수집 및 제공을 위한 Nest.js 기반 백엔드 프로젝트입니다. 현재는 Twelve Data API를 통해 주식 종목 데이터를 수집하고 PostgreSQL에 저장합니다. Next.js 프론트엔드와 연동되어 실시간 주식 차트를 제공합니다.
- Language: TypeScript (ES2022+)
- Framework: Nest.js
- Database: PostgreSQL (Neon.tech)
- ORM: TypeORM
- Scheduler:
@nestjs/schedule - Config:
@nestjs/config+.env - HTTP Client:
@nestjs/axios - API Docs: Swagger (
@nestjs/swagger) - Hosting: AWS App Runner
- App Runner 기반 빌드 배포이기에 git에 dist/를 푸시하는 중
wetopia-backend
├── src/
│ ├── app.module.ts # 루트 모듈
│ ├── main.ts # 앱 진입점
│ ├── config/ # 환경변수 설정 모듈
│ │ └── config.module.ts
│ ├── stocks/ # 주가 관련 도메인
│ │ ├── cron/ # 스케줄링
│ │ ├── dto/ # 요청 및 응답 DTO
│ │ ├── entities/ # TypeORM 엔티티
│ │ ├── stocks.module.ts
│ │ ├── stocks.service.ts
│ │ ├── stocks.repository.ts
│ │ ├── stocks.controller.ts
│ ├── external # 외부 API 연동 (TwelveData)
│ │ └── twelve-data.service.ts
│ ├── common/ # 공용 유틸, 필터, 예외 등
│ │ ├── logger/
│ │ ├── utils/
│ │ ├── interceptors
├── test # 테스트 코드
├── .env # 환경 변수 파일
├── tsconfig.json
├── package.jsongit clone https://github.com/yourname/wetopia-backend.git
cd wetopia-backend
yarn installDATABASE_URL="postgres://..."
TWELVE_DATA_API_KEY="your_api_key"yarn start:dev서버는 기본적으로 http://localhost:3000 에서 실행됩니다.
특정 종목의 기간별 주가 히스토리 조회
{
"symbol": "AAPL",
"interval": "1day",
"range": "1y"
}{
"status": "success",
"data": [
{
"symbol": "AAPL",
"date": "2024-05-01",
"open": 182.34,
"close": 185.76,
"high": 187.12,
"low": 181.9,
"volume": 123456789
}
]
}- Domain Driven Structure: 모듈별 디렉토리 구성 (Controller, Service, DTO, Entity)
- 환경 설정 분리:
@nestjs/config기반 설정 관리 - 모듈화된 외부 API 연동:
external디렉토리 기반 API 분리 - 범용 유틸리티 제공: 날짜 변환 등 유틸 모듈화
- 타입 안정성 및 검증:
class-validator, DTO 기반 구조화
DATABASE_URL=postgres://...
TWELVE_DATA_API_KEY=your-api-keyAWS App Runner에 배포 시 해당 변수를 환경 변수 설정에 입력해주세요.
- 런타임: Node.js 20
- 소스 디렉토리:
/ - 빌드 명령어:
yarn install && yarn build - 시작 명령어:
node dist/main.js
- 포트: 3000 -> 4000 변경
- 환경 변수 등록 필수
feat: 신규 API 구현fix: 외부 API 오류 수정
- Maintainer: @0biglife
- 피드백을 포함한 PR & Issue, 모두 언제든지 환영합니다
☺️