모노리틱 타임(monolithic time)이라고 들어 보셨나요? 컴퓨터에서 시간을 다루는 단위는 여러 가지가 있고, 프로그래밍 함수도 정말 다양합니다(epoch, clock, tick, gnu 등). 그런데 모노리틱 시간이라는 것과 리얼타임 시간이라는 얘기가 나올 때도 있습니다. 모노토닉 시간과의 차이는 무엇일까요?
모노토닉 타임(monotonic time)이란?
우선 모노토닉 타임부터 알아봅시다.
Time::Monotonic은 다양한 플랫폼(Mac OS X, Windows 및 POSIX)에서 단조 시계에 대한 액세스를 제공합니다. 단조로운 시계는 앞으로 또는 뒤로 점프하지 않는 시간 소스입니다(NTP 또는 일광 절약 시간 업데이트로 인해).
즉 컴퓨터가 시작한 이후 일정하게 흐르기 때문에, 동기화나 타이머 처리에서 안정적으로 신뢰할 수 있는 시간 함수입니다.
예를 들어 특정 시간 동안 뮤텍스를 대기하기 위해 위해 timeout을 걸었는데, 갑자기 시스템 시간이 과거로 점프하거나 미래로 점프하면 어떻게 될까요? 무한정 대기하거나, 아예 대기하지 않는 현상이 나타나서, 프로그램 버그가 되겠지요. 그래서 모노토닉 타임이 필요한 것입니다.
모노토닉과 리얼 타임과의 차이
모노토닉 타임을 얘기할 때, 리얼타임(실시간)과의 차이로 많이 비교합니다. 위에서 시간이 갑자기 점프하는 문제를 말했는데, 리얼타임은 이런 문제가 있는 거죠. 그럼 리얼타임은 왜 사용할까요?
리얼 타임(CLOCK_REALTIME)
이 시계는 시스템의 실시간 측정 시계를 나타냅니다. 이 시계의 경우 clock_gettime()이 반환하고 clock_settime()이 지정한 값은 Epoch 이후의 시간(초 및 나노초)을 나타냅니다.
실시간 시간이기 때문에 현실 세계의 시간과 계속적으로 동기화됩니다. 컴퓨터에서 윈도우즈 OS를 보면 서버와 동기화를 통해 시간을 맞추는 것을 볼 수 있죠. 또 자동차 내비게이션 시스템의 경우 GPS 위성 신호를 받아들여서 시간을 맞춥니다.
모노토닉 타임 / 단조 시간(CLOCK_MONOTONIC)
이 시계의 경우 clock_gettime()이 반환하는 값은 과거의 지정되지 않은 시점(예: 시스템 시작 시간 또는 Epoch) 이후의 시간(초 및 나노초)을 나타냅니다. 이 점은 시스템 시작 시간 이후에 변경되지 않습니다. CLOCK_MONOTONIC 시계의 값은 clock_settime()을 통해 설정할 수 없습니다.
모노토닉과 리얼타임을 가져오는 소스코드 예제
아래 소스코드에서 각 시간을 가져오는 소스코드를 보실 수 있고, 가져다 사용하실 수 있습니다.
#include <stddef.h>
#include <stdio.h>
#include <time.h>
#include <sys/sysinfo.h>
int main(void) {
/* get uptime in seconds */
struct sysinfo info;
sysinfo(&info);
/* calculate boot time in seconds since the Epoch */
const time_t boottime = time(NULL) - info.uptime;
/* get monotonic clock time */
struct timespec monotime;
clock_gettime(CLOCK_MONOTONIC, &monotime);
/* calculate current time in seconds since the Epoch */
time_t curtime = boottime + monotime.tv_sec;
/* get realtime clock time for comparison */
struct timespec realtime;
clock_gettime(CLOCK_REALTIME, &realtime);
printf("Boot time = %s", ctime(&boottime));
printf("Current time = %s", ctime(&curtime));
printf("Real Time = %s", ctime(&realtime.tv_sec));
return 0;
}
모노리틱 타임(monolithic time)이란? 모노리틱 아키텍처(Monolithic Architecture)!
사실 모노리틱 타임이란 컴퓨터 용어는 없습니다. 이것은 단순 오해에서 온 것이고, 모노리틱 아키텍처라는 용어가 사용됩니다.
모노리틱 아키텍처(Monolithic Architecture)는 마이크로서비스 아키텍처 서비스와 비교해서 이해할 수 있습니다.
모노리틱(Monolithic) 아키텍처
모노리틱 아키텍처는 단일 시스템으로 기존의 전통적인 웹 시스템 개발 스타일입니다. 쉽게 말해 하나의 애플리케이션 내에 모든 로직들이 모두 들어 가 있는 구조입니다. 전통적인 방식이고 단순하지만 문제점이 많기 대문에 마이크로서비스 아키텍처기 나오게 되었습니다.
마이크로서비스 아키텍처(Microservices architecture; MSA)
모노리틱 아키텍처의 대부분의 단점은 애플리케이션의 규모가 커지면서 발생합니다.
마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처입니다. 기존의 단일 시스템을 서비스 단위로 나누고 분리하는 개념의 아키텍처라고 할 수 있습니다.
마이크로서비스 아키텍처는 기존에 없다가 갑자기 등장한 개념은 아닙니다. 기존의 CBD, SOA로부터 이어온 개념으로 모든 기술들이 그렇듯이 개념에 새로운 기술요소들이 융합되어 현재 우리가 가지고 있는 문제점들을 해결하기 위한 방법으로 등장하고 있습니다. 하나의 서비스에서 처리하는 규모가 작기 때문에 이를 마이크로 서비스라고 부릅니다.
'개발일기 > 설계와디자인' 카테고리의 다른 글
최고의 무료 CAD(캐드) 소프트웨어/프로그램 10개 - 업무용, 스터디용 (0) | 2023.02.25 |
---|---|
일론 머스크에게서 배우는 설계와 개발의 원칙들 (0) | 2022.02.27 |
const_iterator와 iterator의 차이점? 성능 차이는? (0) | 2021.11.09 |
댓글