BookBook은 사용자 간 도서 대여를 편리하게 관리할 수 있는 웹 애플리케이션입니다. 사용자들은 자신의 도서를 등록하고, 다른 사용자의 도서를 대여할 수 있으며, 대여 기록과 상태를 실시간으로 확인할 수 있습니다.
- 📚 도서 등록 및 대여 관리
- 🔍 도서 검색 및 필터링
- 📅 대여/반납 상태 관리
- 👤 사용자 인증 및 프로필 관리
- 💬 채팅 기능
- ⭐ 리뷰 시스템
- 📢 알림 기능
- 🚨 신고 및 정지 관리
- Language: Kotlin 1.9.25
- Framework: Spring Boot 3.x
- Database: PostgreSQL / H2 (테스트용)
- ORM: Spring Data JPA
- Build Tool: Gradle
- JDK: 21
- Security: Spring Security + JWT
- Framework: Next.js 14
- Language: TypeScript
- Styling: Tailwind CSS
- State Management: Zustand
- HTTP Client: Axios
- Container: Docker
- CI/CD: GitHub Actions
- Version Control: Git & GitHub
- OAuth Login: Naver, Kakao, Google OAuth 2.0
- Book Search: 알라딘 도서 검색 API
- Image Processing: Google Vision API (도서 표지 분석 및 텍스트 추출)
- JDK 21
- Node.js 18+
- Docker & Docker Compose (선택사항)
- PostgreSQL (로컬 실행 시)
# 프로젝트 클론
git clone https://github.com/your-org/NBE6-8-3-Team01.git
cd NBE6-8-3-Team01/backend
# 의존성 설치 및 빌드
./gradlew build
# 애플리케이션 실행
./gradlew bootRun
# 테스트 실행
./gradlew test
cd NBE6-8-3-Team01/frontend
# 의존성 설치
npm install
# 개발 서버 실행
npm run dev
# 프로덕션 빌드
npm run build
npm start
# backend/application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/bookbook
profiles:
active: dev
jwt:
secret: your-secret-key
POST /api/v1/auth/signup
- 회원가입POST /api/v1/auth/login
- 로그인POST /api/v1/auth/logout
- 로그아웃GET /api/v1/auth/refresh
- 토큰 갱신GET /api/v1/auth/oauth/naver
- 네이버 OAuth 로그인GET /api/v1/auth/oauth/kakao
- 카카오 OAuth 로그인GET /api/v1/auth/oauth/google
- 구글 OAuth 로그인
GET /api/v1/user/{id}
- 사용자 정보 조회PUT /api/v1/user/{id}
- 사용자 정보 수정DELETE /api/v1/user/{id}
- 회원 탈퇴GET /api/v1/user/profile/{id}
- 프로필 상세 조회
GET /api/v1/rent
- 대여 목록 조회POST /api/v1/rent
- 대여 게시글 생성GET /api/v1/rent/{id}
- 대여 상세 조회PATCH /api/v1/rent/{id}/status
- 대여 상태 변경
POST /api/v1/review/lender/{lenderId}/rent/{rentId}
- 대여자 리뷰 작성POST /api/v1/review/borrower/{borrowerId}/rent/{rentId}
- 대여받은 사람 리뷰 작성
GET /api/v1/admin/rent
- 전체 대여 목록 조회 (관리자)GET /api/v1/admin/report
- 신고 관리GET /api/v1/admin/user/suspended
- 정지 사용자 관리
GET /api/v1/book/search
- 알라딘 API를 통한 도서 검색GET /api/v1/book/detail/{isbn}
- ISBN으로 도서 상세 정보 조회POST /api/v1/book/image/analyze
- Google Vision API를 통한 도서 표지 분석
NBE6-8-3-Team01/
├── backend/
│ ├── src/
│ │ ├── main/
│ │ │ ├── kotlin/
│ │ │ │ └── com/bookbook/
│ │ │ │ ├── domain/
│ │ │ │ │ ├── user/
│ │ │ │ │ ├── rent/
│ │ │ │ │ ├── rentList/
│ │ │ │ │ ├── rentBookList/
│ │ │ │ │ ├── lendList/
│ │ │ │ │ ├── review/
│ │ │ │ │ ├── chat/
│ │ │ │ │ ├── notification/
│ │ │ │ │ ├── report/
│ │ │ │ │ ├── suspend/
│ │ │ │ │ ├── wishList/
│ │ │ │ │ └── home/
│ │ │ │ └── global/
│ │ │ │ ├── security/
│ │ │ │ ├── exception/
│ │ │ │ └── config/
│ │ │ └── resources/
│ │ └── test/
│ └── build.gradle.kts
├── frontend/
│ ├── src/
│ │ ├── app/
│ │ │ └── bookbook/
│ │ ├── components/
│ │ └── lib/
│ └── package.json
└── docker-compose.yml
# 전체 테스트 실행
./gradlew test
# 특정 도메인 테스트 실행
./gradlew test --tests "com.bookbook.domain.user.*"
도메인 | 테스트 클래스 | 주요 테스트 항목 |
---|---|---|
사용자 | UserServiceTest UserControllerTest AdminControllerTest |
• 사용자 조회 및 생성 • 프로필 관리 • 회원가입/탈퇴 |
인증 | JwtAuthenticationFilterTest LoginSuccessHandlerTest RefreshTokenControllerTest |
• JWT 토큰 검증 • 인증 필터링 • 토큰 갱신 |
대여 | RentAdminControllerTest RentListControllerTest RentBookListServiceTest |
• 대여 게시글 CRUD • 대여 상태 관리 • 페이징 처리 |
대출 | LendListControllerTest | • 대출 목록 관리 • 대출 상태 확인 |
리뷰 | ReviewControllerTest | • 대여자/대여받은 사람 리뷰 • 평점 관리 |
채팅 | ChatServiceTest | • 메시지 전송/수신 • 채팅방 관리 |
알림 | NotificationServiceTest | • 알림 발송 • 알림 조회 |
신고 | ReportServiceTest ReportControllerTest ReportAdminControllerTest |
• 신고 접수 • 신고 처리 • 관리자 신고 관리 |
정지 | SuspendedUserControllerTest | • 사용자 정지 관리 • 정지 해제 |
찜목록 | WishListControllerTest | • 찜하기/해제 • 찜목록 조회 |
홈 | HomeServiceTest | • 홈 화면 데이터 조회 • 추천 도서 |
- Spring Boot Test를 활용한 통합 테스트
- MockMvc를 통한 Controller 계층 테스트
- @Transactional을 활용한 롤백 테스트
- @ActiveProfiles("test")로 테스트 환경 분리
프로젝트에 기여하고 싶으시다면 아래 작업 흐름을 참고해주세요.
- 이슈 생성
- GitHub 이슈 탭에서 적절한 작업 태그를 지정합니다.
- (
feat | fix | refactor | docs | test | build
)
- 브랜치 생성
feat/21-user-signup-api
와 같이 적절한 브랜치 이름을 생성합니다.
- 커밋 메시지 작성
회원가입 API 구현(#21)
(커밋 메시지에#이슈번호
를 포함하면 좋습니다.)
태그 | 설명 |
---|---|
feat |
새로운 기능 추가 |
fix |
버그 수정 |
refactor |
리팩토링 (기능 변화 없이 코드 구조 개선, 가독성 향상 등) |
docs |
문서 수정 (README, Wiki, 주석 등) |
test |
테스트 코드 추가 또는 수정 |
build |
빌드 시스템 또는 외부 종속성에 영향을 미치는 변경 (e.g., webpack, npm) |
- PR(Pull Request) 작성
[feat] 회원가입 API 구현 (#21)
와 같이 작성.
- 코드 리뷰 및 머지 상세
- Squash and Merge: 여러 개의 커밋을 하나의 커밋으로 합쳐서
main
브랜치에 머지합니다. main
브랜치의 커밋 히스토리를 깔끔하게 유지할 수 있습니다.
- JDK 21
- 코틀린 버전 1.9.25 (스프링부트 3.5 버전 호환성)
- 2.0.0 부터는 K2 컴파일러의 도입으로 기존 대비 평균 2배 이상의 컴파일 속도 개선이 이루어졌고,
코틀린 코드로 좀 더 자연스럽게 마이그레이션 된다고 합니다. - 스프링부트 4부터는 코틀린 2.2.0 버전을 기본으로 지원할 것이라 하네요 (25년 11월 경)
- 2.0.0 부터는 K2 컴파일러의 도입으로 기존 대비 평균 2배 이상의 컴파일 속도 개선이 이루어졌고,
- 자바 -> 코틀린로 마이그레이션 후 커밋하면, 내역은 파일 수정(확장자 변경 -> 코드 수정)이 아닌,
기존 파일 삭제 -> 새 파일 생성으로 남습니다. 이는 PR 때 코드 리뷰 시 불편함을 발생시킬 수 있습니다. - 터미널로 커밋 메세지를 한글로 입력하게 되면 인코딩 문제로 인해, 깨진 상태로 커밋이 올라오는 경우가 있습니다.
인텔리제이는 이러한 부분을 잘 지원해주기 때문에 버전 관리에 용이할 것으로 보입니다.