Skip to content

내일배움캠프2024 Spring__3기 최종 프로젝트 5조 - 반려 식물 성장 기록 및 공유 커뮤니티 서비스 Spring BE

License

Notifications You must be signed in to change notification settings

sparta-Sounganization/Botanify

Repository files navigation

img_5.png

Botanify

  • 식물 성장 기록 & 정보 공유 커뮤니티 서비스

🌱 목차

💁‍♀️ 서비스 소개

🗓️ 개발기간: 2024.12.02 ~ 2025.01.07
🪴 Botanify

  • 사용자가 자신의 식물을 관리하고, 성장 상태를 기록하며, 식물 관련 정보를 공유할 수 있도록 돕는 애플리케이션입니다.
  • 저희의 목표는 식물 성장 일지를 기록하고 정보를 공유하는 커뮤니티 서비스를 제공하여, 사용자들의 식집사 생활을 더 쉽고 재미있게 만드는 것입니다.

🎥 시연영상

🔧 기술 스택

💻 Backend

⚙️ DevOps & Infrastructure

🛠 Development & Database

🔍 Testing & Monitoring

🔌 External Services

🎨 Design & Collaboration

⚙️ 프로젝트 설치 및 실행법

1. 필수 요구 사항

프로젝트 실행 전에 아래 환경이 필요합니다.

  • Java 17 이상
  • MySQL 8.0
  • Docker
  • Git
  • IDE (IntelliJ, Eclipse 등)

2. 프로젝트 클론

$git clone https://github.com/sparta-Sounganization/Botanify.git
$cd Botanify

3. 파일 설정

src/main/resources/application.yml 파일을 수정하여 데이터베이스 및 기타 설정을 업데이트하세요.

Details
spring:
  jpa:
    open-in-view: false
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        show_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect
  jackson:
    time-zone: Asia/Seoul

  # mySQL Configuration
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${사용자의_mySQL_엔드포인트}
    username: ${mySQL_사용자_이름}
    password: ${mySQL_사용자_암호}

  # JWT Configuration
  jwt:
    secret:
      key: ${base64로_암호화된_JWT_비밀_키}
      expiration: 3600000 # 1시간

  # Google OAuth2 Configuration
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: {Google_Client_ID}
            client-secret: {Google_Client_비밀_키}
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
            scope:
              - profile
              - email

  # Redis Configuration
  redis:
    master:
      port: 6379
      host: ${사용자의 Redis 클라이언트 엔드포인트}
    verification:
      ttl: 300  # 5분
      max-attempts: 5
      attempts-ttl: 3600 # 1시간

  # Email Configuration
  mail:
    host: smtp.gmail.com
    port: 587
    username: ${서비스_이메일_발신_이름}
    password: ${서비스_이메일_발신_암호}
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true

# ============= ^ Spring ^ ============= v External v =============



# Global Logging Configuration
logging:
  level:
    org.springframework.security: INFO
    com.sounganization.botanify: DEBUG
    org.springframework.web: DEBUG
    io.github.resilience4j.circuitbreaker: DEBUG



# S3 Configuration
aws:
  s3:
    bucket: ${S3_버킷_이름}
    endpoint: ${S3_버킷_PUT_엔드포인트}
    gateway: ${S3_버킷_GET_게이트웨이}
  access-key: ${S3_인증_키}
  secret-key: ${S3_비밀_키}



# Monitoring Configuration
management:
  endpoints:
    web:
      exposure:
        include: circuitbreakers, health, info, prometheus



# Kakao API Configuration
kakao:
  api:
    key: ${kakao_인증_키}
    base-url: ${kakao_엔드포인트}



# weather API Configuration
weather:
  api:
    key: ${weather_인증_키}
    base-url: ${weather_엔드포인트}



# CircuitBreaker Configuration
resilience4j:
  circuitbreaker:
    instances:
      weatherService:
        slidingWindowType: COUNT_BASED # 슬라이딩 윈도우 타입
        slidingWindowSize: 10 # 슬라이딩 윈도우 크기
        minimumNumberOfCalls: 5 # 최소 호출 수
        failureRateThreshold: 50 # 실패율 임계값
        waitDurationInOpenState: 10s # 열림 상태 대기 시간 (10초)
        permittedNumberOfCallsInHalfOpenState: 3 # 반열림 상태 호출 수
        slowCallRateThreshold: 100 # 느린 호출 비율 임계값
        slowCallDurationThreshold: 3s # 느린 호출 지속 시간 (3초)



# plant API Configuration
nongsaro:
  api:
    base-url: ${nongsaro_엔드포인트}
    key: ${nongsaro_인증_키}



