분류 전체보기 153

로깅 간단하게 알아보기

운영 시스템에서 System.out.println()같은 시스템 콘솔을 사용하지 않고 로깅 라이브러리를 사용해서 로그를 출력한다. 로그라이브러리는 많이 있지만 그것을 인터페이스로 제공하는 것이 SLF4J이다 그중 구현체로 Logback을 많이 사용한다. (스프링부트가 기본으로 제공한다) 로그 선언을 자바 코드로 아래 처럼 하면 된다. private Logger log = LoggerFactory.getLogger(getClass()); 하지만 롬복을 사용하면 @Slf4j 애노테이션을 사용하면 위 코드를 작성하지 않아도 된다. 이제 로그를 사용해 보자. String name = "Spring"; log.trace("trace log={}", name); log.debug("debug log={}", nam..

스프링MVC 2023.08.18

스프링 MVC 시작하기

@RequestMapping 핸들러 RequestMappingHandlerMapping 어댑터 RequestMappingHandlerAdapter를 사용한다. 이전 버전을 스프링 MVC로 바꿔보자! @Controller 애노테이션은 내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 된다. @RequestMapping 요청 정보를 매핑하는데 해당 URL이 호출되면 메서드가 실행된다 이름은 임의로 지으면 된다. ModelAndView 모델과 뷰 정보를 담아서 반환한다. @Controller @RequestMapping("/springmvc/v2/members") public class SpringMemberControllerV2 { private MemberRepository member..

스프링MVC 2023.08.10

뷰 리졸버

스프링 MVC의 뷰 리졸버에 대해 알아보자 스프링 부트는 InternalResourceViewResolver라는 뷰 리졸버를 자동으로 등록하는데 이때 application.properties에 등록한 spring.mvc.view.prefix, spring.mvc.view.sufix설정 정보를 사용해서 등록한다. application.properties의 prefix, sufix를 설정하고 "new-form" string을 넘겨주면 이에 맞는 html이 클라이언트에게 전달된다. ex)spring.mvc.view.prefix=/WEB-INF/views/, spring.mvc.view.suffix=.jsp @Component("/springmvc/old-controller") public class OldCo..

스프링MVC 2023.08.08

핸들러 매핑과 핸들러 어댑터

스프링 MVC 구조에 핸들러 매핑과 핸들러 어댑터에 대해 더 살펴보자 과거에 주로 사용했던 컨트롤러로 핸들러 매핑과 어댑터를 이해해 보자 public interface Controller { ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; } @Component("/springmvc/old-controller") public class OldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse res..

스프링MVC 2023.08.08

스프링 MVC 구조 이해

스프링 MVC 구조는 우리가 만든 MVC 프레임워크 구조와 매우 유사하다 스프링 MVC도 Dispatcher Servlet이라는 프론트 컨트롤러 패턴으로 구현되어 있다. HTTP요청이 오면 HttpServlet이 제공하는 service()가 호출된다. 스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에세 service()를 오버라이드 해두었다. 그러면 FrameworkServlet.service()를 호출하면 DispacherServlet의 doDispatch()가 호출된다. 스프링 MVC의 동작 순서를 보자 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러를 조회한다. 핸들러 어댑터 조회: 조회한 핸들러에 맞는 어댑터를 조회한다. 핸들러 어댑터 실행 :..

스프링MVC 2023.08.08

MVC 프레임워크 구현해 보기

간단한 회원가입 시스템을 처리하는 시스템을 MVC패턴으로 구현해 보자 위 그림은 구현해야 할 MVC프레임워크 구조도 이다. 전체적인 과정 HTTP요청이 들어오면 FrontController가 호출된다. 요청이 들어오면 FrontController는 핸들러 매핑 정보에서 Url을 통해 핸들러를 받은 후 핸들러의 타입을 얻기 위해 핸들러 어댑터 목록에서 핸들러 어댑터를 받은 후 핸들러 어댑터를 호출한다. 그리고 핸들러에서 비즈니스 로직을 한 후 modelView를 FrontController에 반환한다 그럼 FrontController는 ViewResolver를 통해 Url을 반환받은 후 MyView를 통해 클라이언트에게 HTML응답을 전송한다. 하나씩 알아 보자! 여기서 핸들러는 컨트롤러라고 보면 된다!...

스프링MVC 2023.08.07

MVC패턴

서블릿으로 개발을 하면 View화면을 위한 HTML을 만드는 작업이 지저분하고 복잡했다 JSP를 사용하면 HTML을 깔끔하게 가져가고, 중간중간 동적으로 변경이 필요한 부분에 자바 코드를 사용할 수 있었다. 하지만 JSP역시 HTML과 자바 코드가 모두 JSP파일 안에 있다 JSP가 너무 많은 역할을 한다 그리고 View부분과 자바 코드 부분의 변경 라이프 사이클이 다르다 근데 View부분과 자바 코드가 한 파일에 있으면 View부분을 수정하려고 해도 자바 코드 부분을 봐야 하고 자바 부분을 수정하려 해도 View부분을 봐야 한다는 문제점이 생긴다 그래서 비즈니스 로직은 서블릿처럼 다른 곳에서 처리하고 JSP는 목적에 맞게 HTML화면을 그리는 일에 집중하도록 나누는 MVC패턴이 등장했다. M(모델) 뷰..

스프링MVC 2023.08.04

JSP 사용하기

서블릿을 이용하는 방식과 JSP를 이용하는 방식을 비교해 보자 두 방식을 비교하기 위해 간단한 회원가입 save 기능을 구현한다. 클라이언트에서 유저의 이름과 나이를 전송한다. 서블릿이용 @WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save") public class MemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse resp..

스프링MVC 2023.08.02

HttpServletResponse 사용

Http의 헤더 부분을 설정해 보자 메시지 타입 설정 response.setContentType("text/plain") 하면 보낼 메시지의 타입을 설정할 수 있다. response.setCharacterEncoding("utf-8") 인코딩 방식을 설정할 수 있다. 쿠키 설정 메서드 Cookie cookie = new Cookie("myCookie", "good") 쿠키 객체 생성 cookie.setMaxAge(600); 600초 동안 유지 response.addCookie(cookie) 쿠기 추가하기 redirect 메서드 response.sendRedirect("/basic/hello-form.html"); 현재 페이지가 호출되면 /basic/hello-form.html로 이동한다. HTTP응답 데..

스프링MVC 2023.08.02

HTTP 요청 데이터

HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 3가지 방법이 있다. GET -퀴리 파라미터 /url?name=kim&sex=male 같은 형식으로 URL의 쿼리 파라미터에 데이터를 포함해서 전달한다. 메시지 바디 없이 전송한다. POST -HTML Form 메시지 바디에 쿼리 파라미터 형식으로 전달한다 content-type:application/x-www-form-urlencoded HTTP message body에 데이터 담아서 요청 HTTP API에서 주로 사용한다. 주로 JSON사용 GET 쿼리 파라미터 전달 데이터 username = kim, age = 20을 서버로 전송해 보자 메시지 바디 없이 URL의 쿼리 파라미터를 사용해서 데이터를 전달한다 쿼리 파라미터는 URL에 ..

스프링MVC 2023.08.02