목록전산 지식 (25)
미래학자

3장 HTTP 메시지 이번 장에서 다룰 내용 메시지가 어떻게 흘러가는가 HTTP 메시지의 세 부분(시작줄, 헤더, 개체 본문) 요청과 응답 메시지의 차이 요청 메시지가 지원하는 여러 기능(메서드)들 응답 메시지가 반환하는 여러 상태 코드들 여러 HTTP 헤더들은 무슨 일을 하는가 3.1 메시지의 흐름 HTTP 메시지는 HTTP 애플리케이션 간에 주고 받은 데이터의 블록들이다. 이런 메시지는 방향성이 있어서 몇가지 용어가 등장 한다. '인바운드', '아웃바운드', '업스트림', '다운스트림' 3.1.1 메시지는 원 서버 방향을 인바운드로 하여 송신된다. 간단하게 서버를 기준으로 들어가는 방향이 인바운드, 서버에서 외부로 나가는 방향을 아웃바운드라 한다. 3.1.2 다운스트림으로 흐르는 메시지 클라언트에서 ..

이 장에서 다루는 내용들 URL 문법, 여러 URL 컴포넌트가 어떤 의미를 가지며 무엇을 수행하는지 여러 웹 클라이언트가 지원하는 상대 URL과 확장 URL 같은 단축 URL에 대해서 URL의 인코딩과 문자 규칙 여러 인터넷 정보 시스템에 적용되는 공통 URL 스킴 기존 이름은 유지하면서 객체들을 다른 장소로 옮기는 것을 가능하게 해주는 URN을 포함한 URL의 미래 2.1 인터넷의 리소스 탐색하기 1장에서 URL의 구조를 간단히 설명한 적있다. URL에는 스킴, 호스트, 패스, 쿼리, 프래그먼트가 구성 요소지만, 모두 포함하지 않아도 된다. 스킴, 호스트, 패스 정도가 URL의 항상 포함해야 하는 것들이다. mailto:tamm@google.com ftp:ftp.tamm.com/video/bts-01...

