SpringBoot 개념정리(14) - 3. 동작원리

Jang Seowoo·2022년 10월 5일
0
post-thumbnail

인프런 스프링부트 개념정리(이론)
이 글은 다음 강의의 이론 정리 글 입니다.


스프링부트가 응답(Response)하는 방법이 궁금해요!

요청 주소에 따른 적절한 컨트롤로 요청 (Handler Mapping)

GET http://localhost:8080/post/1
해당 주소 요청이 오면 적절한 컨트롤러의 함수를 찾아서 실행한다.

응답

  1. 파일 return

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

만약 다음과 같은 클래스가 있다고 생각해보자.

Class A {
	string Hello(){
    	return "hello";
    }
}

이 클래스가 DispatchServlet에 의해서 메모리에 로딩이 되었다. 그 후 주소 매핑을 하기 위해서 HandlerMapping이라는 애한테 넘겼다. HandlerMapping은 적절한 함수인 Hello()를 찾았다. Hello()를 실행하면 단순하게 "hello"라는 string이 return된다. 이 "hello"는 response로 요청한 사람에게 넘어갈 것이다. (Data return)

이 때, "hello"라는 string이 아니라 "hello"라는 파일을 return하고 싶으면 ViewResolver를 써야하는 것이다.

// web-INF/views/hello.jsp
prefix: web-INF/views/
suffix: .jsp

이 예시에서 ViewResolver는 다음과 같은 정보들이 들어갈 것이다.

만약 ViewResolver를 안쓰고 파일을 return 하고 싶은 경우 절대경로를 return 하는 등의 방법도 있다.(굳이?)

  1. Data return

Data를 응답하게 되면 MessageConverter가 작동하게 되는데 메시지를 컨버팅할 때 기본 전략은 json이다.

만약 return data가 user와 같은 객체면,

user {
	int id = 1;
    string name = "홍길동";
}

json으로 바꿔서 응답된다.

{
	"id":1,
    "name": "홍길동"
}

이런 일을 MessageConverter가 해준다.

Spring에서 기본적으로 제공하는 MessageConverter 라이브러리 중 Jackson이 있다. 이 Jackson은 MessageConverter에 연결되어있는 느낌으로 코드는 전반적으로 MessageConverter를 사용해서 적고, 만약 Myson이라는 json보다 더 좋은 데이터 형식이 나온다면 연결 부분만 Jackson에서 Myson으로 바꿔달아준다.

마무리

전반적인 spring 구조

전반적인 spring 구조

profile
https://devseowoo.notion.site/Seowoo-Portfolio-b21365c3477345818913e8d8fe2e3b90

0개의 댓글

관련 채용 정보