Client-Server 구조의 이해

서현서현·2022년 5월 26일
0

서블릿 & JSP

목록 보기
19/26
post-thumbnail

💡 클라이언트와 서버를 이해하고 구별하기

Tier

P2P(Peer to Peer) : 양 종단간 통신, 즉 2개 이상의 peer가 필요함 >> Client-Server System

Peer란 무엇인가 ? 서버는 경우에따라 한개 이상일수 있는데 2개상의 피어가 동작 할 때 
이것을 2Tier 구조라고 한다 서버가 늘어나면 그에따라 3Tier 4Tier….. 

즉 Tier는 서버의 갯수! 클라이언트가 명령을 발생시켰을때 동작하는 서버의 갯수!

클라이언트 하나당 하나의 톰캣 돌아감 > 2Tier구조, 한계 : 정적자원

수만가지의 책을 컨텐츠로 표현하려면 수만개의 컨텐츠 페이지가 필요함…

정적자원의 단점

yes24에서 책을 클릭해 들어가면 그 책에대한 정보가 띄워지고, 또다른 책을 클릭해서들어가면 책은 다른데 보이는 UI가 비슷함! 수만가지의 책이 있지만 UI는 같고 그 안에 들어있는 데이터만 달라진다. 즉 (만약 정적자원만 가지고 만들려고 하면) 수만개 책을 보여주기 위해 수만개의 html페이지를 만들어놔야한다


동적자원

  1. 템플릿(UI)는 다 똑같으니 같은 템플릿이 필요하고, 어딘가엔 ‘책’ 이라는 데이터가 저장되어 있어야 한다. 즉 책이라는 row-data를 관리하기 위한 DB서버(컨텐츠가 되기 전단계의 정보가 들어있다)가 필요하다. 즉 티어가 3개, 3Tier 이상의 구조가 필요하다
  2. 클라이언트 요청 서버에서 데이터를 가져온다일때 우리가 할 일이 서버에서 데이터가져오기임
  3. 회원목록 조회시 DB의 데이터를 그대로 주면 안되니까 레코드를 조회해

    등 태그를 붙여 꾸며서 응답으로 나가야하는데 그것을 Server에서 해준다. 이단계에서 만드는 어플리케이션이 바로 웹 어플리케이션

  4. 3Tier가 아니라 그보다 확장 될 수도 있다

N-Tier

서버는 클라이언트의 요청을 받는다. 이요청은 두가지 정적자원(html, 동영상 등)에 대한 요청, 동적자원 에 대한 요청(DB에서 가져오는 데이터)이 존재한다.

가정을 해보자,

  1. 서버가 여러개 있을때 첫번째 서버는 클라이언트의 요청이 정적요청인지 동적요청인지 식별해준다. 만약 정적요청이면 처리해서 응답해준다. 이런게 바로 WebServer이다!
  2. 만약 동적요청인 경우, 다음 서버로 요청을 넘겨준다. 즉 두번째 서버동적 요청을 처리하는 어플리케이션이 존재한다. 이를 WAS(Web Application Server)라고 함

위 예시에서는 클라 - 서버 - 서버 -DB 이렇게 존재하니 4Tier 구조라고 할 수 있다.

경우에 따라선 메세징 서버라는게 붙기도 하는데… 그롬 5Tier.. (계속 클라이언트는 하나)

>> 몇가지의 서버가 동작하느냐에 따라서 N값이 결정된다!

(CF) 인터넷과 WEB

PC간 연결을 하기위해 선이 필요한데 그 수많은 선이 연결..

물리적으로 만들어지는 통신망이 인터넷 / 물리적이지 않은 추상적인것이 WEB

WEB

클라이언트와 서버는 기본적으로 HTML을 가지고 동작을 한다.

HTML은 문자기반의 언어고, 클라이언트와 서버는 0과1의 집합을 이용할것이다

그런데 어디서부터 어디까지가 어떤것인지 알 수 없다.

어디가 <p>태그고 어디가 <HTML> 태그인지… 그걸 정의하는것이 HTTP 프로토콜인것!

클라이언트가 네이버에 말을 건다.. 

> 클라이언트가 서버에 말을 거는게 Request

> 서버가 클라이언트에게 답해주느게 Response인데 이게 **HTTP로 포장되어있음**

그럼 이 HTTP가 **어떤방식으로 포장되는지**! 알아야한다

그런데 수없이 많은 클라이언트와 서버가 있으므로 얘네는 서로 식별 할 수 있어야한다.

즉, 수없이 많은 사이트중 naver를 사용하려면 naver를 식별하는 방법론이 필요하다

여기서 사용하는 방법론이 바로 IP


IP

IP Address는 두가지 체계가 있다. IPv4IPv6

cmd에 ipconfig를 검색한다!

4자리로 나뉜게 IPv4방식이고, (.)을 기준으로 나뉜부분을 섹터라고 부른다.

한 섹터의숫자는 0부터 255까지 나올수있다. (총 256개)

하나의 섹터는 몇비트로 구성이 되어있을까? 2의8승이니까 8비트!

8비트가 4자리 있으니 32비트! 2의32승개의숫자로 IPv4 주소를 식별 할 수 있다

