Spring/Spring MVC 43

javax에서 제공하는 @Valid, Spring이 제공하는 BindingResult

@Valid springboot가 버전업을 하면서 web 의존성안에 있던 constraints packeage가 모듈로 빠졌다. SpringBoot 2.3 이상에서는 따로 의존성을 추가해주어야한다. implementation 'org.springframework.boot:spring-boot-starter-validation' @Valid를 이용하면, service 단이 아닌 객체 안에서, 들어오는 값에 대해 검증을 할 수 있다. javax.validation.constraints 패키지를 보면 많은 어노테이션들이 존재한다. @Valid를 이용한 객체 검증 시 기본적으로 이 어노테이션을 이용 공식문서 코드 예시) 컨트롤러 @Controller @Slf4j public class MemberControll..

Spring/Spring MVC 2021.05.22

5/14 공부 내용

ModelAttribute를 사용하면 Item객체를 자동으로 생성하여 파라미터를 주입(setter를 사용함) model에 addAttribute를 통해 객체를 넣음. @ModelAttribute의 name속성을 생략할 수 있는데 이렇게 하면 클래스 타입의 첫글자를 소문자로 변경하여 이를 name으로 인식한다. Item -> item 즉 위는 @ModelAttribute("item")과 같다. 리다이렉트 스프링에서 리다이렉트는 redirect:/~~~으로 지원 컨트롤러에 매핑된 PathVarialbe의 값을 여기서도 사용가능 PRG Post/Redirect/Get 웹 브라우저의 새로 고침(F5)은 마지막에 서버에 전송한 데이터를 다시 전송 예를 들어 설명해보면, 위와 같은 형식으로 동작하는 웹 사이트가 있..

Spring/Spring MVC 2021.05.14

ThymeLeaf 공부

컨트롤러에서 뷰를 호출하고 이를 템플릿 엔진인 thymeleaf를 사용하여 동적으로 변경해보자. 컨트롤러 정적 리소스(HTML 파일) 상품 목록 상품 등록 ID 상품명 가격 수량 1 테스트 상품1 10000 10 2 테스트 상품2 20000 20 이를 타임리프를 사용하여 동적으로 변경하여보자. 타임리프를 사용하기 위한 th 네임스페이스 추가 xmlns:th="http://www.thymeleaf.org" BootStrap 경로 절대경로로 변경 상대 경로로 설정되어 있던 bootstrap파일 경로를 타임리프를 사용하여 절대 경로로 변경하였다. 위와 같이 작성하면 타임리프가 기존에 있던 href를 날리고 th가 붙은 href로 설정함 href="value1" 을 th:href="value2" 의 값으로 변경..

Spring/Spring MVC 2021.05.13

HTTP Message Converter

