본문 바로가기

분류 전체보기324

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.
볶음밥 - 출처: 백종원 볶음밥: https://www.youtube.com/watch?v=kR77WlHRZrs - 출처: 여경옥 볶음밥: https://www.youtube.com/watch?v=jS4Fy17Fsdk - 출처: 여경래 볶음밥: https://www.youtube.com/watch?v=qFUP_XTvJjo - 출처: 이연복 볶음밥: https://www.youtube.com/watch?v=kCcHAeOiaRI - 재료 밥 1공기, 대파, 달걀 2개, 식용유 4큰술, 진간장 1/2 큰술, MSG 1/4 큰술, 맛소금 1g(1/8) - 요리하기 전에 밥은 반드시 수분이 없는 밥으로 해야한다. 물론 취향차이는 존재하지만 일반적으로 생각하는 볶음밥은 고슬고슬하고 물기가 없는 볶음밥이고 내 취향은 물기가.. 2023. 11. 6.
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.
티본 스테이크 기본적으로는 승우아빠의 궁금해요리의 스테이크편을 참조한것입니다. 재료를 최대한 간단하게 하고 내 입맛에 맞게 조정한것입니다. - 재료 필수: 티본 스테이크, 식용유 or 포도씨유, 소금 추가: 버터 - 요리 시작전에 뼈모양 T자를 기준으로 등심, 안심이 붙어있을텐데 두 부위의 굽는 시간을 다르게 (안심이 기름기가 적으므로 등심보다 덜 구워야 한다.)해야하므로 붙은 상태로 구우면 까다롭다. 칼로 고기를 뼈에서 도려낸다. 스테이크에 소금을 치고 1시간 정도 냉장고에 넣어놔야 한다. 이때 봉투나 랩으로 밀봉해서 넣어놓는것이 아니라 그냥 소금을 뿌린채로 넣어놓아 1시간 뒤 꺼냈을 때 겉 표면의 물기가 다 말라야 한다. 고기는 기본적으로 30초마다 뒤집어야 하므로 타이머나 스마트폰을 사용해야함을 인지한다. - 요.. 2023. 11. 1.
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.