이 주소가 부족해져서 사용하게 된 게 IPv6, 얘는 (:)으로 구분한다 섹터 8개라는데 왜 8개지.. 혀튼 얘는 16진수로 표현되며, 한섹터에 16진수 4개 들어가있고… 16*8=128 128개의 비트로 표현함

2의 128승개의 숫자를 표현 할 수 있다


원래는 이렇게 IP를 사용하여 접속을 해야하나, 인간은 IP로 사이트를 식별하기 힘드니까 도메인 네임을 사용한다. 이는 사람을 위한 체계이므로 IP Address로 바꿔서 알아듣는데, 이것은 DNS Server에서 처리해준다 즉, 요청이 오면 DNS서버가 가장 먼저 받아서 처리!

Domain Name Service

  • GTLDNTLD 구조로 나뉜다! (어느서버가 어디에 소속되어있는지 이 구조로 구분한다)
GTLD (글로벌 탑 레벨 도메인)NTLD (네셔널 탑 레벨 도메인)
www.naver.com(섹터가 3개, 3Level)www.naver.co.kr(섹터가 4개, 4Level)
ac, org, kr같은 정보들이 존재하지 않음 - www를 mail로 바꾸면 메일로 가지고 그러는데 이를 호스트라고함… 이를 호스트라하고 최상위 레벨이라고도 함. 전세계에서 공통적 사용이 가능함제일 높은 레벨인 kr.. 하나의국가를 지칭해버림.

WEB 안에서 요청이 발생했을때의 동작

  1. http (http을 사용해서 보내겠다는 뜻)
  2. http://IP (여기에 ip를 쓰는데, 우린 이거대신 도메인을 쓴다)
  3. 그런데 도메인은 바로 식별 할 수 없으니 DNS서버로 먼저간다, DNS서버가 IP를 돌려주고 이제 식별할 수 있게된다.

(EX) daum에 접속해보자!

  1. DAUM 서버가 있는걸 생각하고 그 서버에 ABC라는 자원이 있다고 가정해보자
  2. 요청시에 세 자원중 어떤게 필요한지 표시해줘야한다
  3. http://daum/A 이런식으로 표시해줘야함. 만약 이 자원이 파일이라면?
  4. 파일은 시스템안에 존재하고 이는 deps구조 안에 있다. 즉 경로체계가 필요하다

http://daum/A는 프로토콜 - 도메인네임 - PATH로 되어있는것이다!

http://www.yes24.com**/Product/Goods/109538079**
프로토콜 - 도메인네임(GTLD) - **Path**
동적자원이며 현재보고있는책의 PrimaryKey겠지
쿼리스트링이 아니라 path variable을 사용해서 표현했음

http://www.yes24.com/Product/Goods?**key=109538079**
쿼리스트링..

(EX) 우리의 컴퓨터를 예시로 들어보자

  1. 톰캣과 오라클이 설치되어있으니 지금 한 PC에 서버가 두개 있는상황
  2. 만약 요청이 발생했는데, Tier가 톰캣과 오라클, 즉 두개 있을때(두개의 서버) peer하나라고 칭한다.
  3. 위에서 배웠던 ip address는 서버하나하나를 식별하는 식별자

⇒ 그럼 우리의 ip인 192.168.어쩌구는 peer를 식별할까 Tier를 식별할까? =? peer

⇒ 즉 IP어드레스만 가지고는 두 서버를 식별 할 수 없음

⇒ 그럼 어떻게 ? ⇒ Port 넘버를 사용한다!

IP Addresspeer를 식별하는 물리적 주소체계, porttier를 식별하는 논리적 주소체계

(CF)

tomcat = port 80

oracle = port 1521

**URL(address) : http://IP[domain]:port/path**

http://www.yes24.com:80/Product/Goods/109538079
http의 port는 80번이 기본 할당이므로 생략한것!

Server

언제 req가 발생할지 모른다

→ 24시간 특정포트에서 req가 오는걸 알 수 있는 listening 구조가 필요하다

**Well-Known Port : 해당 포트에 서비스가 고정되어있다**

0번 ~ 1023번: 잘 알려진 포트 (well-known port)
1024번 ~ 49151번: 등록된 포트 (registered port)
49152번 ~ 65535번: 동적 포트 (dynamic port)

80번 포트를 Http가 점유, 443은 Https가 점유

80번 포트가 24시간 감시중! → 웹서버 라고 한다

그렇다면 톰캣은 ?

→ 톰캣은 자기 내부에 application이 있음(webapps파일 내부에 있는 모든것), 즉 WAS이다

개발환경을 구축해 정적, 동적자원을 처리해야 하는데, 정적자원은 웹서버, 동적자원은 WAS에서 처리할 수 있음. 즉 적어도 2개의 서버가 필요함

근데 중프때 톰캣 하나만 썼음! 이미지도 다 썼는데 어떻게 한거지?

톰캣은 정적, 동적자원을 모두 처리할 수 있는 설정을 갖고있다. 원래는 톰캣이 정적자원을 담당하지 않는데도 담당하는중… 원래는 분리하는게 맞으므로 이부분을 잘 기억해두도록 한다 나중에 정적자원을 누가 맡는지 꼭 확인하자!

0개의 댓글