프로젝트

도서 기능 구현 API

미뿌감 2024. 3. 5. 16:08
728x90

이번 과제로 도서 기능 구현 API를 만들어 보았다.

 

1. 기능

[필수 구현 기능]

  • 도서 등록 기능
    • 제목, 저자, 언어, 출판사, 등록일 을 저장할 수 있다.
    • 저장된 도서의 정보를 반환 받아 확인할 수 있다.
  • 선택한 도서 정보 조회 기능
    • 선택한 도서의 정보를 조회할 수 있다.
  • 도서 목록 조회 기능
    • 등록된 도서 전체를 조회할 수 있다.
    • 조회된 도서 목록은 등록일 기준 오름차순으로 정렬되어 있다.
  • 도서관 회원 등록 기능
    • 이름, 성별, 주민번호, 전화번호, 주소 를 저장할 수 있다.
      • 주민번호와 전화번호는 중복될 수 없다.
    • 저장된 회원의 정보를 반환  받아 확인할 수 있다.
      • 반환 받은 회원의 정보에 주민번호는 제외 되어 있다.
  • 선택한 도서 대출 기능
    • 회원은 선택한 도서를 대출받을 수 있다.
      • 도서의 식별값과 회원의 식별값이 함께 요청된다.
      • 반납하지 않은 책이 있다면 대출이 불가능하다.
      • 선택한 도서가 현재 대출 상태라면 대출이 불가능하다.
    • 회원의 대출 내역을 기록할 수 있다.
      • 대출 내역 기록에는 도서의 식별값, 회원의 식별값, 반납상태, 대출일, 반납일 을 저장할 수 있다.
      • JPA의 연관관계 매팅 애너테이션을 사용하지 않고 구현한다.
    • 대출 성공을 확인할 수 있는 값을 반환한다.
      • ex) HTTP Status Code, Error Message ...
  • 선택한 도서 반납 기능
    • 선택한 도서를 반납할 수 있다.
      • 대출 내역 기록의 반납상태와 반납일이 변경된다.
    • 대출 내역 조회 기능
      • 회원의 대출 내역 기록을 조회할 수 있다.
        • 대출 내역 리고에는 회원의 이름과 전화번호, 도서의 제목과 저자가 포함 되어있어야 한다.
      • 조회된 대출 내역 기록은 대출일 기준 오름차순으로 정렬되어 있다.

 

[추가 구현 기능]

  • JPA 연관관계 매핑 애너테이션을 사용하지 않고 구현된 부분들을 사용해서 처리되도록 변경한다.
    • 매핑 애너테이션으로 변경 되더라도 이전과 기능은 동일하게 동작되어야 한다.
  • 대출 내역 조회 조건 추가
    • 대출 내역을 조회 할 때 반납이 완료된 대출 내역은 제외하고 조회할 수 있다.
  • 패널티 기능
    • 회원이 도서를 반납할 때 대출일 기준으로 7일 이내에 반납하지 않았다면 회원에게 패널티를 부여한다.
    • 패널티를 받은 회원은 2주일 동안 도서를 대출할 수 없다.
  • 도서 대출 가능 여부 기능
    • 선택한 도서 혹은 도서 목록을 조회 했을 떄 도서의 대출 가능 여부를 확인할 수 있다.
  • 선택한 도서가 이미 대출 상태일 때 등의 예외가 발생하는 경우 API 요청 실패(예외상황)에 대해 판단할 수 있는 Status Code, Error 메시지 등의 정보를 반환한다.

2. Use Case Diagram

 

Use Case Diagram은 이렇게 그려보았다.

 

3. ERD

ERD의 경우, 위와 같이 그려보았다. 이는 추가 구현 기능 전에 그린 것이고, 이후에 패널티만 추가하였다.

추가 구현 기능으로 JPA 연관관계 매핑 애너테이션을 이용해서, loan에다가 적용시켜 주었다.

 

이후 API 명세서를 작성해 주었다.

 

뭔가 ERD를 그리고, API 명세서를 작성하니까 더 편했다. 우선순위가 있나 찾아봤는데, 어떤 것을 우선시 하느냐 따라서 달라진다고 한다.

나의 경우엔, ERD를 그리고, API 명세서를 작성하는 것이 그림 그리기에 더 편했다.

 

3. API 명세서

API 명세서는 이런식으로 작성해 주었다. 확실히 작성하고 코드 작성에 들어가니 너무 좋았다.

헷갈리는 부분도 적어지고, 코드 작성 속도도 빨라졌다.

 

https://documenter.getpostman.com/view/33266727/2sA2xcbvPi

 

lv2 추가 구현

도서 대출 기능들을 구현해 보았다.

documenter.getpostman.com

여기서 API 예시들과 결과들을 확인해 볼 수 있다.

 

4. 개선 방안

  • 우선 service나 controller에 대해서, 기능들을 분리해서 적어두었으면 더 좋지 않았을까 라고 생각한다.
  • Github에 자주자주 기능마다 commit을 진행해두는 습관을 가지도록 하자.
  • 코드를 더 깔끔** 하게 작성해보고 싶다.

5. 에러

  • 약간 바보같은 에러들을 몇개 하였었다. 우선, 406 에러로 dto에다가 @getter를 설정하지 않았었다.
  • DB 연결 application.properties에다가 db의 이름을 기존의 것에서 변경하지 않아서, db 연결이 되지 않았었다.

 

 

728x90