본문 바로가기
dev/Spring

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

by dev_Step 2022. 5. 20.

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