![]() 
                    
                      
                      
                      구글이 리눅스 커널 패치를 통해 TCP 통신성능을 40%까지 향상할 수 있었다는 것을 알게 됐습니다. 어떻게 했길래 40%라는 수치가 나오는지 궁금해서 알아보았고 아주 단순하고 그냥 지나칠 수 있는 기본 지식을 실제로 적용하는 것이 성능에 크게 영향을 미칠 수 있다는 사실이 놀라워 글로 작성해 봅니다. 원본 아티클: Linux 6.8 Network Optimizations Can Boost TCP Performance For Many Concurrent Connections By ~ 40% 유튜브 영상: Google Patches Linux kernel with 40% TCP performance - Hussein Nasser 구글은 어떻게 성능을 향상했는가? 구글은 리눅스 커널의 TCP 성능을 향..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      이번 글에서는 MySQL에서 공간 데이터를 다루는 법을 알아보고 실습을 통해 성능을 비교해 본 것을 기록합니다. 특히 가장 많이 사용되는 특정 좌표로부터 특정 거리 내의 좌표를 찾는 연산을 위주로 실습하고 인덱스와 공간 연산의 성능을 테스트합니다. 들어가기 앞서 제가 이 글에서 사용한 MySQL 버전은 v8.3.0입니다. MySQL의 공간 데이터 MySQL의 `MyISAM`, `InnoDB`, `NDB`, `ARCHIVE` 스토리지 엔진은 공간 데이터 타입과 관련 함수를 지원합니다. 이 중 `MyISAM`과 `InnoDB`는 공간 데이터 타입 컬럼에 대해 공간 인덱스와 비공간 인덱스를 지원하고 `NDB`와 `ARCHIVE`는 비공간 인덱스만 지원합니다. `InnoDB`는 데카르트 SRS와 geograph..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      MySQL 실습을 위해 MySQL에서 제공하는 Example database중 employee 데이터를 다운받고 데이터베이스를 생성해봅시다. Example Database MySQL에서는 실습에 유용한 다양한 관계를 갖는 데이터베스와 데이터를 제공합니다. 공식문서에서 데이터베이스 생성 방법을 확인 할 수 있습니다. employee 데이터를 다운 받고 생성해봅시다. employee 데이터베이스 구조는 아래와 같습니다. 데이터 다운로드 employee의 경우 깃헙에서 다운받을 수 있습니다. 쉽게 zip 파일로 다운받을 수있습니다. 압축을 푼 폴더에서 터미널을 엽니다. 데이터베이스 생성, 데이터 삽입 이제 employees.sql 스크립트를 실행합니다. `employees`라는 이름의 데이터베이스가 이미 존재..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      [Data Communications and Networking, 5th, Behrouz A. Forouzan] Table of Contents Networks `network`: 통신 링크들에 의해 연결된 장치(노드)들의 집합. `장치(Device)`: host, end sytem, connectiong device such as router - Network Criteria 네트워크 기준(평가 기준으로 이해했다.) Performance: 성능 Reliability: 신뢰성(재난 등) Security: 보안 # Performance: 성능 전송 시간(transit time), 응답 시간(response time) 등 많은 방법으로 측정. `전송시간(Transit time)`: 메시지 하나의 전송에 소요..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      [Data Communications and Networking, 5th, Behrouz A. Forouzan] Table of Contents Data Communications `telecommunication`: 원거리 통신("tele"는 그리스 어로 "far"이라는 뜻이다.) telephone, telegraphy, etc. `data`: 자료. 약속된 형태로 표현된 정보(information presented in whaterver form is agreed upon) 여기서 약속된 형태의 예로 이진수(binary informations units)가 있다. + 앞으로 data는 데이터 혹은 자료, information은 정보로 번역하겠습니다. `data communication`: 통신 매체(..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      요세푸스 문제 유대-로마 전쟁에서 플라비우스 요세푸스는 병사 40명과 함께 로마군에게 포위됐습니다. 포위된 요세푸스는 병사들과 함께 로마군에게 죽느니 우리들의 손으로 목숨을 끊자는 결심을 합니다. 이들은 원형으로 선 뒤 시계방향으로 자신의 옆사람을 죽여주기로 했습니다. 요세푸스는 마지막에 홀로 살아남아 스스로 목숨을 끊지 않고 로마군에 항복했습니다. 만약 요세푸스가 처음부터 살고 싶었다면 어디에 서야 마지막에 살아남을 수 있을까요? 이 질문이 요세푸스 문제입니다. 원형 리스트를 순회하며 특정 조건으로 요소를 하나씩 제거했을 때 제거되는 순서를 `요세푸스 순열(Josephus permutation)`, 마지막에 남는 요소를 알아내는 문제를 `요세푸스 문제(Josephus problem)`라고 합니다. 해설..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      Data Communications and Networking, 5th, Behrouz A. Forouzan을 읽고 정리한 내용입니다. Chapter 1. Introduction 💡 학습 목표 `데이터 커뮤니케이션의 요소`와 `데이터 교환 유형`을 살펴본다. 네트워크에서 `데이터의 표현 방법`과 `데이터의 흐름`을 살펴본다. `네트워크`를 살펴보고 네트워크의 `구조`와 `평가 기준`들을 살펴본다. 4가지 `네트워크 토폴로지(network topologies)`를 알아본다. `네트워크의 타입`(LANs, WANs and internetworks)을 알아본다. `the Internet`을 살펴본다. `스위칭(switching)`을 통해 어떻게 작은 네트워크가 모여 큰 네트워크가 되는지 살펴본다. `the I..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      많은 프로그래밍 언어가 나머지 연산자를 제공합니다. 하지만 언어마다 결과가 다를 때가 있습니다. C언어, Java, Python, Javascript 네 가지 언어에 대해 나머지 연산자를 비교해 봅시다. 모듈러 위키 백과를 보면 `모듈러 산술(Modular Arithmetic)`를 다음과 같이 정의합니다. 💡 모듈러 산술 혹은 합동 산술은 정수의 합과 곱을 어떤 주어진 수의 나머지에 대하여 정의하는 방법이다. 임의의 정수 $a, b$가 있을 때, 정수 $n$에 대해 $a=b+kn$을 만족시키는 정수 $k$가 존재한다면 $a$와 $b$는 같은 동치류에 속하고 $n$에 대해 합동이라고 합니다. 기호로는 다음과 같이 씁니다. $a\equiv b\space(\text{mod}\space n)$ $n=3$일 때 ..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      제가 블로그에 쓴 자료구조와 알고리즘 글들을 모아 정리했습니다. 자료 구조 연결 리스트(linked list) - 단일 연결 리스트, Java 구현 스택(stack) - 단일 연결 리스트와 배열을 이용한 스택, Java 구현 큐(Queue) - 단일 연결 리스트를 이용한 Deque, Java 구현 알고리즘 시간 복잡도와 점근적 표기법 재귀 알고리즘의 시간 복잡도 계산 선택 정렬(Selection Sort) - C++, Java, Python 구현 삽입 정렬(Insertion Sort) - C++, Java, Python 구현 버블 정렬(Bubble Sort) - C++, Java, Python 구현 병합 정렬(Merge Sort) - C++, Java, Python 구현 퀵 정렬(Quick Sort) -..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      스택과 비교해 보며 큐 자료 구조에 대해 알아봅시다. 이번 글에서는 java로 `양방향 큐(deque)`를 `이중 연결 리스트(doubly linked list)`로 구현합니다. 자료구조, 알고리즘 시리즈 모아보기 큐 `큐(queue)`는 이름 그대로 줄 서는 것과 같습니다.(줄 서 있는 것을 미국에서는 line이라고 하지만 영국에서는 queue라고 합니다.) 줄을 설 때를 생각해 보면 먼저 온 사람이 먼저 원하는 것을 얻습니다. 늦게 온 사람은 늦게 얻죠. 이런 구조를 `FIFO(First In First Out)`이라 합니다. - 연산 큐 또한 스택과 마찬가지로 `추상 자료 유형(Abstract Data Type)`으로 연산(행위)으로 정의됩니다. enqueue: 새로운 요소를 자료 구조에 추가 de..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      스택 자료구조에 대해 알아보고 java로 구현해 봅시다. 자료구조, 알고리즘 시리즈 모아보기 스택 `스택(stack)`은 이름 그대로 자료를 쌓아 놨다고 생각하는 `추상 자료 유형(Abstract Data Type)`입니다. 흔히 프링글스, 팬케이크로 예시를 듭니다. 가장 마지막에 프링글스 통에 넣은 프링글스 칩, 가장 마지막에 쌓은 팬케이크는 바로 먹을 수 있지만 가장 예전에 넣은(처음 넣은) 것은 꺼내기 힘듭니다. 스택은 위 예시와 같이 마지막에 넣은 것이 처음으로 나오는 `LIFO(Last In First Out)`구조로 최신 순으로 자료에 접근이 가능합니다. - 연산 스택은 추상 자료 유형으로 다음과 같은 연산(행위)으로 정의됩니다. 스택은 크게 push와 pop이라는 두 개의 연산으로 정의됩니다..
                     
                   
                
                  
                    ![]() 
                    
                      
                      
                      연결 리스트의 가장 기본이 되는 단일 연결 리스트로 연결 리스트를 이해해 봅시다. 자료구조, 알고리즘 시리즈 모아보기 연결 리스트 `연결 리스트(linked list)`는 데이터와 다음 데이터의 위치를 함께 저장하여 데이터들을 체인처럼 연결하는 자료 구조입니다. 여기서 저장되는 자료의 단위(데이터와 다음 자료의 위치를 묶은 구조체)를 `노드(node)`라고 부릅니다. 다시 말하면 연결 리스트는 데이터와 다음 노드의 참조값을 갖는 노드들로 연결된 자료 구조입니다. 연결 리스트는 연결되는 방법에 따라 `단일 연결 리스트(singly linked list)`, `이중 연결 리스트(doubly linked list)`, `다중 연결 리스트(multi-linked list)`, `원형 연결 리스트(circular..