목차
1. Client & Server
2. Proxy 패턴
이렇게 Applicatoin을 Client와 Server로 이원화 한 것
=C/S Application
Client와 Server간의 데이터 전송에 네트워킹 기술을 이용한다.
java.net.Socket
/java.io.*
(스트림클래스,PrintStream
, etc)
C/S Applicatoin Architecture 의 장점
다중 사용자에게 동시에 서비스 제공
java.net.*
new Socket("접속하려는 상대편의 네트워크 주소", 포트번호(port));
접속하려는 상대편의 네트워크 주소:
127.0.0.1
= local 컴퓨터를 가리키는 도메인명과 IP주소
포트번호:
IP 주소
= 지구에서 유일한 값
= 국제기구에서 번호 관리
IPv4
0~255
.0~255
.0~255
.0~255
- 192.168. 으로 시작하는 IP가 사설 IP이다.
- 외부로 보낼 때는 공유기에서 구분을 해준다.
- 외부에서 받아올 때도 사설IP를 알려주고 받아온다.
연결 기다림 : 서버 소켓
new ServerSocket(포트번호)
Proxy 패턴을 활용한 네트워킹 코드 캡슐화
캡슐화 : 해당 기능이 필요한 경우 간단히 메서드 호출로 처리
Proxy 패턴
Client >> _call_ >> [통신대행자] >> _통신_ >> Server
Client << _리턴_ << [통신대행자] << _결과_ << Server
통신대행자 : 통신코드를 감춘다.
Proxy 패턴 적용 이전
BoardHandler << 통신 >> BoardServlet
Proxy 패턴 적용 이후
BoardHandler << call, return >> BoardDaoProxy << 통신 >> BoardServlet
proxy 서버 역할
- 필터링
=> 접근제어- 로깅(logging)
=> 사용기록 추적- 캐싱(caching)
=> 임시 보관
stateful
stateless
= Connection-Oriented
= 연결지향
= TCP
- 연결을 끊을 때까지 나머지가 대기해야 하는 줄서기 방식
ex) 은행 업무- FTP, POP3, 채팅, 게임
[연결>>요청>>응답>>연결끊기]
를 반복하는 방식
ex) 114, ARS 인증- HTTP
ex) 편지, 방송
ping
BoardDao
BoardServlet
Server 측 ORB (Object Request Broker)
BoardHandler
Client 측 ORB (Object Request Broker)
분산시스템 아키텍처
- server를 회계전담서버, 인사전담서버, ... 등으로 나누다보니 시스템 간 기능호출이 필요하다
- 이 때문에 원격메서드호출이 필요하다.
원격메서드 호출기술과 진화과정
- 원격 메서드를 만드는 개발자에게 부담이 가중되어서
호출 대행자 생성을 자동화 했다.- '메서드 생성기'를 통해 코드를 자동생성
- 객체 생성기가
skeleton
과stub
의 코드를 자동 생성한다.
Beans (=Object)
only java만 가능
언어중첩 : 언어에 구애받지 않고 호출할 수 있게 해준다.
EJB+CORBA (+ 웹통신 + XML)
- WSDL : Web Service Description Language
= 호출함수 원격 객체의 메서드 정보- WSDL을 client에게 응답 > 사용할 stub을 서버에게 요청 > stub을 다운로드
- 이후 stub과 skeleton은 HTTP에 따라 통신
- Eclipse IDE 등은 개발도구에서 stub 객체를 자동으로 다운로드 한다.
개발자가 직접 다운로드 하지 않는다.
4.에서 추가로 순수 HTTP 기술 사용
- 개발도구를 사용하여 sub을 자동 다운로드 하더라도 결국 client측에서는 stub객체를 사용해야 한다.
- 또한 프로그래밍 언어에 맞춰 stub을 다운로드 해야한다.
- 이를 해결하기 위해 순수 HTTP 기술 사용
프로그래밍 언어별로 stub이 필요없다.
ServerApp : 프로세스
RequestThread : 실행흐름을 분리
IP주소 v4의 경우 : 32bit 양의 정수 값
C0A8004A
(16진수)3,232,235,594
(10진수)192.168.0.74
(표현하기 쉽게 1byte씩 잘라서 10진수로 표기)localhost
(기억하기 쉽게 이름을 부여)
IP주소를 직접 사용하는 대신에 IP주소에 부여된 알파벳과 숫자로 된 텍스트 이름을 사용하는 것이 편하다.
IP주소에 대한 텍스트 이름을 알려주는 서버가 "DNS"
통신을 하는 모든 프로그램은 port번호를 가져야 한다.
client 의 port번호는 OS로부터 자동 발급 받는다. 49152 ~ 65535
Host OS 위에 Guest OS를 설치하는 모양새.
가상머신은 실제컴퓨터처럼 H/W 자원을 사용 :: 자원낭비가 심하다.
그래서...아래의Docker
등장
App을 실행하는데 필요한 H/W 자원만 사용
물론 VM처럼 별도의 컴퓨터에서 실행하는 것처럼 동작
URL, URN
다음의 형식을 띤다.
scheme://<user>:<password>@<host>:<port>/path<url-path>
- scheme : 프로토콜
- < user > : 사용자id
- < password > : 암호
- < host > : 서버주소
- < port > : 포트번호
- path : 자원의경로
- < url-path > : query string
- id와 암호는 생략가능
example:animal:ferret:nose
Sequence Diag.
시간 흐름에 따라 실행과정을 표현하기에 적합
Connection-Oriented vs Connectionless
Connection-Oriented : TCP (연결지향)
- stateful
- stateless
ServerSocket, Socket
Connectionless : UDP (비연결)
DatagramSocket, DatagramPacket
편지, ping