전체 글

Actions lead thoughts.
· Istio
istio ingress gateway 서비스 메시로 요청을 보내고 싶은 사용자는 요청을 istio ingress gateway의 엔드포인트로 보낸다. 즉, 메시 클러스터의 ingress gateway는 요청을 가장 처음으로 받는 리소스이다. ingress gateway이 무엇인지 알아보기 위해 먼저 쿠버네티스의 ingress와 ingress controller를 간단히 살펴보자. kubernetes에서 ingress의 동작 ingress는 특정 path 나 host에 따라 요청을 특정 서비스로 보내는 규칙들을 정의하는 리소스이다. 여기에 정해진 규칙들을 기반으로 실제 라우팅을 하는 것은 ingress controller pod이다. nginx, kong과 같은 프로그램이 자주 사용된다. ingress ..
· Kotlin
아이템 11: 가독성을 목표로 설계하라 프로그래밍은 쓰기보다 읽기가 더 중요하다. 따라서 항상 가독성을 생각하며 코드를 작성해야 한다. 인식 부하 감소 // 구현 A if(person != null && person.isAdult) { view.showPerson(person) } else { view.showError() } // 구현 B person?.takeIf { it.isAdult } ?.let(view::showPerson) ?: view.showError() 구현 B는 짧지만 이해하기 어려움 일반적으로 코틀린에서 사용되는 관용구가 많아 경험이 많은 코틀린 개발자라면 쉽게 이해 가능 but, 숙련된 개발자만을 위한 코드는 좋은 코드가 아님 구현 A는 수정이 쉬움 if 블록에 작업 추가할 경우 ..
· Kotlin
코틀린은 정말 안전한 언어지만, 정말로 안전하게 사용하려면 개발자가 뒷받침을 해야 합니다. item 1. 가변성을 제한하라 코틀린 프로그램은 모듈로 이루어져 있다. 모듈의 대표적 종류는 다음과 같다. 클래스 객체 함수 타입 별칭 top-level 프로퍼티 가변을 지양할 이유 모듈 중 var 프로퍼티나 mutable 객체는 상태를 가질 수 있는데 이는 생산성을 높여주지만 여러 문제점을 갖는다. 상태를 갖는 부분들의 관계를 이해해야 함. 상태를 갖는 부분이나 변경 부분이 많을수록 이해하기 어려워짐 시점에 따라 바뀌는 상태를 가지면 실행을 예측하기 힘듬. → 테스트 하는 것도 어려움 멀티스레드 프로그램일 경우 충돌이 발생할 수 있음 변경이 일어날 때마다 다른 부분에 알려야 할 경우가 있음 class Roule..
· Kubernetes
개요 쿠버네티스 1.28 버전부터 도입된 sidecar container에 대해 알아본다. 1.28 버전 이전의 sidecar 패턴 Sidecar 패턴은 서비스 메시, metric 수집, secret 가져오기 등에서 많이 쓰여왔다. 하지만 사이드카 컨테이너를 구현하기는 쉽지 않았다. 1.28버전 이전까지는 컨테이너가 사이드카 컨테이너임을 쿠버네티스에게 알려줄 방법이 없었다. 발생할 수 있는 이슈 이는 사이드카 컨테이너가 메인 컨테이너 종료 전에 종료될 수 있거나, 작업이 실패하더라도 살아있을 수 있다는 의미이다. 따라서 몇가지 문제가 발생했다. Job의 경우 기본 컨테이너가 완료 되었지만 사이드카 컨테이너가 계속 실행되면 pod가 성공적으로 종료 됐는지 올바르게 판단할 수 없다. 사이드카 컨테이너가 너무..
· Kubernetes
개요 kubernetes의 Autoscaler는 대표적으로 HPA, VPA, CA가 있습니다. 이 페이지에서는 각각의 개념에 대해 정리합니다. HPA(Horizontal Pod Autoscaler) Horizontal Pod Autoscaler는 파드의 리소스를 감시하여, 리소스가 부족한 경우 Controller의 replicas를 증가시켜, 파드의 수를 늘리도록 합니다. 위의 그림 처럼 Pod가 수평적으로 증가하는 것을 Scale Out, 수평적으로 감소하는 것을 Scale In 이라고 합니다. 파드가 증가하였기 때문에 기존의 트래픽이 분산되어 서비스를 더 안정적으로 유지할 수 있게 합니다. HPA는 다음과 같은 경우에 사용이 권장됩니다. 기동이 빠르게 되는 App 파드의 장애가 났을 때 대응하기 위한..
· Kotlin
목차 TestCoroutineScheduler StandardTestDispatcher UnconfinedTestDispatcher TestScope runTest 백그라운드 스코프 취소와 컨텍스트 전달 테스트하기 디스패처를 바꾸는 함수 테스트 함수 실행 중 일어나는 일 테스트 새로운 코루틴을 시작하는 함수 테스트 메인 디스패처 교체하기 룰이 있는 테스트 디스패처 설정하기 코틀린 코루틴 테스트 | Built with Notion suspend fun test1(): User { val profile = repo.getUserProfile() val friends = repo.getFriends() return User(profile, friends) } suspend fun test2(): User { ..
· Kotlin
목차 Hot & Cold 데이터 소스 핫 채널, 콜드 플로우 플로우란? 다른 방법들과 비교 플로우 특징 플로우의 실제 구현 Flow 이해하기 Flow 처리 방식 동기 Flow 플로우와 공유 상태 플로우 생성 원시 값을 가지는 플로우 컨버터 함수를 플로우로 변경 플로우와 리액티브 스트림 플로우 빌더 빌더의 원리 채널 플로우 플로우 생명 주기 함수 Flow | Built with Notion Hot & Cold 데이터 소스 dongbin-note.notion.site
· Kotlin
목차 닫힌 채널에서 Select 편향 특성을 이용한 onSend 지연되는 값 선택 Select | Built with Notion Select 표현식은 아직 실험적인 기능으로 동작이 변경되거나 하위 호환 제공이 안될 수도 있다. dongbin-note.notion.site
· Kotlin
목차 Channel type Channel.UNLIMITED Channel.BUFFERED Channel.RENDEZVOUS Channel.CONFLATED 버퍼 오버 플로우일 때 전달되지 않은 원소 핸들러 Fan-out Fan-out 수신 시 수신 방식에 따라 오류 전파 동작이 다른 이유 Fan-in Channel | Built with Notion 채널은 코루틴끼리 통신을 위한 api이다. dongbin-note.notion.site
· Kotlin
목차 싱글 스레드로 제한된 Dispatcher 코스 그레인드 한정 파인 그레인드 한정 Atomic 타입 활용 선호되는 순서 공유 상태로 인한 문제 | Built with Notion 아래 코드는 멀티 스레드 환경에서 문제가 발생한다. dongbin-note.notion.site
dongb
Now or Never