LittleMobs

2024년 11월 초부터 ubuntu에 kubernetes 클러스터를 구성하기 위해 kubeadm, kubelet, kubectl 설치하려는데 GPG error가 발생하고 있다. Kubernetes의 package repository에서 이전 버전들을 더 이상 제공하지 않는 것일까? 어떤 문제인지 살펴보자.

More Posts

Validation 코드는 어디에 작성해야 할까? - The 3 types of validation logics

개발자들은 다양한 validation 코드들을 작성하는데 많은 시간을 소비한다. 이곳저곳에 덕지덕지 붙어있는 validation 코드들을 바라보면, 과연 이 코드들이 여기에 있어도 되는 것인지 의문이 생긴다. 다양한 종류의 validation 코드들을 어디에 작성해야 하는지 정리해보자.

Certbot과 docker로 카페24 사이트에 무료 HTTPS 적용하기 - 무료 SSL 인증서 설치 방법

Let's Encrypt를 사용하면 명령어 몇 줄로 무료 SSL 인증서를 쉽게 받을 수 있다. 게다가 ZeroSSL과 달리 무료 인증서 최대 개수 제한도 없다. ZeroSSL 대신 사용할 수 있는 초간단 카페24 무료 SSL 인증서 설치 방법에 대해 알아보자.

ZeroSSL로 카페24 사이트에 무료 HTTPS 적용하기 - 무료 SSL 인증서 설치 방법

웹 사이트에 HTTPS를 적용하려면 SSL 인증서를 설정해주어야 한다. 카페24는 UI를 통해 외부 인증서를 FTP, SSH 등의 복잡한 과정 없이 설정할 수 있는 기능을 제공한다. ZeroSSL 이메일 인증을 통해 카페24에서 호스팅하는 사이트에 무료 인증서를 쉽게 적용하는 방법을 알아보자.

Python으로 kubernetes 환경에 app 배포하기 - Kubernetes deployment with python

Kubectl 명령어를 통해 kubernetes 환경에 다양한 구성요소들을 배포할 수 있지만, python으로 템플릿 코드를 짜두면 개발자들도 편리하게 배포를 자동화할 수 있다. Jinja2와 kubernetes 패키지를 통해 사용자 요청에 따라 kubernetes 환경에 pod들을 띄우는 기능을 만들어보자.

Domain model에서 repository를 직접 사용해도 될까? - 도메인 모델의 영속성 무지

Repository는 인프라적인 요소에 가깝다고 할 수 있다. 그런데, 이 repository를 도메인 모델에서 직접 사용해도 괜찮을까? DDD와 관련된 여러 참고 문서들에서는 이에 대해 통일되지 않은 견해를 보이고 있다. 이 글을 통해 여러 견해들을 한꺼번에 모아서 생각해보자.

Aggregate의 문제점과 바람직한 설계 방법 - DDD aggregate diet

DDD의 aggregate는 일관성 관리를 위해 매우 중요한 개념이지만, 덩치가 커질수록 성능과 확장성 측면에서 문제가 발생하게 된다. Composition 기반 aggregate의 문제점에 대해 자세히 살펴보고, 효율적인 aggregate를 설계하기 위한 방법들을 알아보자.

Aggregate란 무엇인가 도대체! - DDD aggregate의 기초 쉽게 이해하기

DDD에서는 aggregate라는 용어가 자주 등장한다. DDD의 다양한 개념들을 이해하기 위해서는 aggregate에 대한 이해가 선행되어야 하는데, 보통 DDD 자료들에서는 aggregate에 대한 설명이 중후반부에 등장한다. DDD 초보자도 쉽게 이해할 수 있도록 aggregate를 겉핥기해보자.

Event와 command의 차이점 쉽게 이해하기 - Events vs commands in EDA

Event Driven Architecture(EDA)를 시스템에 적용할 때는 거창한 이름 때문에 마치 모든 것을 event로 처리해야 할 것만 같다. 반은 맞고 반은 틀리다. Command라는 개념을 event와 분리하여 생각할 필요가 있다. Event와 command가 도대체 뭐가 다른지 간단히 정리해보자.

CQRS 개념 초간단 정리 - Understanding CQRS pattern

개발을 하다보면 CQRS라는 용어를 자주 만나게 된다. 특히 이벤트 기반 아키텍처나 대용량 트래픽 처리와 관련된 주제에서는 항상 빠지지 않고 등장하는 단골 메뉴다. 예제와 함께 CQRS 패턴의 정의, 장단점, 그리고 적용 방법 등을 최대한 간단하게 정리해보자.

Domain entity와 ORM을 따로 구분해서 정의하는 방법 - Domain entity with imperative ORM

Domain entity를 정의할 때 declarative 방식의 ORM을 사용하면 domain model에 DB 관련 정보가 노출되는 문제가 있다. Python sqlalchemy를 활용하여 imperative mapping style로 domain entity로부터 ORM을 분리해보자.

도메인 entity와 ORM을 동시에 추구하면 안 되는 걸까? - Domain entity with declarative ORM

ORM을 사용하는 환경에서 DDD를 따르는 코드를 작성하다보면, domain entity를 어떤식으로 정의해야 하는지 혼란스러울 때가 있다. Python sqlchemy를 통해 declarative mapping 방식으로 domain entity를 어떻게 구현하면 좋은지 알아보자.

영속성 domain entity를 정의할 때 상속을 사용해도 괜찮을까? - Repository code smell

객체지향 프로그래밍에서는 코드 중복 최소화 및 다형성을 위해 인터페이스나 추상 클래스를 정의하고 상속을 사용하는 경우가 많다. 그러나, 이는 도메인 주도 설계(DDD) 관점에서 항상 바람직한 것은 아니다. 영속성 domain entity를 정의할 때 상속을 사용하는 것이 적절한지, 그리고 어떤 것들을 고려해야 하는지에 대해 논의해보자.

