2019년 7월 3일 수요일

[강좌]옛날강좌들-BIT캠퍼스-자바네트워크프로그래밍

BIT 캠퍼스자바네트워크 프로그램밍


강좌 정보

  • 관련업체 : 비트 캠퍼스
  • 총 30 강

저자 정보


추후 해야 할일들

  1. Intellij 에서 Javadoc 설정 하기 및 보기

제1강 - 자바 네트워크 프로그래밍의 소개 #1

프로토콜

TCP

UDP

연결지향적

아니오

신뢰성

아니오

Byte단위 전송

아니오

전 이중 방식의 전송

제2강  - 자바 네트워크 프로그래밍의 소개 #2

제3강  - 자바 쓰레드(Thread) #1

제4강  - 자바 쓰레드(Thread) #2

생산자/소비자 문제 처리 방법

  • 항상 경주 상태(race condition) 이 발생
  • 즉 과생산 혹은 과소비가 발생할 수 있음.
  • 자바에서는 2가지 방법이 존재함.
  • 모니터(monitors) - 공유 객체의 상태 변수 기법
  • notifyAll메소드와 wait 메소드
  • 모니터보다 고수준 기법임.

제5강  - 자바 입출력 스트림(Stream) #1

제6강  - 자바 입출력 스트림(Stream) #2

제7강  - 자바 입출력 스트림(Stream) #3

제8강  - java.net 패키지 #1

제9강  - java.net 패키지 #2

URL과 URLConnection 클래스를 이용하여 원격지 자원을 가져오는 방법

  1. URL 클래스를 이용하여 연결하고자 하는 호스트의 정보를 가진 URL 객체를 생성
  2. URL 클래스의 openConnection() 메소드를 사용하여 URLConnection 객체를 생성
  3. URLConnection로 부터 속성을 정보를 구한다.
  4. URLConnection클래스의 getInputStream() 메소드나 URL클래스의 open() 메소드로 원격지 정보를 읽기 위한 InputStream 객체를 생성
  5. InputStream으로 부터 원격지 정보를 읽어 온다.

URLEncoder / URLDecoder 클래스

  • 문자열을 “x-www-form-urlencoded” 이라고 불리는 MIME 형식으로 encode/decode 위한 기능을 제공
  • 변환 규칙
  • a-z,A-Z,0-9이외의 ASCII 문자도 변환 한다.
  • 공백문자는 ‘+’ 기호로 변환
  • 기타문자(a-z,A-Z,0-9 이외)는 ‘%xy’와 같은 세 개의 문자로 변환 xy는 문자의 하위 비트에 대한 16진수
  • 목적는 웹서버에 쿼리 문자열을 보내야 할 경우에 보다 쉽게 문자열을 변환

제10강 - java.net 패키지 #3

java.net.HttpURLConnection 변수 (HTTP 응답코드)

구분

상수명

코드

번호

설명

성공코드

HTTP_OK

200

OK, 정상응답

HTTP_CREATED

201

Created

HTTP_ACCEPTED

202

Accepted

HTTP_NOT_AUTHORIATIVE

203

Non-Authoritative Information

HTTP_NO_CONTENT

204

No content

HTTP_RESET

205

Reset content

HTTP_PARTIAL

206

Partial content

리다이렉트 코드

HTTP_MULT_CHOICE

300

Multiple Choice

HTTP_MOVED_PERM

301

Moved Permanently

HTTP_MOVED_TEMP

302

Temporary Redirect

HTTP_SEE_OTHER

303

See Other

HTTP_NOT_MODIFIED

304

Not Modified

HTTP_USE_PROXY

305

Use Proxy

클라이언트 에러코드

HTTP_BAD_REQUEST

400

Bad Request

HTTP_UNAUTHORIZED

401

Unauthorized

HTTP_PAYMENT_REQUIRED

402

Payment Required

HTTP_FORBIDDEN

403

Forbidden

HTTP_NOT_FOUND

404

Not Found

HTTP_BAD_METHOD

405

Method not allowed

HTTP_NOT_ACCEPTABLE

406

Not Acceptable

HTTP_PROXY_AUTH

407

Proxy Authentication Required

