웹서버 : 정보를 가지고 있는 컴퓨터
정보를 필요로 하면 요청하는 주체가 웹서버에 요청해야하는데, 이 때 필요한 것이 IP주소이다.
컴퓨터는 고유한 인터넷 주소와 유사한 것을 가지는데, 그것이 IP주소이다.
IP주소는 네 칸으로 만들어져있고, 각 칸은 256을 넘어갈 수 없다. (ex> 210,50,0,80) 이렇게 만들 수 있는 IP의 총 주소는 42억 9천개이다. 현재 사용 중인 주소는 IPv4이다. 앞에 v는 version을 뜻한다. 홀수는 테스트용으로 사용한다. 따라서, 다음의 버전은 IPv6일 것이다. 이는 n경개를 넘어설 예정이지만, 아직 컴퓨터를 사용하는 인구수가 적기 때문에 IP주소를 경개 이상을 만들 이유가 없어 아직 사용하지 않는다.
요청하는 주체는 웹서버의 IP를 요구하지만, 웹서버는 상대의 IP를 요구하지 않는다. 웹서버가 요청주체에게 정보를 능동적으로 제공하는 것이 아닌, 주체가 웹서버의 정보폴더로 접근하여 필요로 하는 파일 혹은 폴더를 가져가기 때문이다. 따라서 컴퓨터는 늘 켜져있어야 한다.
이렇게 정보를 요청받은 컴퓨터는, 정보를 제공할 의사가 있다면 주체에게 응답을 해주어야만 한다. 이렇게 요청-응답(request - response)의 묶음을 하나의 세션(session)이라고 한다. 마치 현실세계의 노크와 대답과 같다. 즉, 무조건 요구가 들어왔다고 해서 반드시 응답을 할 이유는 없다. 따라서 비정상적 요청은 응답하지 않는다.
웹서버는 컴퓨터의 모든 파일정보를 제공하는 것이 아닌, 요청받은 파일의 위치(폴더)만 웹서버로 제공할 수 있다. 이렇게 접근권한을 부여할 수 있다.
IP는 컴퓨터까지만 접근할 수 있다. 컴퓨터는 다양한 작업을 할 수 있으며, 이는 다른 인터넷 서버와 연결되어 있을 것이다. 요청자는 이 중 어떻게 웹서버를 구분할 수 있을까? 정답은 포트이다. 포트는 논리적인 연결이다. 우리는 다른 서버와 각자 물리적 연결을 하는 것이 아닌(내가 게임을 하고, 스트리밍 서버를 통해 노래를 듣고, 카톡을 한다고 해서 선이 3개가 연결되는 것이 아니듯, 랜선이 여러개가 아니니까) 하나의 선으로 연결되어있으나, 포트는 여러개가 있다. 포트는 항구와 같아서 신호를 받아들이는 곳은 항구의 한 군데지만 배가 정박하는 곳은 다양하게 나누어져있는 것과 같은 이치이다. 하나의 컴퓨터가 연결할 수 있는 포트의 충 갯수는 6만개이다. 포트의 번호를 선택해 통신하면 원하는 웹서버에 접근할 수 있다(보통 인터넷은 80번 포트를 이용한다). 같은 포트를 사용할 경우 연결에 충돌이 일어날 수 있다. 이렇게 포트를 끝에 달고 포트당 통신하는 통신 형태를 소켓 통신이라고 한다.
데이터를 주고받을 때는 다양한 규칙을 필요로 한다. 이 규칙은 다양하다.
http://는 문서를 전달하는 프로토콜이다. 즉, 인터넷은 html 문서를 교환하는 프로토콜인 것이다.
문서를 주고받는 것 이외에도 상태(stateless)를 전달하는 프로토콜도 존재한다.
리눅스나 윈도우 같은 운영체제는 서로 소켓통신이 가능한데, 이 때 사용하는 것이 쉘 언어이다. 쉘 언어 중 sokect 이라는 언어를 통해 통신한다. 자바는 이 os의 명령어를 가져와서 사용하는데, 이를 시스템 콜(system call)이라고 한다
소켓통신은 다른 컴퓨터와 연결된 상태로 계속 통신이 가능한데(채팅 등) 이를 statefull 통신이라고 한다.
html 통신은 이렇게 계속 연결된 상태로 지내지 않아도 된다. 이를 stateless 통신이라고 한다. 이렇게 끊어끊어 통신하는 이유는 서버의 부하를 줄이기 위해서이다.
이 통신들은 서로 응답할 때, buffer을 달고 통신한다.
OSI는 7계층으로 이루어져있다.
문서를 전달할 때 각자의 역할이 있다. 그 전달하는 각자의 역할이 OSI 7계층이다.
문서를 전달할 때 문서를 작성하고, 번역하고, 문서를 포장하고, 전달하는 역할을 필요하다. 전달받은 곳은 전달을 받고, 보장을 풀고, 재번역을 하고, 읽어들인다. 이렇게 문서를 전달하는 쪽은 순서대로 내려가는데, 이것은 '직렬화(컴퓨터가 이해할 수 있는 언어로 번역하는 것)' 라고 하고, 전달받는 주체는 이를 반대로 실행하는데 이를 '역직렬화(인간이 이해할 수 있는 언어로 번역하는 것)' 라고 한다. JAVA에서 Json으로 번역하는 과정도 이와 동일할 것이다.
7계층은 다음과 같다.
- Layer(L) 7: 응용 계층 : 프로그램(포트 선택)
- L 6 : 표현 계층 : 압축 혹은 인코딩, 암호화
- L 5 : 세션 계층 : 동기화
- L 4 : 트랜스포트(전송) 계층 : 전송방식 설정
- L 3 : 네트워크 계층 : ip를 통해 논리적인 길을 만듬. 데이터 통신을 위한 최적의 길을 찾는다.
- L 2 : 데이터링크 계층 : MAC, ARP. 집에서 컴퓨터가 여러대일 때, 단 하나의 컴퓨터를 선택한다.
- L 1 : 물리 계층 : 데이터를 전송하는 물리적 장치(구리선, 광케이블 등)을 설정한다.
응용계층에서 사용하는 포트 중에서 주의할 점이 있는데, 0부터 1023사이의 포트를 선택하지 않도록 한다.
well-known port라고 하는데, 이 포트는 필수 프로그램에 굉장히 많이 사용되는 포트로, 사용하는 포트로 충돌이 일어나게 된다. 따라서, 임의로 프로그램을 만들 때 사용하지 않도록 한다.
https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D
전송 방식은 두가지, TCP와 UDP가 있다. UDP는 인간이 이해할 수 있는 방식이다. 통화 등에 사용한다. UDP는 과정을 무시하고 바로 전송한다. 따라서 유실되어도 상관 없이 전송한다. 반대로, TCP는 컴퓨터가 이해하는 방식이기 때문에 반대로 완벽한 데이터이다. TCP는 데이터를 전송하고, 이를 확인하는 신호를 받는데(신호를 받을때까지 세 번 정도 확인한다), 이를 ack라고 한다. 데이터를 보내는 방식 하나는 서킷 스위칭, 하나는 패킷 스위칭이라고 한다.
서킷 스위칭은 데이터를 자르지 않고 한번에 보내는 방식이다. 빠르긴 하지만 선이 한 통신 당 하나를 필요로 하기 때문에, 패킷 스위칭을 더 많이 이용한다. 패킷은 데이터를 자르고 그 데이터마다 송신자와 데이터의 순서를 기술한 헤더를 함께 전송한다. 패킷 스위칭도 데이터를 잘라 보내면서, 패킷을 받을 때마다 ark를 보낸다. 패킷의 단점은 데이터가 유실될 수도 있는 단점이 있다.
하지만 접근하는 사람이 많을 경우 한 컴퓨터에 부하가 많이 걸리기 때문에 같은 컴퓨터를 복사해서 역직렬화(L4~L7)까지 해결하는데, 이 장치를 L4라고 하고, 하는 일을 로드 밸런싱이라고 한다. 그러나 이것의 금액이 부담되기 때문에 컴퓨터를 빌리는 클라우드 방식을 이용한다. 클라우드는 IAAS, PAAS, SAAS를 한번에 해결해준다.
L7과 L3까지를 WAN이다.
IP를 타고 도착한 신호는 공유기에 도착한다. 이전에는 허브와 공유기를 따로 이용했지만, 현재는 공유기가 허브의 역할도 대신하기 때문에 공유기를 통해 다양한 방향으로 흐름이 발생한다. 이 때 물리적 주소를 통해 통신할 컴퓨터를 찾아간다. IP 중 192, 10, 172로 시작하는 IP는 사설 IP이며. 임의적이고, 공유기가 만든다.
이 과정 전체는 헤더를 만들어가는 과정이다.
'JAVA' 카테고리의 다른 글
JAVA 실습 10. 공공데이터를 이용하여 코로나 공공마스크 지원 약국 주소찾기. (0) | 2020.04.10 |
---|---|
JAVA 실습 9. 공공데이터와 Json을 이용한 항공데이터 조회하기 (0) | 2020.04.07 |
14. Json (0) | 2020.04.06 |
13. 입출력 (0) | 2020.04.06 |
13. 접근지정자 (0) | 2020.04.06 |