자가 위임, 자가 캡슐화 - DDD에서 생성자를 정의하는 방법

DDD에서는 생성자를 정의할 때 자가 위임(self-delegation)과 자가 캡슐화(self-encapsulation)를 사용할 것을 권장한다. 이 두 가지 개념을 통해 어떻게 생성자를 정의해야 하는지 알아보자.

FastAPI에서 사용자가 연결을 끊으면 어떻게 될까? - Middleware disconnection check 문제

FastAPI에서 middleware를 사용하면 클라이언트가 연결을 끊었다는 사실을 알 수 없게 된다. 사용자의 disconnection이 요청 취소를 의미하는 경우, 이는 여러가지 문제로 이어질 수 있다. 연결이 끊겼다는 것을 어떻게 감지해야 할까?

초보 개발자 클릭 금지! Python으로 PostgreSQL DB 개인정보 암호화하기 1편 - 문제정의와 요구사항 분석

AI와 빅데이터가 모든 것의 중심이 되어가는 세상에서 개인정보 보호는 매우 중요하다. 데이터 수집 과정에서 개인정보가 노출되면 심각한 범죄로 이어질 수도 있다. DB 개인정보 암호화를 하려면 어떤 것들을 고려해야 할까? 간단한 예시와 함께 DB 개인정보 암호화를 달성하기 위한 방법들을 살펴보자.

Git-sync로 kubernetes 환경에 앱 배포 자동화하기 - 초간단 CI/CD 구축

Git-sync를 사용하면 github에 코드를 올릴 때마다 자동으로 앱이 업데이트되도록 만들 수 있다. 코드를 수정할 때마다 직접 배포하지 말고, git-sync를 통해 kubernetes 환경에 간단하게 CI/CD 환경을 구성해보자.

Kubernetes 1.23 버전의 최후 - Ubuntu kubernetes apt install 에러

2024년 3월 초, docker가 익숙해서 끝까지 버티고 있던 kubernetes v1.23.x 개발 환경 설치에 돌연 문제가 생겼다. Ubuntu에서 kubeadm, kubelet, kubectl 등을 apt로 설치할 수 없게 된 것이다. 원인과 해결 방법에 대해 알아보자.

FastAPI로 다양한 input을 받는 웹 서버 개발 방법 - Path parameter, query parameter, request body

Python의 FastAPI는 간단한 코드로 REST API를 빠르게 개발하도록 해준다. 복잡한 코드 없이 FastAPI로 path parameter, query parameter, JSON 타입의 request body 등 다양한 종류의 input을 받는 python backend 서버를 개발해보자.

Kubernetes에서 memory가 부족해지면 어떻게 될까? - Kubernetes Out-Of-Memory(OOM) kill and eviction

Kubernetes는 클러스터에 자원이 부족한 상황에서 자원을 재분배하기도 한다. 쉽게 말해서, 어떤 앱들은 잘 동작하고 있다가도 외부의 압력으로 인해 강제로 종료될 수 있다는 의미다. 그렇다면, kubernetes는 어떤 기준으로 pod들을 종료시키는 것일까? 가장 흔히 접하게 되는 Out-Of-Memory(OOM) 현상을 위주로 살펴보자.

Python의 enum으로 dynamic value 정의하기

Python의 enum은 일종의 alias라고 생각할 수 있다. 어떤 값을 미리 정의한 다른 이름으로 대체해서 참조할 수 있다. 이 별명과 값들은 enum을 정의하는 시점에 결정되고, 이후 값을 변경할 수 없는 "불변"의 속성을 가진다. 그렇다면 만약 enum에 정의된 다른 값들을 활용하여 동적으로 만들어야 하는 값이 있다면 어떻게 해야 할까?

Python으로 private 변수, getter와 setter를 만드는 방법은 없을까? - Python property decorator

Python으로 객체지향 프로그래밍을 하려고 하는가? Java같은 객체지향 언어를 학습하다보면 public, private 등의 접근제어자, 그리고 getter와 setter에 대해 자연스럽게 접하게 된다. Python에도 private같은 접근제어자 기능을 사용할 수 있다는 사실을 알고 있는가? Python에서 getter와 setter를 쉽게 만들 수 있는 built-in 기능에 대해 알아보자.

Binary search로 삽입 위치 찾기 - 그림으로 쉽게 이해하기

정렬된 배열에서 특정 숫자를 찾는 "찾기 문제" 또는 특정 숫자가 들어갈 위치를 찾는 "삽입 문제"가 주어진다면, 일단 binary search부터 생각해보는 것이 좋다. 찾기 문제는 원하는 숫자가 나올 때까지 찾으면 되기 때문에 직관적으로 이해하기 쉽다. 반면, 삽입 문제는 배열에 없는 숫자의 위치를 찾아야 할 수도 있기 때문에 헷갈리는 편이다. 시각적으로 원리를 쉽게 이해해보자.

Kubernetes에서 CPU의 request와 limit은 어떻게 설정해야 할까?

별도의 설정이 없다면 kubernetes는 pod에 CPU와 memory에 대한 request와 limit 값을 채워주지 않는다. Request와 limit 값을 설정하지 않고 app들을 운영하는 것은 괜찮은 걸까? 만약 몇몇 app들이 CPU를 과도하게 사용하면 어떤 일이 벌어질까? Stress test를 통해 어떤 현상이 나타나는지 알아보고, CPU의 request와 limit 값은 어떻게 설정하는 것이 좋은지 알아보자.