굉장히 오래된 로깅 라이브러리.2015년 8월 5일 이후 지원이 종료되어 사용하지 않는다.Log4J 이후 출시된 보다 향상되고 가장 널리 사용되는 라이브러리.필터링 기능과 자동 리로딩을 지원한다.SLF4J의 구현체로써 동작하며, 스프링 부트에서 기본으로 사용된다.가장
모든 Controller의 앞에서 프론트엔드에게 온 요청을 분석하여 올바른 Controller 에게 전달해주는 역할을 한다. ( FrontController )HttpServlet을 상속받는다.DispatcherServlet → FrameworkServlet → Htt
Spring MVC 모델의 C에 해당한다.Model ( Service, Repository )과 View( JSP, Thymeleaf .. ) 사이를 이어주는 역할을 담당한다.클래스 앞에 @Controller 애노테이션을 작성하여 사용한다.@Component 를 상속받
스프링 초기에 사용되던 컨트롤러 인터페이스이다.@Component 애노테이션을 사용해 Spring Bean으로 등록한다.name 프로퍼티에 값을 입력하면, 그 값을 URL에 매핑한다.Controller를 상속받아 handleRequest를 오버라이딩하여 구현하는 방식이
@RequestHeader MultiValueMap<String, String>모든 HTTP Header를 MultiValueMap 타입으로 조회한다.@RequestHeader("host") String특정 HTTP Header를 조회한다.required, def
URL에 {userId} 로 되어있는 식별자를 받아오기 위해서 사용된다.@PathVariable("pathValueName") \[Type] \[name]매개 변수의 이름과 식별자 이름이 동일하다면 생략할 수 있다.@PathVariable String userId여러
HTML, CSS, JS스프링 부트는 클래스패스의 다음 경로에 있는 정적 리소스들을 제공한다.기본 시작 경로: src/main/resources/static, /public, /resources, /META-INF/resourcessrc/main/resources/st
어느날, 신나게 개발을 진행하다가 화면에 보이는 문구가 마음에 들지않고 자꾸만 신경쓰일 때가 있다. 그런데 그 문구는 전부 코드안에 때려박혀있는 데다가(하드코딩) 동일한 문구가 한 두군데가 아니어서 쉽사리 건들기도 어렵거니와 까딱하면 일부만 수정되는 경우가 생길 수도
공식 DocsSpring에서 제공하는 다국어 설정을 위한 인터페이스이다.국제화를 위해 Locale 값을 얻어올 때 사용되며, 기본 구현체는 AcceptHeaderLocaleResolver를 사용한다.AcceptHeaderLocaleResolver아무 설정도 하지 않았을
공식 DocsSpring에서 제공하는 Field Type, 프로그래머가 직접 작성한 FieldError, ObjectError를 한데 묶어(List) Model에 주입시켜주는 통합 인터페이스이다.Model에 주입이 되어 Thymeleaf 같은 뷰 템플릿에 넘겨주어서 사
공식 DocsBindingResult, FieldError, ObjectError를 통해 Controller에서 값을 검증할 수 있지만, 이 경우 Controller의 크기가 너무 커지고 단일 책임 원칙에 위배된다.그래서 Spring에서는 Validator라는 인터페이
JSR-380에 등재된 Bean Validation 2.0 이라는 표준 기술이다.즉, 검증을 위한 애노테이션과 여러 인터페이스를 어떻게 구현해야하는지 가이드가 기술되어 있다.Bean Validation을 구현한 구현체중 일반적으로 Hibernate Validator를
Spring은 메시지, 국제화 기능을 제공하여 다음의 편의성을 제공했다.메시지 기능을 이용해 자주 등장하는 메시지를 하드 코딩 하지않고 별도의 파일로 분리하여 수정을 용이하게 했다.국제화 기능을 이용해 각 국가별로 다른 언어로된 메시지를 전달할 수 있도록 하였다.그런데
클라이언트의 Cookie Storage에 Key-Value 형태로 저장되는 자료구조를 뜻한다.서버에서 클라이언트에게 응답을 줄 때 Set-Cookie Header에 담아서 전달하게 되면, 브라우저는 Cookie Storage에 저장하게 된다.저장된 쿠키는 클라이언트가
서버의 Session Storage를 만들어 Key-Value 형태로 저장되는 자료구조를 뜻한다.쿠키는 브라우저에 저장되므로 Value가 String Type으로 정해져 있는데 반해, 세션은 Object Type을 이용해 자바의 모든 객체를 담을 수 있도록 구현된다.이
HTTP 요청 → WAS(톰캣) → 필터 → 서블릿 (디스페처 서블릿) → 컨트롤러필터란, 클라이언트의 요청을 중간에 낚아채서 로직을 처리하기 위해 제공되는 기능이다.필터는 여러 체인으로 구성되며, 프로그래머가 정한 순서에 맞게 해당 로직을 처리할 수 있도록 한다.do
이 글은 인프런의 김영한님의 스프링 MVC 2편을 보다가 "섹션 7. 로그인 처리 2 - 필터, 인터셉터"의 "정리" 부분에서 나오는 필터를 등록하는 다른 방법이 지금 내 환경(Spring boot 3.0)에서 먹히지 않아, 궁금해져서 찾은 내용을 담고 있다.설정을 위
HTTP 요청 → WAS(톰캣) → 필터 → 서블릿 (디스페처 서블릿) → 인터셉터 → 컨트롤러인터셉터는 필터와 마찬가지로 클라이언트의 요청을 컨트롤러 호출 전에 처리하여 컨트롤러마다 동일한 로직을 처리 할 수 있게 지원해주는 기능이다.필터는 서블릿에서 제공하는 기술인
공식 문서PathPattern이란, 스프링 부트에서 @RequestMapping 시에 사용되는 문자 패턴이다.공식 문서에 따르면, 특정성을 위해 패턴을 비교할 때, 모호성을 제거하기 위해 사용한다고 되어있다.원문: The aim is to eliminate ambig
요청 → WAS(톰캣) → 필터 → 서블릿 → 인터셉터 → 컨트롤러(예외 발생)컨트롤러 → 인터셉터 → 서블릿 → 필터 → WAS (예외 전달)WAS /error 재요청 → 필터 → 서블릿 → 인터셉터 → BasicErrorController → 인터셉터 → 뷰 리졸버
디스페처 서블릿은 컨트롤러에서 발생한 예외를 처리하기 위한 ExceptionResolver를 제공한다.여기서 처리되지 않고 WAS까지 예외가 전달되면 뷰 템플릿을 찾기 위해 내부적으로 다시 컨트롤러까지 호출되는 일이 발생한다. 이는 컨트롤러는 물론, 필터와 인터셉터까지
기본적으로 클라이언트에서 오는 요청은 문자열의 형태로 전송된다. 이 때문에 코드를 작성할 때 먼저 문자열로 전송된 데이터를 원하는 형태에 맞게 변환을 진행해야 했다. 스프링은 이 과정을 추상화하여 제공하는데, 우리가 그동안 컨트롤러를 작성할 때 @ModelAttribu
Converter는 보통 타입 변환을 제공하는데, 이것에 더해 어떤 숫자에 자릿수마다 , 를 붙이고 싶거나 날짜 정보를 원하는 방식으로 변환하고 싶을 때는 컨버터를 사용하기에는 부적절하다. 이를 해결하기 위해 사용하는 것이 바로 Formatter이다. 즉, 포맷터는 컨
컨버터을 상속하여 구현하더라도 컨트롤러에서 new Converter로 선언하여 사용하면 메서드로 빼서 구현한 것과 차이가 없다. ConversionService는 컨버터의 구현체를 등록하고 사용하는 것을 분리하여 클래스간의 의존성을 낮출 수 있게 도와준다. Conver
Multipart란 클라이언트에서 서버로 파일을 보낼 때 사용하는 Content Type이다.클라이언트에서 보내는 요청을 찬찬히 뜯어보면 boundary=-----XXX 로 되어있는 것을 볼 수 있는데, 이는 각 Form 데이터의 경계를 나타내며, 이 경계를 기준으로