반응형

분류 전체보기 135

[Spring] Reactive programing: WebFlux, WebClient

이전 포스팅에서 비동기 처리를 하게 될 경우 non blocking 하게 servlet thread를 사용하는 방법에 대해서 살펴보았습니다. 하지만 여전히 문제가 남아있는 부분이 존재합니다. 바로 비동기 처리를 하는 worker thread입니다. worker thread가 만약 또 다른 서비스의 API를 호출하게 된다면 servlet thread는 반환되었지만 worker thread는 api 응답이 올 때까지 blocking 되어 대기상태가 되어야 합니다. Spring 4.0에선 이러한 문제를 AsyncRestTemplate을 사용해서 해결할 수 있었습니다. implementation("org.springframework.boot:spring-boot-starter-webflux") val async..

[Spring] 비동기 처리시 blocking 되는 servlet thread 관리

Tomcat에서의 IO는 HttpServletRequest와 HttpServletResponse를 사용하고 있고, 이 둘은 InputStream과 OutputStream을 구현하고 있습니다. 즉 IO가 이루어질 때마다 blocking이 발생한다는 뜻입니다. tomcat에서 NIO connector가 구현된 이후부터 connection을 nonblocking하게 맺고 있지만, 결국엔 servlet을 실행하는 순간 servlet thread가 필요로 하기 때문에 근본적인 문제의 해결책이 되지 않습니다. 서버에서 일어나는 작업들, 흔히 req - logic - res가 이루어질 때 빠르게 thread가 작업을 처리하고 pool로 반납하면 이러한 방식도 문제가 되진 않습니다. 다만 최근 많이 가져가고 있는 MS..

[Kubernetes] CRD(Custom Resource Definition)와 Custom Controller 사용하기

이번 포스팅엔 Kubernetes에 Custom Resource를 사용하는 방법에 대해서 살펴보도록 하겠습니다. Custom resource를 정의하고 사용하기 위해선 기반 지식이 조금 필요한데요. 이전의 포스팅에서 조금씩 언급한 부분이지만 시간이 지나고 나니 저의 설명이 너무 부실....^^한 포스팅이 많은 것 같아서 관련된 부분들을 조금씩 다시 언급하며 포스팅을 진행하도록 하겠습니다. Custom Resource를 사용하기 위해서 알아야 하는 가장 중요한 지식이 있는데 바로 Object와 Controller입니다. Object Kubernetes에서 관리하는 리소스를 말합니다. 여기서 리소스란 Container, Network Config, Storage Config 등이 있습니다. 예를 들어 noa..

DevOps/Kubernetes 2021.04.08

