<개요>
1. 클라이언트에서 요청을 보내고 서버에서 해당 요청에 맞는 서비스를 어떻게 제공하는지 그 과정에 대해 자세히 다룸
2. 요청문 쿼리를 자세히 살펴보고, 요청에서 같이 보내온 값을 사용하는 자바 명령어에 대해 배움
1. 클라이언트와 서버 상호작용 과정
(1) 서버 요청이 포트에 들어오기 까지
Binding : 하나의 포트가 하나의 서버와 연결되어 있는 상태를 말한다. (서버와 포트는 1 대 1 연결만 가능하다.)
listening : 하나의 서버가 포트에서 요청을 기다리고 있는 상태를 말한다.
파일 서버는 파일 서비스 제공, 이메일 서버는 이메일 서비스 제공,
웹 서버는 브라우저를 통해서 받을 수 있는 모든 서비스를 제공
** WAS (Web Application Service)란?
웹 어플리케이션을 서비스 한다?
Application == Program 같은 말
서버에 프로그램을 설치하고 클라이언트가 원격으로 해당 프로그램 이용할 수 있게 해주는 서비스
옛날에는 컴퓨터에 일일히 프로그램 설치. 그래서 업데이트 있을 때 모든 컴퓨터 일일히 다 해줘야 했음.
근데 서버에 프로그램을 설치하면 업데이트를 서버 딱 1군데만 하면 돼서 경제성, 효율성이 올라감.
1. 브라우저에서 클라이언트가 요청을 보냄. (ex - www.fastcampus.co.kr/event/list)
2. 톰캣 8080 port(기본 값)을 통해 요청이 서버로 전달.
3. 서버에는 일을 할 수 있는 여러 개의 Thread가 있음 (이 Thread의 묶음을 Thread pool 이라고 함.)
4. Connector: 브라우저에서 요청을 보낼 때 어떤 프로토콜을 썼냐에 따라서 사용할 Connector가 달라짐.
(HTTP 1.1, HTTP 2.0 등등이 protocol의 종류임.)
5. 맞는 Connect 연결되면 서비스를 처리하는 엔진으로 넘어옴.
6. 엔진에는 하나 혹은 여러 개의 Host가 존재한다. Host가 큰 틀의 주소이다.
(우리는 여기서 www.fastcampus.co.kr/event/list 이므로 www.fastcampus.co.kr인 host로 이동한다.)
7. 또 Host 안에는 여러 개의 Context가 있다. Context 하나 하나가 하나의 WepApp이다.
(우리가 만든 Spring project, 즉 ch2 자체가 Context에 속한다.)
8. Context 안에는 또 여러 개의 Servlet이 있다. Servlet이란 작은 프로그램을 말한다.
(Controller가 Servlet에 속한다.)
요청에 맞는 Host > Context > servelt으로 가서 일 처리가 된다.
9. 처리된 내용은 다시 브라우저로 보내져 클라이언트에게 준다.
2. 스트링 쿼리 이용하는 자바 명령어
스트링 쿼리는 이름 처럼 모든 name과 value가 String으로 이루어져 있다.
따라서 int, double등으로 쓸려면 형 변환 해줘야 한다.
=은 name과 value의 구분자이고 &는 하나의 문장에 대한 구분자이다.
.getParameter("name")은 name에 대응하는 value를 가져온다.
Enumeratuin은 Iterator의 old 버젼이다. 반복자와 같은 역할을 한다.
따라서,
Enumeration enum = request.getParameterNames();
// enum이란 일종의 반복자가 Name들의 value를 순회
Map paramMap = request.getParameterMap();
// name과 value를 각각 key 와 value의 Map 형태로 만들어서 반환한다.
해당 경우와 같이 year란 같은 name에 여러 개의 value가 들어갈 경우,
request.getParameterValues("name");은 name에 들어간 여러 개의 value들을 차례대로 배열로 정리하여 반환한다.
'백엔드 개발 > SpringMVC' 카테고리의 다른 글
HTTP 요청과 이론 (0) | 2023.02.28 |
---|---|
설정 파일 - server.xml 과 web.xml (0) | 2023.02.27 |
HTTP 요청과 응답 (예제) (0) | 2023.02.27 |
HTTP 요청에 대한 응답을 브라우저에 띄우기 (예제) (0) | 2023.02.24 |
AWS에 배포하기 (0) | 2023.02.24 |