디자인 패턴 관련한 엄청 좋은 사이트를 발견했다. 이제 여기 게시글을 한개씩 정리하면서 미뤄왔던 디자인 패턴 공부를 해봐야겠다. 💪🤔 👾singleton Singleton Real-World Analogy The government is an excellent example of the Singleton pattern. A country can have only one official government. Regardless of the personal identities of the individuals who form governments, the title, “The Government of X”, is a g refactoring.guru 📝한 줄 정리 어느 코드 영역에서든지 이 클래스에 대해 유..
쓰레드랑 다르게 서로 다른 프로세스는 기본적으로는 겹치는 address space도 없고 완전히 독자적이다. 서로 다른 프로세스의 함수를 호출할 수 없고, 메모리에 접근할 수 없다. 메모장 프로세스와 크롬 브라우저가 서로 완전 노터치 하듯이 심지어 fork로 생성한 부모-자식 프로세스 사이도 그러하다. 따라서 다른 프로세스가 협업을 하기 위해서는 IPC 구현체를 이용해야 한다. (프로세스들 간에 데이터 및 정보를 주고받기 위한 메커니즘. 커널에서 시스템 콜의 형태로 프로세스에게 제공된다.) * IPC 부분 참고한 강의 IPC 두가지 모델 (1) 메모리 공유 (shared memory) 서로 다른 프로세스가 함께 접근할 수 있는 메모리 영역을 설정해 줌. 공유 메모리 설정 이후에는 커널이 관여하지 않음. ..
일반적으로 웹 애플리케이션의 쓰레드 1개가 요청을 받았을 때 동작 방식은 위와 같다. 요청이 들어온 때부터 응답을 리턴해줄 때까지 하나의 스레드는 해당 요청의 작업만을 전담하여 수행한다. (blocking) 처리 중간에 데이터베이스 응답을 기다리거나, 다른 서버에서 api 응답을 기다리느라 cpu가 idle 한 상태이더라도 그 사이 다른 request를 처리하지 못한다. 1. multi-thread approach ( rails puma 서버 외 다수 ) 대부분의 서버 어플리케이션은 멀티스레드로 동작하기 때문에, 스레드 1개만 놓고 봤을때는 하나의 요청을 blocking 방식으로 처리함에도 불구하고 전체 서버 app(프로세스) 단위에서는 서로 다른 코드 부분 ( 예를 들어 session_controlle..
참고하기 : sidekiq wiki Sidekiq runs on 3 components The Rails Application Sidekiq worker process(es) => sidekiq 프로세스가 멀티쓰레드으로 돌면서 background에서 큐에 들은 worker/job 수행 Redis => 큐 Sidekiq handles concurrency by using multiple threads in its process. This way, it can process multiple jobs at once, each thread processing one job at a time. By default, Sidekiq uses 10 threads per process. You can configure ..
working with lists 1. 리스트 마지막 원소 let rec last = function |[] -> None |[x] -> Some x |h::t -> last t 2. 마지막 2개 원소 let rec last_two = function |[] |[_] -> None |[a; b] -> Some (a,b) |h::t -> last_two t 3. 리스트 n번째 원소 let rec at n = function |[] -> None |h::t -> if n>1 then at (n-1) t else Some h 4. 리스트 길이 let rec length = function |[] -> 0 |h::t -> 1 + length t (*tail recursive*) let length lst = l..
공식문서 : Scope functions 영역함수란? kotlin 표준 라이브러리가 제공하는 객체의 컨텍스트 안에서 코드 블럭을 실행할 목적으로 만든 함수. 구분 기준 (1) 객체 참조 방식 (블럭문 안에서) => this에 바인딩 (this 키워드 생략가능) vs lambda argument로 전달받기 (implicit default name인 it으로 쓰거나 custom name도 가능) (2) 리턴 값 => 람다식 결과 값 (계산된 값이 없으면 Unit 이든가) vs 객체 (체이닝 가능) + 확장함수 여부 => with는 다른 함수들처럼 (객체).apply { block } 이렇게 쓰지 않고 with(객체) {block} 이렇게 context 객체를 람다식에 argument로 전달한다. 그래서 종류..
참고한 글 보니까 저자가 rabbitmq 코어팀에서 일하는 사람인 것 같다. 그래서 카프카보다 rabbitmq 장점을 강조해서 말하는 것 같긴 한데, 글 퀄리티가 좋았다. Event-Driven Architectures - The Queue vs The Log Event-Driven Architectures - Queue vs Log - A case study 다른 읽어보면 좋은 글 RabbitMQ vs Kafka Part1 - Two Different Takes on Messaging rabbitmq vs kafka 😎 Queue based => RabbitMQ, ActiveMQ, MSMQ, AWS SQS, JMQ and many more. Log based => Apache Kakfa, Apache ..