HTTP_CLIENT_TIMEOUT

408

Request Time-Out

HTTP_CONFLICT

409

Conflict

HTTP_GONE

410

Gone

HTTP_LENGTH_REQUIRED

411

Length Required

HTTP_PRECON_FAILED

412

Precondition Failed

HTTP_ENTITY_TOO_LARGE

413

Request Entity Too Large

HTTP_REQ_TOO_LONG

414

Request-URI Too Large

HTTP_UNSUPPORTED_TYPE

415

Unsupported Media Type

서버 에러코드

HTTP_NOT_IMPLEMENTED

501

Not implemented

HTTP_INTERNAL_ERROR

502

Internal Server Error

HTTP_BAD_GATEWAY

503

Bad Gateway

HTTP_UNAVAILBLE

504

Service Unavailable

HTTP_GATEWAY_TIMEOUT

505

Gateway Timeout

HTTP_VERSION

506

HTTP Version Not Supported

제11강 - 클라이언트 네트워크 프로그래밍#1

제12강 - 클라이언트 네트워크 프로그래밍#2

제13강 - 클라이언트 네트워크 프로그래밍#3

제14강 - 서버 네트워크 프로그래밍#1

ServerSocket 클래스

  • 정의 :서버가 클라이언트로 부터의 네트워크를 통한 연결을 받아들일 수 있는 메카니즘을 가진 클래스
  • ServerSocket 클래스 생성자
  • 클라이언트가 시도한 연결은 Queue에 들어가며, 서버가 accept() 메소드를 호출하면 하나씩 빠져 나온다.
  • ServerSocket 클래스의 생성자에서 Queue 갯수를 지정할 수 있음(실제 Queuing은 OS가 담당)
  • OS는 Queue가 Full이 되면 그 이후 연결 시도는 모두 거절 한다.
  • 포트 번호 범위 : 1 ~ 1024 까지 (시스템 예약), 1025 ~ 65,535 (short.MAX) 사용자 정의
  • accept가 호출되면 클라이언트를 받을 준비가 되어 있는 것이다.
  • 생성자 목록
  • ServerSocket(int port) throws IOException
  • 주어진 포트로 지정된 로컬 컴퓨터의 포트에서 ServerSocket 객체를 생성하고 listen 한다. default queue 값 50
  • ServerSocket(int port, int blacklog) throws IOException
  • 앞에서 소개한 생성자와 같은데, blacklog값을 통해서 OS가 queue에 넣을 수 있는 클라이언트의 개수를 정해 줄 수 있다는 차이가 있음.
  • ServerSocket(int port, int blacklog, InetAddress bindAddr) throws IOException
  • bindAddr로 지정된 로컬 주소로 들어온 연결만을 받아들일 수 있음.
  • bindAddr로 null값을 지정하면 아무 로컬 주소로나 연결을 받을 수 있다.
  • 메소드
  • void close() throws IOException
  • 이 메소드는 서버 소켓 객체를 받는다. 서버에 의해 받아 들여졌지만 아직 닫히지 않은 연결에 대해서는 닫지 않기 때문에, 현재 서버는 소켓에 달려있는 클라이언트에 대한 연결이 유지될 수도 있다. 하지만 OS는 더 이상 클라이언트로 부터 새로운 연결을 받지 않는다.
  • InetAddress getInetAddress()
  • 해당 서버 객체의 바인딩된 로컬 주소를 반환함.
  • 생성자에서 로컬 주소가 주어지지 않았을때는 임의의 로컬 주수에 대한 InetAddress를 반환 (0.0.0.0)
  • void setSoTimeout(int timeout) throws SocketException
  • 타임아웃을 밀리초 단위로 설정함.
  • 기본값은 0 이고, 타임아웃을 값을 설정하지 않았기 때문에 accept()가 성공할 때 까지 계속해서 기다린다.

제15강 - 서버 네트워크 프로그래밍#2

제16강 - 서버 네트워크 프로그래밍#3

제17강 - 데이터그램 네트워크 프로그램밍#1

