Skip to content

SWYP-index/swyp-backend

Repository files navigation

썸네일

SWYP Web 10기 프로젝트 3팀
기획 및 개발 기간 : 2025.6.30 ~ 25.8.10 유지보수 및 고도화 : 25.8.14 ~ 25.8.31


✨ 프로젝트 소개

INDEX는 사용자가 책을 읽으며 느낀 감정을 중심으로 기록하고 공유할 수 있는 감정 기반 독서 기록 서비스입니다. 단순히 책을 저장하는 데 그치지 않고, 읽는 과정에서의 감정과 생각을 함께 남길 수 있도록 설계되었습니다.

내가 읽은 책들을 보기 좋게 정리하고 관리할 수 있습니다.

책을 읽으면서 느낀 감정을 기록하고, 기억을 더욱 풍부하게 보존할 수 있습니다.

다른 사람들이 같은 책을 읽으며 어떤 감정을 주로 느꼈는지 살펴보고 인사이트를 얻을 수 있습니다.

아직 읽어보지 못한 책은 추천 시스템을 통해 새로운 독서를 이어갈 수 있습니다.

INDEX책과 감정이 함께 기록되는 공간을 목표로, 개인의 독서 여정을 시각화하고 공유할 수 있도록 돕습니다.

⭐ [INDEX] 이용하기


🚀 주요 기능

👤 회원가입 및 로그인

회원가입 및 로그인

이메일 및 소셜 로그인(카카오/네이버/구글)으로 간편하게 가입 및 로그인할 수 있습니다.


🔍 검색 기능

검색

도서명, 저자, 감정을 기반으로 원하는 책을 검색할 수 있습니다.


📝 인덱스 등록, 수정, 삭제

인덱스 등록, 수정, 삭제

읽는 중/다 읽음 상태로 인덱스를 남기고, 수정·삭제할 수 있습니다.


📊 리포트 및 도서 추천 기능

리포트 및 추천도서

독서 기록을 바탕으로 리포트와 달력을 확인할 수 있으며, 맞춤형 추천 도서도 제공합니다.


🛠 기술스택 (Backend)

Framework
Language
Configuration
Database
Data Access
Security
Build Tool
Deployment
CI/CD
협업 도구          

🗂 프로젝트 구조

