이 게시글은 남궁성의 스프링의 정석 온라인 강의를 듣고 정리한 내용입니다.
클라이언트는 서비스를 요청하는 애플리케이션이고, 서버는 서비스를 제공하는 애플리케이션이라고 할 수 있다.
서버의 종류는 다양하게 있다. 이메일 서버, 파일 서버, 웹 서버, 계속 봐왔던 웹 애플리케이션 서버(WAS) 등이 있는데 이름에서 알 수 있듯이 서버의 종류는 서버가 어떤 서비스를 제공하는지에 따라 달라진다.
Web Application을 서비스 한다. 클라이언트가 아닌 '서버'에 프로그램이 설치되어 있어서 클라이언트는 서버에 설치된 프로그램의 실행 결과를 전송받아 브라우저에 출력을 한다. 업데이트나 클라이언트의 저장공간을 그리 차지 하지 않는다는 등의 장점이 있다.
방금 서버의 실행 결과를 클라이언트가 전송받는다고 했는데 이를 서버에서 제공하는 리소스라고 하며 크게 두 종류로 나눌 수 있다. 바로 정적, 동적 리소스이다.
매번 요청을 할 때마다 같은 응답을 받는다면 정적 리소스, 요청할 때마다 다른 응답을 받는다면 동적 리소스라고 한다.
정적 리소스는 사진, html파일로 동적 리소스는 실시간 스트리밍 동영상, 주식 현황 표등을 예로 들 수 있다.
서버는 서비스를 제공하는 애플리케이션이라고 했다. 그런데 같거나 여러 종류의 서버가 한 컴퓨터에 여러개 있을 수 있다. 그 서버들을 구별해 부르는 번호를 port 번호라고 한다. IP 주소 뿐만 아니라, port 번호를 함께 붙여(ex. https://localhost:8434/login) 서버를 구별해줘야한다.
port번호는 0 ~ 65535번까지 있으며, 0~1023번은 예약되어있고 80번은 생략 가능하다.
IP주소와 port번호의 관계를 대표번호 - 내선번호의 관계로 볼 수 있다.
먼저 대표번호로 전화를 하면, 전화를 받은 쪽에서 내선번호를 안내해주고 내선 번호를 입력하면 그 때 내가 원하는 세부적인 업무를 처리할 수 있는게 서버들 중 내가 원하는 서버에 요청을 보내는 과정과 유사하다.
아래는 실제 프로그램을 실행시키고 디버깅하여 나온 call stack이다.
많이 생략되었지만 1~9와같은 실행과정을 거치는 것을 확인할 수 있다.
위의 빨간 펜 부분에서 처음으로 request, response 객체가 만들어져서 이후 과정에 전달된다.