UDP(User Datagram Protocol)

  • IP상부에서 동작하는 비연결성의 트랜스포트 계층 프로토콜
  • Packet기반으로 동작, 데이터를 쪼개어 일정한 크기 패킷으로 만들어 네트워크로 전송함.
  • 패킷 전송은 무결성을 보장할 수는 없지만 전송되는 패킷에는 최소한의 무결성 체크를 위해 16비트 크기의 CRC가 붙어 있음.
  • UDP는 데이터를 송신할 때, 각 UDP메시지는 목적지 포트 번호와 근원지 포트 번호를 포함있음.
  • UDP 메시지는 손실되거나, 중복되거나, 비순차적으로 도착할 수 있고, 수신자가 처리할 수 있는 속도보다 더 빨리 도착할 수 있다.

java.net.DatagramPacket 클래스

  • UDP 패킷을 전송/수신하기 위한 클래스
  • 전송시 : 메시지 몸체과 목적지 주소로 구성됨
  • 수신시 : 목적지 , 발신지 주소과 메시지 내용으로 구성됨.
  • 생성자
  • DatagramPacke(byte buffer[], int length)
  • 수신용 객체를 생성함. buffer는 수신하기 위해서 미리 할당함.
  • length는 buffer에 저장할 최대 바이트 수 있고 UDP 패킷은 이 크기를 넘어서면 모두 폐기 된다.
  • DatagramPacke(byte buffer[], int offset, int length)
  • 수신용
  • offset - 시작 위치 , length - 읽을 바이트 최대 길이
  • DatagramPacke(byte buffer[], int length, InetAddress address, int port)
  • 전송용
  • port 번호는 UDP 와 TCP 포트 번호는 완전히 별개의 포트 이므로 같은 번호 사용가능 
  • DatagramPacke(byte buffer[], int offset, int length, InetAddress address, int port)
  • 전송용
  • 메소드
  • InetAddress getAddress() : 발신지 혹은 목적지 주소

DatagramSocket 클래스

  • 설명 :
  • UDP 패킷을 전송/수신을 위한 소켓 기능을 제공하는 클래스
  • 비연결성 이기 때문에, 하나의 클래스를 가지고도 여러 개의 목적지로 패킷을 송신/수신이 할 수 있음.
  • 어떤 호스트로 부터 패킷을 받을 지 정할 방법은 없다. 따라서 그냥 설정된 포트로 들어오는 패킷을 받을 뿐이다.
  • 생성자
  • 설명 :
  • 포트는 직접 지정 혹은 OS 지정 가능함. (0을 주어 주는 경우 OS가 결정함)
  • 일반적으로 서버로 동작 시는 포트 설정, 클라이언트 동작시는 OS가 지정해 주는 임의의 포트를 사용함.
  • NIC 여러 개 있는 경우에 대한 바인딩 기능도 제공
  • DatagramSocket() throws SocketException
  • 포트번호가 임의로 정해진 DatagramSocket의 객체 생성
  • DatagramSocket(int port) throws SocketException
  • 주어진 포트로 설정 가능함, OS가 지정하도록 할 때는 0으로 설정함.
  • DatagramSocket(int port, InetAddress local) throws SocketException
  • 포트와 ip 주소 설정 가능함.
  • 메소드
  • void send(DatagramPacket packet) throws IOException
  • 패킷을 전송함.
  • void receive(DatagramPacket packet)
  • 패킷을 수신함.
  • void close()
  • 소켓을 닫는다.
  • void connect() : 정상적인 UDP 동작에서는 필요하지 않는다.
  • void disconnect() : 소켓의 연결을 끊는다.

UDP 패킷 받기

  1. 설정된 포트에서 동작하는 DatagramSocket 생성

DatagramSocket socket = new DatagramSocket(port);

  1. 데이터를 수신할 패킷을 생성(수신용 생성자를 사용)
  • 바이트 배열의 크기는 UDP패킷의 최대크기로 배열의 크기를 결정함. 왜냐하면 UDP의 경우 잘못해서 버퍼의 크기를 작게 주면 패킷을 못 받을 수 도 있는 상황이 발생할 수 있기 때문

byte buffer[] = new byte[65508];
DatagramPacket packet =
new DatagramPacket(buffer, buffer.length);

  1. receive() 메소드를 사용하여 패킷을 받는다.