이번 장에서 다룰 내용들 얼마나 많은 클라이언트와 서버가 통신하는지 리소스(웹 콘텐츠)가 어디서 오는지 웹 트랜잭션이 어떻게 동작하는지 HTTP 통신을 위해 사용하는 메시지의 형식 HTTP 기저의 TCP 네트워크 전송 여러 종류의 HTTP 프로토콜 인터넷 곳곳에 설치된 다양한 HTTP 구성 요소 1.1 HTTP: 인터넷의 멀티미디어 배달부 웹에서 통신할 때 우리는 다양한 포맷을 주고 받는다.(text, image, video 등) 우리는 다양한 데이터를 주고 받고 데이터라 누락된 것이 없는지에 대한 걱정을 하지 않는다. 이것은 네트워크 차원에서 신뢰성을 보장하기 때문이다. 1.2 웹 클라이언트와 서버 HTTP 프로토콜로 의사소통 하는 두 개의 주체를 HTTP 클라이언트, HTTP 서버라고 한다. 1.3 ..
트리는 컴퓨터 구조에서 많이 사용하는 구조 입니다. 가장 대표적인 예로 파일 시스템이 있습니다.이진트리는 다음과 같은 구조로 되어 있습니다.하나의 노드는 자식노드를 최대 2개까지만 가질 수 있죠. 이진 탐색 트리는 이진 트리와 형태가 같으면서 한 가지 조건이 더 붙어 있습니다. 바로 왼쪽 자식 노드는 부모 노드의 수보다가 작은 값을 가지고오른쪽 노드는 부모 노드의 수 보다 큰 값을 가진다는 규칙 입니다. 위노드에서 그럼 중복된 숫자가 제거가 됩니다. 왜냐 하면 크거나 작지 않고 같은 값이기 때문에 위 규칙이 어긋나기 때문입니다. 그러면 조금 수정하면 위와 같은 형태가 되겠습니다. 제가 js로 구현한 코드는 아래와 같습니다.. 이진 트리는 insert, delete, search 모두 Log(N)의 복잡도..
stackstack은 FILO(first in last out) 형태의 자료구조입니다. 간단히 엘레베이터를 떠올리면 됩니다. 마지막에 탄 사람이 처음으로 나가겠죠? 문앞에 있으니 method 설명 push 새로운 아이템을 추가합니다. top 마지막에 추가한 아이템을 가르킵니다. pop 마지막에 추가한 아이템을 꺼냅니다. empty 스택에 아이템이 더 있는지 확인합니다. 간단히 네 가지 메소드가 있습니다. 여기서 헷갈리는것이 top과 pop의 차이입니다.간단히 말하면 pop은 마지막 아이템을 리턴하고 stack에서 제거합니다. top은 아이템을 리턴만 하게 되지요. 코드는 다음과 같습니다. Queuequeue는 FIFO(first in first out) 형태의 자료구조입니다. 간단히 은행 번호표를 생각하..
이번에는 연결 리스트를 js로 구현해보았습니다. 연결 리스트를 알고 계신다를 전제로,, 연결리스트의 스펙을 먼저 보겠습니다. method 설명 add(...arg) 새로운 아이템을 추가합니다. 인자가 하나 또는 두 개이며, 인자가 하나일 땐 해당 인자를 값으로 하는 아이템을 맨 마지막에 추가합니다. 인자가 두개라면, 첫 번째 인자는 추가될 인덱스고 두 번째 인자가 값이 됩니다. get(index) index에 위치한 Node를 반환합니다. 만약 해당 노드가 존재하지 않는다면 null을 리턴합니다. size() 아이템의 총 개수를 반환합니다. contains(value)리스트 내부에 해당 값을 갖는 노드가 존재하는지 여부 remove(index)인덱스에 존재하는 아이템을 제거합니다. 전체 코드는 다음과 같..
카운팅 정렬은 특정 문제 상황이 발생했을 때 효율이 굉장히 좋아진다. 간단한 예로 영어로 된 소설 하나를 알파벳순으로 정렬한 배열을 얻고 싶다할 때사용할 수 있다. 계수 정렬(counting sort)데이터셋은 다음과 같다. [ 1, 3, 4, 4, 1, 4, 3, 4, 0 ]위 데이터셋은 1 ~ 5까지의 값 중 하나다.가질 수 있는 값의 최대 값을 크기로 하는 배열C를 만든다. (여기서는 5가 최고값이므로 크기가 5인 배열을 준비한다.)나온 값의 갯수를 카운팅한다. C = [ 1, 2, 0, 2, 4 ] (0은 1개, 1은 2개, 2는 0개, 3는 2개 4는 4개)2에서 처럼 최대값을 크기로 하는 배열A를 만든다. 배열 A에는 누적합을 넣는다.누적합을 구한다. A = [1, 3, 3, 5, 9] A[k..
이번에는 js로 퀵 정렬과 합병정렬을 짜보았습니다. 개인적으로 C로 짰을때는 배열의 인덱스라든지 배열의 크기라든지 구현하는데 불편했었는데, js로는 고민없이 생각대로 짜는게 쉬웠습니다. (맞습니다. 저 배열의 인덱스 그런게 참 복잡해서 잘 못하고 싫어합니다.) 우선 합병 정렬은 배열을 계속해서 두 그룹으로 분할하고, 분할이 완료되면 두 그룹을 합칠 때 순서대로 합치는 방식 입니다. 코드를 보면, 조금은 복잡하게 느껴질 수도 있겠네요. 두 함수가 있습니다. 하나는 하나의 배열을 두 그룹으로 분할하는 함수고,또 하나는 두 배열을 정렬된 하나의 배열로 만드는 함수 입니다. 두 그룹으로 나눌때, 짝수라면 정확히 반반 나뉘겠지만, 홀수 일 때는 다른 크기의 그룹으로 나뉩니다. 그 처리를 위해 Math의 반올림 함..
js로 자료구조를 간단히 짜보려 한다. 그냥 단순히 리마인딩하기 위해 짜보는 거라 좋은 코드가 아닐 수 있다... 버블, 선택, 삽입 정렬은 빅오가 n^2이고, 간단하게 코드로 짤 수 있기 때문에 기본적인 정렬 아이디에서 자주 등장한다. 물론 자료가 많아지면, 매우 느린 단점이 있다. ( 어느정도 정렬된 형태면 그렇게 느리지 않지만,,) 버블 정렬 버블 정렬은 이웃한 아이템들을 비교하며 왼쪽 값이 더 크다면 자리 변경을 하는데, 이러한 동작은 계속적으로 반복 하여 정렬하는 방식이다. 최악의 상황은완전 반대로 값이 정렬되어 있을 때인데, 엄청 많이 반복해서 비효율이다. 선택 정렬 맨 왼쪽부터 시작해서 이후의 남은 값중 가장 작은 값을 골라 변경하는 정렬. 뭔가 인간이 사용하는 직관적인 정렬 방식 삽입 정렬..