클라이언트와 서버

뫄뫄(ahk)·2022년 9월 7일
0

Spring

목록 보기
1/18
post-thumbnail

이 게시글은 남궁성의 스프링의 정석 온라인 강의를 듣고 정리한 내용입니다.

클라이언트와 서버

역할에 따라 클라이언트와 서버를 정의내린다면

클라이언트는 서비스를 요청하는 애플리케이션이고, 서버는 서비스를 제공하는 애플리케이션이라고 할 수 있다.

서버의 종류

서버의 종류는 다양하게 있다. 이메일 서버, 파일 서버, 웹 서버, 계속 봐왔던 웹 애플리케이션 서버(WAS) 등이 있는데 이름에서 알 수 있듯이 서버의 종류는 서버가 어떤 서비스를 제공하는지에 따라 달라진다.

그렇다면 WAS(Web Application Server)는 어떤 서비스를 제공할까?

Web Application을 서비스 한다. 클라이언트가 아닌 '서버'에 프로그램이 설치되어 있어서 클라이언트는 서버에 설치된 프로그램의 실행 결과를 전송받아 브라우저에 출력을 한다. 업데이트나 클라이언트의 저장공간을 그리 차지 하지 않는다는 등의 장점이 있다.

동적 리소스와 정적 리소스

방금 서버의 실행 결과를 클라이언트가 전송받는다고 했는데 이를 서버에서 제공하는 리소스라고 하며 크게 두 종류로 나눌 수 있다. 바로 정적, 동적 리소스이다.
매번 요청을 할 때마다 같은 응답을 받는다면 정적 리소스, 요청할 때마다 다른 응답을 받는다면 동적 리소스라고 한다.
정적 리소스는 사진, html파일로 동적 리소스는 실시간 스트리밍 동영상, 주식 현황 표등을 예로 들 수 있다.

port번호

서버는 서비스를 제공하는 애플리케이션이라고 했다. 그런데 같거나 여러 종류의 서버가 한 컴퓨터에 여러개 있을 수 있다. 그 서버들을 구별해 부르는 번호를 port 번호라고 한다. IP 주소 뿐만 아니라, port 번호를 함께 붙여(ex. https://localhost:8434/login) 서버를 구별해줘야한다.

port번호는 0 ~ 65535번까지 있으며, 0~1023번은 예약되어있고 80번은 생략 가능하다.

IP주소와 port번호의 관계를 대표번호 - 내선번호의 관계로 볼 수 있다.
먼저 대표번호로 전화를 하면, 전화를 받은 쪽에서 내선번호를 안내해주고 내선 번호를 입력하면 그 때 내가 원하는 세부적인 업무를 처리할 수 있는게 서버들 중 내가 원하는 서버에 요청을 보내는 과정과 유사하다.

Tomcat의 내부구조

  1. 브라우저에서 요청을 보내면
  2. Tomcat Server가 요청 URL의 port번호를 보고 요청을 받는다
  3. Thread Pool에서 작업을 수행하지 않는 Thread가 요청을 수행하게됨
  4. 요청에 명시된 프로토콜의 종류에 맞는 connector가 요청을 처리한다
  5. 실제 요청을 처리하는 (Catalina)Engine이 요청을 받고
  6. Host(ex: www.naver.com, 여러개 존재 가능)
  7. context(STS 프로젝트 하나, Web Application, 여러개 존재 가능)
  8. context 안에 여러개의 servlet이 요청을 실행한다.
  • servlet은 작은 서버 프로그램으로 브라우저에서 온 요청을 실제로 처리하는 프로그램이다.
  • 스프링에서는 DispatcherServlet을 말한다.
  1. servlet의 controller를 거쳐 매핑된 메서드가 요청을 처리한 응답을 브라우저에 반환한다.

아래는 실제 프로그램을 실행시키고 디버깅하여 나온 call stack이다.
많이 생략되었지만 1~9와같은 실행과정을 거치는 것을 확인할 수 있다.

위의 빨간 펜 부분에서 처음으로 request, response 객체가 만들어져서 이후 과정에 전달된다.

profile
NONONONONONOYes!

0개의 댓글