spring 7

스프링 MVC: 핸들러 어뎁터 구조 (내가 헷갈린 것 중심)

요청 매핑 핸들러 어뎁터 구조 SpringMVC구조 위의 그림에서 보이듯이, DispatcherServlet이 가지고 있는 핸들러를 처리할 수 있는 핸들러 어뎁터를 조회하고, 핸들러 어뎁터는 그것에 맞는 핸들러를 호출해서 값을 전달한다. 이때, HTTP 메시지 컨버터는 @RequestMapping을 처리하는 핸들러 어뎁터인 요청 매핑 핸들러에 들어가 있다. ArgumentResolver 애노테이션 기반 컨트롤러를 생각해보면 매우 다양한 파라미터를 받는다는 것을 알 수 있다. 어떻게 이 많은 파라미터를 다 받을 수 있을까? 그런 바로 ArgumentResolver 덕분이다. 애노테이션 기반 컨트롤러를 처이하는 RequestMappingJandlerAdaptor는 바로 이 ArgumentResolver를 호..

카테고리 없음 2024.01.31

스프링 MVC: 응답 & HTTP메시지 컨버 (몰랐던 것 중심)

응답 - 정적 리소스, 뷰 템플릿 정적 리소스 정적 리소스는 해당 파일 변경없이 그대로 서비스 하는것으로써 웹 브라우저에서는 정적인 HTML, css, js을 제공할 때 정적 리소스를 사용한다. 스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다. /static , /public , /resources , /META-INF/resources src/main/resources 는 리소스를 보관하는 곳이고, 또 클래스패스의 시작 경로이다. 따라서 다음 디렉토리에 리소스를 넣어두면 스프링 부트가 정적 리소스로 서비스를 제공한다. 정적 리소스 경로: src/main/resources/static ex) src/main/resources/static/basic/hello-form.html에 있..

웹개발/웹서버 2024.01.20

스프링 MVC: 요청 메시지

HTTP 요청 메시지 - 단순 텍스트 content-body를 통해 단순 텍스트를 얻는 방법에는 여러가지가 있다 . request.getInputStream이용 @PostMapping("/request-body-string-v1") public void requestBodyString(HttpServletRequest request, HttpServletResponse response) throws IOException { ServletInputStream inputStream = request.getInputStream(); //stream은 bytecode이니 string으로 바꿀때는 어떤 인코딩으로 바꿀건지 설정해주어야 한다. 지정 안할경우 default값이 설정된다. String messageBo..

웹개발/웹서버 2024.01.19

스프링 MVC: RequestMapping & RequestParameter

요청 매핑 @RequestMapping 기본적으로 어떤 HTTP메소드도 받을 수 있다. 예시: @RequestMapping("/hello") 매개변수로 method를 받을 시 특정 HTTP만을 받는다. GET, HEAD, POST, PUT, PATCH, DELETE 예시: @RequestMapping(value="/hello", method="RequestMethod.GET") @Get,Post,Put,Delete,PatchMapping 편리한 축약 에노테이션 파라미터로 추가 매핑 params의 값이 쿼리파라미터로 오지 않으면 400 bad_request를 반환한다. params="mode", params="!mode" params="mode=debug" params="mode!=debug" (! = )..

웹개발/웹서버 2024.01.14

스프링 MVC: 로깅 간단 설명

TIP: Packaging은 war가 아니라 jar로 하는게 좋다. JSP를 사용하지 않고, 스프링 부트를 사용한다면 jar를 쓰자. jar는 항상 내장 서버(톰캣 등)을 사용하고, webapp경로도 사용하지 않는다. 따라서 내장 서버 사용에 최적화 되어있는 기능이다. 로깅 간단히 알아보기 현재 스프링 부트 로깅으로는 slf4(인터페이스)를 기반으로 한 Logback 로그 라이브러리를 사용한다. private Logger log = LoggerFactory.getLogger(getClass()); //자신이 현재 속해있는 클래스를 넘겨주면 된다. ex) logTest.class private static final Logger log = LoggerFactory.getLogger(Xxx.class) 위와..

웹개발/웹서버 2024.01.10

스프링 MVC: HttpServletRequest의 간단한 사용법 예시

서블릿 HttpServletRequest HttpservletRequest 받기 @WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header") public class RequestHandler extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { printStartLine(request); printHeaders(request); } private void printStartLine(HttpServletRequest ..

웹개발/웹서버 2024.01.07

[JPA]proxy객체와 호출시기

프록시란? JPA 구현체들은 객체들 처음부터 데이터베이스에서 꺼내서 조회하는 것이 아니다. 이렇게 하면 실제 사용 할때 너무 많은 쓸모 없는 접근이 발생 할 수 있다. 따라서, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 이와 관련 된 기술이 프록시 인데, 이 프록시를 통해서 즉시로딩 ( EAGER ) 과 지연로딩 ( LAZY ) 을 할 수 있다. "JPA 표준 명세는 지연 로딩 구현방법을 JPA 구현체에 위임했다. 하이버네이트는 지연 로딩을 지원하기 위해 프록시를 사용하는 방법과 바이트코드를 수정하는 두 가지 방법을 제공하는데 바이트코드를 수정하는 방법은 복잡하다." 프록시 객체는 entity를 참조하며, repository.findById(id)를 불렀을때 혹은 EntityManager.f..

웹개발/웹서버 2023.12.13