1. 버퍼의 사용 지난 시간에 Java NIO에서 버퍼가 어떻게 사용되는지와 더불어 Direct 버퍼와 Non-Direct Buffer에 대해서 알아보았다. 이번 시간에는 버퍼를 Java에서 어떻게 사용 할 수 있는지 알아보도록 하자. 버퍼는 Java.nio에 클래스로 소속되어 있다. 그리고 해당 클래스는 우리가 주고받게 될 데이터 양식을 기반으로 두고 있다. 상위에 Buffer 클래스가 존재하고 하위 서브클래스로 데이터 양식에 맞는 클래스가 존재하게 된다. 버퍼 종류 설명 ByteBuffer 바이트 타입의 데이터를 받는 버퍼 CharBuffer 문자열 타입의 데이터를 받는 버퍼 ShortBuffer Short형 타입의 데이터를 받는 버퍼 IntBuffer 정수형 타입의 데이터를 받는 버퍼 LongBuf..
1. Java IO 이전에도 한번 설명한 바가 있는데, 자바에서 지원하는 기본 스트림 기반의 입출력 체계를 I/O 혹은 I/O 스트림 이라고 한다. I/O는 당연히 각각 Input과 Output을 뜻한다. Java IO라는 단어만 보게 된다면, Java 프로그램에서 사용되는 Input과 Output 이라는 의미다. 그리고 Java에선 기본적으로 Stream 방식의 IO를 사용하므로 Java IO라는 단어를 보게 되면 당연하게 우린 스트림을 떠올리게 된다. Java IO는 아래와 같은 특징을 가진다.Stream 방식버퍼 사용하지 않음블로킹 방식 (Blocking) Java IO 는 바이트(Byte) 방식의 입력과 문자열(Char) 방식의 입력 2가지로 크게 나뉜다. InputStream / OutputSt..
이번에는 소켓 프로그래밍이 네트워크 프로그래밍에 있어서 매우 중요한 부분을 차지하기 때문에 아주 간단한 서버와 클라이언트 소켓 프로그램을 보여주면서 매우 기본적이고 범용적으로 사용할 수 있는 소켓에 대해 소개하도록 하겠다. 만약 Server/Client 프로그래밍을 하게 된다면 필연적으로 만들어야 하는 부분이기에 아주 중요한 개념이다. 또한, 양쪽에서의 송수신이 어떤 방식으로 이루어지는지도 한번 살펴보면서 기초적인 소켓 프로그래밍에 대해 살펴볼 뿐만 아니라 이제껏 소개한 개념을 Rewind 하는 방식으로 진행해볼까 한다. 1. 서버 소켓 만들기 간단한 Server / Client 소켓 프로그래밍 예제를 살펴보자. 우선 서버 소켓을 만들기 위해 포트와 서버 소켓을 연결하고, Accept() 메소드를 통해서..
1. 암호 알고리즘 네트워크 환경은 누구나 접속할 수 있는 만큼 외부의 공격도 당한다. 따라서 국가적 기밀이나 군사적 자료 등 보안이 중요한 자료들도 편의성을 위해 인터넷 환경으로 전달되곤 하는데, 이런 경우 무엇 보다도 보안 문제에 대한 고민이 절실하다. 그렇기에 우린 암호화 방식을 이용해 이런 상황들에 대한 보완을 진행한다. 우리가 네트워크 상에서 작성된 평문을 일련의 암호화 알고리즘을 이용하여 암호문으로 변경하는 것이 기본적인 암호 매커니즘이다. 누군가에게 전달하고싶은 파일이 있는데, 이 파일을 암호화 시켜야 한다고 가정하자. A 라는 사람은 B에게 암호문을 전달하게 되는데, 이 두사람은 서로 어떤 방법으로 암호화를 진행했는지 반드시 알아야 우리의 정보를 정확히 전달 해줄 수 있다. 이렇게 암호화를..
1. 서버 소켓(Server Socket) 서버 소켓은 클라이언트의 연결 요청을 서버가 받기 위해 존재한다. 서버 소켓은 서버에서 실행 되며 클라이언트에서 오는 연결을 서버 장비의 특정 포트에 연결을 시켜준다. 클라이언트의 요청을 받은 서버는 해당 요청을 읽고 클라이언트가 요청한 정보를 다시 서버 소켓을 통해 보내주게 된다. 서버 소켓의 일반적인 실행 흐름은 다음과 같다 특정 포트에서 연결을 받기 위해 서버 소켓을 생성한다. 이렇게 생성된 소켓은 클라이언트의 요청이 올때 까지 대기하게 된다.서버 소켓은 accept() 메소드를 사용하여 클라이언트의 연결을 대기한다.서버 소켓에서 InputStream / OutputStream 을 이용해 클라이언트와의 통신에 필요한 데이터를 주고 받는다.정해진 프로토콜 (..
1. 소켓이란? 네트워크 노드에는 다양한 형태가 존재한다. 필자가 인터넷 상에 올린 이 글을 읽기 위해 클라이언트는 각자 개인이 보유한 장비를 통해 글에 접근하게 된다. 각각의 장비에서 인터넷에 한 글에 접속을 하게 되는데, 다양한 네트워크 장비와 환경에서도 접속 할 수 있다. 그리고 이 장비들을 각각의 IP 주소를 할당 받은 상태다. 이를 우리는 호스트(Host)라고 부른다. 그리고 호스트 안에 있는 프로세스가 우리가 보고 있는 데이터를 주고 받는 역할을 수행한다. 소켓은 호스트 내의 프로세스에 접근하기 위해 열어놓은 일종의 문이다. 그렇기 떄문에 서버에서 클라이언트로 데이터를 전달한다면 서버 쪽에도 네트워크로 나가기 위해 문이 있을 것이고, 클라이언트에서도 문이 존재할 것이다. 이 문을 소켓이라 하기..
1. 쿠키란? 웹 서버들은 클라이언트와의 연결 상캐를 지속하기 위해서 HTTP 쿠키를 사용한다. 웹 서버에서 클라이언트와 접속을 할때 지속적으로 주고 받게 되는 데이터를 매 연결마다 새로 주고 받는 것은 매우 불편한 일이다. 이런 정보로는 세션 ID, 쇼핑 카트 정보, 로그인 정보 등이 있다. 그래서 해당 정보들을 쿠키에 집어 넣게 된다면 우린 주고 받는 데이터의 양을 대폭 줄일 수 있다. 해당 개념은 넷스케이프의 개발자였던 루 몬톨리가 처음 만들어 냈다. 그가 고안한 뒤로 많은 웹 사이트와 브라우저에서 쿠키를 적용하기 시작했다. 웹사이트에서 기억할 필요가 있는 변수를 Cookie 필드에 집어 넣어 해결 할 수 있다. 쿠키 필드는 HTTP의 헤더필드에 적용된다. 우선 서버에서 클라이언트의 쿠키를 설정하기..
1. HTTP 요청 HTTP 프로토콜은 웹 브라우저에서 서버로 보내는 요청, 서버가 클라이언트로 다시 응답을 주는 기본 구조로 이어진다. 서버로 보내는 요청과 응답에는 일정한 양식이 있어야 각자의 언어를 알아 들을 수 있을 것이다. - Request Line Method, URL, version으로 구성되어있는 HTTP 요청 시작 부분 - Header linesHost 정보, User-Agent(웹 브라우저), Connection (Keep-Alive) 정보가 있는 요청의 헤더 부분 - Entity Body요청에 대한 바디 (Entity) 이를 바탕으로 HTTP 요청을 작성하게 되면 아래와 같이 나오게 된다. POST /contacts/new HTTP/1.1 Host: www.zetawiki.com Co..
1. HTTP (Hypertext Transfer Protocol) HTTP는 우리가 html로 제작된 웹 사이트를 주고 받을 때 주로 쓰인다. 서버에 존재하는 html 문서를 클라이언트와 주고받을때 사용되는 프로토콜이다. HTTP는 기본적으로 WWW 환경 아래에서 제어 된다. html 문서 이외에도 TIFF 이미지, 워드 문서, 윈도우 .exe 파일 전송에도 쓰인다. 앞서 URL에서 배웠듯이 웹 상에 정보를 가져오기 위해서 주소를 작성하게 되는데 가장 앞부분에 프로토콜 명이 들어간다. 우리가 웹사이트에서 흔히 입력하는 주소인 "http://www.google.co.kr" 을 떠올리면 HTTP를 호출하는 방법을 쉽게 알 수 있다. 웹 서버에 있는 html 문서를 불러 오기 위해 HTTP 프로토콜을 사용해..
1. 프록시 서버 (Proxy Server) 프록시 서버는 클라이언트와 서버를 연결해 주는 서버다. 프록시 서버는 서로 다른 두 네트워크 서비스 사이에 존재한다. 프록시 서버가 존재하는 이유는 바로 인터넷 속도의 향상이다. 이는 특히 제공하는 프로토콜이 다른 두 서버의 데이터 송수신에서 빛을 발한다. 각자 서버에 맞는 데이터로 변형하는 과정을 분리해 놓아 전송 속도를 높일 뿐 아니라 많은 트래픽에 하나의 서버에 몰려 서버가 다운 될 가능성을 낮출 수 있게 된다. 다수의 사용자가 같은 페이지로 요청을 할 때 매번 서버에 접근하는 것 보단 미리 프록시 서버에 받아 놓은 자료를 다시 수신하게 된다면 속도의 향상을 가져온다. 또, 프록시 서버를 통해 서버의 보안성을 높인다. 네트워크의 사적인 정보를 외부 노출을..