socket.receive(packet);

  1. 받는 패킷으로 부터 필요한 정보를 추출한다.

InetAddress sendAddr = packet.getAddress();
int sendPort = packet.getPort();
int length = packget.getLength();
byte[] data = packet.getData();

  1. 소켓을 닫는다

socket.close();

UDP 보내기 받기

  1. 전송 UDP 소켓을 생성

DatagramSocket socket = new DatagramSocket(port);

  1. 전송용 데이터그램패킷을 생성한다. 단 전송용 패킷을 생성할 수 있는 생성자를 사용해야 한다.

DatagramPacket packet
  =
new DatagramPacket(data, data.length,
      InetAddress.getbyName(
"localhost"), 1234);

  1. send() 메소드를 사용하여 패킷을 목적지 호스트로 보내기 위해 네트워크 상으로 전송
  • 보내는 쪽의 호스트 주소와 포트 번호는 UDP헤더에 자동적으로 붙어서 전송

socket.send(packet);

  1. 데이터그램 소켓을 닫는다.

socket.close();

제18강 - 데이터그램 네트워크 프로그램밍#2

제19강 - 클라이언트 서버 애플리케이션 분석#1

제20강 - 클라이언트 서버 애플리케이션 분석#2

제21강 - 멀티케스트 네트워크 프로그래밍#1

Multicast

  • 멀티캐스트 와 브로드캐스트의 정의
  • 여러 개의 호스트에 패킷이 전송되도록 하는 Datagram 네트워크 프로토콜
  • 멀티캐스트와 UDP와 차이점
  • 목적지가 하나의 호스트(UDP)가 아니라 멀티캐스트 그룹 임.
  • 송신자는 패킷이 전달될 호스트가 어느 것인지 미리 알 필요가 없음.
  • 멀티캐스트 그룹
  • D클래스(224.0.0.0 ~ 239.255.255.255)에 속하는 IP주소를 말함.
  • 멀티캐스트 그룹에 들어가지 위해서는 그룹에 가입해야 한다.(join 이라고 함)
  • join 하게 되면 네트워크상의 라우터에게 이 사실을 통보하는 역할
  • 멀티캐스트 그룹에 패킷을 보내는 일은 단순히 패킷에 멀티캐스트 그룹 주소를 붙여서 네트워크에 전송하면됨.
  • 멀티캐스트 그룹은 다른 네트워크에 존재할 수 있음.
  • 일반적으로 239로 시작하는 모든 멀티캐스트 주소는 내부 지정용으로 예약되어 있기 때문에 이 범위 안에 있는 아무주소나 사용해도 안전함.
  • 멀티캐스트를 지원하기 위해서 해당 호스트와 라우터가 지원해야 한다(IGMP 지원여부)

Multicast 와 Broadcast의 차이점

  • 패킷이 전달되는 범위 (같은 네트워크 여부)
  • Broadcast는 단일 네트워크 모든 호스트에서만 패킷을 수신할 수 있음.

Broadcast

  • 브로드캐스트 주소는 주어진 네트워크 안에 있는 모든 호스트들이 패킷을 수신할 수 있는 주소
  • 브로드캐스트 수행할 UDP포트 번호를 선택 해야 함.
  • 로컬 브로드캐스트 주소는 일반적으로 서브넷의 가장 마지막 주소 임.
  • 192.168.100.10/24 이면 192.168.100.255가 브로드캐스트 주소임
  • 권한을 문제 전송을 받지 못하게 설정될수 있음

TTL(Time to Live)란

  • 멀티캐스트 패킷에서 얼마나 멀리갈 지를 제한하는 역할을 수행 함
  • 라우터를 이동할 때 마다 -1 씩 감소하여 0 이면 패킷이 소멸함.
  • 불필요한 트래픽을 막기 위해서 TTL 값을 적절하게 사용할 수 있음.

멀티캐스트 전송의 신뢰성

  • 멀티캐스트와 브로드캐스트 모두 신뢰성 있는 전송은 불가능.
  • 이유 UDP 패킷 이므로
  • 신뢰성을 추가하기 위한 방법
  • TCP 사용 (중앙서버를 사용한)
  • XTP
  • RTP

