본문 바로가기

Computer Science

(9)
MySQL의 ENUM 타입 최근 데이터베이스 설계 프로젝트를 진행하면서 ENUM 타입에 대해 잘못 알고 있던 부분이 있어서 기록을 해두려고 한다. 설계 프로젝트는 MariaDB로 진행했지만 MySQL과 큰 차이가 없을 것이라고 보고 MySQL 기준으로 내용을 작성하려고 한다. MySQL의 ENUM 타입 MySQL에는 ENUM 타입이 존재하는데, SET타입과 마찬가지로 내부적으로 숫자 값으로 매핑해서 관리하는 타입이다. 테이블 자체를 설계하면서 그 구조에 나열된 목록 중에 하나의 값을 가질 수 있다. 글로 설명하는 것보다 SQL 쿼리문 자체를 바로 확인해 보자. CREATE TABLE jdm ( engine ENUM ('B16B', 'RB26DETT', '2JZ-GTE') ); INSERT INTO jdm VALUES ('B16B'..
클라이언트 서버 시스템에서 프로세스 간 통신 방법 Interprocess communication의 방법으로 살펴본 message passing system과 shared memory system은 프로세스 간 통신 뿐만 아니라 client-server system을 포함한 다른 시스템에서도 사용할 수가 있다. 한편, 이번 포스트를 통해서 살펴볼 방법들은 client-server system에서 주로 활용되는 프로세스 간 통신 방법이다. 클라이언트-서버 통신에는 클라이언트와 서버라는 두 구성요소가 포함되며 클라이언트는 서버에 요청을 보내고 서버는 클라이언트의 요청에 응답하는 형태를 띈다. 1. 소켓(Sockets) 소켓은 클라이언트-서버 시스템에서 통신을 위해서 사용되는 전략 중 하나로, 통신을 위한 endpoint로 정의된다. 따라서 네트워크를 통해서..
프로세스 간 통신 Part2 지난 포스트에서 다루었던 communication link의 논리적 구현 방법 중 하나인 direct/indirect communication에 이어서 이번 포스트에서는 남은 synchronous/asynchronous communication과 automatic/explicit buffering을 다룬다. 그리고 2가지의 논리적 구현 방법은 각각 동기화에 대한 이슈와 버퍼링에 대한 이슈가 있다. 1. Synchronization Message Passing System에서 프로세스 간 통신은 커널에 send()와 receive() 동작에 대한 호출을 통해서 이루어진다. 그리고 프로세스가 이러한 동작을 하려고 할 때 그 동작이 차단(block)된다면 사용하려는 리소스에 접근할 수 있게 되거나 I/O 작업..
프로세스 간 통신 Part1 1. 개요 프로세스는 독립적인 주소 공간을 가지기 때문에 원칙적으로는 다른 프로세스의 주소 공간을 참조하는 것이 불가능하다. 따라서 운영체제에서는 서로 다른 프로세스들이 데이터를 주고 받을 수 있도록 프로세스 간의 자원 접근을 위한 매커니즘인 프로세스 간 통신(IPC, Inter-Process Communication)을 제공한다. 그리고 이 IPC 방식은 공유메모리 모델과 메시지 전달 모델 2가지 모델로 나누어 볼 수 있다. 공유 메모리 모델은 프로세스들이 주소 공간의 일부를 공유하고 해당 영역에 읽기/쓰기 작업을 통해서 통신한다. 그리고 메시지 전달 모델은 커널을 통해서 send와 receive 연산을 통해 데이터를 전송한다. 1.1. 공유 메모리 모델 개요 위의 이미지를 보면 서로 통신을 하려는 프..
프로세스와 쓰레드 1. 개요 운영체제 과목 수업을 들을 때 전체 내용에서 빠짐없이 등장하는 중요한 키워드를 골라보라고 한다면 프로세스와 쓰레드를 고를 수 있을 것 같다. 이번 포스트에서는 프로그램 실행을 제어하는 기본 개념임과 동시에 프로그램이 여러 작업을 동시에 실행할 수 있도록 허용하는 역할을 담당하는 프로세스와 쓰레드에 대해서 정리해보려고 한다. 2. 프로세스 노션이나 카카오톡과 같이 우리가 컴퓨터에 어떠한 프로그램을 설치할 때를 떠올려 보면 .exe라는 확장자가 붙은 파일을 항상 마주하게 된다. 이처럼 프로그램은 .exe와 같은 확장자를 가진 하나의 실행파일로 컴퓨터의 저장매체(하드디스크, SSD 등)에 존재하고 있다. 이 프로그램이 메모리에 올려지고, CPU에 의해 실행되는 것이 바로 프로세스이다. 즉, 프로그램..
이진 탐색 트리 1. 개요 트리(Tree) 는 추상 자료형으로 루트 값과 부모-자식 관계의 서브트리로 구성되어 있는 자기 참조(Self-Referential) 자료구조이다. 그리고 이진트리와 이진 탐색 트리는 트리 중에서도 가장 널리 사용되는 트리 자료구조이지, 트리 자체를 대변하는 것은 아니다. 이진 탐색 트리는 정렬된 트리로 다음의 조건을 만족해야 한다. 노드의 왼쪽 서브 트리에는 현재 노드의 값보다 작은 값을 가진 노드가 온다. 노드의 오른쪽 서브 트리에는 현재 노드의 값보다 큰 값을 가진 노드가 온다. 왼쪽과 오른쪽 서브 트리 모두 이진 탐색 트리여야 한다. 2. 이진 탐색 트리의 특징 이진 탐색 트리는 시간복잡도 측면에서 강점을 가지고 있다. 연산 시간복잡도(평균) 시간복잡도(최악) 삽입 $O(\log n)$ ..
정렬 알고리즘 1. 개요 프로그램을 작성할 때 빈번하게 사용되는 정렬은 어떤 데이터가 주어졌을 때 정해진 순서대로 나열하는 것을 말한다. 일반적으로 숫자라면 오름차순 또는 내림차순으로 정렬할 수 있고, 문자 또한 아스키코드에 해당되는 번호에 따라서 정렬이 가능하다. 정렬을 위한 알고리즘의 종류에는 다양한 알고리즘이 존재하고, 각 알고리즘은 서로 다른 성능을 가지고 있다. 이번 글에서는 대표적인 알고리즘에 대해서 알아보고, 최종적으로 어떤 알고리즘이 빠른지 확인해보고자 한다. 각 정렬 알고리즘 이미지 밑에 달아놓은 시각화자료 사이트로 이동해서 어떤 식으로 동작하는지 직접 확인한다면 훨씬 이해하기 편리하다. 2. Bubble sort 버블 정렬 시각화 자료 버블 정렬은 매우 단순한 정렬로 정렬 자체가 어떻게 동작하는지 쉽..
스택과 큐 이미지 출처: twitter - Greg Kyte, CPA 1. 개요 스택과 큐는 데이터 접근 방식을 설명하는 대표적인 자료구조이다. 즉, 자료구조가 코드로 정의된 것이 아니라 행동 양식이 정의되어 어떤 자료구조가 스택 또는 큐로 구분되기 위한 규칙에 해당한다. 이러한 것들을 다른 말로 추상적 자료구조(ADT, Abstract, Data Type)라고 부른다. 데이터를 입력하고 출력하는 그 순서에 따라서 스택과 큐가 구분되고, 이러한 특징을 적재적소에 활용하여 많은 실제 시스템 또는 서비스 등에 적용하고 있다. 이번 글에서는 스택과 큐에 대한 개념과 실제 구현까지 다루어보려고 한다. 2. 스택(Stack) 이미지 출처: Wikipedia - Stack 스택을 설명하는 한 단어를 선택하라고 한다면 바로 L..