ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP와 MVC
    회고/WIL 2023. 6. 25. 21:07
    728x90

    HTTP란?

    우리가 브라우저를 통해서 데이터를 주고 받을 때, 아무런 제약없이 소통을 한다면? 

    브라우저로 부터 데이터를 받아 로직을 구성하고 이를 다시 반환해야 하는 서버에서는 참으로 난감한 상황이다.

    HTTP란 Hyper Text Transfer Protocol의 약자로 영어 단어 그대로의 의미를 해석하자면,

    하나의 문서가 다른 문서로 이동할 수 있도록 해주는 하이퍼 텍스트를 전송하는 규약이라는 뜻이다.

    우리가 아는 상황에 대입해서 설명하자면,

    브라우저에서의 데이터를 주고받을 때 여러 규칙을 정해놓은 "통신 규약"을 말한다.

     

     

    우리는 사진에서처럼 일정한 양식과 규칙을 가지고 잘 만들어진 데이터를 주고 받으므로써 Client에서 Server로 , 다시Server에서 Client로 데이터를 주고 받을 수 있다. 이러한 과정에서 우리가 알아야하는 개념이 바로

    Request와 Response 이다. 영어 표현 그대로, 요청(Client에서 Server로 주는 데이터) / 응답(Server에서 Client로 내려주는 데이터)를 말하며, 일정한 양식이 존재한다.

     

    다음의 사진들은 내가 이 글을 작성하면서 임시저장을 눌렀을 때, 그리고 일정시간이 지났을 때 서버로부터 받은 응답에 담긴 내용을 확인한 결과이다.

    나는 임시저장이라는 버튼을 눌러서 서버에 요청을 보낸다. 내가 버튼을 누름과 동시에 request Header라는 곳에서 다양한 정보들이 날라간다. 아마 내가 작성한 글을 가지고 가지 않았을까?ㅎㅎ 이후에 다시 페이지가 로딩이되면, response body에는 내 글의 카테고리정보와 저장했을때의 글의 내용 등의 이전에 임시저장을 누를 당시의 정보들을 그대로 들고와서 다시 화면에 뿌려준다. 서버는 request안의 정보들을 토대로 데이터를 처리하고 사용자의 요청에 맞는 응답을 다시 보내준다. 이 일련의 과정은 모두 http 통신규약을 통해서 데이터를 주고받았다.

     

    그렇다면, 서버 안에서는 어떤 일들이 일어났을까?

    내가 배운 내용을 토대로 작성해보려고한다.

     

     

     

     

     

    Spring의 MVC 디자인 패턴

    우리가 임시저장이라는 버튼을 누르게 되면, 서버에 url주소와 함께 request에 다양한 정보를 넘겨주게 된다.

    1차적으로 WebServer에서 정적인 요청인지를 파악하고, 정적인 요청이 아니라면 WAS로 데이터를 넘겨주는데 이 과정에서 Spring은 MVC 패턴을 적용하여 데이터를 처리한다. MVC란, 데이터를 담당하는 MODEL 과 사용자에게 전달할 화면을 담당하는 VIEW, 그리고 다양한 요청을 특정 로직으로 넘겨주기 위해서 존재하는 CONTROLLER가 존재한다. 우리는 이러한 패턴을 MVC 디자인패턴이라고 부른다.

    그 내부를 조금 더 살펴보면 , Servlet이라는 것이 동작하는데 Client로부터 HTTP 통신규약에 맞는 파일을 전달받으면 SERVLET은 서버에서 이를 잘 처리할 수 있도록 다양한 처리를 도와준다. 그리고 개발자에게는 "CLIENT로부터 받아온 정보가 이런것(REQUSET)들이 있습니다. 이 데이터를 처리해서 여기(RESPONSE)에 담아주세요"라고 명시해주듯이 받아온 정보를 토대로 잘 처리(parsing)하여, 2개의 객체를 생성하여 넘겨주는데 이것이바로 HttpServletRequest와 HttpServletResponse 객체이다. 서버는 이 두개의 객체로 데이터를 처리하고 처리된 데이터를 담아 다시 Client로 보내주는 일련의 과정을 처리한다. 

     

    Spring의 MVC패턴의 핵심은 사실 FRONT CONTROLLER라고 불리우는 DispatcherServlet에 있다.

    dispatcherservlet은 client로부터 넘어온 데이터를 토대로 알맞은 controller에게 전달을 해준다.

    조금 더 자세하게 들어가면, DispatcherServlet에서 먼저 client의 요청url을 분석하여 이를 알맞은 controller에게 전달하기 위해 mapping 작업을 한다.(2)

    이후 각각의 컨트롤러 안의 동작방식을 고려하여 알맞은 adapter(110볼트 콘센트에는 110볼트 콘센트에 맞는 구멍을 찾아주는 것과 비슷한 것)을 찾고 이를 controller에 전달한다.(3)

    이후 컨트롤러는 View에 대한 정보와 데이터에 대한 정보(Model)를 가지고 DispatcherServlet으로 다시 돌아오게 되고(4)

    DispatcherServlet은 이 정보들을 토대로 사용자에게 전달할 VIEW화면을 찾아(5)

    데이터를 담아(6)<ServerSideRendering, SSR>

    Client에게 data가 담긴 view를 전달한다(7)

     

     

    지금까지 HTTP가 무엇인지, HTTP 통신규약을 바탕으로 서버에서 어떠한 동작들이 일어나는지를 내가 배운 MVC 패턴을 가지고 설명했다.

    '회고 > WIL' 카테고리의 다른 글

    7/4 ~ 7/12 이 전의 날들을 돌아보기  (0) 2023.07.12
    IoC - DI - Bean 의 관계  (0) 2023.07.04
    1주차 - 자바  (0) 2023.06.18
Designed by Tistory.