# OneSignal Configuration
onesignal:
  app-id: ${onesignal_app_id}
  rest-api-key: ${rest_api_key}

4. Docker

Docker를 사용하여 MySQL 및 필요한 서비스를 실행합니다.

$docker-compose up -d

5. 어플리케이션 빌드

Gradle을 사용하여 프로젝트를 빌드합니다.

$./gradlew build

에러가 발생하면 다음 명령어를 실행하세요.

$./gradlew clean build

5. 어플리케이션 실행

빌드가 완료되면 생성된 .jar 파일을 실행합니다. 프로젝트 디렉토리 build > libs에 만들어진 jar 파일 실행

$java -jar Botanify-0.0.1-SNAPSHOT.jar

📁 프로젝트 구조

시스템 아키텍쳐

img_6.png

ERD

img_7.jpeg

API

위 링크에서 API 엔드포인트, 요청/응답 예제, 그리고 파라미터에 대한 상세한 설명을 확인하고 Postman에서 직접 테스트할 수 있습니다.

🌿 주요기능

  1. 사용자 관리
이미지 1 이미지 2 이미지 2
메인 회원가입 로그인
  • 메인: 인기 게시글을 볼 수 있으며, 로그인 후에는 인기글과 자신의 식물을 볼 수 있습니다.
  • 회원가입/ 로그인: 사용자는 계정을 생성하고, 로그인할 수 있습니다.
  1. 식물 관리
이미지 1 이미지 2 이미지 2 이미지 2
식물 등록 및 관리 식물 성장 기록 식물 정보 조회 식물 관리 알림
  • 식물 등록 및 관리: 사용자가 자신의 식물을 등록하고 관리할 수 있습니다.
  • 식물 정보 조회: 계절별 관수 정보, 습도 등의 식물의 관리 정보를 제공합니다.
  • 식물 성장 기록: 식물의 성장 일지 및 사진을 기록할 수 있습니다.
  • 식물 관리 알림: 물 주기 알림, 비료 알림 등 알림을 설정할 수 있습니다.
  1. 커뮤니케이션
이미지 1 이미지 2
채팅 게시판
  • 채팅 기능: 다른 사용자와 1:1 소통할 수 있는 기능을 제공합니다.
  • 게시판 기능: 사용자 간 정보 공유 및 커뮤니티 활동을 위한 게시판을 제공합니다.

👨‍💻 Developer

이름 역할 담당 업무 GitHub Blog link
장재혁 팀장 📝 Diary Service
- 성장 일지 CRUD 기능 구현
📷 Image
- S3 활용 이미지 업로드 기능 구현
🌱 식물관리
- 식물 OPEN API 데이터 저장 기능 구현
- 식물 OPEN API 데이터 캐싱 처리
📝 테스트 코드
- 테스트 코드 초안 작성
GitHub Link Blog link
김동주 부팀장 🧑‍💻 회원가입/로그인
- 이메일 회원가입/로그인 기능 구현
- Google 소셜 회원가입/로그인 기능 구현
- Security 인증/인가
🌦️ 날씨 서비스
- 지도 API, 날씨 API 연동 및 날씨 정보 제공 기능 구현
🐳 Docker Compose
- Docker Compose 환경 설정
🔄 CI/CD
- Jenkins를 활용한 CI/CD 파이프라인 구축
GitHub Link Blog link
고아라 팀원 🌱 품종 서비스
- 품종 CRUD 기능 구현
📝 테스트 코드
- 테스트 코드 작성 및 커버리지 체크
🌦️ 날씨 서비스
- 위도/경도 좌표 수집
GitHub Link Blog link
리칸소성 (LIKANE SO SOUNG) 팀원 ✉️ User Email Authentication
- 회원가입 시 사용자의 이메일 인증 시스템 구축
👥 Community Service
- 인기 게시글 캐싱 시스템 구축
- 댓글과 답글 기능 구현
- 1:1 실시간 채팅 시스템 구축
🌱 식물 관리
- 식물 push 알림 시스템 구축
GitHub Link Blog link
지민지 팀원 👥 Community Service
- 게시판 CRUD 기능 구현
- 게시글 조회수 어뷰징 방지 로직 설계 및 구현
🌱 식물관리
- 식물 Open API 연동 및 식물 정보 검색 및 조회 기능 구현
🔄 CI/CD
- Jenkins를 활용한 CI 파이프라인 구축
GitHub Link Blog link

About

내일배움캠프2024 Spring__3기 최종 프로젝트 5조 - 반려 식물 성장 기록 및 공유 커뮤니티 서비스 Spring BE

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5