CS(27)
-
네이티브 코드(Native Code)
네이티브 코드(Native code)는 특정 컴퓨터 아키텍처에서 직접 실행 가능한 기계어 코드를 말합니다. 일반적으로, 프로그래밍 언어로 작성한 코드는 인터프리터나 JIT 컴파일러 등의 도구를 통해 중간 언어로 번역되고, 이후에 실행됩니다. 이와 달리, 네이티브 코드는 기계어로 직접 변환되어 하드웨어에서 직접 실행됩니다. 네이티브 코드는 컴파일러를 통해 생성됩니다. 일반적으로 프로그래밍 언어로 작성된 소스 코드는 컴파일러에 의해 기계어로 변환됩니다. 이때 생성된 코드는 특정 컴퓨터 아키텍처에서 직접 실행 가능한 형태의 네이티브 코드가 됩니다. 네이티브 코드는 프로그램의 실행 속도가 빠르고 하드웨어 자원을 효율적으로 활용할 수 있어서, 많은 소프트웨어 개발에 있어서 중요한 역할을 합니다. 특히 게임이나 고..
2023.03.09 -
세마포어(Semaphore)
세마포어(Semaphore)는 상호 배제(Mutual Exclusion)를 비롯한 동기화 기능을 제공하는 동기화 기법 중 하나입니다. 세마포어는 공유 자원에 대한 접근을 여러 스레드 또는 프로세스가 동시에 시도하는 상황에서, 공유 자원에 대한 접근을 조절하고 동기화하는 기능을 제공합니다. 세마포어는 다음과 같은 특징을 가지고 있습니다. 세마포어 값에 따른 접근 권한 부여: 세마포어는 정수 값으로 구성되어 있으며, 이 값은 공유 자원에 대한 접근 권한을 부여하는데 사용됩니다. 세마포어 값이 0인 경우, 공유 자원에 대한 접근이 불가능합니다. 락(lock)과 언락(unlock) 연산: 세마포어는 락(lock)과 언락(unlock) 연산을 제공합니다. 락 연산은 세마포어 값이 1 이상이면 값을 1 감소시키고,..
2023.03.09 -
뮤텍스(Mutex)
뮤텍스(Mutex)는 상호 배제(Mutual Exclusion)를 위한 동기화 기법 중 하나입니다. 뮤텍스는 공유 자원에 대한 접근을 여러 스레드가 동시에 시도하는 상황에서, 오직 하나의 스레드만 공유 자원에 접근하도록 제어하는 기능을 제공합니다. 뮤텍스는 다음과 같은 특징을 가지고 있습니다. 이진 세마포어(Binary Semaphore)로 구현: 뮤텍스는 이진 세마포어를 사용하여 구현됩니다. 이진 세마포어는 값이 0 또는 1인 세마포어로, 뮤텍스에서는 락(lock)과 언락(unlock) 연산을 사용하여 상호 배제를 수행합니다. 한 번에 하나의 스레드만 락을 획득 가능: 뮤텍스는 오직 하나의 스레드만 락을 획득할 수 있습니다. 락을 획득한 스레드는 공유 자원에 대한 접근 권한을 가지며, 락을 획득하지 못..
2023.03.09 -
프로세스(Process)
프로세스(Process)는 컴퓨터에서 실행 중인 프로그램을 의미합니다. 프로세스는 운영체제(OS)에서 실행되며, 각각 독립적인 메모리 공간을 가지고, 프로세스 간에는 메모리 공유가 일어나지 않습니다. 프로세스는 프로그램 실행 시 운영체제로부터 자원을 할당받으며, 이 자원은 프로세스가 실행되는 동안에만 유효합니다. 자원에는 CPU 시간, 메모리 공간, 파일 핸들러 등이 포함됩니다. 프로세스는 다음과 같은 특징을 가지고 있습니다. 독립적인 메모리 공간: 각 프로세스는 독립적인 메모리 공간을 가지므로, 프로세스 간에는 메모리 공유가 일어나지 않습니다. 자원 할당: 운영체제로부터 자원을 할당받아 사용하며, 자원은 프로세스가 실행되는 동안에만 유효합니다. 스케줄링: 운영체제는 CPU 시간을 할당받은 프로세스에게 ..
2023.03.09 -
스레드(Thread)
스레드(Thread)는 컴퓨터 프로그램의 실행 흐름의 기본 단위입니다. 일반적으로 한 프로그램은 하나의 실행 흐름(메인 스레드)으로 실행되지만, 스레드를 사용하면 여러 개의 실행 흐름을 만들어서 동시에 실행할 수 있습니다. 스레드를 사용하면 프로그램의 성능을 향상시키고, 더 많은 작업을 동시에 처리할 수 있습니다. 예를 들어, 웹 브라우저에서 여러 개의 탭을 열고 각각의 탭에서 웹 페이지를 로드하는 동작을 생각해보면, 이는 각 탭마다 별도의 스레드를 생성하여 실행함으로써 가능해집니다. 스레드는 프로세스 내에서 독립적으로 실행되는 하나의 작업 단위로, 각 스레드는 독립된 스택과 레지스터 값을 가집니다. 스레드는 다른 스레드와 공유하는 메모리를 가지므로, 스레드 간의 데이터 공유와 동기화 문제를 해결하기 위..
2023.03.09 -
Docker Compose VS Kubernetes
단일서버 MSA에서는 Docker Compose를 사용하고 다중서버 MSA에서는 Kubernetes를 사용한다고 이해하고 있었다. 이번에는 그 배포 둘을 비교해서 한번 설명을 해보고자 한다. Docker Compose는 단일 호스트에서 여러 개의 컨테이너를 관리하는 도구로, 컨테이너 간의 연결 및 의존성을 설정하고, 배포를 위한 파일로 docker-compose.yml 파일을 사용합니다. 반면에 Kubernetes는 여러 대의 서버(노드)에서 클러스터를 구성하여 컨테이너를 관리하는 컨테이너 오케스트레이션 도구로, 노드 간의 로드 밸런싱, 스케일링, 로깅, 모니터링 등 다양한 기능을 제공합니다. Docker Compose는 로컬 환경에서 단일 호스트에서 실행되는 컨테이너를 관리하며, Kubernetes는 ..
2023.02.27