한국의 다양한 매력을 공유하는 소셜 플랫폼
- Google Maps API 기반 인터랙티브 지도
- Google Places API 연동 장소 검색
- 카테고리별 장소 필터링 (여행지, 맛집, 카페)
- 장소 상세 정보 조회 (운영시간, 전화번호, 웹사이트)
- 장소 북마크 기능
- 위치 기반 근처 장소 검색
- community: 사용자 자유 게시판
- 게시글 작성/수정/삭제
- 댓글 시스템
- 좋아요/스크랩 기능
- 카테고리별 분류 (여행팁, 맛집리뷰, 카페리뷰, 일반)
- trend: 트렌드 게시글 (관리자 전용)
- 관리자만 작성/수정 가능
- 좋아요/스크랩 기능
- tips: 여행 팁 게시글 (관리자 전용)
- 관리자만 작성/수정 가능
- 댓글 기능 없음
- 사용자 활동 통계 (게시글, 댓글, 좋아요, 스크랩 수)
- 북마크한 장소 목록 조회
- 스크랩한 게시글 목록 조회
- 작성한 게시글 목록 조회
- 작성한 댓글 목록 조회
- Google OAuth 2.0 소셜 로그인
- JWT 토큰 기반 인증
- HttpOnly 쿠키 보안
- 역할 기반 접근 제어 (user/admin)
- 자동 토큰 갱신 지원
- NestJS 11 - Node.js 프레임워크
- TypeORM - ORM (MySQL)
- Passport - 인증 미들웨어
- JWT - 토큰 기반 인증
- Google OAuth 2.0 - 소셜 로그인
- Swagger - API 문서화
- MySQL 8.0 - 데이터베이스
- React 19 - UI 라이브러리
- TypeScript - 타입 안전성
- Vite - 빌드 도구
- Tailwind CSS 4 - 스타일링
- React Router 7 - 라우팅
- Zustand - 상태 관리
- TanStack Query - 서버 상태 관리
- Google Maps API - 지도 서비스
K-Mate/
├── server/ # NestJS 백엔드
│ ├── src/
│ │ ├── features/ # 기능별 모듈
│ │ │ ├── auth/ # 인증 모듈 (Google OAuth + JWT)
│ │ │ ├── places/ # 장소 관리 모듈
│ │ │ ├── posts/ # 게시글 관리 모듈
│ │ │ ├── comments/ # 댓글 관리 모듈
│ │ │ ├── interactions/ # 상호작용 관리 모듈
│ │ │ └── mypage/ # 마이페이지 모듈
│ │ ├── database/ # DB 설정
│ │ ├── common/ # 공통 유틸리티
│ │ │ ├── decorators/ # 커스텀 데코레이터
│ │ │ └── guards/ # 인증/권한 가드
│ │ └── main.ts # 애플리케이션 진입점
│ └── database/
│ └── migrations/ # DB 마이그레이션
│ ├── 001_create_initial_schema.sql
│ ├── 002_create_triggers.sql
│ ├── 003_create_views.sql
│ └── 004_insert_sample_data.sql
├── client/ # React 프론트엔드
│ ├── src/
│ │ ├── features/ # 기능별 훅/스토어
│ │ │ └── auth/ # 인증 관련 상태 관리
│ │ ├── components/ # UI 컴포넌트
│ │ │ ├── common/ # 공통 컴포넌트
│ │ │ ├── layout/ # 레이아웃 컴포넌트
│ │ │ └── places/ # 장소 관련 컴포넌트
│ │ ├── pages/ # 페이지 컴포넌트
│ │ │ ├── KBuzz/ # K-Buzz 관련 페이지
│ │ │ ├── KmapPage.tsx # K-Map 페이지
│ │ │ ├── KBuzzPage.tsx # K-Buzz 메인 페이지
│ │ │ └── LoginPage.tsx # 로그인 페이지
│ │ ├── api/ # API 클라이언트
│ │ ├── types/ # TypeScript 타입 정의
│ │ └── styles/ # 스타일 파일
│ └── public/
├── infrastructure/ # 배포 인프라
│ ├── nginx/ # Nginx 설정
│ ├── scripts/ # 배포 스크립트
│ └── systemd/ # 서비스 설정
└── report/ # 프로젝트 문서
├── requirements_specification.md
└── README.md
# 서버 환경변수 설정
cp server/.env.example server/.env
# 클라이언트 환경변수 설정
cp client/.env.example client/.env# MySQL 데이터베이스 생성
mysql -u root -p
CREATE DATABASE kmate_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 마이그레이션 실행
mysql -u root -p kmate_db < server/database/migrations/001_create_initial_schema.sql
mysql -u root -p kmate_db < server/database/migrations/002_create_triggers.sql
mysql -u root -p kmate_db < server/database/migrations/003_create_views.sql
mysql -u root -p kmate_db < server/database/migrations/004_insert_sample_data.sql# 백엔드 서버 실행
cd server
npm install
npm run start:dev
# 프론트엔드 서버 실행 (새 터미널)
cd client
npm install
npm run dev- Google OAuth 2.0 기반 소셜 로그인
- JWT 토큰 기반 인증
- HttpOnly 쿠키 보안
- 자동 토큰 갱신 지원
- 역할 기반 접근 제어 (user/admin)
- community: 모든 사용자 자유 게시판
- trend: 트렌드 게시글 (관리자만 작성/수정)
- tips: 여행 팁 게시글 (관리자만 작성/수정)
- 게시글 CRUD: 타입별 권한 제어
- 댓글 시스템: community/trend 게시글에만 허용
- 상호작용: 좋아요/스크랩 토글 기능
- 카테고리 분류: 여행, 맛집, 카페, 일반
- 검색 및 필터링: 게시글 검색 기능
- 페이지네이션: 대용량 데이터 처리
- Google Maps API 연동
- Google Places API 장소 검색
- 관광지 마커 표시
- 장소 상세 정보 조회
- 장소 북마크 기능
- 위치 기반 서비스
- 지도 스타일링
- 사용자 활동 통계 조회
- 북마크한 장소 목록
- 스크랩한 게시글 목록
- 작성한 게시글 목록
- 작성한 댓글 목록
- users: 사용자 정보 (Google OAuth)
- places: 장소 정보 (Google Places API 연동)
- posts: 게시글 (community/trend/tips 통합)
- comments: 댓글
- interactions: 상호작용 (like/scrap/bookmark)
- community_posts: 커뮤니티 게시글 뷰
- tips_posts: 팁 게시글 뷰
- trend_posts: 트렌드 게시글 뷰
- user_interaction_stats: 사용자 활동 통계
- post_interaction_stats: 게시글 상호작용 통계
- 게시글 작성 권한: tips/trend는 관리자만 작성/수정
- 댓글 작성 제한: community/trend 게시글에만 허용
- 상호작용 정책: like/scrap은 community/trend 게시글에만 허용
# amplify.yml 설정 확인
# 자동 배포 설정됨- Nginx: 리버스 프록시 및 정적 파일 서빙
- Systemd: 서비스 관리
- 배포 스크립트: 자동화된 배포 프로세스
개발 서버 실행 후 http://localhost:3000/docs에서 Swagger API 문서 확인 가능
- 인증:
/auth/*- Google OAuth, JWT 토큰 관리 - 장소:
/places/*- 장소 검색, 상세 정보, 북마크 - 게시글:
/posts/*- 게시글 CRUD, 검색, 필터링 - 댓글:
/comments/*- 댓글 CRUD - 상호작용:
/interactions/*- 좋아요/스크랩 토글 - 마이페이지:
/mypage/*- 사용자 활동 통계 및 목록
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request