Springboot with JPA - 데어 프로그래밍 유튜브 (14강_응답 Response 하는 방법)

치즈말랑이·2021년 10월 21일
0

스프링부트 with JPA

목록 보기
9/9

요청 주소에 따른 적절한 컨트롤로 요청 (Handler Mapping)
이때 handler mapping이 특정한 함수를 찾아준다.
예를 들어 get요청=>http://localhost:8080/post/1 이 왔을때 해당 주소 요청이 오면 적절한 컨트롤러의 함수를 찾아서 실행한다.

html파일을 응답할지 Data를 응답할지 결정해야 하는데 html 파일을 응답하게 되면 ViewResolver가 관여하게 된다. -> 응답의 패턴을 만들어주는데, 어떤 파일인지에 대한 파일패턴을 만들어준다. 예를들어 응답할 파일이 .jsp파일이라면 앞에 .jsp파일 있는 경로가 prefix로 붙고, 뒤에는 .jsp확장자가 suffix로 붙어서 어떤 return 값에 대한 파일을 return할 수 있는 패턴을 만들어준다.

A {
	String Hello() {
 	return "Hello";
}
}

dispatchersurvlet이 컴포넌트 스캔을 통해 A를 메소드에 띄우고 그다음 주소 분배를 위해 자기가 하기보다는 handler mapping한테 넘긴다. handlermapping이 적절한 함수를 찾는다 (hello) 그러면 결국 "hello"가 response 될건데, hello 메세지가 아니라 hello 파일을 response하고 싶으면 viewresolver가 관여한다.
Web-INF/views/hello.jsp이 있는데 viewresolver가 "hello" 앞에 Web-INF/view를 붙여주고 return할때 자기 리턴값을 넣고, .jsp를 붙여준다. -> Web-INF/view/hello.jsp

하지만 Data를 응답하게 되면 MessageConverter가 작동하게 되는데 메시지를 컨버팅할 때 기본전략은 json이다.
data를 응답할때는 @ResponseBody를 붙이면 return값 "Hello"를 파일로 안보고 데이터로 본다. 그럼 messageconverter가 hello는 그냥 string이네? 이러고 hello메세지를 응답한다.

user {
	int id = 1;
    	String name = "홍길동";
}
A {
	user Hello() {
 	return user;
}
}

만약에 user 메소드를 return 한다하면 messageconverter가 어? 객체인데? 이러면서 user를 json으로 바꿔서 응답해준다.
{"id" : 1, "name" : "홍길동"} 이렇게 보낸다. 되게 편함.

데이터가 응답할때 messageconverter이 작동. 바로 Jackson을 사용 안하는 이유는 Jackson보다 더 좋은 기술이 나올 경우 다시다바꿔야해서 그렇다. 그래서 messageconverter를 추상화객체로 넣고 밑에 Jackson을 넣으면 다른 데이터타입이 나왔을때 jackson날리고 다른것만 messegeconverter아래에 넣으면 된다.


톰켓 실행시 1번이 실행되고, ContextLoaderListener가 create되고, applicationContext가 읽어진다.
이때 root-context.xml이 읽어지는데 보통 데이터베이스 관련된 어떤 객체들이 컴포넌트스캔해서 메모리에 올린다.
그때 메모리에 service,dao,vo등이 뜨는데 나중에 db에 연결된다.
그 다음에 request요청이 들어오면 dispatcherservlet이 동작하게 되는데, 이거는 servlet-context.xml에 의해진행되고 web.xml이 할일을 어느정도 나눠서 한다. web과 관련된 controller들을 메모리에 띄우고 주소분배를 한다. 그러고 응답할때 data로 응답할지 html파일로 응답할지 결정한다.

web.xml이 자기가해야할일을 기억하고 해야할일이 너무 많으니까 dispatcherservlet한테 나눠주고, db관련된것들은 contextloaderlistener가 미리 메모리에 띄워둔다.

나중에는 비지니스로직 중요

profile
공부일기

0개의 댓글