Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

PETTY

๐Ÿถ PETTY | ๋ฐ˜๋ ค๋™๋ฌผ์„ ์œ„ํ•œ ๊ฐ€์žฅ ์™„๋ฒฝํ•œ ์—ฌํ–‰

๐Ÿพ PETTY - ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ๋– ๋‚˜๋Š” ์™„๋ฒฝํ•œ ์—ฌํ–‰

๐ŸŽฏ ์„œ๋น„์Šค ์†Œ๊ฐœ

๐Ÿ˜ฝ PETTY๋Š” ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ์—ฌํ–‰์„ ์œ„ํ•œ AI ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค
๐Ÿถ ์‚ฌ์šฉ์ž์˜ ๋ฐ˜๋ ค๋™๋ฌผ ์‚ฌ์ง„์„ ๋ถ„์„ํ•˜์—ฌ ๋งž์ถคํ˜• ์—ฌํ–‰์ง€๋ฅผ ์ถ”์ฒœ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”!
๐Ÿ—บ๏ธ ํ˜„์žฌ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ฃผ๋ณ€์— ์žˆ๋Š” ๋ฐ˜๋ ค๋™๋ฌผ ์—ฌํ–‰์ง€ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”!
๐Ÿ–Š๏ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฐ˜๋ ค๋™๋ฌผ ์—ฌํ–‰ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์š”!


โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐ŸŽฏ JWT ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ

์ด๋ฉ”์ผ ์ธ์ฆ๊ณผ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์‹œ์Šคํ…œ

  • ๋กœ์ปฌ ๋กœ๊ทธ์ธ: ์ด๋ฉ”์ผ ์ธ์ฆ ๊ธฐ๋ฐ˜ SMTP ํšŒ์›๊ฐ€์ž…
  • ์†Œ์…œ ๋กœ๊ทธ์ธ: GitHub, Kakao OAuth2 ์—ฐ๋™
  • JWT: Access Token (1์‹œ๊ฐ„) + Refresh Token (7์ผ)
  • Cookie ๋ณด์•ˆ: HttpOnly, Secure ์„ค์ •
  • ํ† ํฐ ์ˆœํ™˜: ์‚ฌ์šฉ์ž๋ณ„ ์ตœ๋Œ€ 3๊ฐœ Refresh Token ๊ด€๋ฆฌ

๐Ÿค– AI ๋ฐ˜๋ ค๋™๋ฌผ ๋ถ„์„

๋ฐ˜๋ ค๋™๋ฌผ ์‚ฌ์ง„์„ ์ž…๋ ฅํ•˜๋ฉด, ์„ฑ๊ฒฉ, ์™ธ๋ชจ, ํŠน์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด ๋ถ„์„

  • ๋‹ค์ค‘ AI ๋ชจ๋ธ: AWS Rekognition + Gemini 2.0 Flash + Llama 3.2 Vision
  • ํŠน์„ฑ ๋ถ„์„: ์ข…, ํ’ˆ์ข…, ํฌ๊ธฐ, ๋ฌด๊ฒŒ, ๋งน๊ฒฌ ์—ฌ๋ถ€ ์ž๋™ ํŒ๋ณ„
  • ํด๋ฐฑ ์‹œ์Šคํ…œ: ๋ชจ๋ธ ๊ฐ„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ†ตํ•œ ์•ˆ์ •์„ฑ ๋ณด์žฅ

๐Ÿ” ๋ฒกํ„ฐ ๊ธฐ๋ฐ˜ ์—ฌํ–‰์ง€ ์ถ”์ฒœ

์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์กฐ๊ฑด์˜ ์—ฌํ–‰์ง€๋ฅผ ์ž…๋ ฅํ•˜๋ฉด AI๋ฅผ ํ†ตํ•ด ๋งž์ถค ์ถ”์ฒœ ์ œ๊ณต

  • ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰: OpenAI Embeddings + Qdrant Vector DB
  • AI ํ™œ์šฉ ๋ฆฌ๋žญํ‚น: Gemini๋ฅผ ํ™œ์šฉํ•œ ๋งž์ถคํ˜• ์ˆœ์œ„ ์กฐ์ •
  • ๋‹ค์ค‘ ํ•„ํ„ฐ๋ง: ์ง€์—ญ, ์นดํ…Œ๊ณ ๋ฆฌ, ๋ฐ˜๋ ค๋™๋ฌผ ์กฐ๊ฑด ๋ณตํ•ฉ ๊ฒ€์ƒ‰

