
@Slf4j @RestController public class RequestHeaderController { @RequestMapping("/headers") public String headers(HttpServletRequest request, HttpServletResponse response, HttpMethod httpMethod, Locale locale, @RequestHeader MultiValueMap headerMap, @RequestHeader("host") String host, @CookieValue(value = "myCookie", required = false) String cookie ) { log.info("request={}", request); log.info("re..

@GetMapping("/mapping/{userId}") public String mappingPath(@PathVariable("userId") String data) { log.info("mappingPath userId={}", data); return "ok"; } 최근 HTTP API는 위와 같이 리소스 경로에 식별자를 넣는 스타일을 선호합니다. @RequestMapping은 URL 경로를 템플릿화 할 수 있는데, @Path Variable을 사용하면 매칭되는 부분을 편리하게 조회할 수 있습니다. @PathVariable의 이름과 파라미터 이름이 같으면 생략할 수 있습니다. Path Variable 다중 사용 @GetMapping("/mapping/users/{userId}/orders/{or..

@Slf4j @RestController public class LogTestController { //private final Logger log = LoggerFactory.getLogger(getClass()); @GetMapping("/log-test") public String logTest() { String name = "Spring"; log.trace("trace log={}", name); log.debug("debug log={}", name); log.info("info log={}", name); log.warn("warn log={}", name); log.error("error log={}", name); return "ok"; } } 매핑 정보 @RestController @..
스프링은 애노테이션을 활용한 유연하고, 실용적인 컨트롤러를 만들었는데 바로 @RequestMapping 애노테이션을 사용하는 컨트롤러이다. 실무에서는 99.9% 이 방식의 컨트롤러를 사용한다. 애노테이션 기반의 컨트롤러 사용 예제를 보자. @Controller //@Component //@RequestMapping public class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form") public ModelAndView process() { return new ModelAndView("new-form"); } } @Controller 스프링이 자동으로 스프링 빈으로 등록한다.(내부에 @Component 애..
스프링 부트가 자동으로 등록하는 핸들러 매핑과 핸들러 어댑터, 뷰 리졸버 (일부 생략) HandlerMapping RequestMappingHandlerMapping: 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용 BeanNameUrlHandlerMapping: 스프링 빈의 이름으로 핸들러를 찾는다. HandlerAdapter RequestMappingHandlerAdapter: 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용 HttpRequestHandlerAdapter: HttpRequestHandler 처리 SimpleControllerHandlerAdapter: Controller 인터페이스(애노테이션X, 과거에 사용) 처리 뷰 리졸버 BeanNam..

직접 만든 MVC 프레임워크 구조 SpringMVC 구조 DispatcherServlet 부모 클래스에서 HttpServlet을 상속 받아서 사용하고, 서블릿으로 동작한다. DispatcherServlet → FrameworkServlet → HttpServletBean → HttpServlet 스프링 부트는 DispatcherServlet을 서블릿으로 자동으로 등록하면서 모든 경로(urlPatterns="/")에 대해서 매핑한다. 요청 흐름 서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출된다. 스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버라이드 해두었다. FrameworkServlet.se..

SSR - 서버 사이드 렌더링 HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달 주로 정적인 화면에 사용 관련 기술: JSP, 타임리프 CSR - 클라이언트 사이드 렌더링 HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용 주로 동적인 화면에 사용, 웹 환경을 마치 앱 처럼 필요한 부분부분을 변경할 수 있음 예)구글 지도, Gmail 관련 기술: React, Vue.js 참고 React, Vue.js를 CSR+SSR 동시에 지원하는 웹 프레임워크도 있음 SSR을 사용하더라도, 자바스크립트를 사용해서 화면 일부를 동적으로 변경 가능

웹 - HTTP 기반 HTTP 메시지에 모든 것을 전송한다. 거의 모든 형태의 데이터 전송 가능 서버 간에 데이터를 주고받을 때도 대부분 HTTP 사용 웹 서버(Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 디렉터리에 파일들(HTML, CSS, JS)을 넣어놓으면 서버들이 파일들을 서빙해준다. 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능정적 리소스 제공 포함+ 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 예) Tomcat Jet..