HTTP Cache 튜토리얼

HTTP Cache 튜토리얼 HTTP를 이용하는 어플리케이션을 개발하다보면 효율적인 네트워크 송수신을위해 서버/클라이언트에서 캐쉬(cache)를 이용하는것이 필수적이다. HTTP를 이용할때 어떤식의 캐쉬방식이 있는지, 어떤 종류의 캐쉬들이 있는지, 어플리케이션 개발에있어서 상식적으로 알고있어야 할 내용들을 정리해보았다. 캐쉬의 종류 캐쉬의 위치에 따라 다음과 같이 분류가 가능하다.1 Browser cache 웹브라우져 혹은 HTTP요청을 하는 클라이언트 어플리케이션들이 내부적으로 갖고있는 캐시이다. Proxy cache 실제 서버가 있는곳이 아닌 네트워크 관리자에의해 네트워크상에 설치되는하는 캐시다. 일반적으로 큰회사나 ISP의 방화벽(firewall)에 설치된다. shared cache의 일종으로 많은 수의 사용자들에 의해 공유되어 사용되며, 레이턴시와 트래픽을 줄이는데 매우 도움이된다. Gateway cache(reverse proxy cache) 네트워크상에 설치되지 않고 실제 서버의 관리자에의해 설치 및 운영된다. 실제 서버의 앞단에 설치되어 요청에대한 캐쉬 및 효율적인 분배를 통해 서버의 응답 성능을 좋게하고, scalable하게 만들어 준다. 로드밸런서 등을 사용해서 실제 서버가 아닌 gateway cache로 요청을 reroute한다. CDN은 이런 gateway 캐시를 유료로 제공해주는 서비스라고 볼 수 있다. 기본적인 캐쉬 동작 방식 응답 헤더의 캐쉬가 캐쉬 하지말라고 지정되어있는 경우 캐쉬하지 않는다 ...

2014년 7월 17일 · 5분 · 944단어

상수 포인터(constant pointer)와 상수를 가리키는 포인터(pointer to constant)

C문법에서 const 키워드가 포인터에대해 사용될때 키워드의 위치에따라 의미가 매우 달라진다. 상수포인터와, 상수를 가리키는 포인터 변수 두가지가있으니 주의해서 사용해야한다. 상수 포인터(constant pointer) 문법: int * const myValue; 포인터 변수가 갖고있는 주소 값을 변경 불가능 포인터 변수가 가리키는 주소에 존재하는 값을 변경하는 것은 가능 Objective-C에서 키값을 정의하는데 많이 사용되는 패턴이다. 예): NSString *const kCustomKey = @“myKey”; 상수를 가리키는 포인터(pointer to constant) 문법: const int * myValue; 포인터 변수가 갖고있는 값은 마음대로 변경 가능 ...

2014년 7월 14일 · 1분 · 80단어

C auto, static, extern 키워드 의미

C에서 변수는 값이 저장되는 메모리 영역이나 변수의 유효범위에 따라 구분되는데 auto, static, extern 이 세가지 키워드(keyword)를 이용하여 구분을 할 수 있다. 변수의 유효범위는 크게 지역변수(local variable)와 전역변수(global variable)로 나뉘며, 실제 프로그램 실행시에 변수가 저장되는 메모리상의 위치에따라 높은 주소값부터 거꾸로 사용하여 내려오는 스택(stack)과, 낮은 주소값부터 올라가면서 사용하는 정적데이터영역(.data, .bss)과 힙(heap)으로 구분된다1. 최적화 관점에서 살펴보면, 스택의 경우 해당 범위(scope)에서 자주 액세스 되며 범위가 끝나면 없어지는 임시변수들이 저장되는데, 스택포인터를 순차적으로 이동해가면서 할당되기 때문에 할당속도가 빠르며, 해당 변수들이 자주사용되어서 CPU 캐시의 힛트율이 높은 경우 접근 속도도 더 빨라질 가능성이 있다. 하지만 범위가 끝나면 없어지기때문에 계속적으로 값을 유지하는 것이 불가능하다. 이러한 문제를 해결하기위해서는 정적인 변수들은 정적 데이터 영역에 저장하여 계속 유지되며, 동적인 변수들은 힙에 변수를 할당하고 저장해야한다. 힙은 비순차적으로 메모리 할당/해제가 계속 일어나는 동적인 특성을 갖고있다. 때문에 스택처럼 메모리 할당을 순차적으로 하기가 힘들어서 정적인 방식에 비해 할당 속도가 느린 특성을 갖는다. ...

2014년 2월 20일 · 3분 · 432단어

git-ftp를 이용한 웹사이트 배포

일반적으로 스크립트 언어에 기반한(Python, PHP, Ruby 등) 웹사이트 개발을 할때 보통 로컬머신에서 개발을하고 충분한 테스트를 거친 후 실제 서버로 배포를 하게 된다. 이때 ssh shell에 접근가능하며 충분한 권한을 가진 단독 호스팅 서버가 있다면 서버에 git 저장소를 만들어 두고 git의 pull & push와 hook을 이용하여 손쉽게 로컬에서 수정된 코드들만 효율적으로 배포(deployment)가 가능하다. 하지만 일반적인 웹호스팅 서비스를 이용할 경우 git을 지원하는 곳은 매우 드물다보니, 로컬에서 작업한 결과물을 업로드하려면 일반적으로 FTP를 사용해야한다. 하지만 이는 어느파일이 로컬에서 수정되었는지에 관계없이 전체 사이트를 업로드하는 것이 매우 비효율적일 뿐더러 관리가 더 힘들어진다. 이 경우 git-ftp 커맨드를 이용하는것을 매우 추천한다. 다운로드 링크: https://github.com/git-ftp/git-ftp ...

2013년 12월 11일 · 2분 · 238단어

디익스트라 알고리즘(Dijkstra algorithm)

위키피디아에 있는 코드[^1]이 왠지 어려워서 나름대로 주석을 좀 추가하고 정리를 해봤는데, 그래도 어렵다. 그림을 그려서 설명하면 그나마 좀 괜찮은데 글로만 설명하려니 역시 쉽지 않은듯. 알고리즘 설명 시작노드를 설정 후 모든 노드에 대해(메인 루프) 아래 2가지 루프를 적용한다. 서브 루프1: 현재 노드에서 도달 가능한 모든 노드 중 최소거리인 노드를 찾은 후 현재노드값을 해당 위치로 변경 서브 루프2: 변경된 현재 노드까지 오는 최단거리를 알고있으므로, 이 값을 기준으로 다른 모든 노드들에 도달하는 거리를 한번씩의 덧셈으로 업데이트 한다. (현재노드까지 최단거리값 + 현재노드에서 다음노드 거리 = 출발노드에서 다음 노드까지의 최단거리) ...

2013년 11월 1일 · 2분 · 306단어