이전

리뷰 (1)

한줄평
평점 분포
  • 리뷰 총점10 100%
  • 리뷰 총점8 0%
  • 리뷰 총점6 0%
  • 리뷰 총점4 0%
  • 리뷰 총점2 0%
연령대별 평균 점수
  • 10대 0.0
  • 20대 0.0
  • 30대 0.0
  • 40대 10.0
  • 50대 0.0
리뷰 총점 종이책 구매
RESTful 서버 구현방법에 대해 잘 배울 수 있었습니다.
"RESTful 서버 구현방법에 대해 잘 배울 수 있었습니다." 내용보기
요즘의 스프링 부트로 RESTful API 서버를 어떤식으로 구현하는지 궁금해서, 책을 구매했었구요,이제 한번 다 보았네요..서문에서 "매번 하루살이와 같은 API 서버를 만들지 않을 수 있는 토대가 된다면 이책의 목표를 달성했다고 생각합니다"라는 말이 맘에 들어 끝까지 다보았습니다.책을 쭉 보면서...초보자라도 따라하기 쉽게 구성이 아주 잘 되어있고,트랜젝션 지정에 따라 쿼리 실
"RESTful 서버 구현방법에 대해 잘 배울 수 있었습니다." 내용보기

요즘의 스프링 부트로 RESTful API 서버를 어떤식으로 구현하는지 궁금해서, 책을 구매했었구요,

이제 한번 다 보았네요..


서문에서 "매번 하루살이와 같은 API 서버를 만들지 않을 수 있는 토대가 된다면 이책의 목표를 달성했다고 생각합니다"라는 말이 맘에 들어 끝까지 다보았습니다.


책을 쭉 보면서...

초보자라도 따라하기 쉽게 구성이 아주 잘 되어있고,

트랜젝션 지정에 따라 쿼리 실행이 어떤 식으로 되는지 테스트 코드로 알려주시는 점이 좋았고,

API 설계에 대해  표로 요약을 먼저 해두시는 것도 좋고,

컨트롤러 어드바이스 구현 부분과 나타날 수 있는 예외 항목에 대해서 Enum으로 설계하신 부분이 가장 맘에 들었습니다.

결국은 저는 이런 구현 스타일을 배우고 싶었는데, 이런 부분에서 도움이 많이 된 것 같습니다.



서문에서 기대하신대로 좀 더 견고한 API 서버를 만들 수 있을 것 같다는 자신감이 좀 더 생겼습니다.


개정판이 나온다면..

  • 장바구니 API 까지는 있었지만, 지면관계상 주문 프로세스가 포함되지 않은 것 같은데, 다음 개정판이 나온다면 주문 처리도 추가되면 좋을 것 같습니다.

  • Spring 6.1로 버전업 되면서 Spring Security의 SpEL이 -parameters 컴파일러 옵션이 적용되지 않은 환경에서는 제대로 동작하지 않을 수 있는데, 이 부분 보강을 해주면 좋을 것 같습니다. 
    p412에서 다음과 같은 주석이 있었는데, "Gradle 환경" 관련이라기보단 이 컴파일러 옵션이 제대로 적용이 되지 않아서 그런 것 같은데.. 한번 검토 부탁드립니다.

    // Gradle 환경 주의
    @PreAuthorize("authentication.name == #addCartItemDTO.holder")
  • API서버가 Jwt필터기반으로 회원 조회를 처리해서  부트가 자동 설정하는 UserDetailsServiceAutoConfiguration가 설정될 필요가 없을 것 같은데.. 다음 내용도 검토 부탁드립니다.

    // 제외 처리를 추가하는 것이 나을 것 같은 생각이 듭니다. 
    @SpringBootApplication(exclude = {UserDetailsServiceAutoConfiguration.class})
    @EnableJpaAuditing
    public class Ex3Application {
      ...



정오표

  • p114

    int pageNum = page  0   1 : page - 1;
    // 다음과 같이 바꿔야할 것 같다. ===>
    int pageNum = page  1   0 : page - 1;
  • p148:

    • 두번째 캡쳐화면의 패키지명이 잘못됨.

      • org.zerock.movies로 되어있음.


  • p237: 오류 응답 처리 함수 관련...

    const errorResponse = (error) => {
      console.log('errorResponse')
    
      // 엑세스 토큰이 없이 호출했을 경우는,
      // 요청전에 Exception을 던져져서 응답(response)가 없다.
      if (error.response?.status && error.response?.data) {
        const status = error.response.status
        const res = error.response.data
        const errorMsg = res.error
        console.log(status, res, errorMsg)
      } else {
        console.log(error)
      }
    
       return Promise.reject(error)
    }

    beforeRequest 함수에서 엑세스 토큰이 없이 요청을 하려할 때.. API 서버로 요청을 하기전에 예외를 던지므로, 엑세스 토큰 없이 요청을 시도했을 경우에는 error의 response가 존재하지 않는 상태여서 위처럼 처리를 해야할 것 같다.


  • p247: 

    spring.webflux.multipart.max-in-memory-size=256KB

    업로드할 파일 크기가 일정크기가 넘어가면 파일시스템에 임시보관하는 설정이라고 하셨는데, Spring MVC 환경에서는 아래 설정을 써야하는 것이 맞을 것 같다.

    spring.servlet.multipart.file-size-threshold=256KB


  • p275:

    changeContent() 메서드가 이상하게 private로 되어있다.  public으로 바꿈.


  • p403: AddCartItemDTO는 기본 생성자가 필요함.

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public class AddCartItemDTO {
      ...

    @RequestBody로 요청하는 부분이 있어서 기본 생성자가 필요함.

    @Data는 @NoArgsConstructor@AllArgsConstructor를 포함하지 않음.



감사합니다. 책 잘 읽었습니다. 앞으로도 좋은 책 기대하겠습니다.

YES마니아 : 플래티넘 s******n 2024.10.17. 신고 공감 1 댓글 0