MulticastSocket 클래스

  • 설명
  • DatagramSocket 클래스 확장하여 멀티캐스트 그룹 전송/수신을 위한 기능을 추가함
  • TTL
  • 그룹 가입/탈퇴
  • 멀티캐스트, 브로드캐스트, 유니캐스트는 모두 동일한 UDP 포트를 공유함.
  • 생성자
  • MulticastSocket()
  • 임의의 UDP포트를 사용하여 패킷을 전송할 수 있는 생성자
  • MulticastSocket(int port)
  • 주어진 UDP 포트에서 동작하는 객체를 생성
  • 한 컴퓨터에 여러 개의 포트를 통해 MulticastSocket를 열수 있지만 DatagramSocket이 사용하는 포트는 사용할 수 없음.
  • 여러 개의 클라이언트들이 멀티캐스트 통신에 참여 할 때는 내부적으로 SO_REUSEADDR 소켓 옵션을 세팅한다.
  • 메소드
  • void joinGroup(InetAddress group)
  • 멀티캐스트 그룹에 잠시 가입할 때 사용되는 메소드
  • 하나의 객체로 여러 개의 멀티캐스트 그룹에 가입될 수 있음
    가담할 수있는 그룹의 갯수는 OS에 제한을 두고 있음.
  • 안전을 위해서 소켓와 그룹은 쌍으로 사용한다.
  • void leaveGroup(InetAddress group)
  • 그룹에 탈퇴할 때
  • void setTimeToLive(int ttl)
  • ttl 값 설정한다. (범위 1 ~ 255)
  • void setInterface(InetAddress addr)
  • 특정 NIC로 설정함.

제22강 - 멀티케스트 네트워크 프로그래밍#2

멀티캐스트 패킷 보내기

  • 데이터그램 소켓을 사용하여 패킷을 보내는 과정과 유사
  • 차이점 (TTL 설정)

  1. 멀티캐스트용 소켓을 생성
  2. 패킷을 생성
  3. send() 메소드를 사용여 네트워크로 전송
  4. 소켓을 닫는다.

byte[] data;
InetAddress multiGroup;
int multiPort;

MulticastSocket ms =
new MulticastSocket();
DatagramSocket txPacket =
new DatagramSocket(data, data.length, multiGroup, multiPort);
ms.send(txPacket, (
byte)64);
ms.close();

멀티캐스트 패킷 받기

  • 데이터그램 소켓 방식에 멀티캐스트 그룹에 가입/탈퇴가 추가됨.

  1. 소켓을 생성
  2. joinGroup()를 사용하여 그룹에 가입
  3. 패킷 수신을 위한 DatagramPacket를 생성
  4. receive()를 사용하여 패킷을 수신
  5. 수신된 패킷에서 정보 추출
  6. 소켓을 닫음.(leaveGroup()을 사용하여 그룹 탈퇴)

InetAddress multiGroup;
int multiPort;

MulticastSocket ms =
new MulticastSocket(multiPort);
ms.joinGroup(multiGroup);
byte[] buffer = new byte[65536];
DatagramPacket rxPacket =
   
new DatagramPacket(buffer, buffer.length);
ms.receive(rxPacket);
InetAddress fromAddr = rxPacket.getAddress();
int length = rxPacket.getLength();
byte[] data = rxPacket.getData();
...
ms.leaveGroup(multiGroup);
ms.close();

Peer-To-Peer 방식의 채팅 시스템

  • 멀티캐스트와 브로드캐스트를 사용하여 p2p 방식의 통신 구조를 만들 수 있다.
  • p2p 방식은 서버가 없이 클라이언트만으로 구성되어 있음
  • 각 클라이언트가 동등한 입장에서 데어터를 주고 받게됨.
  • p2p 방식의 통신 구조에서는 단지 각 클라이언트가 멀티캐스트 그룹에 들어간 후, 데이터그램 패킷을 주고 받으면 됨

제23강~제26강 - 네트워크 대체기술(RMI)#1~#4

