Team 정보
Project Naming → BookSage - Book + Sage(현명한, 현자)
Project Vision - 이 시스템을 프로젝트로 하는 목표
BookSage는 성곡도서관에 비치된 다양한 책 속에서 어떤 책을 선택할지 망설이는
학우들을 위해 여러 대형 서점의 베스트셀러 정보를 가져와 제공하는 서비스입니다. 이를 통해 학우들은 여러 방향의 도서 추천을 받을 수 있을 것이며, 이에 연계된 성곡도서관의 활용도가 높아질 것으로 기대됩니다.
Project Scope - Use Case 3개
Tech Stack
Functional Requirements
Use Case Description
대형서점 베스트셀러 리스트 조회하기
도서 검색하기
최근 검색어 저장하기
Use Case Diagram
Non-Functional Requirements
Use Case Name | Non-Funtional Requirement | Quality Category | Quality Attribute |
---|---|---|---|
베스트셀러 리스트 조회하기 | 사용자가 오래 기다리지 않도록 빠르게 검색하고 데이터를 가공한다. | Performance efficiency - Time behavior | 결과 화면을 4s 이내에 출력한다. |
도서 검색하기 | 잘못된 입력을 받지 않는다. | Usability - User error protection | 빈 문자열이나 공백 문자로만 이루어진 문자열이 들어오면 기본 상태인 “베스트셀러 리스트 조회”로 넘어간다.(Whitespace, Newline, tab) |
UC1, UC2 | 사용자가 응답을 기다릴 때 느끼는 지루함을 줄인다. | Usability - User Interface Aesthetics | 서버로부터의 응답이 오는 동안 스켈레톤 이미지를 보여준다. |
Domain Model - Conceptual class table
Design Model
System Sequence Diagram
Operation Contracts
Contract CO1
Operation: getBestSellers()
Cross references: UC_대형서점 베스트셀러 리스트 조회하기
Preconditions: none
Postconditions:
Contract CO2
Operation: SearchBook(query: String)
Cross references: UC_도서 검색하기
Preconditions: 검색어(query)가 입력됨
Postconditions:
Contract CO3
Operation: updateHistory(query: string)
Cross references: UC_최근 검색어 저장하기
Preconditions:
Postconditions:
Contract CO4 (Unfinished)
Operation: addBookmark(String memberId, Bookmark bookmark)
Cross references: UC_북마크 등록하기
Preconditions:
Postconditions:
Sequence Diagram
UC_베스트셀러 리스트 조회하기
UC_도서 검색하기
UC_최근 검색어 저장
UC_북마크 등록하기
Class Diagram (Before)
Class Diagram (After)
Backend - Spring
Frontend - React with Typescript
Before Classifier | After Classifier | Applied Pattern | Architecture Design Rationale | Impact to NFR/QA |
---|---|---|---|---|
Backend classes | Classes packaged by concept | GRASP - High Cohesion | 회원 정보 관련 클래스와 도서 스크래핑 관련 클래스를 패키지 단위로 분리해, 유지보수를 용이하게 함. | 유지보수성을 증가시켜 이후 발생할 이슈에 들어가는 리소스를 줄일 수 있다.(오류 해결에 걸리는 시간, 기능 개선 등) |
Book | BookDTO | GRASP - Information expert, Low Cohesion, polymorphism | 기존 도서 클래스를 엔티티로 사용함에 따라, 데이터 전달만을 위한 전문가 객체를 만들어 사용함. 추가로, 각 도서 Source별로 스크래핑 및 파싱 방법이 달라 각각에 맞는 DTO 객체를 만들어 다형성을 적용함. | 데이터의 무결성을 보장해 프로그램의 안정성을 높이고, 새로운 Source를 추가할 때 기존 구조에 미치는 영향을 최소화할 수 있다. |