본문 바로가기

백엔드 개발/SpringMVC

클라이언트와 서버

<개요>

1. 클라이언트에서 요청을 보내고 서버에서 해당 요청에 맞는 서비스를 어떻게 제공하는지 그 과정에 대해 자세히 다룸 

2. 요청문 쿼리를 자세히 살펴보고, 요청에서 같이 보내온 값을 사용하는 자바 명령어에 대해 배움 

 

1. 클라이언트와 서버 상호작용 과정 

(1) 서버 요청이 포트에 들어오기 까지 

한대의 컴퓨터에서 서로 다른 서비스를 제공할 경우, IP 주소만 적는다고 어떤 서비스를 이용할려는 것인지 알 수 없음
그래서 포트가 필요. 0~1023번은 어떤 서비스 제공할거다 해서 예약된 서버, 포트별로 서비스가 나눠짐.

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들을 차례대로 배열로 정리하여 반환한다.