만약 1대의 PC에 여러개의 서버를 가지고 있다면(Email Server, File Server, Web Server)
요청을 어떻게 받냐면 어떤 서버에 요청을 보내는지 확인하기위해 포트 번호를 적어 줘야 한다.
웨서버의 경우 :80 인데 80의 경우는 생략이 가능하다.
111.22.33.44:80 -> 111.22.33.44 로표현가능
클라이언트가 포트번호를 붙야줘야 하는데
그렇다면 서버는 이미 해당 포트번호와 binding 되어 있어야 하며,
서버는 Listening 상태로 기다리고 있다.
포트 번호는 0~1023 번까지 예약되어 있고 그 이상은 65535개의 포트를 사용 할 수 있다.
Web Server : Web을 Service 한다.
WAS란 : Web Application 을 Service 한다.
Application : 프로그램 -> 서버에 프로그램(.jar)을 설치해 놓고 클라이언트가 사용할 수 있게 해준다.
Client가 원격 프로그램을 호출한다, Server 는 실행 결과를 리턴해준다 Client에게
Tomcat의 내부 구조
Client가 호출을 한다 :8080/~~~
Tomcat 의 내부에서는
[Service] 사용자의 요청을 처리할 Thread pool 이 기다리고 있고,
선정된 Thread가 사용자의 요청에 맞는(Protocol) Connector 와 연결하여 처리한다.
Connector가 Engine(Catalina) 에게 요청을 전달한다.
[Engine>Host (n개의 호스트 존재 가능- 도메인이 여러개)]
Host 안에는 Context 가존재 == Web Application (Context 하나하나가 Web Application = STS Project(스프링프로젝트) )
Web Application 안에는 Servelt이 존재 = 작은 서버 프로그램(서버에서 작동되는 프로그램) 컨트롤러 == 서블릿
[http://www.naver.com][/webtoon][/list] [host ][context 이름][servelt 이름]
Context-> Filter -> Dispather Servlet -> Controller
Tomcat의 설정파일 Server.xml, web.xml
톰캣설치경로/conf/server.xml : Tomcat 서버 설정파일
톰캣설치경로/conf/web.xml : Tomcat의 모든 web app의 공통설정
웹앱이름/WEB-INF/web.xml : web app 의 개별설정
> Protocol 이란?
- 서로 간의 통신을 위한 약속, 규칙
- 주고받을 데이터에 대한 형식을 정의한 것
ex) 운동 경기에서 선수들간의 사인을 정해 놓고 정해진 플레이를 하는것처럼 미리 규칙을 정함
> HTTP(Hyper Text Transfer Protocol)란?
- 단순하고 읽기 쉬움 > 텍스트 기반의 프로토콜
- 해당 내용은 개발자모드 > Network > Name중 하나 클릭한 후에 Request Header / Response Header 등을 확인 할 수 있다.
- 상태를 유지 하지 않는다 (Stateless) - 클라이언트 정보를 저장하지 않는다. // 한 클라이언트가 여러번 요청을 보내도 이전 요청과 다음요청이 누가 보냈는지 확인 할 수 없다
- 이것을 보완하기 위해 사용하는게 Cookie, Session을 통해 사용자를 구분 할 수 있다.
- 확장성이 있다. 헤더(헤더이름 : 값 형식으로 이루워짐[대소문자구분X]), 바디(내용 Html) 즉 원하는 내용을 추가할 수 있다.
> HTTP 요청 메시지 ( GET, POST 방법)
- GET 방식은 리소스를 얻어오기 위한 방법 데이터 전송은 QueryString으로 보낼수 있고(READ)
- POST 방식은 바디가 존재하여 데이터를 바디에 담아 전송( 글쓰시, 로그인, 회원가입, 파일첨부 등.._WRITE)
--> HTTP + TLS => Https // SSL -> TLS
- 첫줄 : 요청라인
- 헤더
- 바디 ( GET 방식은 없고, POST 방식은 있음 )
> HTTP 응답 메시지
- HTTP/1.1 200(OK) ==> 상태라인(State Line)
100대 : 정보, 200대 : 성공, 300대 : Rediect(다른 URL로 요청 하도록 안내), 400대 : Clinet Error, 500대 : Server Error
- 헤더 부분( 헤더 타입 : 값 )
ex) content-length : 44
Contetn-Type : text/html
>> 공백 : 헤더 바디 구분 <<
- 바디 부분
Postman 크롬 확장프로그램을 통해서 GET / POST 방식의 데이터 처리를 확인할 수 있다.
URL 과 URL 파라미터를 넣어서 해당 요청의 HTTP 프로토콜을 확인할 수 있고
그에대한 응답도 확인 할 수 있다.
> 텍스트 파일 vs 바이너리 파일
- 바이너리 파일 : 문자와 숫자가 저장되어 있는 파일 : 데이터를있는 그대로 읽고 쓴다
- 텍스트 파일 : 문자만 저장되어 있는 파일 : 숫자를 문자로 변환 후 쓴다.
> MIME(Multipurpose Internet Mail Extendsions) : 텍스트 기반 프로토콜에 바이너리 데이터 전송하기 위해 고안된 HTTP의 Content-Type 헤더에 사용. 데이터의 타입을 명시
ex) text : text/html, text/css, text/javascript
image : image/bmp, image/webp
audio : audio/wav, audio,midi
video : video/webm, video/ogg
application: application/octetsream 등...
> Base64 --> 64진법 ==> 바이너리 데이터를 텍스트 데이터로 전환 할 때 사용한다.
A~Z 26개
a~z 26개
0~9 10개
+ / 2개 ==> 64개 ==> 2^6 (6bit) 의 문자로 구성되어 있다.
* ASCII == 128개로 2^7
'dev > Spring' 카테고리의 다른 글
[Spring] Private한 메서드 호출 (0) | 2022.05.22 |
---|---|
[Spring] MVC 패턴 - 관심사의 분리 (0) | 2022.05.22 |
[Spring] HttpServletRequest, HttpServletResponse (0) | 2022.05.19 |
[Spring] HttpServeltRequest, HttpServeltResponse, Session (0) | 2022.03.10 |
[Spring] Bean 생성 (0) | 2022.03.04 |