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) 프록시 서버는 클라이언트와 서버를 연결해 주는 서버다. 프록시 서버는 서로 다른 두 네트워크 서비스 사이에 존재한다. 프록시 서버가 존재하는 이유는 바로 인터넷 속도의 향상이다. 이는 특히 제공하는 프로토콜이 다른 두 서버의 데이터 송수신에서 빛을 발한다. 각자 서버에 맞는 데이터로 변형하는 과정을 분리해 놓아 전송 속도를 높일 뿐 아니라 많은 트래픽에 하나의 서버에 몰려 서버가 다운 될 가능성을 낮출 수 있게 된다. 다수의 사용자가 같은 페이지로 요청을 할 때 매번 서버에 접근하는 것 보단 미리 프록시 서버에 받아 놓은 자료를 다시 수신하게 된다면 속도의 향상을 가져온다. 또, 프록시 서버를 통해 서버의 보안성을 높인다. 네트워크의 사적인 정보를 외부 노출을..
1. URI란? URI(Uniform Resource Identifier)는 우리나라 말로 '통합 자원 식별자'를 의미한다. 앞서 배운 URL이 위치를 의미했다면, URI는 위치에서 더 나아가 통합 자원을 나타내는 하나의 식별 방법을 의미한다. 그 식별 방법이 꼭 위치 정보가 아니어도 되는 것이다. 이런 개념이기에 URI는 URL보다 상위 개념이다. URL이외에도 URN(Uniform Resource Name)이라고 불리는 통합 자원 이름역시 URI의 하위 개념에 속한다. URL로 우리가 원하는 정보의 주소를 안다면은, URI로 알수 있는 정보는 그 이상이다. 앞서 말한 주소는 물론이고, 인터넷 사용자의 이름, 우리가 찾고자 하는 어떤 데이터 등 모든 정보를 표현할 수 있다. 웹상에 어떤 데이터 모두 U..
이전 시간엔 인터넷 DNS에서 작동하는 인터넷 주소 프로토콜에 관한 클래스 분석을 실시했다. 이번 시간에는 URL을 Java 프로그램에서 인식하는 방법에 대해 한번 이야기를 해볼까 한다. 1. URL (Uniform Resource Locator) 많은 사람들이 헷갈려하는 부분 중에 하나가 URL이 인터넷 주소라고 생각하는 것이다. 우리가 가장 많이 사용하는 URL이 인터넷 주소이기 떄문에 이 2가지를 동일시하는데, 사실 2개는 다른 개념이다. 우리가 알고 있는 일반적인 인터넷 주소는 사실 도메인 주소 (Domain Address)라는 표현이 맞다. 이 도메인 주소를 표현하는데 URL 개념을 사용하는 것이다. URL은 이름 뜻대로, Uniform Resource Locator로 네트워크 상 어딘가에 있는..
인터넷 주소에 대해 모르는 사람은 거의 없을 것이다. 이 인터넷 주소라는 것은 웹 브라우저를 통해 특정 사이트에 접근 할 때 사용한다. 그리고 이 사이트는 특정 서버에 위치하고 있다. 인터넷 환경을 사용하는 서버는 고유의 IP주소를 가지고 있다. 하지만, 우리는 숫자 정보를 활용하기 어렵기에 IP주소가 아닌 도메인 주소를 사용하게 되는 것이다. 결국 우리는 웹 브라우저에서 사이트 접속을 위해 도메인 주소를 입력해야하고 네트워크 상에서 이를 DNS(Domain Name System) 프로토콜로 제공하고 있다. 1. DNS (Domain Name System) 우리는 전세계 어디에 위치해있든, 어느 디바이스를 통하든 "www.google.co.kr"을 입력하면 동일한 화면이 출력 되어야 한다. 그래서 DNS..
같은 프로그램 안에서 작동하는 스레드의 경우 대부분 서로간에 리소스를 공유하게 된다. 만약 스레드가 동시에 공유 리소스에 접근해 값을 변경하게 되면 프로그램에는 치명적인 오류가 발생한다. 스레드 동기화는 각 스레드가 공유 영역을 바라보고 있을 떄, 어떤 스레드를 먼저 접근 시키고 공유 영역의 값을 두개의 스레드가 동시에 접근하지 못하도록 막는 기능을 수행한다. 1. 스레드 동기화(Thread Synchronization) 스레드 동기화는 공유 리소스를 가지고 있는 프로그램에서 스레드 간의 접근을 정의하는 것을 의미한다. 스레드를 동기화 시키기 위해 다양한 방법론이 존재한다. 하나의 스레드가 작업을 끝낼 때 까지 공유 리소스에게 독점적인 권한을 주는 방법, 일정한 시간 간격을 두고 스레드의 공유 리소스 배..
스레드 실행은 run() 과 start() 메소드를 활용한다. 하지만, 이 두 메소드는 값을 반환하지 않는다. 스레드로 부터 값을 반환 받기 위해서는 다른 방법을 사용해야 한다. 1. 스레드의 결과 출력 우리가 숫자를 입력하면 그것을 일련의 복호화 과정을 거쳐 문자열로 만드는 스레드가 존재한다고 생각해보자. 예를 들어 우리가 계좌번호를 입력해야 하는데 그냥 숫자로 데이터베이스에 전송된다면, 보안 문제가 발생할지도 모른다. 그래서 우리는 이 문제를 해결하기 위한 복호화 프로그램을 만들기로 했다. 암호화 방법은 아주 단순하게 Integer 계좌번호를 입력 받아서 각각의 숫자를 문자열로 변환하는 방법을 사용하고자 한다. 프로그램을 아래와 같이 작성할 수 있을 것이다. MakeString.java 1234567..