본문 바로가기

Concepts119

Process API - 출처: Operating System - Three Easy Pieces - 개요UNIX 시스템은 fork()와 exec() system call 을 통해 process를 생성한다. 또한 wait() 을 사용하면 process 를 대기할 수도 있다. 이와 관련된 실질적인 예제를 더 자세히 살펴보면서 실제 이런 system call 들이 어떤 방식으로 사용되는지 감을 익혀보자.- fork() system callfork() system call 은 새로운 process를 생성하는데 사용된다. #include #include #include int main(int argc, char *argv[]) { printf("hello world (pid:%d)\n", (int) getpid()); i.. 2024. 5. 15.
Process Abstraction - 출처: Operating System - Three Easy Pieces- 개요Process 란 무엇인가? 한마디로 정의하기에는 너무나 중요하고 복잡하지만 그중 가장 간단하고 직관적인 정의는 "프로그램 을 실행하는것"이다. 프로그램 자체는 생명주기를 갖지 않는다. 프로그램은 저장 장치(ex - Disk)에 존재하는데, 사용자가 실행하면 OS는 이를 가져와서 실행한다. 우리는 프로그램을 1개만 실행하지 않는다. 웹 브라우저를 켜놓고 게임을 하면서 음악을 듣는다. 시스템은 어느 CPU가 여유가 있어서 사용가능한지 신경쓰지 않는다. 이렇게 CPU 보다 많은 프로그램을 실행할 수 있는것은 OS가 CPU 가상화를 제공해서 가능하다.어떻게 CPU 가상화를 하길래 이런 상황이 가능한가? 여러 기술이 있겠지만 하나.. 2024. 5. 5.
Introduction OS - 출처: Operating Systems - Three Easy Pieces개요Program을 실행한다는 것은 무엇인가? 많은 정의가 있을 수 있지만 그중 가장 직관적인 정의를 꼽으라면 "명령어를 수행하는것"이라고 할 수 있을것이다. OS는 Program을 수행할 때 다음과 같은 과정을 수행한다.Processor가 Memory로 부터 명령어(instruction)을 가져온다.이를 해석(decode)하고 실행(execute)한다.위 과정을 반복한다.OS의 가장 근본적인 책임은 많은 application 을 동시에 잘 수행될 수 있도록 하는것이다. 컴퓨터의 1 application이 1개의 memory만 점유하는것이 아니라 여러 개의 application이 memory를 공유한다. 또한 applicatio.. 2024. 5. 3.
Sharding - 개요 개발자가 샤딩이라는 용어를 접할 수 있는 가장 일반적인 분야는 DB인것 같다. DB 장비(instance) 1대가 감당할 수 있는 수준을 넘어서는 규모의 데이터를 처리해본적이 있다면 샤딩이라는 단어를 들어봤을것이다. 샤딩을 적용하면 전체 데이터가 여러 대의 장비로 분산되며, 이에 따라 자연스럽게 1대의 DB 서버가 받는 부하도 분산된다. 그런데 샤딩이 꼭 DB에만 샤딩이 적용되는것은 아니다. 공유 데이터에 대한 쓰기나 읽기 락 경합을 완화하기 위해 사용되기도 한다. Golang 에서 Map 을 사용한다고 가정해보자. 어떤 데이터를 DB로 부터 조회한 후, Map에 취합한다. 그런데 데이터가 커짐에 따라 속도가 생각만큼 나오질 않아 goroutine을 생성하고 취합을 빠르게 하려고 한다. CPU를.. 2024. 1. 13.
Fan-out, Fan-in - 출처: https://go.dev/blog/pipelines Go Concurrency Patterns: Pipelines and cancellation - The Go Programming Language Go Concurrency Patterns: Pipelines and cancellation Sameer Ajmani 13 March 2014 Introduction Go’s concurrency primitives make it easy to construct streaming data pipelines that make efficient use of I/O and multiple CPUs. This article presents examples o go.dev - 개요 Fan-out은 하나의 .. 2023. 11. 12.
Timeout - 개요 Timeout은 예상되는 시간내에 결과를 받지 못할 경우 오류 상황으로 간주하는 패턴이다. 사실 설명이 필요할까 싶을 정도로 널리 그리고 거의 필수적으로 사용되는 패턴이다. 하지만 그렇다고해서 중요하지 않은것은 아니다. 서비스들이 연쇄적으로 호출관계를 가질 때, timeout을 적용하지 않는다면 하나의 서비스만 장애가 나도 이를 연쇄적으로 호출했던 서비스들은 무한대기를 하게된다. 이때 timeout을 적용하면 하나의 서비스 장애가 전체 시스템 장애가 되는 상황을 방지할 수 있다. - Golang example 간단한 패턴인만큼 곧바로 golang 예제를 살펴보자. 사실 golang 에서는 첫번째 인자로 권장하는 context.Context 덕분에 구현이 굉장히 용이한편이다. func TestTi.. 2023. 11. 11.
Throttling - 출처: https://learn.microsoft.com/en-us/azure/architecture/patterns/throttling Throttling pattern - Azure Architecture Center Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service. learn.microsoft.com - 개요 어플리케이션 인스턴스, 개인 테넌트나 전체 서비스에 의해 사용되는 자원의 소비량을 제어한다. 리소스에 로드가 많이 걸리는 상황에서도 시스템이 계속해서 동작하고 서비스 수준 계약을 충족하도록 해준다. - Context and pr.. 2023. 11. 4.
Retry - 출처: https://learn.microsoft.com/en-us/azure/architecture/patterns/retry Retry pattern - Azure Architecture Center Learn how to use the Retry pattern to enable an application to handle anticipated, temporary failures when the app tries to connect to a service or network resource. learn.microsoft.com - 개요 Application이 서비스나 네트워크 리소스에 접속할 때, 실패한 연산을 재시도 함으로써 일시적인 오류를 다룰 수 잇게 해주는 패턴이다. Application의.. 2023. 10. 31.
Debounce - 출처: 클라우드 네이티브 패턴 - 개요 Debounce는 함수 호출 빈도를 제한하여 여러 번 호출 발생시 처음이나 마지막 호출만 동작하도록 하는 패턴이다. - Context and Problem 시스템의 작업중에서는 속도가 느리고 비용이 많이 드는 작업이 존재한다. 이런 유사한 작업이 연속적으로 여러 번 발생할때마다 서버가 요청을 처리하면 무거운 작업을 계속 수행해야 한다. - Solution Front-end 개발을 해본적이 있다면 Debounce나 Throttle이라는 용어가 익숙할것이다. 가장 대표적인 예제가 자동완성검색이다. 이를 구현할 때 검색창에 입력 이벤트가 발생할때마다 요청을 서버로 보내면, 서버의 부하가 많이 걸릴 수 있다. 그래서 Debounce 패턴을 이용하여 일정 기간내의 마지막.. 2023. 10. 30.
Circuit Breaker 출처: https://learn.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker Circuit Breaker pattern - Azure Architecture Center Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource. learn.microsoft.com - 개요 Circuit Breaker는 원격 서비스나 자원에 접근할 때 오류가 발생하는 경우 복구에 어느 정도 시간이 걸리는지 알 수 없는데, 이런 경우를 다루는데 유용한 패턴이다. Application의 안정성과 탄력성을 향상 시킨다... 2023. 10. 27.