Skip to content

K-Sp1rit/K-Mate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

109 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

K-Mate

ํ•œ๊ตญ์˜ ๋‹ค์–‘ํ•œ ๋งค๋ ฅ์„ ๊ณต์œ ํ•˜๋Š” ์†Œ์…œ ํ”Œ๋žซํผ

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ—บ๏ธ K-Map - ํ•œ๊ตญ ๊ด€๊ด‘์ง€ ์ง€๋„ ์„œ๋น„์Šค

  • Google Maps API ๊ธฐ๋ฐ˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ง€๋„
  • Google Places API ์—ฐ๋™ ์žฅ์†Œ ๊ฒ€์ƒ‰
  • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์žฅ์†Œ ํ•„ํ„ฐ๋ง (์—ฌํ–‰์ง€, ๋ง›์ง‘, ์นดํŽ˜)
  • ์žฅ์†Œ ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ (์šด์˜์‹œ๊ฐ„, ์ „ํ™”๋ฒˆํ˜ธ, ์›น์‚ฌ์ดํŠธ)
  • ์žฅ์†Œ ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ
  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ทผ์ฒ˜ ์žฅ์†Œ ๊ฒ€์ƒ‰

๐Ÿ“ฑ K-Buzz - ์†Œ์…œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ

  • community: ์‚ฌ์šฉ์ž ์ž์œ  ๊ฒŒ์‹œํŒ
    • ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ/์ˆ˜์ •/์‚ญ์ œ
    • ๋Œ“๊ธ€ ์‹œ์Šคํ…œ
    • ์ข‹์•„์š”/์Šคํฌ๋žฉ ๊ธฐ๋Šฅ
    • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ถ„๋ฅ˜ (์—ฌํ–‰ํŒ, ๋ง›์ง‘๋ฆฌ๋ทฐ, ์นดํŽ˜๋ฆฌ๋ทฐ, ์ผ๋ฐ˜)
  • trend: ํŠธ๋ Œ๋“œ ๊ฒŒ์‹œ๊ธ€ (๊ด€๋ฆฌ์ž ์ „์šฉ)
    • ๊ด€๋ฆฌ์ž๋งŒ ์ž‘์„ฑ/์ˆ˜์ • ๊ฐ€๋Šฅ
    • ์ข‹์•„์š”/์Šคํฌ๋žฉ ๊ธฐ๋Šฅ
  • tips: ์—ฌํ–‰ ํŒ ๊ฒŒ์‹œ๊ธ€ (๊ด€๋ฆฌ์ž ์ „์šฉ)
    • ๊ด€๋ฆฌ์ž๋งŒ ์ž‘์„ฑ/์ˆ˜์ • ๊ฐ€๋Šฅ
    • ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ์—†์Œ

๐Ÿ‘ค ๋งˆ์ดํŽ˜์ด์ง€ - ๊ฐœ์ธ ํ™œ๋™ ๊ด€๋ฆฌ

  • ์‚ฌ์šฉ์ž ํ™œ๋™ ํ†ต๊ณ„ (๊ฒŒ์‹œ๊ธ€, ๋Œ“๊ธ€, ์ข‹์•„์š”, ์Šคํฌ๋žฉ ์ˆ˜)
  • ๋ถ๋งˆํฌํ•œ ์žฅ์†Œ ๋ชฉ๋ก ์กฐํšŒ
  • ์Šคํฌ๋žฉํ•œ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ
  • ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ
  • ์ž‘์„ฑํ•œ ๋Œ“๊ธ€ ๋ชฉ๋ก ์กฐํšŒ

๐Ÿ” ์ธ์ฆ ์‹œ์Šคํ…œ

  • Google OAuth 2.0 ์†Œ์…œ ๋กœ๊ทธ์ธ
  • JWT ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ
  • HttpOnly ์ฟ ํ‚ค ๋ณด์•ˆ
  • ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด (user/admin)
  • ์ž๋™ ํ† ํฐ ๊ฐฑ์‹  ์ง€์›

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Backend

  • NestJS 11 - Node.js ํ”„๋ ˆ์ž„์›Œํฌ
  • TypeORM - ORM (MySQL)
  • Passport - ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด
  • JWT - ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ
  • Google OAuth 2.0 - ์†Œ์…œ ๋กœ๊ทธ์ธ
  • Swagger - API ๋ฌธ์„œํ™”
  • MySQL 8.0 - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

