본문 바로가기

전체 글333

DDD - Side effect free function - 출처: 도메인 주도 설계 - 에릭 에반스 - 연산과 함수 연산은 명령(command, modification)과 질의(query)로 나눌 수 있다. 명령(command, modification): 변수값을 변경해서 시스템의 상태를 변경 질의(query): 변수안에 저장된 데이터에 접근하고, 저장된 데이터를 기반으로 계산을 수행 함수는 부수효과를 일으키지 않고 결과를 반환하는 연산이다. 여러번 호출 해도 무방하며 매번 동일한 값을 반환한다. - 명령과 질의의 분리 명령과 질의는 서로 엄격하게 다른 연산으로 분리해야 한다. 변경을 발생시키는 메서드는 도메인 데이터를 반환하지 않고 단순하게 유지해야 한다. 또는 명령과 질의를 분리하는 대신 연산의 결과를 표현하는 새로운 VO(Value-Object)를 생성.. 2022. 10. 22.
Kubernetes - Service intro - 출처: Kubernetes in action - 서비스 시스템을 마이크로 서비스로 구성하기로 했다면 파드가 통신하는 유형은 대게 아래 2가지 경우에 해당할것이다. 클러스터 내부의 다른 파드에서 오는 HTTP 요청에 응답 클러스터 외부 클라이언트에서 오는 HTTP 요청에 응답 만약 쿠버네티스를 사용하지 않는 상황에서 다른 서비스를 이용할때 보통은 환경설정 파일에 IP나 Host 이름을 설정하는 방식으로 사용한다. 하지만 쿠버네티스는 이런 방식으로 사용할 수 없는데 그 이유는 아래와 같다. 파드는 일시적이다. IP 주소 할당 시점이 노드에 파드를 스케줄링한 후 파드가 시작되기 바로 전이라 미리 알수 없다. 쿠버네티스는 수평 스케일링을 제공한다. 이 의미는 파드수와 IP에 상관없이 여러 파드가 동일한 서비.. 2022. 10. 21.
Kubernetes - job and cron job - 출처: Kubernetes in action - 잡 리소스 레플리케이션 컨트롤러, 레플리카셋, 데몬셋은 지속적인 Task를 실행하므로 이런 종류로 생성한 리소스들의 파드들은 프로세스가 종료되면 다시 시작된다. 하지만 완료 가능한 Task 같이 프로세스 종료 후 재시작 하지 않는 유형도 고려해볼 수 있다. 쿠버네티스에서는 잡 리소스라는것으로 이런 작업 유형을 지원한다. 잡은 파드 내부의 컨테이너에서 실행중인 프로세스가 성공적으로 완료했다고 판단되면 컨테이너를 다시 시작하지 않는 파드를 실행핸다. 노드에 장애가 발생하면 잡이 관리하는 파드는 레플리카셋 파드와 동일하게 다른 노드로 스케줄링 된다. 만약 프로세스 자체적으로 장애가 있다면 설정에 따라 재시작할 것인지를 설정할 수 있다. 잡 리소스의 예로는 데.. 2022. 10. 21.
Go - pipelines and cancellation - 출처: https://go.dev/blog/pipelines - 개요 Go 언어는 동시성을 잘 지원하는 언어라서 I/O나 CPU를 효율적으로 사용하는 스트리밍 데이터 파이프라인 구축이 수월하다. 하지만 파이프라인을 구축하다보면 인지하거나 처리하기 어려운 오류 혹은 미묘한 부분이 발생할 수 있는데 이를 자세히 알아보고 어떻게 깔끔하게 처리 하는지 알아본다. - 파이프라인이란? 공식적인 정의는 없지만 비공식적으로는 채널에 의해 연결되는 단계(Stage) 들이 연속적으로 연결된것이라고 할 수 있다. 각 단계에서 고루틴은 아래와 같은 동작을 취한다. inbound 채널을 통해 upstream 으로 부터 값들을 수신한다. 해당 데이터에 대해 일부기능을 수행하는데 일반적으로는 데이터를 생성하는 행위이다. out.. 2022. 10. 21.
Kubernetes - ReplicaSet, DaemonSet - 출처: Kubernetes in action - 레플리카 셋 초기에는 레플리케이션 컨트롤러(이하 "rc") 만이 파드를 복제하고 노드에 장애가 발생하면 재 스케줄링 하는 유일한 쿠버네티스 구성요소였다. 이후 등장한 레플리카 셋은 차세대 구성요소이며, rc는 사장될 예정이다. 현재 쿠버네티스 rc 문서(https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/) 에서도 레플리케이션을 세팅할 때는 디플로이먼트를 사용할것을 권고하고 있다. rc와 레플리카셋은 거의 동일해서 하나만 알면 다른 하나를 사용하는데 무리가 없다. 일반적으로 레플리카셋 리소스를 직접 생성 하지는 않으며 상위 수준의 디플로이먼트 리소스를 이용한다. .. 2022. 10. 14.
Kubernetes - Replication controller - 출처: Kubernetes in action - 레플리케이션 컨트롤러 레플리케이션 컨트롤러(이하 "rc")는 쿠버네티스 리소스이며 파드가 항상 실행되도록 보장해준다. 어떤 워커노드가 다운 되거나 워커 노드 내에서 파드가 사라지면 감지해서 교체 파드를 생성한다. 직접 생성한 파드 A와 rc에 의해 생성된 파드 B가 같은 워커 노드에 있을 때 노드가 다운 된다면 파드 A는 유실되지만 파드 B는 rc에 의해 관리되기 때문에 새로 생성된다. - rc의 동작 rc는 실행중인 파드 목록을 모니터링해서 "특정" 유형의 파드수가 설정한 파드 수와 일치하는지를 확인한다. 모니터링해서 파드 수가 모자라면 신규 파드를 생성하며 파드가 많아지면 제거한다. 파드수가 모자라는 상황은 이해가 가는데 어떻게 파드가 많아질 수 있.. 2022. 10. 11.