BIT 캠퍼스자바네트워크 프로그램밍
강좌 정보
- 관련업체 : 비트 캠퍼스
- 총 30 강
저자 정보
추후 해야 할일들
- 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 클래스를 이용하여 원격지 자원을 가져오는 방법
- URL 클래스를 이용하여 연결하고자 하는 호스트의 정보를 가진 URL 객체를 생성
- URL 클래스의 openConnection() 메소드를 사용하여 URLConnection 객체를 생성
- URLConnection로 부터 속성을 정보를 구한다.
- URLConnection클래스의 getInputStream() 메소드나 URL클래스의 open() 메소드로 원격지 정보를 읽기 위한 InputStream 객체를 생성
- 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 패킷 받기
- 설정된 포트에서 동작하는 DatagramSocket 생성
DatagramSocket socket = new DatagramSocket(port); |
- 데이터를 수신할 패킷을 생성(수신용 생성자를 사용)
- 바이트 배열의 크기는 UDP패킷의 최대크기로 배열의 크기를 결정함. 왜냐하면 UDP의 경우 잘못해서 버퍼의 크기를 작게 주면 패킷을 못 받을 수 도 있는 상황이 발생할 수 있기 때문
byte buffer[] = new byte[65508]; |
- receive() 메소드를 사용하여 패킷을 받는다.
socket.receive(packet); |
- 받는 패킷으로 부터 필요한 정보를 추출한다.
InetAddress sendAddr = packet.getAddress(); |
- 소켓을 닫는다
socket.close(); |
UDP 보내기 받기
- 전송 UDP 소켓을 생성
DatagramSocket socket = new DatagramSocket(port); |
- 전송용 데이터그램패킷을 생성한다. 단 전송용 패킷을 생성할 수 있는 생성자를 사용해야 한다.
DatagramPacket packet |
- send() 메소드를 사용하여 패킷을 목적지 호스트로 보내기 위해 네트워크 상으로 전송
- 보내는 쪽의 호스트 주소와 포트 번호는 UDP헤더에 자동적으로 붙어서 전송
socket.send(packet); |
- 데이터그램 소켓을 닫는다.
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 설정)
- 멀티캐스트용 소켓을 생성
- 패킷을 생성
- send() 메소드를 사용여 네트워크로 전송
- 소켓을 닫는다.
byte[] data; |
멀티캐스트 패킷 받기
- 데이터그램 소켓 방식에 멀티캐스트 그룹에 가입/탈퇴가 추가됨.
- 소켓을 생성
- joinGroup()를 사용하여 그룹에 가입
- 패킷 수신을 위한 DatagramPacket를 생성
- receive()를 사용하여 패킷을 수신
- 수신된 패킷에서 정보 추출
- 소켓을 닫음.(leaveGroup()을 사용하여 그룹 탈퇴)
InetAddress multiGroup; |
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
Google 문서: 온라인에서 문서를 만들고 수정해 보세요. Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA 다른 사용자가 Google 문서의 문서를 나와 공유하여 발송된 이메일입니다. |
댓글 없음:
댓글 쓰기