๐Ÿ—บ๏ธ ์—ฌํ–‰์ง€ ์ •๋ณด ์‹œ์Šคํ…œ

GPS ํ˜„์žฌ ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋ฐ˜๋ ค ๋™๋ฌผ ๋™๋ฐ˜ ๊ฐ€๋Šฅ ์—ฌํ–‰ ์ •๋ณด ์ œ๊ณต

  • ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”: ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ Tour API ์ž๋™ ์—ฐ๋™
  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰: ์นด์นด์˜ค ์ง€๋„ API ๋ฐ ๊ณต๊ฐ„ ์ธ๋ฑ์Šค ํ™œ์šฉ
  • ์ƒ์„ธ ์ •๋ณด: ์‹œ์„ค, ํŽธ์˜์‚ฌํ•ญ, ๋ฐ˜๋ ค๋™๋ฌผ ๋™๋ฐ˜ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง

๐Ÿ‘ฅ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋žซํผ

CRUD, ๋Œ“๊ธ€, ์ข‹์•„์š” ๋“ฑ ์‚ฌ์šฉ์ž๋ฅผ ๊ณ ๋ คํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋Šฅ

  • ๊ฒŒ์‹œํŒ: ํ›„๊ธฐ, ์ž๋ž‘, Q&A ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์šด์˜
  • ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ: Supabase Storage ์—ฐ๋™
  • ์†Œ์…œ ๊ธฐ๋Šฅ: ์ข‹์•„์š”, ๋Œ“๊ธ€, ์•Œ๋ฆผ ์‹œ์Šคํ…œ

๐Ÿ“’ ERD ๋ฐ ๊ธฐ์ˆ  ์Šคํƒ

๐Ÿ›  ERD

Image 1

Image 2

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

diagram

Backend

Spring Boot
โ”œโ”€โ”€ Spring Security (JWT + OAuth2)
โ”œโ”€โ”€ Spring Data JPA (๋ฉ€ํ‹ฐ ๋ฐ์ดํ„ฐ์†Œ์Šค)
โ”œโ”€โ”€ Spring AI
โ””โ”€โ”€ Validation

Database & Storage

๋ฉ€ํ‹ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•„ํ‚คํ…์ฒ˜
โ”œโ”€โ”€ PostgreSQL (์‚ฌ์šฉ์ž/์ปค๋ฎค๋‹ˆํ‹ฐ) - Supabase
โ”œโ”€โ”€ MySQL (์—ฌํ–‰์ง€ ์ •๋ณด) - Aiven
โ”œโ”€โ”€ Vector Database - Qdrant
โ””โ”€โ”€ File Storage - Supabase Storage

AI & External APIs

AI ํŒŒ์ดํ”„๋ผ์ธ
โ”œโ”€โ”€ AWS Rekognition (์ด๋ฏธ์ง€ ๋ผ๋ฒจ๋ง)
โ”œโ”€โ”€ Google Gemini 2.0 Flash (ํ…์ŠคํŠธ ์ƒ์„ฑ)
โ”œโ”€โ”€ Meta Llama 3.2 Vision (์ด๋ฏธ์ง€ ๋ถ„์„)
โ”œโ”€โ”€ OpenAI Embeddings (๋ฒกํ„ฐ ์ƒ์„ฑ)
โ””โ”€โ”€ ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ API (๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”)

Infrastructure

ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ
โ”œโ”€โ”€ Oracle Cloud Infrastructure (๋ฐฐํฌ)
โ”œโ”€โ”€ AWS (Rekognition)
โ”œโ”€โ”€ Supabase (PostgreSQL, Storage)
โ”œโ”€โ”€ Aiven (MySQL)
โ””โ”€โ”€ Qdrant Cloud (Vector DB)

