Spring 22

스프링 MVC Validation - BindingResult, Field Error, Object Error

BindingResult스프링이 제공하는 검증 오류를 보관하는 객체, 검증 오류가 발생하면 여기에 보관한다. 예제 코드@PostMapping("/add")public String addItemV1(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes) { if (!StringUtils.hasText(item.getItemName())) { bindingResult.addError(new FieldError("item", "itemName", "상품 이름은 필수입니다.")); } if (item.getPrice() == null || item.getPrice() 1000000)..

Spring/Spring MVC 2024.10.01

스프링 메세지, 국제화

메시지다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 하낟. message.properties라는 메시지 관리용 파일을 만들고item=상품item.id=상품 IDitem.itemName=상품명item.price=가격item.quantity=수량각 HTML들은 다음과 같이 해당 데이터를 key 값으로 불러서 사용하는 것이다.//addForm.html//editForm.html 국제화메시지에서  설명한 메시지 파일을 각 나라별로 별도로 관리하면 서비스를 국제화할 수 있다.message_en.properties, message_ko.properties//message_en.propertiesitem=Itemitem.id=Item IDitem.itemName=Item Nameitem.price..

Spring/Spring MVC 2024.10.01

스프링 MVC HTTP 메시지 컨버터

HTTP 메시지 컨버터@ResponseBody 사용 원리@ResponseBody를 사용HTTP의 Body에 문자 내용을 직접 반환viewResolver 대신에 HttpMessageConverter가 동작기본 문자 처리 : StringHttpMessageConverter기본 객체 처리 : MappingJackson2HttpMessageConverterbyte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음 응답의 경우 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.  스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다.HTTP 요청 : @RequestBody, HttpE..

Spring/Spring MVC 2024.09.30

스프링 MVC 응답

응답 데이터를 만드는 방법은 크게 3가지이다.정적 리소스예) 웹 브라우저에 정적인 HTML, CSS, JS를 제공할 때는, 정적 리소스를 사용한다.뷰 템플릿 사용예) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다.HTTP 메시지 사용HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.  정적 리소스스프링 부트는 클래스 패스의 다음 디렉토리에 있는 정적 리소스를 제공한다./static, /public, /resources, /META-INF/resources src/main/resources는 리소스를 보관하는 곳이고, 또 클래스 패스의 시작 경로이다.따라서 다음 디렉토리에 리소스를 넣어두면..

Spring/Spring MVC 2024.09.30

스프링 MVC 요청 파라미터 , 요청 메시지

클라이언트에서 서버로 요청 데이터를 전달할 때는 주로 다음 3가지 방법을 사용한다.GET - 쿼리 파라미터/URL**?username=hello&age=20**메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달예) 검색, 필터, 페이징 등에서 많이 사용하는 방식POST - HTML Formcontent-type : application/x-www-form-urlencoded메시지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age=20예) 회원 가입, 상품 주문, HTML Form 사용HTTP message body에 데이터를 직접 담아서 요청HTTP API에서 주로 사용, JSON, XML, TEXT데이터 형식은 주로 JSON 사용POST, PUT, PATCH요청 파라..

Spring/Spring MVC 2024.09.30

스프링 MVC 요청 매핑

매핑 정보@RestController@Controller는 반환 값이 String이면 뷰 이름으로 인식된다. 그래서 뷰를 찾고, 뷰가 렌더링 된다.@RestController는 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다. @RequestMapping("/hello-basic")/hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑한다.대부분의 속성을 배열[]로 제공하므로 다중 설정이 가능하다. {"/hello-basic", "hello-go"} 스프링 부트 3.0 이후스프링 부트 3.0부터는 /hello-basic, /hello-basic/는 서로 다른 URL 요청을 사용해야 한다.기존에는 마지막에 있는 /를 제거했지만, 스프링부트 3.0부터는 마지막의 /..

Spring/Spring MVC 2024.09.30

스프링 Log

로깅스프링 부트 로깅 라이브러리는 다음 로깅 라이브러리들이 있다.SLF4JLogback로그 라이브러리는 Logback, Log4J, Log4J2 등등 수많은 라이브러리가 있는데, 그것들을 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리이다. 로그 선언private Logger log = LoggerFactory.getLogger(getClass());private static final Logger log = LoggerFactory.getLogger(Xxx.class)@Slf5j : 롬복 사용 가능   테스트로그가 출력되는 포맷시간, 로그 레벨, 프로세스 ID, 쓰레드 명, 클래스명, 로그 메시지로그 레벨 설정LEVEL : TRACE → DEBUG → INFO →  WARN →  ERROR개발..

Spring/Spring MVC 2024.09.30

Spring MVC 구조

DispatcherServlet 구조 살펴보기org.springframework.web.servlet.DispatcherServlet DispatcherServlet 서블릿 등록DispatcherServlet도 부모 클래스에서 HttpServlet을 상속 받아서 사용하고, 서블릿으로 동작한다.DispatcherServlet → FrameworkServlet → HttpServletBean → HttpServlet스프링 부트는 DispatcherServlet을 서블릿으로 자동으로 등록하면서 모든 경로(urlPatterns="/")에 대해서 매핑한다.참고 : 더 자세한 경로가 우선순위가 높다. 그래서 기존에 등록한 서블릿도 함께 동작한다. 요청 흐름 서블릿이 호출되면 HttpServlet이 제공하는 serv..

Spring/Spring MVC 2024.09.29

확장 기능 (사용자 정의 레포, Auditing, 도메인 클래스 컨버터, 페이징과 정렬)

사용자 정의 리포지토리 구현 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음다양한 이유로 인터페이스의 메서드를 직접 구현하고 싶다면?JPA 직접 사용(EntityManager)스프링 JDBC Template 사용MyBatis 사용데이터베이스 커넥션 직접 사용 등QueryDSL 사용사용자 정의 인터페이스 예시public interface MemberRepositoryCustom { List findMemberCustom();} 사용자 정의 인터페이스 구현 클래스@RequiredArgsConstructorpublic class MemberRepositoryImpl implements ..