1. 클라이언트와 서버
- 클라이언트(client) : 서비스를 요청하는 애플리케이션(or 컴퓨터)
- 서버(server) : 서비스(service)를 제공하는 애플리케이션(or 컴퓨터)
2. 서버의 종류 -> 어떤 서비스를 제공하냐에 따라서 나누어진다.
- Email server : 이메일 서비스
- File server : 파일 서비스
- Web server : 웹을 서비스
=> 우리가 브라우저를 통해서 사용하는 서비스가 모두 'Web'이다. text, image, video 등 웹 서버를 통해 서비스 받는 것.
3. 서버의 포트

만약 111.22.33.44의 ip를 가진 한 대의 컴퓨터에 여러 개의 서버 프로그램이 설치되어 있다고 가정하면,
클라이언트에서는 ip주소만으로는 구분할 수 없다. (같은 ip안에 서비스가 존재하기 때문에)
그래서 필요한 것이 port이다.
여러 개의 서버 프로그램이 있을 때 프로그램은 컴퓨터의 특정 port와 연결되어 있다.
(email server - 25번 / File server - 22번 / Web server - 80번 포트 사용)
서버를 사용하고 싶은 ip 뒤에 port 번호를 적어주면 된다.
ex)
111.22.33.44:25
111.22.33.44:22
111.22.33.44:80 (Web같은 경우에는 80포트가 디폴트 값이라서 생략 가능하다. 8080을 쓰면 적어주면 된다!)
4. 웹 애플리케이션 서버(WAS)란?
- 웹 애플리케이션 서버(WAS) : 웹 애플리케이션을 서비스하는 서버
-> 프로그램을 서비스한다.

클라이언트가 서버에 있는 프로그램(애플리케이션)을 사용할 수 있게 해준다.
WAS는 서버에 있는 프로그램을 클라이언트에게 서비스해주는 프로그램.
프로그램을 서비스 한다는 것은 원격 컴퓨터에서 클라이언트가 서버에 있는 프로그램을 호출할 수 있게 해주고,
그 호출된 프로그램이 실행돼서 그 결과를 클라이언트에게 보내는 것을 가능하게 해준다.
Spring boot에서는 톰캣 프로그램을 내장된 형태로 사용한다.
5. HTTP 요청부터 응답까지의 과정
- 웹서버에 요청하기 전에 IP주소와 포토번호로 TCP/IP 연결을 맺어야 한다.
1) DNS 서버에서 도메인의 IP를 조회한다.
2) 웹브라우저와 웹서버간의 TCP 연결을 맺는다.
3) 웹브라우저가 웹서버에 HTTP 요청을 보낸다.
4) 웹서버는 웹브라우저에게 HTTP 응답을 보낸다.
5) TCP 연결을 끊고, 웹브라우저는 HTTP응답(주로 HTML)을 보여준다.
① HTTP 요청과 응답 과정(1) - DNS(Domain Name System) 서버에 문의

- 브라우저를 이용해서 URL을 입력 -> ip주소는 숫자라서 사람들이 외우기 힘드니 도메인 이름 사용.
도메인 이름으로 요청하면, DNS서버가 도메인 이름이 실제 어떤 ip인지 알려준다.
그러면 도메인 이름 대신에 DNS서버가 알려준 ip를 사용하게 된다.
② HTTP 요청과 응답 과정(2) - TCP연결(3-way handshake)

- 해당 ip주소에 있는 Web server에게 SYN요청(연결 요청)이 간다. 서버가 ACK(알겠다)라는 응답을 해주면,
클라이언트와 서버의 연결이 만들어진다. (클라이언트와 서버 간 통신할 수 있는 I/O 스트림 생성)

클라이언트의 출력(out)이 서버의 입력(in)으로 들어가게 되고, 클라이언트가 보낸 내용을 서버가 읽을 수 있게 된다.
이번엔 서버가 SYN요청을 보내고, 클라이언트가 ACK으로 응답을 보내주게 된다.

그러면 이 둘 사이에 스트림이 하나 더 생기게 되는데, 이는 웹 서버에서 클라이언트에게 보낼 수 있는 응답을 위한
스트림이 생기게 된다. (웹 서버의 출력이 클라이언트 입력)

요청과 응답이 원래는 4번 왔다갔다 하는데, 서버가 2번 보내는 것을 한 번에 묶어서 보내게 된다.
총 3번 통신으로 클라이언트와 서버간의 연결이 되는걸 3-way handshake라고 한다.
③ HTTP 요청과 응답 과정(3) - HTTP 요청

위 과정을 통해 클라이언트 - 서버 간 연결이 이루어져야 클라이언트에게 요청할 수 있다.
④ HTTP 요청과 응답 과정(4) - HTTP 응답

서버가 그 요청을 받아서 응답을 보내준다. (대부분 HTML 형식의 결과를 보내준다.)
⑤ HTTP 요청과 응답 과정(5) - 응답을 수신하고 연결을 종료

hello.html에 있는 내용을 브라우저가 받아서 보내주게 되고, 요청에 대한 응답이 끝났으니 연결이 종료된다.
(재사용 하는 방법도 존재)
6. IP, TCP, HTTP
- IP(Internet Protocol) : IP주소를 이용한 전송 프로토콜. 비연결 기반
- TCP(Transfer Control Protocol) : 패킷 전송을 제어. 연결 기반(전송 했는데 못받은 데이터가 있으면 다시 보내줌)
- HTTP(Hyper Text Transfer Protocol) : 텍스트 프로토콜

'SpringBoot' 카테고리의 다른 글
| ch2 05. 원격 프로그램으로 응답하기 (0) | 2023.07.04 |
|---|---|
| ch2 04. HTTP 요청과 응답 (0) | 2023.07.04 |
| ch2 03. 원격 프로그램에 데이터 전달하기 (0) | 2023.06.27 |
| ch2 01. 원격 프로그램의 작성과 실행 (0) | 2023.06.23 |
| ch1. 환경설정 (0) | 2023.06.09 |