우리가 만든 프로그램을 작동시키면 프로세스가 생성되어 CPU로부터 메모리 영역을 할당 받고 명령을 수행한다는 것까지는 이제 알겠다. 하지만, 우리는 네트워크 서비스를 프로그래밍 해야한다. 만약 우리가 만든 네트워크 프로그램에 수천명이 동시에 접속한다고 생각하자. 이 수천명에게 각각 프로세스를 만들어야 한다고 가정해보자. 모든 사람에게 CPU가 메모리 영역을 할당해주어야 한다. 장비의 성능이 좋더라고 운영체제는 무거운 프로세스의 무게를 버티지 못하게 된다. 그래서 새로 나온 개념이 바로 스레드이다. 1. 스레드(Thread)란? 모든 카페에는 주문을 받는 카운터 직원이 존재한다. 조용한 동네 카페라면 한명의 카운터 직원이 모든 주문을 충분히 처리 가능하다. 하지만, 우리가 이번에 만드려는 프로그램은 대형 ..
앞서 프로세스에 대한 정의와 java 프로그래밍에서 프로세스를 만드는 방법에 대해 알아봤다. 하지만 우리는 java 프로그램을 통해 외부 프로세스를 정의하는데 그치지 않는다. 프로세스를 완벽하게 제어하는데 관심이 있을 것이다. 프로세스 처리 영역은 운영체제의 몫이다. 그렇기 때문에 JVM에서 프로세스 사용 목록을 알기 위해서는 별도의 함수 사용이 필요하다. 1. Process Input/Output Stream Java에서 데이터를 입력하고 받는 것은 Stream 구조로 되어 있다. Java에서 제어하는 프로세스 역시 Stream으로 데이터를 주고 받는다. 또한 Process 클래스에서 스트림에 대한 메소드가 정의 되어 있다. 만약 프로세스의 데이터 제어가 필요한 경우 이 Stream 클래스와 메소드를 ..
네트워크 프로그래밍을 알기위해서는 소프트웨어의 기초를 알아야한다. 이런 기초가 되는 것 중 대표적인 부분이 바로 '프로세스'와 '스레드'이다. 아마 소프트웨어에 대해 한번이라도 배워본 사람이라면 저 두 말을 들어본 적이 있을 것이다. 프로세스는 또 일상생활에서 많이 쓰는 단어라 이해하는데 수월하다. 하지만 컴퓨터 공학적으로 두 용어를 정의하라고 했을때 명확하게 대답하는 사람은 많이 없을 것이다. 그래서 이번 시간부터 프로세스와 스레드의 정확한 개념을 잡고 가보자. 현재 CPU에서 실행되고 있는 프로세스 1. 프로세스란? 우리가 Java 프로그램 하나를 만들었다. 어떤 프로그램이든 상관 없다. 아주 단순한 'Hello World' 프로그램을 개발했다고 하자. 프로그램은 우리가 정한 일종의 정의다. 이 프로..
네트워크 프로그래밍에서 제일 중요한 요소 중 하나가 바로 입출력(I/O)이다. 우리가 사용하는 네트워크는 앞서 본대로 총 7개의 계층 사이에서 데이터의 송수신을 의미한다. 그렇기 때문에 네트워크 프로그래밍을 하기 위해선 해당 프로그램의 입출력에 대해 완벽하게 알고 있어야 한다. 이전에도 한번 소개를 한 적이 있었지만, 다시 한번 Java의 입출력에 대해서 알아 볼 것이고. 대표적인 입출력 방식인 스트림을 기반으로 알아 볼 것이다. 만약 Java가 아닌 다른 언어로 네트워킹 프로그램을 만들어야 하는 사람들에게 이번 글을 그리 중요하지 않을 것이다. 1. 출력 스트림 자바에서 사용하는 최상위 스트림 클래스는 java.io.OutputStream이다. 그리고 이 클래스는 위에 보이는 서브클래스들을 갖고 있다...
우리는 웹사이트에서 원하는 정보를 얻기 위해 웹브라우저에 주소를 쳐서 들어간다. 물론, 세상이 너무 좋아져서 도메인이라고 하는 주소를 치지 않더라도 원하는 정보를 쉽게 가져올 수 있다. 이 글을 읽기 위해 웹 브라우저 위에 있는 주소를 입력한 사람은 거의 없다. 우리가 인터넷이 연결된 환경에서 주소를 입력하면 총 7계의 단계를 거쳐 해당 정보가 있는 지점에 도달하게 된다. 이 각각의 계층을 OSI 7계층 이라고 하며, 앞으로 진행할 네트워크 프로그래밍을 알아가는데 있어 반드시 알아야 할 기본 정보와도 같다. 1. OSI 7계층이란? OSI는 Open Systems Interconnection 의 줄임말로, 국제 표준 기구 ISO에서 지정한 컴퓨터 프로토콜 네트워킹에 관한 표준이다. 즉 우리가 인터넷 환경..