8월 17일 화요일6 - Spring ㅇ

@_@·2021년 8월 17일
0

Spring

목록 보기
2/6

<목차>

ㅇ 컨텍스트 등록
ㅇ FrontController와 POJO
ㅇ web.xml의 DispatcherServlet
ㅇ 기본 동작 흐름




ㅇ 컨텍스트 등록


ㅇ 컨텍스트 등록 : 웹 서버에 등록하기

  • 우리가 만든 이 프로젝트를 톰캣이라는 서버에 등록 해줘야 해
    건물이 지어졋으면 등기를 해서 번지를 지어줘야 사람이 살 수 있듯이,
    우리 프로젝트를 톰캣 서버가 등록을 해줘야 톰캣 서버가 우리 어플리케이션을 찾아갈 수 있는거야
  • 톰캣 - 마우스우클릭 - 애드 - 우리프로젝트를 등록

ㅇ 등록 확인

  • 서버 -> 서버.xml -> context 가면 path속성 있어 (152번째 줄)
  • 등록을 하게 되면 소스코드에 들어가. 이게 컨텍스트 패스
  • 등록 되어 있어야 우리 프로젝트를 톰캣 서버가 찾아갈 수 있어
  • 컨텍스트 패스 이름으로 요청을 해야 톰캣 서버가 찾아 가는거야

ㅇ 결론

  • 클라이언트가 http://localhost:8081/web 을 요청했을 때,
    web이라는 이름이 컨택스트 패스에 있어야 톰캣 서버가 찾아갈 수 있어

ㅇ 톰캣 포트번호 바꾸기

  • 원래 톰캣 서버의 기본 포트가 8080 인데 오라클이 1521 포트와 8080포트를 쓰고 있어
  • 그래서 8081로 바꾸자

ㅇ 동작 과정

  • 톰캣은 기다리고 있어
  • 톰캣 서버한테 이제 헬로 월드 보여줘~ 요청하면
    톰캣 서버가 뭔가를 찾아서 우리한테 헬로 월드를 보여줄거야 = 요청에 맞는 응답을 해줄거야

ㅇ 요청하기

  • 클라이언트가 서버의 ip를 요청할 거야
    • https:// ip주소 혹은 도메인주소
  • 3가지 방법
    • 1, 2 : 내 컴퓨터에 직접 요청 => 127.0.0.1 또는 localhost
    • 3 : ipconfig로 찾은 ip주소
  • 그 뒤에 톰캣 서버에 요청해야 하니까 :8081
  • 그 뒤에 이름은 web
  • http://127.0.0.1:8081/web/
  • http://127.0.0.1:8081/web : web까지만 적으면 기본은 /(루뜨)가 들어가

cf. 루뜨(/)는 뭐냐

  • 리퀘스트매핑의 값에 적힌 /

  • 주소의 슬러시(/)가 요청이 들어와서 String home 메서드가 처리가 되는 거야

  • 만약 /test가 걸려 있으면 /web/test해야 이 메소드가 처리 되는거야

  • 요청이 들어오면 c(컨트롤러)로 갔다가 m(모델)으로 갔다가 v(뷰)로 가는 과정이 프레임워크 안에 숨어 있어






ㅇ FrontController와 POJO


ㅇ 은행에 비유

  • 은행문을 열기 전 불도 켜고, 컴퓨터도 켜 두고 등등 셋팅을 다 해둬야 9시땡 하면 고객이 들어올 수 있는 것 처럼 = 톰캣 서버를 시~작 한다는 것은 클라이언트의 요청이 들어오기 전에 스탠바이 상태를 만들어 둔다는 것 (메모리, 데이터베이스연결 등의 준비 절차) = xml 파일을 읽어들임
  • 고객이 들어옴 = 클라이언트한테 요청이 옴
  • 은행문 딱 열고 우리를 반겨주는 경비원 (어떤 업무를 보러 오셨습니까. 하는 사람) = FrontController
    • 경비원(프론트컨트롤러)는 요청에 맞는 영역으로 일을 보내면 돼
  • 출입명부, 발열체크 등을 해 줄 알바생 = POJO (Plain Old Java Object)

ㅇ FrontController

  • 클라이언트가 요청을 제일 먼저 받는 사람은 컨트롤러
  • 컨트롤러 중에서도 클라이언트의 모든 요청을 다~ 받는 컨트롤러가 있어 => FrontController
  • 여기를 통과하지 않고 다른데로 갈 수 없어
  • 서블릿
  • web.xml의 DispatcherServlet

ㅇ POJO

  • 구체적인 업무를 프론트컨트롤러가 다 하려면 로드가 길어져
  • 프론트컨트롤러가 해야 할 일을 대신해주는 알바생들을 필요로 해
  • POJO도 크게 보면 컨트롤러야
  • HomeController.java

ㅇ FrontController와 POJO의 차이

  • 프론트컨트롤러는 서블릿으로 만드는데 포조는 그냥 자바로 만들어야 해
  • 프론트컨트롤러는 일을 시키는 애, 실제 일을 하는 애는 포조
  • 프로젝트할 때는 포조를 잘 만들어야 해

ㅇ 퀴즈 : 우리 프로젝트에서 HomeController는 FrontController일까 POJO일까?

  • .java 파일이므로 POJO야
  • 서블릿 형태면 프론트컨트롤러였겠지?
  • 그러면 FrontController는 어디 있나? => 스프링은 알아서 제공 해 줘 (어딘가에 만들어져 있어)
    => web.xml의 DispatcherServlet

ㅇ web.xml의 DispatcherServlet

  • 우리 어플리케이션이 톰캣에 등록되어 있으므로 톰캣 서버를 시~작 하면 우리 어플리케이션에서 해야할 일들을 web.xml부터 처리를 해
  • src-> main -> webapp -> WEB-INF -> views -> web.xml

ㅇ xml 파일

  • 작업지시서 : 프레임워크한테 이렇게 이렇게 일 좀 해주세요~ 하고 설정하는 것
  • 톰캣 서버가 시작되면 이런 xml들을 다 읽어갈 건데 순서가 있어 =>가장 먼저 web.xml
  • xml파일 4개가 기본으로 있어 (더 추가적으로 만들게 될 거야)

ㅇ DispatcherServlet

  • web.xml 안에 processes application requests(리퀘스트 요청을 받는 프로세스)로 서블릿이 있어
  • 이름이 디스패쳐서블릿. 이게 프론트 컨트롤러가 돼
  • API로 다운로드 되서 프로젝트 안에 있어
  • 스프링은 프론트 컨트롤러가 미리 정해져 있고 우리가 만들 필요가 없어
    스프링은 프론트 컨트롤러 이름이 DispatcherServlet
    어떤 클래스죠? 하면 "web.xml의 DispatcherServlet에요" 하면 돼





ㅇ 기본 동작 흐름


스프링에서는 이 구조를 이해하는 게 중요해

  • ⓐ FrontController ⓑ POJO
  • 이 둘 사이에 이걸 핸들링 해주는 핸들러매핑 등등이 있음
    • 결합도를 낮추고, 응집도 높이는 방법이야
    • 둘 사이에 뭔가가 들어가서 그 연결을 끊어버리는 것
  • 스프링은 이렇게 계속 결합도를 낮추면서 사이를 벌리다 보니 복잡해져
    구조는 복잡해지지만 효율적으로 되는거지
  • provided by Spring Source
    • 파란색들은 다 스프링 소스에 의해 제공이 되어진다!
  • FrontController는 스프링이 제공하지만, POJO는 우리가 만들어야 해
    • 샘플로 제공되는 POJO : HomeController.java


profile
STEP BY STEP

0개의 댓글