[Error Log] Elasticsearch: ERROR: [1] bootstrap checks failed[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

Elasticsearch 5.0 이후부터 config 내 network.hosk가 loopback이 아닌 경우 bootstrape 체크 시 아래와 같은 에러가 발생하며 elasticsearch가 정상적으로 뜨지 않는 문제가 발생합니다. ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 원인 Elasticsearch는 mmapfs라는 디렉토리를 사용하여 색인하는데, 이때 os가 제공하는 mmap 수 제한이 너무 낮으면 메로리 부족 예외가 발생하게 됩니다. 위와 같은 문제가 발생했다면 아래의 명령어로 현재 서버의 vm.max..

Error Log 2021.02.18

[Prometheus] Exporter 배포하기 (node-exporter, kube-state-metrics, actuator)

전 포스팅에서 봤듯이 prometheus는 exporter를 배포하지 않더라도 이미 많은 metric을 수집하고 있다는 것을 알 수 있었습니다. 특히 kubernetes 안에 배포된 container와 기본적인 node에 관한 metric도 수집되는 것을 알 수 있는데, 이는 kubernetes가 자체적으로 cluster 내의 모든 노드에 metric을 수집하는 cAdvisor라는 모니터링 에이전트를 배포하기 때문입니다. cAdvisor만으로도 많은 data를 얻을 수 있지만, 이번 포스팅에서는 더 다양한 exporter를 배포하여 cAdvisor에서 수집하지 않는 metric을 추가적으로 scrape 해보도록 하겠습니다. 해당 포스팅에선 아래의 version을 사용했습니다. kubernetes:v1.1..

DevOps/Prometheus 2021.02.12

[Prometheus] kubernetes 환경에 prometheus 구축하기

명절에 짬을 내서 최근 공부하고 직접 구축해보았던 prometheus 포스팅을 작성해보려고 합니다. 이번 포스팅에선 Prometheus에 대한 간략한 소개와 Kubernetes 환경에서 모니터링 시스템을 구축하는 방법으로 진행해보려고 합니다. 사실 prometheus는 많은 회사에서 사용하고 있고 kubernetes의 사실상 표준 모니터링 시스템으로 사용되고 있습니다. 그럼에도 불구하고, 한국어로 된 자료가 많이 없고, 번역된 책 조차도 yes24 기준 2권밖에 존재하지 않는 기술입니다. 😭 그래서 개념만 제대로 이해하고 있다면 구축하고 사용하는 것이 그리 어렵지 않음에도 불구하고, 관련 레퍼런스를 찾기 힘들어서 helm을 사용하지 않고는 직접 구축하고 커스텀 하는 데에 어려움이 있었습니다. (저만 그런..

DevOps/Prometheus 2021.02.12

[개발 환경] iTerm2로 터미널 커스텀하기

이번 포스팅에선 Mac에서 사용하는 터미널을 꾸며보도록 하겠습니다. 사실 오래전에 작성한 글이지만, 꾸준하게 조회수가 있는 포스팅이라 좀 더 상세한 내용과 최근에 추가한 커스텀 항목을 추가해서 다시 업로드하였습니다. 😊 ⚠️해당 포스팅은 다양한 기술 블로그의 iTerm2의 커스텀 글을 토대로 저의 입맛에 맞게 소스들을 선택하여 작성되었습니다. 포스팅 최하단에 참고한 블로그의 링크를 첨부하였으니 상세한 내용은 아래 링크를 확인해주시기 바랍니다. 아래 이미지가 해당 포스팅에서 최종적으로 만들게 될 터미널의 모습입니다. 🏖 iTerm2 Install 터미널을 꾸민다고 했지만, 정확히 말하면 terminal이라는 이름의 앱을 커스텀 하는게 아니라 터미널과 같은 기능을 하지만, 더 다양한 기능을 제공해주는 ite..

Forum/개발 환경 2021.02.07 (17)

[Cert manager] SpringBoot(tomcat) HTTPS 적용하기

🤔 주의 해당 포스팅은 단순히 Spring Boot에 HTTPS를 적용하는 것을 목적으로 하는 포스팅이 아닌 cert manager를 이해하고 kubernetes에서 https 적용을 자동화하는 것을 목적으로 합니다. 아직 cert manager에 대해 제대로 이해하고 있지 않다면 이전 글을 참고해주시기 바랍니다. 해당 포스팅에선 이전 글의 내용을 모두 이해하고 있다는 전제하에 포스팅을 진행합니다. 이번에는 cert-manager를 이용해서 tomcat 통신을 암호화 해보도록 하겠습니다. "이전에 MySQL을 암호화하는 것처럼 쉽게 secret 파일 적용하면 되는 거 아냐?!"라고 생각하실 수도 있지만, 이전과 조금 다른 부분이 있습니다. 이전에 사용했던 Certificate yaml 파일(아래의 코드)..

DevOps/Cert manager 2021.02.06

[Cert manager] Kubernetes 통신 암호화 및 자동화 (MySQL HTTPS 적용)

🏖 Cert-manager란? Cert-manager는 Kubernetes 내부에서 HTTPS 통신을 위한 인증서를 생성하고, 또 인증서의 만료 기간이 되면 자동으로 인증서를 갱신해주는 역할을 하는 Certificate manager controller입니다. 쉽게 말해 Kubernetes 내에서 외부에 존재하는 Issuers를 활용하거나 selfsigned Issuer를 직접 생성해서 생성하여 Certificate를 생성하고, 이때 생성된 Certificate를 관리하며 인증서의 만료 시간이 가까워지면 인증서를 자동으로 갱신해줍니다. Cert-manager가 사용하는 외부에 존재하는 Issuer는 아래의 이미지와 같은데, 대표적인 Issuer로 무료로 사용되고 있는 let's enscrypt를 많이 사..

DevOps/Cert manager 2021.02.05

[Algorithm] leetcode: Validate Binary Search Tree (python)

주어진 Binary Search Tree가 유효한지를 확인하는 알고리즘입니다. Binary Search Tree는 하나의 root node가 존재할 경우 왼쪽에 있는 모든 노드는 해당 node보다 값이 작아야 하고, 오른쪽에 있는 모든 노드는 root node보다 값이 커야합니다. 때문에 바로 이전의 노드의 값과 비교하여 왼쪽이라면 이전 노드의 값보다 작은 지를 비교하고, 오른쪽으로 가게 되면 이전 노드의 값보다 큰지를 비교하면 됩니다. 하지만 만약 아래와 같은 케이스라면 어떨까요? 3 / \ 1 5 / \ 2 6 2은 5보다 작지만, 5 이전의 node인 3보다도 값이 작게 됩니다. 이는 오른쪽에 있는 node는 모두 기준이 되는 node보다 값이 커야 한다는 rule을 벗어납니다. 이러한 경우는 이전..

반응형