1. Team 정보

  2. Project NamingBookSage - Book + Sage(현명한, 현자)

    Project Vision - 이 시스템을 프로젝트로 하는 목표

     BookSage는 성곡도서관에 비치된 다양한 책 속에서 어떤 책을 선택할지 망설이는 
    

    학우들을 위해 여러 대형 서점의 베스트셀러 정보를 가져와 제공하는 서비스입니다. 이를 통해 학우들은 여러 방향의 도서 추천을 받을 수 있을 것이며, 이에 연계된 성곡도서관의 활용도가 높아질 것으로 기대됩니다.

    Project Scope - Use Case 3개

    1. 대형서점 베스트셀러 리스트 조회하기
    2. 도서 검색하기 - 이름/주제 등으로 책 조회하기 (도서관, 대형서점)
    3. 최근 검색어 저장하기

    Tech Stack

  3. Functional Requirements

  4. 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 서버로부터의 응답이 오는 동안 스켈레톤 이미지를 보여준다.
  5. Domain Model - Conceptual class table

    Untitled

  6. Design Model

    1. System Sequence Diagram

      Untitled

    2. Operation Contracts

      1. Contract CO1

        Operation: getBestSellers()

        Cross references: UC_대형서점 베스트셀러 리스트 조회하기

        Preconditions: none

        Postconditions:

        • List<Book>이 생성됨.
        • 조회한 베스트셀러 정보가 Book 형태로 변환되어 List에 저장됨
      2. Contract CO2

        Operation: SearchBook(query: String)

        Cross references: UC_도서 검색하기

        Preconditions: 검색어(query)가 입력됨

        Postconditions:

        • SearchResults:List<Book> 이 생성됨.
        • 성곡도서관 서버의 조회 결과와 서점에서의 조회 결과가 리스트에 담김.
      3. Contract CO3

        Operation: updateHistory(query: string)

        Cross references: UC_최근 검색어 저장하기

        Preconditions:

        • 최소 1회 이상 검색함
        • 검색하지 않았다면 관련 요소가 나타나지 않음

        Postconditions:

        • 검색어가 검색창 좌측에 기록됨
        • 5개 초과 시 가장 오래된 기록 삭제
        • 이미 검색한 검색어일 경우 위치 최신화(가장 우측으로 가져옴)
      4. Contract CO4 (Unfinished)

        Operation: addBookmark(String memberId, Bookmark bookmark)

        Cross references: UC_북마크 등록하기

        Preconditions:

        • 회원 가입이 필요함. (register)
        • 올바른 회원 ID, PW를 요청에 포함함

        Postconditions:

        • 회원 정보에 등록된 북마크가 화면 우측에 세로로 나열됨
    3. Sequence Diagram

      1. UC_베스트셀러 리스트 조회하기

        Untitled

      2. UC_도서 검색하기

        Untitled

      3. UC_최근 검색어 저장

        Untitled

      4. UC_북마크 등록하기

        Untitled

    4. Class Diagram (Before)

      booksage Class Diagram.png

  7. Class Diagram (After)

    Backend - Spring

    Backend - Spring

    Frontend - React with Typescript

    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를 추가할 때 기존 구조에 미치는 영향을 최소화할 수 있다.