본문 바로가기

전체 글

(341)
Mac OS에서 Jekyll로 Github 블로그 만들기! Mac OS에서 Jekyll로 Github 블로그 만들기! 블로그를 시작한지 벌써 9개월 째에 접어들고 있다. 블로그를 시작하기 전에 어느 플랫폼에서 블로그를 시작할지 정말 많이 고민하다가 고른 것이 티스토리 블로그였다. 지금은 조금 후회 중이다. 블로그를 처음 시작할 때는 개발에 대한 지식이 전무했던 때이기 때문에 워드프레스나 다른 기타 플랫폼에 대해서 잘 알지 못했다. 그나마 네이버 블로그보다는 티스토리 블로그에 대해 자유도가 높다고 들어서 티스토리 블로그를 운영 중인데 썩 마음에 들지 않는다. 우선 편집하는 것이 너무 귀찮다. 그러던 도중 Jekyll이 유행이라고 해서 블로그를 만들어봤다. 아래 포스팅을 따라가면 아래 링크와 같은 블로그를 가질 수 있다. 세부적인 사항은 조금 수정해야 한다. 최종적..
#Transport Layer, TCP vs UDP #Transport Layer, TCP vs UDP인터넷은 트랜스포츠 계층에 연결형 프로토콜과 비연결형 프로토콜, 이렇게 두 개의 주된 프로토콜을 갖는다. UDP UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)는 비연결형 프로토콜이다. IP 데이터그램을 캡슐화하여 보내는 방법과 연결 설정을 하지 않고 보내는 방법을 제공한다. UDP는 흐름제어, 오류제어 또는 손상된 세그먼트의 수신에 대한 재전송을 하지 않는다. 이 모두가 사용자 프로세스의 몫이다. UDP가 행하는 것은 포트들을 사용하여 IP 프로토콜에 인터페이스를 제공하는 것이다. UDP가 특별히 유용한 분야는 클라이언트-서버 상황이다. 종종 클라이언트는 서버로 짧은 요청을 보내고, 짧은 응답을 기대한다. 만약 요청 또는 ..
[Sorting] 5. Non-Comparison Sorting - Counting Sort, Radix Sort non - Comparisons Sorting AlgorithmCounting SortSpace Complexity : in-place 알고리즘이 아니다. buffer를 필요로 한다.Time Complexity : O(n + k)Radix Sort에 대해 알아보기 전에 Count Sort에 대해서 먼저 알아보자. Count Sort에서 사용된 알고리즘이 Radix Sort에서 사용된다. 즉 Radix Sort는 Count Sort의 확장판이라고 할 수 있다. Count Sort는 말 그대로 몇 개인지 개수를 세어 정렬하는 방식이다. 정렬하고자 하는 값 중 최대값에 해당하는 값을 size로 하는 임시 배열을 만든다. 만들어진 배열의 index 중 일부는 정렬하고자 하는 값들이 되므로 그 값에는 그 값들의 ..
[Sorting] 4. Heap, Heapify, Heap Sort Heap SortSpace-Complexity = In-place sort : O(1)의 보조 메모리를 사용한다. Time-Complexity = O(n log n) 원리heap 자료구조를 활용할 Sorting 방법에는 두 가지 방법이 존재한다. 하나는 정렬의 대상인 데이터들을 힙에 넣었다가 꺼내는 원리로 Sorting을 하게 되는 방법이고, 나머지 하나는 기존의 배열을 heapify(heap으로 만들어주는 과정)을 거쳐 꺼내는 원리로 정렬하는 방법이다. Heap 자료구조란?자료구조의 일종으로 Tree의 형식을 하고 있으며, Tree 중에서도 배열에 기반한 Complete Binary Tree 이다. 배열에 트리의 값들을 넣어줄 때, 0번째는 건너뛰고 1부터 루트노드가 시작된다. 이는 노드의 고유번호 값..
[Sorting] 3. Quick Sort Quick SortSpace-Complexity = In-place sort : O(1)의 보조 메모리를 사용한다. Time-Complexity = O(n log n) Sorting기법 중 가장 빠르다고 해서 quick이라는 이름이 붙여졌다. 하지만 Worst Case에서는 시간복잡도가 O(n^2)가 나올 수도 있다. 하지만 constant factor가 작아서 속도가 빠르다. 원리Quick Sort 역시 Divide and Conquer 전략을 사용하여 Sorting이 이루어진다. Divide 과정에서 pivot이라는 개념이 사용된다. 입력된 배열에 대해 오름차순으로 정렬한다고 하면 이 pivot을 기준으로 좌측은 pivot으로 설정된 값보다 작은 값이 위치하고, 우측은 큰 값이 위치하도록 partit..
[Sorting] 2. Merge Sort 2. Merge SortSpace-Complexity = 입력 배열 크기의 보조 메모리를 사용한다. Time-Complexity = O(n log n) 원리기본적인 개념으로는 n개의 원소를 가진 배열을 정렬할 때, 정렬하고자 하는 배열의 크기를 작은 단위로 나누어 정렬하고자 하는 배열의 크기를 줄이는 원리를 사용한다. Divide and conquer라는, 분할하여 정복한다의 원리인 것이다. 말 그대로 복잡한 문제를 복잡하지 않은 문제로 분할하여 정복하는 방법이다. 단 분할(divide)해서 정복했으니 정복(conquer)한 후에는 결합(combine)의 과정을 거쳐야 한다. Merge Sort는 더이상 나누어지지 않을 때 까지 반 씩(1/2) 분할하다가 더 이상 나누어지지 않은 경우에는 ( 원소 하나인..
[Sorting] 1. Insertion Sort (삽입 정렬) / Bubble Sort (버블 정렬) 1. Insertion Sort Space-Complexity = In-place sort : O(1)의 보조 메모리를 사용한다. Time-Complexity = O(n^2) 원리n개의 원소를 가진 배열을 정렬할 때, i번째를 정렬할 순서라고 가정하면, 0부터 i-1까지의 원소들은 정렬되어있다는 가정하에, i번째 원소와 i-1번째 원소부터 0번째 원소까지 비교하면서 i번째 원소가 비교하는 원소보다 클 경우 서로의 위치를 바꾸고, 작을 경우 위치를 바꾸지 않고 다음 순서(i+1)의 원소와 비교하면서 정렬해준다. 이 과정을 정렬하려는 배열의 마지막 원소까지 반복해준다. c code>1234567891011121314151617//Insertion Sortvoid insertion_sort(int * arr,..
[3장] 1. 복수 서버에 리퀘스트를 분배한 서버의 부하 분산 3장 첫번째, 복수 서버에 리퀘스트를 분배한 서버의 부하 분산 1. 처리 능력이 부족하면 복수 서버로 부하 분산된다. 클라이언트로 부터 서버에 액세스가 증가할 때,유입되는 대량의 패킷을 서버의 처리 능력이 따라잡지 못할 수 있다. 이럴 경우에는 복수의 서버를 사용하여 서버 한 대당 처리량을 줄여야 하는데, 이러한 방법을 분산 처리라고 한다.그 중 가장 간단한 방법은 단순히 여러 대의 웹 서버를 설치하고 한 대가 담당하는 사용자 수를 줄이는 방법이 있다. 그러기 위해서는 클라이언트가 보내는 리퀘스트를 웹 서버에 분배하는 구조가 필요하다. DNS 서버에 적용되고 있는 분배하는 방법이 가장 간단하다. 서버에 액세스 할 때 DNS 서버에 조회하여 IP 주소를 조사하는데 이 때, DNS 서버에 같은 이름으로 여러..