Frontend

  • 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)

๐Ÿ“Š K-Buzz ๊ธฐ๋Šฅ

๊ฒŒ์‹œ๊ธ€ ํƒ€์ž…

  • community: ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ž์œ  ๊ฒŒ์‹œํŒ
  • trend: ํŠธ๋ Œ๋“œ ๊ฒŒ์‹œ๊ธ€ (๊ด€๋ฆฌ์ž๋งŒ ์ž‘์„ฑ/์ˆ˜์ •)
  • tips: ์—ฌํ–‰ ํŒ ๊ฒŒ์‹œ๊ธ€ (๊ด€๋ฆฌ์ž๋งŒ ์ž‘์„ฑ/์ˆ˜์ •)

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๊ฒŒ์‹œ๊ธ€ CRUD: ํƒ€์ž…๋ณ„ ๊ถŒํ•œ ์ œ์–ด
  • ๋Œ“๊ธ€ ์‹œ์Šคํ…œ: community/trend ๊ฒŒ์‹œ๊ธ€์—๋งŒ ํ—ˆ์šฉ
  • ์ƒํ˜ธ์ž‘์šฉ: ์ข‹์•„์š”/์Šคํฌ๋žฉ ํ† ๊ธ€ ๊ธฐ๋Šฅ
  • ์นดํ…Œ๊ณ ๋ฆฌ ๋ถ„๋ฅ˜: ์—ฌํ–‰, ๋ง›์ง‘, ์นดํŽ˜, ์ผ๋ฐ˜
  • ๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง: ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
  • ํŽ˜์ด์ง€๋„ค์ด์…˜: ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

๐Ÿ—บ๏ธ K-Map ๊ธฐ๋Šฅ

  • 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 ๊ฒŒ์‹œ๊ธ€์—๋งŒ ํ—ˆ์šฉ

๐Ÿš€ ๋ฐฐํฌ

AWS Amplify ๋ฐฐํฌ

# amplify.yml ์„ค์ • ํ™•์ธ
# ์ž๋™ ๋ฐฐํฌ ์„ค์ •๋จ

์ธํ”„๋ผ ๊ตฌ์„ฑ

  • Nginx: ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ๋ฐ ์ •์  ํŒŒ์ผ ์„œ๋น™
  • Systemd: ์„œ๋น„์Šค ๊ด€๋ฆฌ
  • ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ: ์ž๋™ํ™”๋œ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค

๐Ÿ“ API ๋ฌธ์„œ

๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ ํ›„ http://localhost:3000/docs์—์„œ Swagger API ๋ฌธ์„œ ํ™•์ธ ๊ฐ€๋Šฅ

์ฃผ์š” API ์—”๋“œํฌ์ธํŠธ

  • ์ธ์ฆ: /auth/* - Google OAuth, JWT ํ† ํฐ ๊ด€๋ฆฌ
  • ์žฅ์†Œ: /places/* - ์žฅ์†Œ ๊ฒ€์ƒ‰, ์ƒ์„ธ ์ •๋ณด, ๋ถ๋งˆํฌ
  • ๊ฒŒ์‹œ๊ธ€: /posts/* - ๊ฒŒ์‹œ๊ธ€ CRUD, ๊ฒ€์ƒ‰, ํ•„ํ„ฐ๋ง
  • ๋Œ“๊ธ€: /comments/* - ๋Œ“๊ธ€ CRUD
  • ์ƒํ˜ธ์ž‘์šฉ: /interactions/* - ์ข‹์•„์š”/์Šคํฌ๋žฉ ํ† ๊ธ€
  • ๋งˆ์ดํŽ˜์ด์ง€: /mypage/* - ์‚ฌ์šฉ์ž ํ™œ๋™ ํ†ต๊ณ„ ๋ฐ ๋ชฉ๋ก

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors