Skip to content

wonotter/art-connect-backend

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

57 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎨 ArtConnect

AIλ₯Ό 톡해 λ˜‘λΆ€λŸ¬μ§€κ²Œ μ†Œμƒκ³΅μΈκ³Ό λ””μžμ΄λ„ˆλ₯Ό λ§€μΉ­ν•˜λŠ” ν”Œλž«νΌ ArtConnectμž…λ‹ˆλ‹€.

πŸ“œ μ•„ν‚€ν…μ²˜ 섀계 & API λͺ…μ„Έμ„œ

μ£Όμš” μ•„ν‚€ν…μ²˜ 섀계와 API λͺ…μ„Έμ„œλŠ” λ…Έμ…˜μ— λ³„λ„λ‘œ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ…Έμ…˜ μ•„μ΄μ½˜μ„ λˆ„λ₯΄λ©΄ νŽ˜μ΄μ§€λ‘œ μ—°κ²°λ©λ‹ˆλ‹€.

βœ’οΈ ν”„λ‘œμ νŠΈ ꡬ쑰

artconnect-architecture drawio_μ΅œμ’…

πŸ“Š ERD λ‹€μ΄μ–΄κ·Έλž¨

ERD λ‹€μ΄μ–΄κ·Έλž¨

βš™οΈ 기술 μŠ€νƒ

βœ‹ μ‹œμž‘ κ°€μ΄λ“œ

μ•„λž˜μ— λ‚΄μš©μ— ν•΄λ‹Ήν•˜λŠ” μ‹œμž‘ κ°€μ΄λ“œλŠ” λ‹¨μˆœνžˆ 둜컬 ν™˜κ²½μ—μ„œ μ„œλ²„λ₯Ό 싀행해보기 μœ„ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. μΆ”κ°€λ‘œ 배포가 ν•„μš”ν•˜λ‹€λ©΄ μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•˜μ—¬ AWS EC2에 μ„œλ²„λ₯Ό μ‹€ν–‰ν•œ λ‹€μŒ, HTTPS둜 μ μš©ν•˜λŠ” 과정이 ν•„μš”ν•©λ‹ˆλ‹€.

μš”κ΅¬μ‚¬ν•­

  • Java 21 이상
  • Spring Boot 3.5.x 이상
  • MySQL 8.0 이상
  • Docker Desktop 27.x 이상

SpringBoot & Docker ν™˜κ²½ μ„€μ •

1. μ•„λž˜ μ£Όμ†Œμ— μžˆλŠ” art-connect-backend repository clone

git clone https://github.com/ThonliveThondie/art-connect-backend

2. application-ai.yml, application-awss3.yml, application-db.yml, application-jwt.yml, application-oauth.yml, .env 파일 별도 생성 ν›„ μΆ”κ°€

μœ„μ— μ–ΈκΈ‰ν•œ νŒŒμΌμ€ λ³΄μ•ˆ 상 κΉƒν—ˆλΈŒμ— μ—…λ‘œλ“œν•˜μ§€ μ•Šμ•„ ν¬ν•¨λ˜μ§€ μ•Šμ€ νŒŒμΌλ“€μž…λ‹ˆλ‹€.

μ•„λž˜μ— ν‘œμ‹œλœ {} μ˜μ—­μ„ 각자 섀정에 맞게 μž‘μ„±ν•΄μ£Όμ„Έμš”.

application-ai.yml

Spring AIλ₯Ό 톡해 Anthropic AIλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” API ν‚€ 등둝이 ν•„μš”ν•©λ‹ˆλ‹€. μ•„λž˜ λ§ν¬μ—μ„œ API ν‚€ 생성 ν›„ νŒŒμΌμ— μž‘μ„±ν•΄μ£Όμ„Έμš”.

local-ai:
  anthropic:
    claude:
      api-key: {ANTHROPIC_API_KEY}
      chat:
        options:
          model: claude-3-5-sonnet-20241022
          temperature: 0.7
          max-tokens: 800

application-awss3.yml

ν˜„μž¬ ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ‚¬μš©μžκ°€ 이미지λ₯Ό μ—…λ‘œλ“œν•˜κ³  λ‹€μš΄λ°›λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ AWS S3 버킷을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•΄μ„œ 버킷 생성 ν›„ 섀정값을 μž…λ ₯ν•΄μ£Όμ„Έμš”.

# AWS S3
cloud:
  aws:
    credentials:
      access-key: {ACCESS_KEY}
      secret-key: {SECRET_KEY}
    region:
      static: {BUCKET_REGION}  # λ²„ν‚·μ˜ 리전
    s3:
      bucket: {BUCKET_NAME}   # 버킷 이름
    stack:
      auto: false

spring:
  servlet:
    multipart:
      max-file-size: 50MB
      max-request-size: 50MB

application-db.yml

DB인 MySQL 연결에 ν•„μš”ν•œ 섀정값을 μž…λ ₯ν•©λ‹ˆλ‹€.

local-db:
  mysql:
    host: localhost
    port: 3308
    name: artconnect
    username: {MySQL μ‚¬μš©μž 이름}
    password: {MySQL μ‚¬μš©μž λΉ„λ°€λ²ˆν˜Έ}

application-jwt.yml

JWT μ‹œν¬λ¦Ώ ν‚€μ˜ μ•ˆμ „ν•œ 생성을 μœ„ν•΄ OpenSSL 터미널 λͺ…λ Ήμ–΄λ‘œ λ‚œμˆ˜λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. OpenSSL μ„€μΉ˜λŠ” μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.

λ‹€μŒ λͺ…령을 톡해 λ‚œμˆ˜λ₯Ό μƒμ„±ν•œ λ‹€μŒ, Base64 ν˜•μ‹μœΌλ‘œ μΈμ½”λ”©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€.

openssl rand -base64 64

좜λ ₯된 ν‚€λ₯Ό λ³΅μ‚¬ν•˜μ—¬ μ•„λž˜μ˜ application-jwt.yml νŒŒμΌμ— μž‘μ„±ν•΄μ€λ‹ˆλ‹€.

# JWT μ„€μ •
jwt:
  secret-key: {JWT SECRET KEY}
  
  # Access Token μ„€μ • (15λΆ„)
  access:
    expiration: 900000
    header: Authorization
  
  # Refresh Token μ„€μ • (7일)
  refresh:
    expiration: 604800000
    header: Authorization-refresh

application-oauth.yml

ν•΄λ‹Ή νŒŒμΌμ€ OAuth 2.0 μ†Œμ…œ 둜그인 μ μš©μ„ μœ„ν•΄ μž‘μ„±ν•œ νŒŒμΌμž…λ‹ˆλ‹€.

OAuth 2.0에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©κ³Ό 섀정법은 μ•„λž˜ 링크λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”.

Google, Kakao, Naver 개발자 μ„Όν„°μ—μ„œ API 이용 등둝 ν›„ application-oauth.yml에 μž‘μ„±ν•  νŒŒμΌμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: {ν΄λΌμ΄μ–ΈνŠΈ 아이디}
            client-secret: {ν΄λΌμ΄μ–ΈνŠΈ λΉ„λ°€ν‚€}
            scope: profile, email
            redirect-uri: {λ“±λ‘ν•œ λ¦¬λ‹€μ΄λ ‰μ…˜ URI}

          naver:
            client-id: {ν΄λΌμ΄μ–ΈνŠΈ 아이디}
            client-secret: {ν΄λΌμ΄μ–ΈνŠΈ λΉ„λ°€ν‚€}
            redirect-uri: {λ“±λ‘ν•œ λ¦¬λ‹€μ΄λ ‰μ…˜ URI}
            authorization-grant-type: authorization_code
            scope: name, email, profile_image
            client-name: Naver

          kakao:
            client-id: {ν΄λΌμ΄μ–ΈνŠΈ 아이디}
            client-secret: {ν΄λΌμ΄μ–ΈνŠΈ λΉ„λ°€ν‚€}
            redirect-uri: {λ“±λ‘ν•œ λ¦¬λ‹€μ΄λ ‰μ…˜ URI}
            client-authentication-method: client_secret_post
            authorization-grant-type: authorization_code
            scope: profile_nickname, profile_image
            client-name: Kakao

        provider:
          naver:
            authorization-uri: https://nid.naver.com/oauth2.0/authorize
            token-uri: https://nid.naver.com/oauth2.0/token
            user-info-uri: https://openapi.naver.com/v1/nid/me
            user-name-attribute: response

          kakao:
            authorization-uri: https://kauth.kakao.com/oauth/authorize
            token-uri: https://kauth.kakao.com/oauth/token
            user-info-uri: https://kapi.kakao.com/v2/user/me
            user-name-attribute: id

.env

MYSQL_DATABASE: artconnect
MYSQL_USERNAME: {MySQL μ‚¬μš©μž 이름}
MYSQL_ROOT_PASSWORD: {MySQL μ‚¬μš©μž λΉ„λ°€λ²ˆν˜Έ}

μœ„μ—μ„œ μž‘μ„±ν•œ 5개 νŒŒμΌμ„ μ•„λž˜ μ‚¬μ§„μ˜ ν”„λ‘œμ νŠΈ 디렉터리 ꡬ쑰(src/main/resources/security/)와 μ •ν™•νžˆ μΌμΉ˜ν•˜λ„λ‘ λ„£μ–΄μ£Όμ„Έμš”.

image

3. 도컀 μ‹€ν–‰

Intellij 터미널 μ°½ λ˜λŠ” λ‹€λ₯Έ 터미널 창을 톡해 docker-compose.yml 파일 μœ„μΉ˜λ‘œ 이동 ν›„ docker compose ν•˜μ—¬ MySQL λ°μ΄ν„°λ² μ΄μŠ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒˆλ‘­κ²Œ μΆ”κ°€ν•˜μ—¬ μ‹€ν–‰ν•©λ‹ˆλ‹€.

docker compose up -d

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%