๐Ÿ— ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

graph TB
 User[๐Ÿ‘ค ์‚ฌ์šฉ์ž] --> Web[๐ŸŒ ์›น ์ธํ„ฐํŽ˜์ด์Šค]
 Web --> Auth[๐Ÿ” ์ธ์ฆ ์‹œ์Šคํ…œ]
 Web --> Vision[๐Ÿ‘๏ธ Vision AI]
 Web --> Recommend[๐ŸŽฏ ์ถ”์ฒœ ์‹œ์Šคํ…œ]
 Web --> Community[๐Ÿ’ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ]
 Auth --> Supabase[(๐Ÿ˜ Supabase PostgreSQL)]
 Community --> Supabase
 Community --> Storage[๐Ÿ“ Supabase Storage]
 Vision --> Rekognition[๐Ÿ” AWS Rekognition]
 Vision --> Gemini[๐Ÿค– Gemini 2.0]
 Vision --> Llama[๐Ÿฆ™ Llama 3.2]
 Recommend --> OpenAI[๐Ÿง  OpenAI Embeddings]
 Recommend --> Qdrant[(๐Ÿ”ฎ Qdrant Vector DB)]
 Recommend --> GeminiRerank[โšก Gemini Reranking]
 Sync[๐Ÿ”„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”] --> TourAPI[๐Ÿ—บ๏ธ ํ•œ๊ตญ๊ด€๊ด‘๊ณต์‚ฌ API]
 Sync --> MySQL[(๐Ÿฌ Aiven MySQL)]
 Recommend --> MySQL
 style User fill:#e1f5fe
 style Vision fill:#f3e5f5
 style Recommend fill:#e8f5e8
 style Community fill:#fff3e0
Loading

๐Ÿ—ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„

๋ฉ€ํ‹ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „๋žต

