꽤 최근에 토이 프로젝트의 controller 코드가 조금 단순화 되었음을 볼 수 있습니다. 아직 리팩토링이 다 끝났다고 말 하기도 그렇지만. 사실 어제 리뷰를 받고 valid 어노테이션을 적용한 것이 조금 컸습니다. 변경 내역은 이 링크에서 보실 수 있습니다. 사실 문제의 발단은 사소한 테스트에서 출발하였습니다. 유저가 중복된 경우에 대해서 왜 내 프로젝트는 500을 떨어트릴까? 예외 처리가 느슨해 보였습니다. 그런데 마침 카톡방에서 리뷰어 분들이 제 프로젝트를 보시고, Bad request 부분을 처리하는 로직이 비대해 보인다면서, Valid 어노테이션을 써 보는 게 어떻겠냐는 조언을 주셨습니다. 먼저 dependencies에 Validation을 추가합니다. pom.xml에는 spring-boot-..
스프링부트 검색 결과
이번 시간에는 preAuthorized에 대해서 간단하게 알아봅시다. 도서관 토이 프로젝트 중에서, 인증 처리를 구현해야 하는 부분이 있었습니다. 그리고, 특정 권한을 가져야 api를 수행하게끔 하는 기능도 있었습니다. 스프링 시큐리티는 익숙하지 않아서, 테스트용 프로젝트를 하나 더 만든 다음에, 기능을 나누어서 구현하게 되었습니다. 해당 부분에 대해서는 이 레포에서 천천히 다뤄보도록 하겠습니다. 테스트용 프로젝트의 flow입니다. 인증 처리를 구현하고, 인가 처리를 하고, 그에 따라서 api에 접근할 수 있게 할 계획입니다. 한꺼번에 하기에는 양이 너무 많으니, 이번 시간에는 인가 부분만 해 보도록 하겠습니다. 인증하고 인가에 대한 것은 이 글에서 언급을 했어요. 이 글에서 언급할 것은 preAutho..
mybatis의 xml mapper는 dynamic sql도 지원하고 있습니다. 저는 처음에 배울 때, if나 foreach 정도만을 써 왔는데요. trim도 알아두면 상당히 강력한 도구가 될 듯 싶습니다. 검색 api를 보면서 감을 잡아보도록 하겠습니다. 저번 시간에 모든 책을 get 하는 api를 작성한 적이 있었습니다. 이것을 Query 파라미터로 받게 바꾸어 보겠습니다. 저는 bookClass와 bookName을 선택적인 Query parameter로 받게끔 하였습니다. 만약에, 해당 Key가 없다면, null 값으로 들어갈 겁니다. 왜냐하면 모델 book의 bookClass는 int가 아닌 Integer로 선언되었기 때문입니다. 쿼리 결과는 위와 같이 나와야 합니다. 먼저 BookMapper의 ..
저번 글에서, ConfigureSource에 대해 알아보았습니다. 그 글에서, 이런 이야기를 했습니다. 객체가 생성되었을 때, 완전한 상태가 되게 할 수는 없을까? 정확히 말하면, 객체가 생성되었을 때, 설정이 되어야 하는 값은 생성이 될 때 setting이 되게 할 수 없을지를 고민해 보자고 하였습니다. 그에 대한 답이 될 수 있는 것은 ConstructorBinding 어노테이션을 쓰는 것입니다. ConfigurationProperties 어노테이션을 보면, 세터를 쓰거나, ConstructorBinding을 쓸 수 있다고 되어 있습니다. binding을 하는 방법에는, 세터 메서드 말고도, 생성자로 할 수 있다는 이야기입니다. 그래서 위에 해당 어노테이션을 적어 주었습니다. 해당 어노테이션에 대한 ..
최근댓글