RMI(Remote Method Invocation)

  • TCP/IP 기반
  • 네트워크상의 다른 가상머신에 존재하는 객체들의 메소드를 호출 할수 있게 해줌
  • 복잡한 프로토콜로 부터 해방 시켜줌.
  • java.rmi 패키지와 관련됨.
  • EJB, JINI 자바 분산 기술의 기반 이다.

RMI 장점/단점

  • 장점 :
  • 네트워크 자바 네트워크 프로그램의 손쉬운 개발
  • 단점
  • 서버와 클라이언트가 모두 java 이어야 함.
  • 소켓에 비해서 성능이 떨어짐.

추가적인 RMI 자료

  • 추후 조사 하기

원격 인터페이스

  • 정의 : java.rmi.Remote 인터페이스의 하위 인터페이스
  • 원격 인터페이스에 정의된 메소드만 원격 호출 가능.
  • 원격 인터페이스의 메소드는 throw java.rmi.RemoteException을 선언해야 함.

원격 객체

  • 다른 가상머신 혹은 다른 컴퓨터로 부터 원격으로 호출될 수 있는 객체
  • 원격 객체의 클래스는 원격 인터페이스를 구현 해야 함.

원격 객체와의 매개 변수 및 반환치 전달

  • 직렬화(Serializable) 가능 하거나 원격 객체이어야 함.
  • java.io.Serializable 인터페이스를 구현하는 클래스
  • 원격 객체일 경우
  • 원격 객체의 참조(스텁클래스)가 복사되어 전달될 뿐, 객체 자체가 복사되어 전달되지 않는다.

Stub와 Skeleton

  • 클라이언트와 원격 객체는 쌍을 이루는 Stub, Skeleton을 통하여 서로 통신 함.
  • Stub 객체는 원격 참조로 사용되어 원격 객체의 위치 정보(IP주소)를 갖고 있음.
  • 원격 객체의 클래스를 rmic(RMI 컴파일러)로 컴파일하여 대응하는 Stub , Skeleton을 얻는다.
  • 단 JDK 버젼에 따라 다르므로 주의 해야 함.

Naming 서비스를 통한 원격 객체의 등록

  • 목적 : 원격 객체 참조(stub 객체)의 등록과 검색
  • 원격 객체 참조는 RMI 등록서버(rmiregistry)를 통해 얻을 수 있고 원격 메소드 호출을 통하여 전달 받을 수도 있다.
  • 객체 등록 관련 메소드들
  • Naming.bind()
  • Naming.rebind() : 다시 재등록(이미 등록된 경우도 문제 없음)
  • Naming.unbind()
  • 스텁 호출 및 조회 관련 메소드들
  • Remote Naming.lookup()
  • String[] Naming.list()
  • 조회시 name 문자열 형식
  • rmi://host:[post]/name
  • host : RMI 등록 서버의 컴퓨터 이름
  • port : RMI 등록 서버의 포트 번호 (기본값 : 1099)
  • name : 원격 객체의 등록 이름

RMI 등록 서버의 생성

** 사용예제 : https://www.tutorialspoint.com/java_rmi/java_rmi_application.htm

  • 목적
  • rmi 등록 서버의 생성(rmiregistry)를 사용하지 않는 방법
  • rmi 등록 서버의 기능을 대처 함.
  • RMI 등록 서비시는 RMI 원격 객체에 의해 제공될 수 있음.
  • java.rmi.registry.Registry extends Remote
  • rmi등록서버에 대한 원격 인터페이스
  • 원격 객체이름 : URL 형식임.
  • 메소드들
  • bind(String name, Remote obj)
  • rebind(String name, Remote obj)
  • unbind(String name)
  • Remote lookup(String name)
  • 원격 객체 이름 name으로 등록된 원격 객체 이름 반환
  • String[] list()
  • 이 RMI 등록 서버에 등록되어 있는 모든 객체 이름 반환
  • java.rmi.registry.LocateRegistry 클래스
  • rmi 등록 서버의 생성 및 원격 참조 검색
  • 주요 메소드들
  • Registry LocateRegistry.createRegistry(int port)
  • 주어진 port번호를 사용하는 RMI등록 서버 객체를 생성하고 노출시킴
  • Registry LocateRegistry.getRegistry(int port)
  • 주어진 호스트 포트 port를 사용하는 RMI 등록 서버의 원격 참조 반환

