Loading...

Web / / 2022. 2. 24. 11:29

Web 16강. request

반응형

모든 서버에는 4가지 메모리 영역이 있다.

heap이라는 논리적 영역에서 4가지로 나뉘는 것이다.

 

프로그램 하나가 서버에 데몬으로 돌고 있다.

톰캣이라는 프로세스가 돌고 있는 것이다.

 

클라이언트 A가 get, post, delete, put 중 하나를 요청한다.

 

이 서버는 여러 명이서 사용(요청)하는데

요청을 처리할 때

개개인의 메모리 영역이 필요할 것이다.

 

DB에서 데이터를 끌어올려서 메모리에 올리는데

어떤 클라이언트가 요청했는지

메모리에 영역 구분이 필요하기 때문이다.

 

클라이언트 A, B, C가 요청을 하면

A 스레드, B 스레드, C 스레드가

각각 만들어져서 돌고 있을 텐데,

각각의 스레드들이 메모리 구분이 필요하여

요청할 때마다 new 되는 게 있다.

이게 request이다.

 

A가 요청 시에 http 헤더와 바디를 들고 버퍼를 타고 올 때는

순수한 String 정보로 들어온다.

 

이걸 어딘가에 보관해야 하는데

문자열 그대로 보관하면 . 으로 참조하여 사용하기가 힘들다.

이 정보를 각각의 스레드마다

HttpServletRequest 타입 request라는 변수에

쉽게 저장시킨다.

쉽게 말해 request가 힙 공간을 가진다.

 

이를 request 영역이라고 한다.

 

이 request 영역은 A, B, C 모두 따로따로 가지고 있다.

 

그래서 클라이언트의 요청 시에 new 된다.

바디와 헤더 정보를 모두 가지고 있는 것이다.

 

request의 생명주기는

요청이 들어왔을 때부터 응답하는 순간까지 살아있다.

 

잘 만든 것!

최초에 a.jsp를 요청하면

메모리에 클라이언트의 request 영역이 new 된다.

요청한 후 redirection 되어 b.jsp로 요청한다면

기존에 있던 request를 사용하는 게 아닌

새로 new 된 request를 사용한다.

 

이때 원래 떠있던 request는 메모리에서 날아간다.

 

request는 클라이언트만 사용하는 메모리 영역으로

최초에 요청했던 데이터를 request에 저장하는데,

redirection 하면 저장되어있던 데이터도 날아간다.

 

 

 

클라이언트 A가 자신의 회원 정보를 컨트롤러에 요청했다.

컨트롤러가 DB에 연결하여 데이터를 가져와

클라이언트 A의 request 영역에 A의 회원정보를 저장하고

컨트롤러가 View(userInfo.jsp)로 redirection 해준다.

 

그러면 컨트롤러는 응답이 끝났으니

원래의 request영역이 사라지고

새로운 request영역이 생겨난다.

 

이렇게 되면 View(userInfo)에

A의 회원정보를 뿌려줄 수가 없게 된다. 

 

request가 날아가기 전에 View로 데이터를 옮겨줘야 한다.

redirection 직전에 해야 할 것이다.

 

 

 

 

 

 

[출처]

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com


메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형