|
요즘의 스프링 부트로 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 {
...
정오표
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를 포함하지 않음.
감사합니다. 책 잘 읽었습니다. 앞으로도 좋은 책 기대하겠습니다.
|