📦SWYP-BACKEND
📦 Index_Project
├── build.gradle
├── Dockerfile
└── src
    └── main
        ├── java
        │   └── com/swyp/index
        │       ├── domain          
        │       │   ├── book
        │       │   │   ├── Book.java
        │       │   │   ├── BookInfo.java
        │       │   │   └── BookStats.java
        │       │   ├── bookshelf
        │       │   │   ├── Bookshelf.java
        │       │   │   ├── PageRecord.java
        │       │   │   ├── ReadingStatus.java
        │       │   │   ├── RecordCreatedEvent.java
        │       │   │   ├── RecordDeletedEvent.java
        │       │   │   ├── RecordEmotion.java
        │       │   │   └── RecordUpdatedEvent.java
        │       │   ├── emotion
        │       │   │   ├── Emotion.java
        │       │   │   ├── EmotionCategory.java
        │       │   │   └── EmotionType.java
        │       │   ├── user
        │       │   │   ├── GoogleUserInfo.java
        │       │   │   ├── KakaoUserInfo.java
        │       │   │   ├── NaverUserInfo.java
        │       │   │   ├── OAuth2UserInfo.java
        │       │   │   ├── Provider.java
        │       │   │   └── User.java
        │       │   └── wishlist
        │       │       └── Wishlist.java
        │
        │       ├── application     
        │       │   ├── book
        │       │   │   ├── BookCommandService.java
        │       │   │   ├── BookFacade.java
        │       │   │   ├── BookQueryService.java
        │       │   │   └── BookStatsEventListener.java
        │       │   ├── bookshelf
        │       │   │   ├── BookRecommendService.java
        │       │   │   ├── BookshelfService.java
        │       │   │   ├── ReadingFinishService.java
        │       │   │   ├── ReadingStartService.java
        │       │   │   └── RecordService.java
        │       │   ├── report
        │       │   │   ├── CalendarService.java
        │       │   │   ├── EmotionAnalysisService.java
        │       │   │   ├── ReadingReportService.java
        │       │   │   └── StatsService.java
        │       │   ├── user
        │       │   │   ├── AuthService.java
        │       │   │   ├── CustomOAuth2UserService.java
        │       │   │   ├── CustomUserDetailsService.java
        │       │   │   ├── SmtpMailService.java
        │       │   │   ├── TokenService.java
        │       │   │   └── UserService.java
        │       │   └── wishlist
        │       │       └── WishlistService.java
        │
        │       ├── infrastructure  
        │       │   ├── api
        │       │   │   ├── AladinApiClient.java
        │       │   │   ├── AladinSearchResponse.java
        │       │   │   └── WebClientConfig.java
        │       │   ├── redis
        │       │   │   ├── RedisConfig.java
        │       │   │   └── SearchCacheAdapter.java
        │       │   └── repository
        │       │       ├── BookRepository.java
        │       │       ├── BookshelfRepository.java
        │       │       ├── EmotionRepository.java
        │       │       ├── PageRecordRepository.java
        │       │       ├── RecordEmotionRepository.java
        │       │       ├── UserEmotionStatProjection.java
        │       │       ├── UserRepository.java
        │       │       └── WishlistRepository.java
        │
        │       ├── presentation    
        │       │   ├── api
        │       │   │   ├── book
        │       │   │   │   └── BookApi.java
        │       │   │   ├── bookshelf
        │       │   │   │   ├── BookRecommendApi.java
        │       │   │   │   ├── BookShelfApi.java
        │       │   │   │   ├── DeskApi.java
        │       │   │   │   ├── ReadingFinishApi.java
        │       │   │   │   └── ReadingStartApi.java
        │       │   │   ├── record
        │       │   │   │   └── RecordApi.java
        │       │   │   ├── report
        │       │   │   │   ├── CalendarApi.java
        │       │   │   │   ├── ReadingReportApi.java
        │       │   │   │   └── StatsApi.java
        │       │   │   ├── user
        │       │   │   │   ├── AuthApi.java
        │       │   │   │   └── UserApi.java
        │       │   │   └── wishlist
        │       │   │       └── WishlistApi.java
        │       │   └── dto
        │       │       ├── book
        │       │       │   ├── BookDto.java
        │       │       │   ├── BookInfoDto.java
        │       │       │   ├── BookSearchResponse.java
        │       │       │   ├── StatusResponse.java
        │       │       │   └── UserBookEmotionStatDto.java
        │       │       ├── bookshelf
        │       │       │   ├── BookshelfCreateRequest.java
        │       │       │   ├── BookshelfResponse.java
        │       │       │   ├── BookshelfSummaryDto.java
        │       │       │   └── RecommendedBookDto.java
        │       │       ├── record
        │       │       │   ├── CompletionRecordCreateRequest.java
        │       │       │   ├── CompletionRecordResponse.java
        │       │       │   ├── CompletionRecordUpdateRequest.java
        │       │       │   ├── EmotionDto.java
        │       │       │   ├── PageRecordCreateRequest.java
        │       │       │   ├── PageRecordResponse.java
        │       │       │   ├── PageRecordUpdateRequest.java
        │       │       │   └── UnifiedRecordResponse.java
        │       │       ├── report
        │       │       │   ├── BookActivityDto.java
        │       │       │   ├── DailyActivityDto.java
        │       │       │   ├── EmotionRankingResponse.java
        │       │       │   ├── MonthlyReadingStatsDto.java
        │       │       │   └── ReadingReportResponse.java
        │       │       ├── user
        │       │       │   ├── EmailRequest.java
        │       │       │   ├── EmailVerificationRequest.java
        │       │       │   ├── LoginRequest.java
        │       │       │   ├── LoginResponse.java
        │       │       │   ├── SignUpRequest.java
        │       │       │   ├── UserInfoResponse.java
        │       │       │   └── UserResponse.java
        │       │       └── wishlist
        │       │           ├── WishlistRequest.java
        │       │           └── WishlistResponseDto.java
        │
        │       └── global            
        │           ├── common
        │           │   └── CookieUtil.java
        │           ├── config
        │           │   ├── JacksonConfig.java
        │           │   ├── OpenApiConfig.java
        │           │   ├── SecurityConfig.java
        │           │   └── WebConfig.java
        │           ├── exception
        │           │   ├── CustomAuthenticationEntryPoint.java
        │           │   ├── CustomException.java
        │           │   ├── ErrorCode.java
        │           │   ├── ErrorResponse.java
        │           │   └── GlobalExceptionHandler.java
        │           └── security
        │               ├── CustomPrincipal.java
        │               ├── JwtAuthenticationFilter.java
        │               ├── JwtProvider.java
        │               └── OAuth2SuccessHandler.java
        │
        └── resources
            ├── application.yml
            └── data.sql

🏛️ 시스템 아키텍처 (System Architecture)

시스템 아키텍처

CI/CD 파이프라인

  1. 개발자가 GitHub에 코드를 Push합니다.
  2. GitHub Actions가 이를 감지하여 Gradle 빌드, Docker 이미지 빌드 및 테스트를 자동 수행합니다.
  3. 빌드가 성공하면, 생성된 Docker 이미지를 Docker Hub에 Push합니다.

서비스 배포 및 요청 처리 흐름

  1. EC2 인스턴스에서 Docker Hub의 최신 이미지를 Pull하여 애플리케이션을 실행합니다.
  2. 사용자의 요청은 프론트엔드가 배포된 Vercel을 통해 EC2 인스턴스로 전달됩니다.
  3. Nginx가 Reverse Proxy 역할을 수행하며 요청을 Spring Boot 애플리케이션으로 라우팅합니다.
  4. Spring Boot 애플리케이션은 Redis를 캐시로 사용하고, Amazon RDS (MySQL) 에 데이터를 영속화합니다.
  5. PrometheusGrafana를 통해 애플리케이션의 상태를 모니터링합니다.

🚀 API 문서 (API Docs)

API 명세서는 Swagger UI를 통해 확인하고 직접 테스트해볼 수 있습니다.

➡️ INDEX API 문서 바로가기 (Swagger)


👑 팀원 소개

PM UX/UI UX/UI FE
Image
정환욱 정다희 채준병 김민희
일정 관리 및 회의 진행
문서화
디자인 시스템
UI/UX 디자인
디자인 시스템
UI/UX 디자인
로그인 및 회원가입 (소셜 로그인)
검색 기능
도서 상세 페이지
FE BE BE BE
최성령 나현오 박영찬 이동주
메인 페이지
인덱스 CRUD
독서 리포트 페이지
책상/책장 API
감정 랭킹, 내 독서 API
추천 도서 API
Swagger API 문서화
로컬 로그인/로그아웃 (Spring Security)
독서 상태 관리 (CRUD)
도서 찜, 독서 캘린더, 월별 독서 통계 기능
Swagger API 문서화
DB 설계 및 연동
도서 검색 API
도서 상세 API

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •