목록전체 글 (191)
포도가게의 개발일지
### __proto__와 prototype property- __proto__와 prototype 프로퍼티는 동일한것을 가리킬 수 있지만 사용 주체가 다릅니다.- __proto__는 모든 객체가 가지고있으며 [[Prototype]] 내부 슬롯에 직접 접근을 할 수 있기 때문에 참조 접근하기 위하여 즉 객체가 자신의 prototype에 접근 또는 수정하기 위해서 사용되는 프로퍼티 입니다.- prototype 프로퍼티는 생성자(constructor)만 가지고 있으며 생성자 함수가 자신이 생성할 객체에 어떤 프로토타입을 할당해야하는지를 저장하기위한 목적으로 사용됩니다. ### 생성자 함수와 Prototype생성자 함수에 매번 method를 만들게 되면 중복되는 code가 매번생성되며 memory를 낭비하게..
Strategy for Gitops현재 terraform을 branch를 통해 환경을 나누고 있었고, 괜찮은 결정이었다고 생각, 가장 큰 이유는 코드 base가 동일하며 terraform에 경우 workspace 단위로 나눌 수 있기 때문이라고도 생각이 들었다.하지만 동일한 code base로 인해 선언적인 명령에서 점점 멀어지게 되었고, code 관리 및 git branch 관리가 불편해진 경험을 다수 느낄 수 있었습니다.gitops에 해당 전략을 적용해볼려고 자료를 조사해본결과 꽤 큰 도전적인것들이 있었습니다. 그 중에서는 git에서 환경에 따라 value를 어떻게 분리 할 것 이며, kustomize를 이용해서 분리된 value를 변경할 것 인가 라는 도전적인 부분이 있었습니다.하지만 YAML은 구..
AWS EKS IRSA 동작 결국 k8s에는 role을 service account를 주어 pod이 k8s resource에 대한 접근권한을 얻는 방식이다. 그럼 k8s의 pod들은 aws resource에 대한 접근권한을 어떻게 얻을까? 첫번째 node에 iam role을 주어 pod이 자동으로 사용한다. 두번째 iam user의 access key를 pod에서 직접 사용한다. 세번째 AWS IRSA(IAM Role for Service Account)를 사용한다. 우선 pod이 어떻게 aws resource에 접근할까? 전달 받은 jwt(id token)과 arn을 이용하여 STS를 통해 정책 및 trust relation(role의 사용가능여부)을 확인한다. jwt(id token)를 발급해준 ID..
개방폐쇄 원칙 - 어떻게 왜 언제 발생하는지에 따라서 기능을 분리하고 저수준 컴포넌트에서 발생한 변경으로부터 고수준 컴포넌트를 보호할수있다. 음.. 오랜만에 생각해보니까코드를 변경으로부터 보호하고 추가로확장한다도 있지만 책임역할의 구체적 변경이 협력에 영향을 주지않는다고 생각되는것을 까먹고있었네 그럼 최고 보호되어야하는얘는 협력 음 맞는듯.. 극은 진행되어야한다! 리스코프예전에는 import 의존성까지는 고려하지않았는데 이제 서브타입을 import하는것도 의존성이 생겼다는것을 알았다. lsp는 아키텍처수준까지 확장할수있고 반드시 확장해야한다. 후후 worker에 이미 적용했습니다. 인터페이스분리법칙오 오히려 동적타입언어가 결합도를 낮춰 유연하게 만들수있다는 관점이 신기하네요. import도 .interf..
세가지 패러다임 - 객체지향과 함수형을 공부하면서 이렇게 아키텍쳐를 설계하면 test 또는 좀 더 유연한 프로그램을 짤 수 있다고 생각하였지만, 무엇을 앞선 개발자들이 개발자들의 특정 행동을 포기함(막음)으로써 이러한 3가지의 패러다임을 가져왔는지 알 수 있었다.. - 띵언: 오히려 소프트웨어는 과학과 같다. 최선을 다하더라도 올바르지 않음을 증명하는데 실패함으로써 올바름을 보여주기 때문이다. 구조적 - 제어흐름을 직접적으로 변환하는것을 막음 goto문을 사용 못하게 만듬으로써 기능별로 모듈을 분리할 수 있었고, 그 기능을 저수준으로 또 다시 책임을 지는 모듈로 분리할수있었다... 구조적 프로그래밍은 프로그램을 증명 가능한 세부 기능 집합으로로 재귀적 으로 분해할 것 을 강요한다. 테스트 주도로 개발한다..
설계와 아키텍처란? 빨리 가는 유일한 방법은 제대로 가는것이다. 기획이나 스프린트 압박으로 우선 빠르게 개발하고 그걸 나중에 개선할 생각은 버려라 어차피 다음 기획 티켓은 나에게 이미 할당되어있다.... 나중에 내가 엉망이된 코드를 정리할수있다고 과신하지마라 ㅋㅋㅋ 와닿네요.. 후.. 이번에 레거시를 정리하면서 느낀건데 test를 작성하면서 개발한 코드와 test를 나중에 붙이는 코드는 코드 퀄리티가 달라질수밖에 없다고 생각이 들었고 첫단추를 잘 못낀 코드는 계속해서 엉키기만 할 뿐이라는걸요.. 두가지 가치에 대한 이야기 아키텍처를 위해 투쟁하라! 나는 소프트웨어를 안전하게 보호해야 할 책임이 있다. 소프트웨어는 동작하는 프로그램이 아닌 유연한 프로그램을 의미한다. 좋은 아키텍트는 특성과 기능을 개발하기..
하이퍼 바이저 - 가상 머신 모니터라고도 하는 하이퍼바이저는 가상 머신(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 조치가 필요해보인다.