응답의 경우 클라이언트 HTTP Aceept 헤더와 서버의 Controller 반환 타입 정보를 조합해서 HTTPMessageConverter가 선택된다. HTTP 요청 : @RequestBody, HttpEntity(RequestEntity) HTTP 응답 : @ResponseBody, HttpEntity(ResponseEntity) HTTP Message Converter 인터페이스 해당 클래스, 미디어 타입을 지원하는지 체크 Message Converter를 통해서 메시지를 읽고 쓰는 기능 스프링 부트의 주요 Message Converter ByteArrayHttpMessageConverter : byte[] 데이터를 처리 클래스 타입 : byte[] 미디어 타입 : */* request ex) @..

Spring/Spring MVC 2021.05.11

HTTP Response

정적 리소스, 뷰 템플릿 스프링에서 응답 데이터를 만드는 법은 크게 3가지 정적 리소스 뷰 템플릿 HTTP Message(주로 JSON) 정적 리소스 스프링 부트는 ClassPath의 다음 디렉토리에 있는 정적 리소스를 제공 /static, /public, /resources, /META-INF/resources src/main/resources는 리소스를 보관하는 곳이고, ClassPath의 시작 경로이다. 따라서 리소스를 넣어두면 스프링 부트가 정적 리소르로 서비스를 제공 뷰 템플릿 뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어 전달 HTML을 동적으로 생성하는 용도로 사용하지만, 다른 것들도 가능하다. 뷰 템플릿이 만들 수 있는 것이라면 뭐든지 가능하다. 스프링 부트는 기본 뷰 템플릿..

Spring/Spring MVC 2021.05.10

HTTP Request Message

단순 텍스트 Request Parameter와 다르게, HTTP Message Body를 통해 데이터가 직접 넘어오는 경우는 @RequestParam, @ModelAttribute를 사용할 수 없다. 먼저 단순한 텍스트를 HTTP Message Body에 담아서 전송하고, 이를 InputStream으로 읽어보자. Spring 공식 문서를 참조하면 알 수 있듯이, InputStream과 OutputStream을 직접 받을 수 있다. 따라서 아래와 같이 코드를 작성할 수 있다. 스프링 MVC는 다음 파라미터를 지원한다. HttpEntity : HTTP header, body 정보를 편리하게 조회 메시지 바디 정보를 직접 조회 요청 파라미터를 조회하는 기능과 관계 없음 HttpEntity는 응답에도 사용 가능..

Spring/Spring MVC 2021.05.09

HTTP Request Parameter

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법에 대해 공부해보자. 클라이언트에서 서버로 요청 데이터를 전달할 때 주로 사용하는 3가지 방법 GET - 쿼리 파라미터 /example?username=son&age=25 메시지 바디없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 검색, 필터, 페이징등에서 많이 사용 POST - HTML Form content-type : application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식으로 전달 username=son&age=20 회원 가입, 상품 주문, HTML Form 사용 HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용, JSON / XML / TE..

Spring/Spring MVC 2021.05.07

HTTP 요청 - 헤더 정보

애노테이션 기반의 스프링 컨트롤러는 다양한 파리미터를 지원 HTTP 헤더 정보를 조회하는 방법에 대해 공부해보자 이미지가 잘려있지만 headerMap은 모든 헤더 정보가 Map안에 key-value형태로 담겨있다. Locale은 지역의 언어, 국가 등의 정보를 갖고 있는 객체 헤더 정보 중 host라는 키 값으로 value를 가져옴(특정 헤더 조회) required 속성을 통해 필수 값 여부를 설정 @CookieValue 또한 required 속성을 통해 필수 값 여부 설정 가능 MultiValueMap은 Map과 유사하지만 하나의 키의 여러 값을 받을 수 있다. HTTP header, HTTP Query Parameter와 같이 하나의 키에 여러 값을 받을 때 사용 get을 통해 값을 꺼내면 해당 키에..

Spring/Spring MVC 2021.05.07

요청 매핑

@RequestMapping은 위와 같이 다중 값 설정이 가능하다. /hello-basic과 /hello-basic/은 다른 URL이지만, 스프링은 이를 같은 요청으로 매핑한다. 또한 앞서 공부했듯이 method 속성으로 HTTP 메서드를 지정하지 않으면 HTTP 메서드와 무관하게 모두 호출된다. 이는 method 속성에서 HTTP 메서드를 지정해주는 방식으로 해결할 수 있다. 더 편리하게 제공되는 GetMapping 애노테이션으로 더욱 직관적으로 나타낼 수 있음. PathVariable(경로 변수) 위와 같이 변수를 사용하여 매핑시키고 들어온 변수를 PathVariable을 통해 꺼낼 수 있다. 최근 HTTP API는 다음과 같이 리소스 경로에 식별자를 넣는 스타일을 선호 /mapping/userA /..

Spring/Spring MVC 2021.05.06

로깅 간단히 알아보기

보통 println() 같은 시스템 콘솔을 사용하여 디버깅을 진행하였는데, 실무(실제 운영시스템)에서는 별도의 로깅 라이브러리를 사용하여 로그를 출력한다. 로깅 라이브러리 스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리(spring-boot-starter-logging)가 함께 포함된다. 스프링 부트 로깅 라이브러리는 기본으로 다음 로깅 라이브러리를 사용 SLF4J Logback 로그 라이브러리는 Logback, Log4J, Log4J2 등등 수많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4J 라이브러리이다. 로그 선언 private Logger log = LoggerFactory.getLogger(getClass()); private static fin..

Spring/Spring MVC 2021.05.03
반응형