전체 글

전체 글

    [네트워크 프로그래밍/C] Domain Name System

    IP주소와 도메인 이름 사이에서의 변환을 수행하는 시스템을 가리켜 DNS(Domain Name System)이라고 하고, DNS의 중심에는 DNS 서버가 있습니다. 도메인 이름이란? 인터넷에서 서비스를 제공하는 서버들도 IP 주소로 구분이 되는데, 기억하기 쉽지 않은 IP 주소의 형태로 서버의 주소정보를 기억하는 것은 너무 어렵습니다. 따라서 기억하기도 좋고 표현하기도 좋은 형태의 도메인 이름이라는 것을 IP 주소에 부여해서 이것이 IP 주소를 대신하도록 하고 있습니다. DNS 서버 인터넷 브라우저 주소 창에 아래의 IP 중 하나를 입력하면 네이버의 메인 페이지를 볼 수 있습니다. 그러나 일반적으로는 도메인 이름인 www.naver.com 의 입력을 통해 네이버에 접속합니다. 이 두 접속방법은 네이버의 ..

    [네트워크 프로그래밍/C] TCP 기반의 Half-close

    TCP에서는 연결과정보다 중요한 것이 종료과정입니다. 이번 포스트에서 설명할 Half-close는 명확한 종료를 위해 반드시 알아야 할 사항입니다. 일방적 연결종료의 문제점 close 함수호출은 완전종료를 의미합니다. 완전종료라는 것은 데이터 전송은 물론이고 데이터 수신도 더 이상 불가능하게 합니다. 아래 그림을 보며 예시 상황을 하나 살펴보겠습니다. 위 그림은 양방향으로 통신하고 있는 두 호스트의 상황을 묘사한 것입니다. 호스트 A가 마지막 데이터를 전송하고 나서 연결을 종료했습니다. 그 이후부터 호스트 A는 호스트 B가 전송하는 데이터를 수신하지 못합니다(데이터 수신과 관련된 함수 호출 자체가 불가능합니다.). 때문에 호스트 B가 전송한 데이터는 그냥 소멸되고 맙니다. 이러한 문제의 해결을 위해 데이..

    [네트워크 프로그래밍/C] UDP의 데이터 송수신 특성과 UDP에서의 connect 함수호출

    데이터의 경계가 존재하는 UDP 소켓 UDP는 데이터의 경계가 존재하는 프로토콜이므로 데이터 송수신 과정에서 호출하는 입출력 함수의 호출횟수가 큰 의미를 가집니다. 따라서 입력함수의 호출횟수와 출력함수의 호출횟수가 완벽히 일치해야 송신된 데이터 전부를 수신할 수 있습니다. 간단한 예제를 보며 살펴보겠습니다. #include #include #include #include #include #include #define BUF_SIZE 30 void error_handling(char* message); int main(int argc, char* argv[]) { int sock; char message[BUF_SIZE]; struct sockaddr_in my_adr, your_adr; socklen_t..

    [네트워크 프로그래밍/C] UDP 기반 서버, 클라이언트의 구현

    UDP에서의 서버와 클라이언트의 연결은? UDP 서버, 클라이언트는 TCP와 같이 연결된 상태로 데이터를 송수신하지 않기 때문에 TCP와 달리 연결 설정 과정이 필요가 없습니다. 따라서 TCP 서버 구현과정에서 거쳤던 listen() 함수와 accept() 함수의 호출은 불필요합니다. 소켓의 생성과 데이터의 송수신 과정만 존재할 뿐입니다. UDP에서는 하나의 소켓만? TCP에서는 소켓과 소켓의 관계가 일대일 이었기 때문에 서버에서 열 개의 클라이언트에게 서비스를 제공하려면 문지기의 역할을 하는 서버 소켓을 제외하고도 열 개의 데이터 송수신용 소켓이 더 필요했는데, UDP는 서버건 클라이언트건 하나의 소켓만 있으면 됩니다. 아래 그림을 보면 하나의 UDP 소켓으로 두 곳의 호스트를 대상으로 데이터의 송수신..

    [네트워크 프로그래밍/C] UDP에 대한 이해

    UDP 소켓의 특성 UDP의 동작원리를 편지를 예로 들어서 설명해보겠습니다. 편지를 보내기 위해서는 일단 편지봉투에다가 보내는 사람과 받는 사람의 주소정보를 써 넣어야 합니다. 그리고 우표를 붙여서 우체통에 넣어주면 끝인데, 편지의 특성상 보내고 나서 상대방의 수신여부를 확인할 길은 없습니다. 물론 전송도중에 편지가 분실될 확률도 있습니다. 즉, 편지는 신뢰할 수 없는 전송방법입니다. 이와 마찬가지로 UDP 소켓은 신뢰할 수 없는 전송방법을 제공합니다. 여기서 TCP 소켓이 무조건 더 좋은가? 라고 생각할 수 있는데, 물론 TCP가 신뢰성 측면에서는 더 좋은 소켓입니다. 하지만 UDP는 TCP보다 훨씬 간결한 소켓입니다. ACK와 같은 응답 메시지를 보내는 일도 없고, SEQ와 같이 패킷에 번호를 부여하..

    [네트워크 프로그래밍/C] TCP의 이론적 내용

    TCP 소켓에 존재하는 입출력 버퍼 TCP 소켓의 데이터 송수신에는 경계가 없습니다. 따라서 서버가 한 번의 write 함수호출을 통해 한 번에 40바이트를 전송해도 클라이언트는 네 번의 read 함수호출을 통해 나눠서 수신하는 것이 가능합니다. 어떻게 이게 가능한 것인지 궁금할 수 있습니다. 서버가 40바이트를 보내고 클라이언트가 일단 10바이트만 받았다면, 남은 30바이트는 어디에 있는 것일까요? 사실 write 함수가 호출되는 순간이 데이터가 전송되는 순간이 아니고 read 함수가 호출되는 순간이 데이터가 수신되는 순간이 아닙니다. write 함수가 호출되면 데이터는 출력버퍼로 이동을 하고, read 함수가 호출되면 입력버퍼에 저장된 데이터를 읽어들이게 됩니다. 아래 그림을 봅시다. 위 그림에 보이..

    [데이터베이스] 테이블 생성하기

    1. CSV 파일로 테이블 생성하기 테이블을 생성하는 방법은 크게 2가지가 있습니다. SQL 문으로 생성하는 방법 CSV 파일을 import 해서 테이블로 만드는 방법 지금은 데이터베이스와 테이블이 이미 존재하고, 그 안에 데이터도 이미 저장된 상황을 가정하고 데이터를 분석하는 것에 집중해서 공부해볼 것이므로 두 번째 방법을 이용해서 테이블을 만들어 볼 것입니다. 나는 codeit을 이용해서 공부하고 있으므로 codeit에서 제공하는 CSV 파일을 이용합니다. CSV는 Comma Separated Values의 약자로, 모든 값들이 ,로 구분된 형식의 내용을 가진 파일을 말합니다. 컴퓨터에 MS Office가 설치되어 있다면 아마 CSV파일이 Excel로 열리게 되어있을 텐데, CSV 파일의 가장 raw..

    [데이터베이스] 데이터베이스 기본 개념

    1. 데이터베이스와 테이블 데이터베이스: 일정한 체계 속에 저장된 데이터의 집합 데이터는 보통 데이터베이스 안에서 table(표)이라는 단위로 저장됩니다. 2. 테이블의 row와 column row: 개체 하나를 나타내는 단위 column: 개체 각각이 갖는 속성 하나하나를 나타내는 단위 3. DBMS와 SQL DBMS: DataBase Management System(데이터베이스 관리 시스템), 데이터베이스를 관리하기 위한 프로그램 이런 DBMS에도 MySql, Oracle, MS SQL Server, MariaDB, SQLite 등이 있는데 사용자가 골라서 사용하면 됩니다. 데이터베이스를 구축하는 것도 DBMS를 선택하는 것에서 시작합니다. DBMS를 선택하고 사용하면 DBMS가 내부적으로 알아서 미..