프로그래밍/Spring

Spring 3일차 - 스프링 MVC

윤도ri 2022. 3. 17. 17:34

 

| Spring-Mybatis
  MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다. 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 ? 로 치환되어서 처리된다. 복잡한 SQL의 경우 ?로 나오는 값이 제대로 전달 되었는지 확인하기가 쉽지 않고 실행한 SQL의 내용을 정확히 확인하기 어렵기 때문에 log4jdbc-log4j2 라이브러리를 사용하여 어떤 값인지 확인할 수 있다.

말그대로 스파이를 심어서 콘솔창에 결과값을 보여준다. root-context.xml 에 적어준다.
결과값이 잘 나오는것을 볼 수 있다.


| 로그 레벨 설정
 테스트 코드 실행시 많은 양의 로그가 출력되기 때문에 불편할 수 있다. 이럴 때에는 로그의 레벨을 이용해서 수정해준다. resources/log4j.xml 파일에 있는 level 태그를 수정한다. (+추후에 추가 학습하자)
-------------------------------------------------------------------------------
| 스프링 MVC 기본 구조

스프링 MVC는 스프링의 서브 프로젝트이다. Spring Framework라는 메인 프로젝트 외에도 여러 종류의 프로젝트가 존재하는데 스프링 MVC역시 이러한 프로젝트 중 일부이다.

 

스프링 프레임워크는 하나의 기능을 위해서만 만들어진 프레임워크가 아닌 '코어' 라고 할 수 있는 여러 서브 프로젝트를 결합해서 다양한 상황에 대처할 수 있도록 개발되었다. 그 중 하나가 스프링 MVC이다.

 

스프링 MVC
Spring MVC - WEB 관련 영역
Spring Core - 일반 Java 영역(POJO)
Spring Mybatis
Mybatis
DB

프로젝트의 구동은 web.xml 에서 시작한다. web.xml의 상단에는 가장 먼저 구동되는 Context Listener가 등록되어 있다.
1) ContextLoaderListener는 해당 웹 어플리케이션을 구동하게 되면 같이 작동이 시작되므로 해당 프로젝트를 실행하면 가장 먼저 로그를 출력하면서 실행된다.
2) root-context.xml이 처리되면 파일에 있는 빈(Bean)들이 작동한다.
3) root-context.xml이 처리된 후에는 DispatcherServlet이라는 서블릿과 관련된 설정이 작동한다. MVC구조에서 가장 핵심적인 역할을 하는 클래스이며 내부적으로 앱 관련 처리의 준비 작업을 진행한다. 내부적으로 웹 관련 처리의 준비
작업을 진행하기 위해서 사용하는 파일이 있고 servlet-context.xml 이다.
4) DispatcherServlet에서 XmlWebApplicationContext 를 이용해서 servlet-context.xml을 로딩하고 해석한다. 이 과정에서 등록된 객체(Bean)들은 기존에 만들어진 객체(Bean)들과 같이 연동하게 된다.

< Front-Controller 패턴 >
      HandlerMapping
      ↑        ↓
    Client ↔ DispatcherServlet ← HandlerAdapter ↔ Controller
      ↑        ↓
    View ← ViewResolver

1. 사용자의 Request는 Front-Controller인 DispatcherServlet을 통해 처리한다.
2. HandlerMapping은 Request의 처리를 담당하는 컨트롤러를 찾기 위해 존재한다.
3. HandlerMapping 인터페이스를 구현한 여러 객체중 @RequestMapping이라는 어노테이션이
적용된 것을 기준으로 판단하며, 적절한 컨트롤러를 찾았다면 HandlerAdapter를 이용해서
해당 컨트롤러를 작동시킨다.
4. Controller의 처리가 완료되었다면 어디로, 어떻게 갈것인지 라는 결과가 나오고 그 결과를
ViewResolver가 리턴을 통해 받아서 어떤 View에서 처리하는 것이 좋을지 해석을 한다.

(=servlet-context.xml에서 받는다. )
5. 해석된 결과를 가지고 실제 응답을 보내야 하는 데이터를 JSP 등을 이용해서 생성해준다.
6. 만들어진 응답(파일, 페이지, 데이터, ..) 을 DispatcherServlet을 통해서 전송한다.

자세히 보자면 순서는 이러하다.
controller에선 데이터 수집, 응답결정만 한다고 보면 된다.여러 다양한 데이터 수집 방법이 나와있다.



| 스프링 MVC Controller의 특징
1. HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 기능 구현
2. 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
3. GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
4. 상속 / 인터페이스 방식 대신 어노테이션으로도 설정 가능

| Postman(포스트맨)

  보통 post방식의 요청에서는 직접 컨트롤러 결과를 보려면 뷰단을 만들어줘야한다. 이것이 너무 비생산적이다. 

포스트맨을 이용하면 쉽게 확인할 수 있다. 

https://www.postman.com/downloads/ > 다운로드 버튼 클릭 > 설치파일 실행 > 계정 생성 > 로그인

 

: 여러 방식의 요청을 외부에서 보낼 수 있도록 도와주는 개발 툴
: GET,POST 외에도 PUT, DELETE 등의 요청도 가능하다.

직접 key랑 value 입력해서 요청보내면 콘솔창에 정상적으로 잘 뜨는것을 볼 수 있다.