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

Appearance settings
@PETTY-HUB

PETTY

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

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

MAIN-001

PETTY Logo

Spring Boot Java PostgreSQL MySQL Qdrant Oracle Cloud AWS Supabase

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

๐Ÿ˜ฝ 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โ€ฆ

Morty Proxy This is a proxified and sanitized view of the page, visit original site.