제27강~제30강 - 네트워크 대체기술(CORBA)#1 ~ #4

CORBA 개요

  • Common Object Request Broker Architecture 약어
  • OMG(Object Management Group)에서 만들어진 공통 이용 가능한 분산 객체에 산업체 표준
  • 소프트웨어 객체가 분산 환경에서 협력하여 작동하는 방식에 대한 명세서
  • OMA(Object Management Architecture)의 중심은 ORB임.
  • ORB 설명
  • ORB의 구조와 인터페이스로 CORBA의 핵심부를 구성함.
  • 로컬 객체와 원격 객체와 요그와 응답을 주고받을수 있도록 해주는 일종의 객체버스
  • 실제 구현을 담당해줌 세부사항이 사용자로 부터 가려지도록 해줌
  • 세부 사항 OMG문서 : The Common Object Request Broker: Architecture and Specification을 참조
  • ORB의 상위 계층 서비스들 Naming , 영속성, 트랙잭션, 보안
  • 16개 서비스를 정의 됨. OMG CORBA 서비스 명세 참조
  • CORBA Facilities는 복잡한 비즈니스 객체를 구축하는데 사용될 수 있는 Application Framework 의 집합 (OMG CORBA의 Facilities Specfication 참조)

Why CORBA를 사용해야 하는 가?

  • 개방적, 상호 운용성이 보장되는 시스템 구축 가능
  • IDL로 부터 맵핑될 수 있는 모든 언어를 사용하여 C/S를 작성 가능함.
  • 코바 명세서는 기업환경 Application 구축에 필요한 모든 부분이 다루어져 있음.
  • CORBA는 RMI를 사용하여는 것보다 성능이 향상 시킬수 있음.
  • 코바의 성능은 IIOP(Internet Interoperablility Protocol)가 객체간에 얼마나 빠르게 연결을 생성할 수 있는 가에 크게 좌우됨.

CORBA의 핵심 구조

  • ORB는 핵심이며 Object BUS**
  • ORB Core는 ORB API임
  • interface의 집합 , 외부로 정보를 알려주는 작업을 함.
  • CORBA에서 인터페이스는 OMG에서 정의한 IDL에 의해 정의됨.
  • IDL는 순수하게 인터페이스만을 다룸

IDL(Interface Definition Language, 인터페이스 정의 언어)

  • CORBA 서버가 제공할 인터페이스를 정의하는 방식
  • RMI의 원격 인터페이스와 매우 비슷
  • IDL 명세서의 구성
  • Module : 네임스페이스 , 패킥지와 동일
  • Interface : 클래스, 인터페이스
  • Attribute : 속성 , 변수
  • Operation : 메소드
  • Exception : 예외
  • IDL는 java 및 다른 언어로 다양한 맵핑이 생성될 수 있음.

IDL Data 타입

  • 기본 타입
  • string, float, long, ...
  • 사용자 정의 타입
  • sequence, array, structure, union
  • CORBA <-> JAVA (OMG IDL to Java Mapping)

IDL

JAVA

boolean

boolean

char(8bit)

char

wchar(16bit)

wchar

octet

octet

string

java.lang.String

wstring

java.lang.String

short

short

unsinged short

short

long

int

long long

long

unsiged long long

long

float

float

double

double

fixed

java.math.BigDecimal

Constants within an interface

public static final field within the interace

Constants outside an interface

public interface with a public static final value field

enum

final class

struct

final class

sequnce

array

array

array

union

final class

IDL - Module

IDL - Interface

제28강 - 네트워크 대체기술(CORBA)#2

제29강 - 네트워크 대체기술(CORBA)#3

제30강 - 네트워크 대체기술(CORBA)#4


cosmoslight.huni@gmail.com님이 다음 문서를 첨부했습니다.
[강좌]옛날강좌들-BIT캠퍼스-자바네트워크프로그래밍
Google 문서: 온라인에서 문서를 만들고 수정해 보세요.
Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA
다른 사용자가 Google 문서의 문서를 나와 공유하여 발송된 이메일입니다.
Google 문서 로고

댓글 없음: