Note.3 서비스 흐름

Jay·2023년 1월 26일
1

Spring

목록 보기
3/14
post-thumbnail

📌 Server와 Client의 흐름 (Spring)

📖 POJO와 객체

ClientServer로 요청을 하면 Controller 중에서도 Client의 모든 요청을 받는 Front Controller가 있다.
기존에는 이 Front ControllerServlet로 만들었다.
Front Controller이 모든 일처리를 다하다 보면 너무 과부하가 되다 보니까 Front Controller은 요청 만 받아 들이고, 일은 각 객체에게 시킨다.
그 객체를 POJO (Plaion Old Java Object) -> 오래된 방식의 객체
실제 일은 그 POJO 객체가 일을 수행한다.

기존에 있는 HomeControllerFront Controller이 아니라 POJO이다.
이유는 Servlet이 아니기 때문이다. (일반 클래스 이다)
Front Controller이 안만들어도 되느냐 궁금증이 생길수 있다.
하지만 Spring은 기본적으로 Front Controller를 제공 해준다.

📖 Front Controller

Front Controller이 있는 위치이고, xml파일은 프로젝트에 설정을 하는 파일 들이다.
Server Start를 하는 순간 tomcatServer.xml 안에있는 프로젝트 지정한 곳으로 가 web.xml을 읽는다.

더 궁금한건 https://codingnotes.tistory.com/28 페이지로 가자.
나도 위에 있는 링크를 보고 공부를 했다.


📌 기본 동작의 흐름

📖 설명 및 풀이

Spring에서는 저 Dispatcher Servlet(빨간색 네모)가 모든 요청을 받게 된다.

Front Controller에서는 POJO로 일을 시킬때 바로 가는 것이 아니라 중간에 Handler Mapping를 통해 요청하게 된다.

Handler Mapping 같은 경우에도 Front Controller처럼 Spring에서 제공을 해준다.

위에 있는 사진에서 console를 보면 실행시 /url을 요청하게 되면 Handler Mappinghome 메소드를 실행한다는 것을 알 수 있다.

실제 실행되는 POJO 메소드.
하나의 POJO에서는 Mapping 값에 따라 실행되는 메소드가 다르며 여러개가 있을 수 있다.

POJO실행 후 home을 리턴해주는데 // WEB-INF/views/home.jsp를 응답해달라고 Front Controller에게 전달하는 것이다.

하지만 home만 응답하게 되는데, 그렇게 되면 Front Controller가 페이지를 돌려줄 수 없다.

-> home은 단순 논리적인 이름, home을 접두사 접미사를 붙여 물리적인 주소를 전달해야한다.
엥 처음붙어 물리적인 이름을 쓰면 되는거 아닌가? -> 나중에 접두사 접미사 에 있는 확장자 또는 폴더명이 변경되면 일일이 다 POJO를 찾아가며 수정을 해줘야한다.

그럼 접두사와 접미사는 대체 어디서 붙여줄까?

📖 View Resolver

그 녀석이 바로 View Resolver이다.
Front ControllerPOJO로 부터 돌려줄 페이지의 논리적 이름만 받아와서 View Resolver에게 전달해서 최종 물리적인 주소를 다시 전달 받는다.

바로이게 View Resolver이다.
이녀석이 접두사 접미사에 필요한 경로를 붙여준다.
우리는 소스코드를 수정하는게 아니라 xml에 설정만 바꿔주면 되는 편리함이 있다!

그러면 이제 Front Controller가 최종적으로 무슨 파일을 돌려줄 지 알기때문에 Client에게 해당 파일을 전달한다. (jsp) -> forwarding
최종 view jsp에서는 POJO에서 넣어놓은 특정메모리에 저장된 데이터를 포워딩(객체 바인딩)을 통해 꺼내서 사용할 수 있다.


📌 마무리

📖 한마디

위에 있는 "기본 동작의 흐름"은 정말 매우 중요한 내용이다.
이해하고 외우면 스프링을 하는데에 많은 도움이 될 것이라고 자부 한다.
다음에는 중요한 1~3 내용을 한개로 정리해서 게시글을 올릴 예정이다.

📖 느낀점

솔직히 공부를 하면서 개발은 변화나 발전이 빠르다는것을 느끼게 되었다.
스프링도 JSP/Servlet처럼 10년 정도는 안정적일 수도 있겠다고 생각을 하지만,
또 최근에 파이썬을 보니 파이썬으로도 백엔드를 할 수 있을거 같기도 하고,
여러모로 빠른이 변화를 어떻게 내가 잘 적을 할 수 있을지 걱정이지만
그래도 허무하게 끝내고 싶지는 않기 때문에 잘 확인하고 봐야겠다.

profile
Jay, a developer growing as a challenge, aims to surprise the world!

0개의 댓글