Spring
-
핸들러 URI 패턴Spring/Spring MVC 2020. 6. 2. 23:55
한 글자가 추가로 오는 경우 ?는 한문자를 나타내며 랜덤한 글자를 모두 맵핑하게 된다. 따라서 다음과 같은 요청은 /hellos 지만 200응답이 나오게 된다. 여러 개의 글자가 추가로 오는 경우 * 를 붙여서 여러 개의 글자를 추가로 맵핑하게 된다. 따라서 다음과 같은 테스트는 통과하게 된다. 하나의 * 는 하나의 path(/)를 기준으로 하므로 다음과 같은 Test는 실패하게 된다. 여러개의 path(/) 로도 허용하려면 *를 2개 붙여주면 된다. 핸들러 요청을 정규식으로 받아보기 다음과 같이 정규식과 @PathVariable를 통해 URI Path에 들어있는 name을 받아올 수 있다. 이제 name으로는 영문자만 허용하고 응답 본문으로 "hello seungyeol" 이 나오게 된다. 다음과 같은..
-
Http method와 요청 매핑Spring/Spring MVC 2020. 6. 2. 01:38
해당 핸들러는 RequestMapping을 통해 핸들러 역할을 하게 된다. 이때 메소드를 따로 명시하지 않으면 모든 메서드 요청을 다 허용하게 된다. Get만 처리하고 싶다면 method에다 허용하고 싶은 RequestMethod를 설정해주면 된다. 이제 Post요청을 보내보면 405로 Method NotAllowed 가 되는 것을 알 수 있다. Get과 Post를 둘다 허용한다면 다음과 같이 할 수 있다. Http 메소드에 대해 알아보자. Get 클라이언트가 서버에 있는 리소스를 요청할 때 사용한다 Get요청에 응답은 캐싱이 가능하다. 캐시와 관련된 헤더를 응답에 싣고 if-not-modified를 통해 조건 Get 가능하다. 브라우저에 히스토리에 남게 된다. 민감한 데이터를 보낼 때는 URL에 다 표..
-
Spring Data JPA 3. 쿼리 메서드Spring/Spring Data JPA 2020. 6. 2. 00:30
쿼리 메서드 정의하기 2가지 방법 메서드 이름에서 직접 쿼리를 끄집어내는 방법 직접 정의되어 있는 쿼리를 애노테이션을 통해 가져오는 방법 Query를 가져오는 전략 3가지 EnableJPARepositories에 보면 queryLookupStrategy라는 애노테이션이 있고 3가지 중 하나를 설정할 수 있다. 1. CREATE 쿼리 메소드 이름 가지고 쿼리를 만든다. well-known prefix를 제거하고 나머지를 파싱해서 메서드를 만든다. findById 등 2. USE_DECLARED_QUERY 미리 정의된 쿼리를 찾으려 한다. 찾지 못하면 예외를 던지게 된다. App이 뜨는 시점에 쿼리를 못 찾으면 fail. 3. CREATE_IF_NOT_FOUND ( default ) 1,2를 합친 것. 선언..
-
Spring Data JPA 2. null 처리 관련 애노테이션Spring/Spring Data JPA 2020. 6. 1. 23:00
리포지토리를 튜닝해보기 리포지토리는 Repository, CrudRepository, PagingAndSortingRepository를 상속받을 것이다. @RepositoryDefinition 이런 상속을 받고 싶지 않은 경우 애노테이션으로 처리가 가능하다. @RepositoryDefinition로 가능하며 CrudRepository를 상속받는 식으로 만든다면 메서드 들은 전부 공개가 되게 되지만 이런 어노테이션 방식은 노출하고 싶은 메서드만 노출이 가능한 것 같다. @NoRepositoryBean 다음과 같이 CRUD repository를 대신하는 Repository만 쓰고 Repository는 빈 영역이니 직접 CRUD repository를 만들고 선택적인 노출을 가능하게 할 수도 있다. 스프링 데이..
-
WebMvcConfigurer 살펴보기Spring/Spring MVC 2020. 5. 31. 21:13
WebMvcConfigurer로 할 수있는 일들을 살펴보았다. addFormatters addInterceptors addResourceHandlers 하지만 이 외에도 WebMvcConfigurer는 다양한 설정들을 제공한다. addReturnValueHandlers ReturnValueHandler는 핸들러에서 리턴되는 Person , String 등을 처리하는 핸들러 addReturnValueHandlers를 통해 리턴 값 핸들러를 설정 할 수 있다. 스프링 MVC가 제공하는 리턴 값 핸들러 이외에 커스텀한 리턴 핸들러를 추가할 수 있다. 이러한 리턴타입이 오면 이런식으로 처리하게끔 알려줄 수 있다. addViewController /hi 를 입력했을떄 hi에 해당하는 뷰로 바로 이동시키려면? 이런..
-
Json 컨버터Spring/Spring MVC 2020. 5. 28. 22:03
기본 HTTP message Converter가 제공이 되지만 의존성을 통해 컨버터를 등록하는 경우가 많다. 기본적으로 스프링 부트는 스타터 웹만 추가해도 JacksonJSON을 의존성에 넣어준다. (스프링 부트 기반이 아니라면 JacksonJSON 의존성을 넣어주면 된다) 따라서 해당 컨버터를 사용할 수 있게 되고 jacksonJSON이 제공하는 ObjectMapper을 활용할 수 있다. 의존성만 추가가 되면 아무런 설정을 하지 않아도 JSON 컨버터를 사용할 수 있다. 다음과 같이 요청 본문으로 들어오는 Json을 person 객체로 받아보자. 그리고 person을 그대로 return 해보자. 이때 응답으로 보내는 리턴 타입인 Person을 Json 타입으로 보내보자. 여러 가지 Http Messag..
-
HTTP 메세지 컨버터와 StringSpring/Spring MVC 2020. 5. 28. 00:02
@RequestBody를 통해 요청 본문에 있는 메시지를 읽어 들이거나 @ResponseBody 나 @RestController를 통해 응답 본문에 메시지를 작성할 때 HTTP 메세지 컨버터를 통해 컨버전하게 된다 여러 가지 기본 Http message converter 바이트 배열 컨버터 문자열 컨버터 Resource 컨버터 From 컨버터 : Html에서 보내는 Form데이터를 Map으로 변환 ( or Map -> Form ) 스프링 부트 역시 기본 HTTP message Converter를 사용한다. 요청 본문에 있는 문자열을 그대로 문자열에 받거나 핸들러에서 리턴하는 문자열을 그대로 응답 메시지에 쓰는 것이 가능하다. 특정 classpath에 class가 있는 경우에만 등록이 되는 게 HTTP 테..
-
JPA의 Dialect(방언)Spring/Spring Data JPA 2020. 5. 25. 15:09
Dialect(방언)이란? SQL은 다음과 같이 표준 SQL인 ANSI SQL이 있으며 ANSI SQL 이외에 각 DBMS Vendor(벤더, 공급업체)인 MS-SQL, Oracle, MySQL, PostgreSQL 에서 자신만의 기능을 추가한 SQL이 있다. ANSI SQL이 모든 DBMS에서 공통적으로 사용가능한 핵심 표준 SQL이지만 여러 제품의 DBMS에서는 자신만의 독자적인 기능을 위해서 추가적인 SQL을 만들었다. 예를 들어 MS-SQL의 T-SQL 그리고 Oracle의 PL/SQL이 대표적이다. 또한 기본키를 할당하는 방법에도 MySQL의 경우는 AUTO_INCREMENT라는 기능과 오라클 DB에는 시퀀스라는 기능이 있다. 이것은 마치 대한민국의 수도인 서울에서 사용하는 표준어가 있고 충청,..