목록Tech (20)
포도가게의 개발일지
하이퍼 바이저 - 가상 머신 모니터라고도 하는 하이퍼바이저는 가상 머신(VM)을 생성하고 실행하는 프로세스입니다. vs 컨테이너 런타임 저수준 런타임 namespace와 cgroup를 이용하여 컨테이너 자체를 만드는 일을 한다. 대표적인 저수준 런타임으로 runc가 있다 이미지로부터 컨테이너를 실행하는 기능은 없다. 고수준 런타임 저수준 런타임 위에 배치되어 이미지로부터 컨테이너를 실행할 수 있다. 대표적으로 containerd, cri-o등이 고수준 컨테이너 런타임이다. docker docker의 경우 docker-containerd라는 고수준 런타임과 docker-runc라는 저수준 런타임을 이용하여 제공한다. docker가 기존에 가지고 있던 컨테이너 daemonm으로써의 기능을 containerd..
virt 43.635, res 0.014t 근데 cpu사용률 왤케 높지? 음.. 현재 datadog에서 항상 죽을때 log가 4k이상 쌓이는걸 볼 수 있다. 음 main container 메모리는 하드 리밋이 걸어놓은대로 잘 걸려있다. 이에 반해 logrouter가 메모리 리밋이 걸려있지 않네..? 문제가 생길 수 있을 것 같은데.. 높은 확률로 문제가 되어 보인다. 우선 infer server에 리밋을 좀더 13gib로 할당이 필요해보이고 logrouter에도 추가적인 hardlimit 조치가 필요해보인다.
https://semaphoreci.com/blog/what-is-monorepo What is monorepo? (and should you use it?) - Semaphore Monorepos can foster rapid development workflows. In this post, we’ll examine if they are the right fit for you and your company. semaphoreci.com 우선 대형 모노레포를 운영하는 회사로 Google, MS, Facebook, Twitter가 잘 알려져있다. Monorepo : 다양한 project들을 하나의 repository에서 통합하여 관리 Multirepo : 각각의 project들을 각각의 repository..
책임 할당하기 객체에 책임을 할당하는 기본적인 원리 데이터보다 행동을 먼저 결정해라(인터페이스를 먼저 작성하라고 생각됨: 뒤에서 잘못됬다고 느낌 인터페이스를 쓰라는게 아니라 메세지를 먼저 작성해라라고 본다) -> 객체에게 중요한것은 데이터가 아니라 외부에 제공하는 행동이다. 클라이언트 관점에서 객체가 수행하는 행동이란 곧 객체의 책임을 의미한다. 협력이라는 문맥 안에서 책임을 결정해라 메시지를 전송하는 클라이언트 의도에 적합한 책임을 할당해야 한다.(메서드 써놓고 이건 누가 가져가야하지? 즉 문맥을 먼저 작성하고 각책임을 할당해줘라라고 이해된다.) 메세지가 객체를 선택하게 해야 한다.("메세지를 전송해야 하는데 누구에게 전송하지?") 데이터 중심으로 작성하게 되면 캡슐화를 신경쓰면서 해야됨 누굴 인터페이..
설계 품질과 트레이드오프 역할은 책임의 집합이기 때문에(나는 해당역할에 여러 객체들이 교체될 수 있어 각 객체들의 추상화가 책임인줄알았는데..?) 설계는 변경을 위해 존재하고 변경에는 어떤 식으로든 비용이 발생한다. 훌륭한 설계는 합리적인 비용안에서 변경을 수용할 수 있는 구조를 만드는 것이다. 객체의 상태가 아닌 행동에 초점을 맞춰라? 데이터 중심의 관점에서 객체는 자신이 포함하고 있는 데이터를 조작하는데 필요한 오퍼레이션을 정의한다. 책임 중심의 관점에서 객체는 다른 객체가 요청할 수 있는 오퍼레이션을 위해 필요한 상태를 보관한다. 캡슐화 상태와 행동을 하나의 객체 안에 모으는 이유는 객체의 내부 구현을 외부로부터 감추기 위해서다. 여기서 구현이란 나중에 변경될 가능성이 높은 어떤 것을 가리킨다. 객..
책: 테스트 주도 개발 시작하기 chapter1. 저자가 TDD 도입전 개발했던 방식 ( 현재의 나와 같다. ) 1. 만들 기능에 대해 설계를 고민, 어떤 클래스나 인터페이스를 도출할지 고민하고 각 타입에 어떤 메서드를 넣을지 시간을 들여 생각 2. 과정 1을 수행하면서 구현에 대해서 고민, 대략 어떻게 구현하면 될지 머릿속에 그림 3. 기능에 대한 구현을 완료할 것 같으면 기능을 테스트 한다. 이 과정에서 원하는 대로 동작하지 않거나 문제가 발생하면 과정2에서 작성한 코드를 디버깅하면서 원인을 찾는다. 저자는 TDD가 더 나은 코드를 다 빠르게 개발하는데 도움이 된다고 한다. TDD로 개발할 대 먼저 해야할 것은 기능을 검증하는 테스트 코드를 작성하는 것이다. TDD를 처음에 익히기 위해 작은 단계를 ..
객체지향에서 제일 중요한것은 역할 책임 협력이다. 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력이라 부른다. 객체가 협력에 참여하기 위해 수행하는 로직을 책임이라 부른다. 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다. 객체지향 시스템은 자율적인 객체들의 공통체다.!! 객체는 고립된 존재가 아니라 기능이라는 더 큰목표를 달성하기 위한 사회적인 집단이다!! 책임주도설계 1. 시스템이 사용자에게 제공해야하는 기능인 시스템 책임을 파악한다. 2. 시스템 책임을 더 작은 책임으로 분류한다. 3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다. 4. 객체가 책임을 수행하는 도중 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 ..
chap 2 영화 - 영화에 대한 기본 정보를 표현한다. 상영 - 실제로 관객들이 영화를 관람하는 사건을 표현한다. 사용자가 실제로 예매하는 대상은 영화가 아니라 상영이다. 할인정책(금액할인, 비율할인)하나만 적용가능하며 할인 조건은 여러개 적용가능 협력, 객체, 클래스 - 대부분의 사람은 클래스를 결정한 후에 클래스에 어떤 속성과 메서드가 필요한지 고민한다. 안타깝게도 객체지향의 본직과는 거리가 멀다. 진정한 객체지향의 패러다임으로의 전환은 클래스가 아닌 객체에 초점을 맞출 때에만 얻을 수 있다. 첫째, 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라. 클래스는 공통적인 상태와 행동을 공하는 객체들을 추상화 한것이다. 즉 클래스의 윤곽을 잡기 위해서는 어떤 객체들이 어떤 상태와 ..