erDiagram
 %% Supabase PostgreSQL - ์‚ฌ์šฉ์ž/์ปค๋ฎค๋‹ˆํ‹ฐ
 USERS ||--o{ POSTS : writes
 USERS ||--o{ COMMENTS : writes
 USERS ||--o{ POST_LIKES : likes
 POSTS ||--o{ COMMENTS : has
 POSTS ||--o{ POST_IMAGES : contains
 POSTS ||--o{ POST_LIKES : receives
 %% Aiven MySQL - ์—ฌํ–‰์ง€ ์ •๋ณด
 CONTENT ||--o{ CONTENT_IMAGES : has
 CONTENT ||--|| CONTENT_INTRO : has
 CONTENT ||--|| PET_TOUR_INFO : has
 CONTENT ||--o{ CONTENT_INFOS : has
 CONTENT ||--o{ ROOM_INFOS : has
 %% Vector Database
 VECTOR_EMBEDDINGS ||--|| CONTENT : represents
 USERS {
 uuid id PK
 string username
 string display_name
 string role
 string provider
 timestamp created_at
 }
 CONTENT {
 bigint content_id PK
 int content_type_id
 string title
 string addr1
 point location
 timestamp modified_time
 }
 VECTOR_EMBEDDINGS {
 string id PK
 string content_id FK
 vector embedding
 json metadata
 }
Loading

๐Ÿง  AI ํŒŒ์ดํ”„๋ผ์ธ

Vision Analysis Flow

flowchart LR
 A[๐Ÿ“ท ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ] --> B[๐Ÿ” ์ด๋ฏธ์ง€ ๊ฒ€์ฆ]
 B --> C{์œ ํšจํ•œ๊ฐ€?}
 C -->|No| D[โŒ ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜]
 C -->|Yes| E[๐Ÿค– AWS Rekognition]
 E --> F[๐Ÿ“Š ๋ผ๋ฒจ ๋ถ„์„]
 F --> G[๐Ÿ• ๋™๋ฌผ ์ข… ํŒ๋ณ„]
 G --> H[๐Ÿ’ฌ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜]
 H --> I[๐Ÿง  Gemini 2.0 Flash]
 I --> J{์„ฑ๊ณต?}
 J -->|Yes| K[๐Ÿ“ ์ƒ์„ธ ๋ถ„์„ ์™„๋ฃŒ]
 J -->|No| L[๐Ÿฆ™ Llama 3.2 Fallback]
 L --> M[๐Ÿ“ ๋ถ„์„ ์™„๋ฃŒ]
 K --> N[๐Ÿ’พ ์บ์‹œ ์ €์žฅ]
 M --> N
 N --> O[๐Ÿ“‹ ์ตœ์ข… ๋ณด๊ณ ์„œ]
 style A fill:#e1f5fe
 style I fill:#f3e5f5
 style L fill:#fff3e0
 style O fill:#e8f5e8
Loading

Recommendation Pipeline

flowchart LR
 A[๐Ÿ‘ค ์‚ฌ์šฉ์ž ์ž…๋ ฅ] --> B[๐Ÿ”„ ํ”„๋กฌํ”„ํŠธ ๋นŒ๋”ฉ]
 B --> C[๐Ÿง  OpenAI Embeddings]
 C --> D[๐Ÿ” ๋ฒกํ„ฐ ๊ฒ€์ƒ‰]
 D --> E[๐Ÿ“ ํ•„ํ„ฐ๋ง]
 E --> F[๐Ÿค– Gemini ๋ฆฌ๋žญํ‚น]
 F --> G[๐Ÿ“‹ ์ตœ์ข… ์ถ”์ฒœ]
 subgraph "Vector Search"
 D --> D1[๐Ÿ”ฎ Qdrant Query]
 D1 --> D2[๐Ÿ“Š Similarity Score]
 D2 --> D3[๐ŸŽฏ Top-K Results]
 end
 subgraph "Intelligent Reranking"
 F --> F1[๐Ÿ“ ์ปจํ…์ŠคํŠธ ๋ถ„์„]
 F1 --> F2[๐ŸŽฏ ๊ฐœ์ธํ™” ์ ์ˆ˜]
 F2 --> F3[๐Ÿ“ˆ ์ตœ์  ์ˆœ์„œ]
 end
 style C fill:#e1f5fe
 style D fill:#f3e5f5
 style F fill:#fff3e0
Loading

๐Ÿ“Œ ํŒ€์› ์†Œ๊ฐœ

๊น€ํƒœํ˜„ ๋ฐ•์œ ๋ฏธ ์†์ฃผ์˜ ์œ ์Šน๋‚จ ์ด์ƒ๋ฏผ ์ง€ํ˜„์ˆ™
@taehyun32 @Yumi-Park996 @Juyoung8563 @usn757 @23MinL @s0ooo0k

๐Ÿ“ฌ ์—ฐ๋ฝํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด๋‚˜ ์ œ์•ˆ์ด ์žˆ๋‹ค๋ฉด Issues๋ฅผ ํ†ตํ•ด ์ž์œ ๋กญ๊ฒŒ ์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”!

Popular repositories Loading

  1. PETTY-BACK PETTY-BACK Public

    ๐Ÿถ PETTY | ๋ฐ˜๋ ค๋™๋ฌผ ๋งž์ถค ์—ฌํ–‰ ์ถ”์ฒœ ์„œ๋น„์Šค

    HTML 6

  2. .github .github Public

    ๐Ÿถ TEAM PETTY | ๋ฐ˜๋ ค๋™๋ฌผ์„ ์œ„ํ•œ ๊ฐ€์žฅ ์™„๋ฒฝํ•œ ์—ฌํ–‰

Repositories

Loading
Type
Select type
Language
Select language
Sort
Select order
Showing 2 of 2 repositories

Top languages

Loading...

Most used topics

Loading...

AltStyle ใซใ‚ˆใฃใฆๅค‰ๆ›ใ•ใ‚ŒใŸใƒšใƒผใ‚ธ (->ใ‚ชใƒชใ‚ธใƒŠใƒซ) /