dev/Spring

[Spring] HTTP/ TOMCAT 전반적인 내용

dev_Step 2022. 5. 20. 00:39

만약 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