이 프로젝트는 인제대학교 캡스톤 디자인 프로젝트인 Traguild의 백엔드 서버입니다. Node.js (Express)를 기반으로 구축되었으며, 여행 가이드 및 매칭 서비스를 위한 REST API를 제공합니다.
- Node.js: 자바스크립트 런타임 환경
- Express.js: 웹 애플리케이션 프레임워크
- MySQL (v8.0): 관계형 데이터베이스 관리 시스템 (RDBMS)
- Sequelize: MySQL ORM (Object-Relational Mapping)
- Elasticsearch (v7.13.4): 검색 엔진 및 분석
- Docker & Docker Compose: 컨테이너 기반 배포 및 관리 환경
- Nginx: 리버스 프록시 및 웹 서버
- Swagger: API 문서화 도구
- Socket.io: 실시간 통신
- Bcrypt: 비밀번호 해싱
- Twilio: SMS 발송 서비스
- Winston: 로깅 처리
프로젝트를 로컬 환경 또는 서버에 배포하기 위한 방법입니다.
프로젝트 루트 디렉토리에 .env 파일을 생성하고, .env.example 파일의 내용을 참고하여 환경 변수를 설정해주세요.
cp .env.example .env주요 환경 변수:
PORT: 서버 포트 (기본값: 3000)DB_HOST,DB_USER,DB_PASSWORD,DB_NAME: MySQL 데이터베이스 설정ES_HOST,ES_PORT: Elasticsearch 설정
Docker Compose를 사용하여 데이터베이스(MySQL, Elasticsearch)와 애플리케이션을 한 번에 실행할 수 있습니다.
개발 모드 (Development):
npm run docker:dev
mysql-dev및elastic-dev컨테이너와 함께 개발 프로필로 실행됩니다.
운영 모드 (Production):
npm run docker
mysql-prod,elastic-prod, 및nginx컨테이너와 함께 운영 프로필로 실행됩니다.
데이터베이스가 로컬 또는 별도 서버에 실행 중이어야 합니다.
# 의존성 설치
npm install
# 개발 모드 실행
npm run start:dev
# 운영 모드 실행
npm run start├── src
│ ├── config # 환경 설정 및 라이브러리 설정 (Swagger, DB 연결 등)
│ ├── controllers # 요청 처리 및 응답 반환 로직 (Controller Layer)
│ ├── middlewares # Express 미들웨어
│ ├── models # Sequelize 데이터베이스 모델 정의
│ ├── routes # API 라우팅 정의
│ ├── services # 비즈니스 로직 처리 (Service Layer)
│ ├── app.js # Express 앱 초기화
│ └── server.js # 서버 실행 엔트리 포인트
├── Dockerfile # Docker 이미지 빌드 설정
├── docker-compose.yml # Docker 서비스 오케스트레이션 설정
├── nginx.conf # Nginx 설정 파일
└── package.json # 프로젝트 의존성 및 스크립트 정의
서버가 실행 중일 때, 브라우저에서 /api-docs 경로로 접속하면 Swagger UI를 통해 API 문서를 확인할 수 있습니다.
- 로컬 개발 시:
http://localhost:3000/api-docs - API 명세서 보러가기 (API.md)