분류 전체보기
-
Kubernetes Components - Control PlaneTECH/Kubernetes 2022. 10. 13. 22:07
Kubernetes 배포하면 클러스터를 얻게 된다. Kubernetes 클러스터는 노드라고 불리는 컨테이너화된 애플리케이션을 실행시키는 일련의 워커머신으로 구성되어 있다. 모든 클러스터는 최소 하나의 워커노드를 갖는다. 워커 노드는 애플리케이션 워크로드의 컴포넌트들인 Pod들을 호스트 한다. Control plane은 클러스터 내의 워커 노드와 Pod를 관리한다. 프로덕션 환경에서 control plane은 일반적으로 여러 컴퓨터에 걸쳐 실행되고, 클러스터는 일반적으로 여러 노드를 가지기 때문에 fault-tolerance와 high availability를 제공한다. Control Plane Components control plane의 컴포넌트는 클러스터에 대한 전반적인 결정 뿐만 아니라 (예: 스케..
-
Custom Resource 커스텀 리소스란?TECH/Kubernetes 2022. 8. 16. 11:30
Custom resources 리소스는 특정한 종류의 API 객체들의 집합을 저장하는 Kubernetes API 내의 엔드포인트이다. 예를 들어, 빌트인 파드 리소스는 파드 객체들을 가지고 있다. Custom resource는 Kubernetes API의 확장으로, 기본 Kubernetes 설치시 반드시 사용할 수 있는 것은 아니다. Custom resource는 특정한 kubernetes 설치의 커스텀화를 나타낸다. 하지만, 많은 핵심 kubernetes functions은 custom resource를 이용하여 만들어지고, kubernetes를 더 모듈화한다. Custom resource는 동적 등록을 통해 실행 중인 클러스터에서 사라졌다 나타났다를 할 수 있고, 클러스터 관리자는 custom res..
-
JVM 메모리 - heap, stackTECH/Java 2022. 8. 7. 11:24
JVM의 메모리는 크게 힙, 스택, 메타 영역으로 나뉜다. 그 중 스택과 힙 영역에 대해 먼저 알아보자. Stack 스택은 쓰레드 생성과 함께 생성된다. 쓰레드는 자신의 스택만 볼 수 있다. 즉 쓰레드 세이프하다.(다른 쓰레드의 데이터를 볼 수 없다.) 함수가 호출될 때 파라미터의 복제본이 스택에 push되고, 해당 함수의 변수들도 스택에 push 된다. 함수가 리턴할 때 스택에 저장된 데이터들이 pop된다. LIFO 구조 Stack에 접근하는 것은 heap 메모리에 접근하는 것보다 빠르다. Heap 스택은 객체와 같은 복잡한 데이터를 저장하는데 사용할 수 없다. primitive 타입과 같은 단순한 데이터 타입만 저장할 수 있ㄷ가. 스택에 저장되지 않은 모든 데이터는 heap에 저장된다. 스택과 달리 ..
-
데이터 중심 애플리케이션 설계 - 관계형 데이터베이스와 문서 데이터베이스TECH 2022. 7. 18. 20:34
데이터 모델의 관점에서 관계형 데이터베이스와 문서 데이터베이스의 비교 애플리케이션의 데이터가 문서와 비슷한 구조일 경우 문서 데이터베이스를 사용하는 것이 좋다. 문서를 여러 테이블에 찢어(shredding) 저장하는 것은 스키마와 애플리케이션 코드를 복잡하게 만든다. 문서 데이터베이스의 미흡한 조인은 때로는 문제일수도 아닐 수도 있다. 다대다 관계를 사용하는 애플리케이션에서 문서 모델의 매력은 떨어진다. 애플리케이션 코드에서 비정규화된 데이터의 일관성을 유지하기 위해 추가 작업을 해야 한다. 애플리케이션 코드를 통해 조인을 흉내낼 수 있지만, 복잡도가 애플리케이션 레벨로 넘어가고 대게 데이터베이스에서 특화되어 수행되는 조인보다 느리다. 스키마 유연성 스키마가 없다는 것이 아니다. 암묵적인 스키마가 존재하..
-
Spring Data R2DBC - R2DBC란?TECH/Spring 2022. 6. 16. 09:46
What is R2DBC R2DBC란 Reactive Relational Database Connectivity의 약어이다. R2DBC는 드라이버 벤더들에 의해 관계형 데이터베이스에 접근하기 위해 구현될 reactive API를 선언한 API 명세 계획이다. R2DBC가 왜 생겼는지에 대한 답변의 일부는 적은 수의 쓰레드로 동시성을 다루고 적은 하드웨어 리소스로 스케일하는 논블록킹 애플리케이션 스택의 필요성이다. 이 필요성은 표준화된 관계형 데이터 베이스 접근 API의 - 주로 JDBC - 재활용으로는 충족될 수 없었다. JDBC는 fully blocking API이기 때문이다. 블록킹 동작을 ThreadPool로 완화하려는 시도는 사용이 제한적이다. 다른 답변의 일부는 대부분의 애플리케이션은 데이터를 ..
-
Spring Cloud Gateway의 RouteDefinitionRepositoryTECH/Spring 2022. 6. 7. 13:28
Spring Cloud Gateway(이하 S.C.G라고 호칭)에서는 두 종류의 RouteDefintionRepository 구현체를 제공한다. InMemoryRouteDefinitionRepository 하나의 게이트웨이 인스턴스 내에서만 존재한다. 따라서, 여러 게이트웨이 인스턴스에 걸쳐 라우트를 공유하기에 적합하지 않다. RedisRouteDefinitionRepository S.C.G 인스턴스 클러스트에 걸쳐 라우트를 공유하기 위해서 RedisRouteDefinitionRepository 를 사용할 수 있다. 이를 위해서는 spring.cloud.gateway.redis-route-definition-repository.enabled 를 true로 설정해야 한다. RedisRateLimiter 필..
-
Circuit Breaker 패턴이란?TECH 2022. 3. 6. 10:35
Circuit Breaker의 필요성 서비스에서 다른 서비스를 호출하는 일은 흔히 발생한다. 그런데, 호출한 서비스에서 응답이 없을 경우 서비스 호출에 사용한 쓰레드는 응답이 올 때까지 기다려야 한다. 따라서 리소스가 낭비로 이어지고 이로 인해 시스템에 연속적인 장애 상황이 나타날 수 있다. 이러한 연속적 장애를 막기 위해 Circuit Breaker 패턴을 사용한다. Circuit Breaker란? Circuit Breaker의 기본 아이디어는 간단하다. Circuit breaker 객체로 외부 호출하는 함수를 감싸고, Circuit Breaker 객체에서는 외부 호출을 모니터링하는 것이다. 실패 횟수가 특정 한계에 도달하면 Circuit Breaker가 열린다.(Circuit open) Circuit..
-
logback-spring.xml과 application.yml의 로그 설정 중 어떤 것이 우선 순위가 더 높을까TECH/Spring 2022. 2. 21. 08:43
application.yml과 logback-spring.xml에 설정된 로그 레벨 설정 중 어떤 것이 더 우선 순위가 높을까? 디렉토리 구조 . ├── pom.xml └── src └── main └── resources ├── application.yml └── logback-spring.xmlapplication.yml logging: level: root: DEBUGlogback-spring.xml 테스트용 코드 @RestController public class TestController { Logger logger = LoggerFactory.getLogger(TestController.class); @GetMapping("/") public String test() { logger.trace..