목록K 개발자 (145)
K 개발자
도메인 네임으로부터 IP 주소를 얻거나 IP 주소로부터 해당 호스트의 도메인 네임을 얻으려면 DNS(Domain name Service) 서버의 도움을 받아야 한다. #include struct hostent *gethostbyname(const char *hname); struct hostent *gethostbyaddr(const char *in_addr, int len, int family); gethostbyname()은 도메인 네임 hname을 스트링 형태로 입력받고(예를 들면 "www.github.com") 그 이름에 해당하는 호스트의 각종 정보를 가지고 있는 hostent 구조체의 포인터를 리턴한다. gethostbyaddr()은 IP 주소를 포함하고 있는 구조체 in_addr의 포인터와 이..
4 바이트(32비트)의 IP 주소를 편의에 따라 www.github.com과 같은 도메인 네임 또는 52.78.231.108과 같은 dotted decimal 방식으로 표현하여 사용한다. dotted decimal 표현을 저장하기 위해서는 숫자 변수가 아니라 15개의 문자로 구성된 스트링 변수가 사용된다. 주의할 것은 IP 데이터그램을 네트워크로 실제로 전송할 때 IP 헤더에는 4 바이트의 (binary) IP 주소만 사용할 수 있다. dotted decimal로 표현된 52.78.231.108을 32비트의 IP 주소로 변환하려면 inet_pton() 함수를 사용하고, IP 주소를 dotted decimal로 변환하려면 inet_ntop()를 사용한다. ntop는 mumerical to presentat..
바이트 순서(byte order)에는 호스트 바이트 순서와 네트워크 바이트 순서 두 가지가 있다. 호스트 바이트 순서는 컴퓨터가 내부 메모리에 숫자를 저장하는 순서를 말하는데, 이것은 CPU의 종류에 따라 다르다. 네트워크 바이트 순서는 포트번호나 IP 주소와 같은 정보를 바이트 단위로 네트워크로 전송하는 순서를 말한다. 바이트 순서를 바꾸는 함수에는 변환할 바이트 길이가 2 바이트인 경우 또는 4 바이트인 경우에 따라 다음과 같이 두 가지 종류가 있다. Unsigned short interger 변환 (2 바이트 크기) htons(): host-to-network 바이트 변환 ntohs(): network-to-host 바이트 변환 Unsigned long interger 변환 (4 바이트 크기) ht..
소켓 프로그래밍에서 첫 번째로 해야 할 일은 통신 창구 역할을 하는 소켓을 만드는 것이다. 이것은 서버와 클라이언트에서 모두 필요한데 이를 위하여 socket() 함수를 이용한다. socket()이 성공적으로 수행되면 새로 만들어진 소켓번호를 리턴하고 에러가 발생하면 -1이 리턴되며 이때 전역변수 errno에 에러코드가 들어간다. socket()의 사용 문법은 다음과 같다. #include int socket( int domain, // 프로토콜 체계 int type, // 서비스 타입 int protocol // 소켓에서 사용할 프로토콜 ) domain으로 지정할 수 있는 프로토콜 체계에는 다음과 같은 것이 있다. PF_INET (인터넷 프로토콜 체계 사용) PF_INET6 (IPv6 프로토콜 체계 사..
인덱스 인덱스index, 색인란 자료를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조이다. 도서관에서 책을 찾을 때 서지 목록을 보고 책의 위치를 찾는 것처럼 인덱스도 같은 역할을 한다. 데이터베이스에서 인덱스란 원하는 데이터를 빨리 찾기 위해 투플의 키값에 대한 물리적 위치를 기록해 둔 자료 구조이다. 일반적인 RDBMS의 인덱스는 대부분 B-tree 구조로 되어 있다. 연습문제 -- Book 테이블의 bookname 열을 대상으로 인덱스 ix_Book을 생성하시오. CREATE INDEX ix_Book ON Book (bookname); -- Book 테이블의 publisher, price 열을 대상으로 인덱스 ix_Book2를 생성하시오. CREATE INDEX ix_Book2 ON Book (pu..
뷰 뷰view는 하나 이상의 테이블을 합하여 만든 가상의 테이블이다. 합한다는 말은 SELECT 문을 통해 얻은 최종 결과를 뜻하며, 뷰는 이러한 결과를 가상의 테이블로 정의하여 실제 테이블처럼 사용할 수 있도록 만든 데이터베이스 개체이다. 뷰의 장점은 다음과 같다. 편리성 : 여러 테이블에서 데이터를 가져와 하나의 테이블로 정의함으로써 질의 작성이 간단하게 된다. 또 미리 작성된 질의를 뷰로 정의해 두면 질의 재사용이 가능하다. 보안성 : 원본 테이블에서 보안이 필요한 속성을 제외하고 새로운 테이블을 정의하여 사용자에게 제공함으로써 데이터 보안성을 높인다. 논리적 데이터 독립성 : 뷰를 정의하여 응용 프로그램이 사용하게 하면 개념스키마에 정의된 테이블 구조가 변경되어도 응용 프로그램의 변경을 막아 주기..
인라인 뷰 - FROM 부속질의 인라인 뷰inline view는 FROM 절에서 사용되는 부속질의를 말한다. SQL 문의 FROM 절에는 테이블 이름이 위치하는데, 여기에 테이블 이름 대신 인라인 뷰 부속질의를 사용하면 보통의 테이블과 같은 형태로 사용할 수 있다. 부속질의 결과로 반환되는 데이터는 다중 행, 다중 열이어도 상관없다. 다만 가상의 테이블인 뷰 형태로 제공되기 때문에 상관 부속질의로 사용될 수는 없다. 연습문제 -- 고객번호가 2 이하인 고객의 판매액을 보이시오(고객이름과 고객별 판매액 출력). SELECT cs.name, SUM(od.saleprice) "total" FROM ( SELECT custid, name FROM Customer WHERE custid
스칼라 부속질의 - SELECT 부속질의 스칼라 부속질의scalar subquery는 SELECT 절에서 사용되는 부속질의로, 부속질의의 결과값을 단일 행, 단일 열의 스칼라값으로 반환한다. 만약 결과값이 다중 행이거나 다중 열이라면 DBMS는 그중 어떠한 행, 어떠한 열을 출력해야 하는지 알 수 없어 에러를 출력한다. 또 결과가 없는 경우에는 NULL 값을 출력한다. 스칼라 부속질의는 원칙적으로 스칼라값이 들어갈 수 있는 모든 곳에 사용 가능하며, 일반적으로 SELECT 문과 UPDATE SET 절에 사용된다. 주 질의와 부속질의와의 관계는 상관/비상관 모두 가능하다. 연습문제 -- 마당서점의 고객별 판매액을 보이시오(고객이름과 고객별 판매액 출력). SELECT ( SELECT name FROM Cu..