본문 바로가기

개발

(81)
HaProxy 의 역할과 graceful stop 과정 HAProxy는 여러 서버에 대해 요청을 확산시키는 TCP 및 HTTP 기반 애플리케이션들을 위해고가용성 로드밸런서와 리버스 프록시를 제공하는 자유-오픈 소스 소프트웨어 HAProxy의 역할- a TCP proxy : it can accept a TCP connection from a listening socket- an HTTP reverse-proxy (called a "gateway" in HTTP terminology)- a content-based switch요청의 모든 요소를 고려하여 요청이나 연결을 전달할 서버를 결정할 수 있습니다.따라서 동일한 포트를 통해 여러 프로토콜(예: HTTP, HTTPS, SSH)을 처리할 수 있습니다.- a server load balancerTCP 연결과 HT..
CORS - Cross-Origin Resource Sharing 란 무엇일까 Cross-Origin Resource Sharing 업무를 하다가 듣기는 엄청 듣고 뭔지도 대충 아는데 정확하게 설명할 정도로는 모르는것 같아서 이참에 정리한다. 한글로 이해 할려고 하지말고 Cross-Origin Resource Sharing 그대로 이해하자 cors 는 웹 애플리케이션이 다른 도메인 또는 포트에서 리소스에 접근할 수 있도록 허용하는것이다. 뭔지 모르겠으면 이게 왜 나왔는지 알아가면된다. 만약 어떤 개발자가 www.만화.com 사이트를 만들었다고 하자 저 사이트는 유명하고 트래픽도 많아서 저 사이트를 배끼기 위한 www.복제.com 을 만들었다. ‘복제’ 사이트는 원조 사이트의 url을 그대로 호출해서 만들었다. 이렇게 되면 원래 사이트에서 제공하는 요청이 다른 사이트에 노출된다. 예..
Spring 예제 코드로 알아보는 semaphore, mutex 동기화 이해 동기화부터 알아야 하는데 동기화란 프로세스들 사이의 수행시기를 맞추는것을 말한다. 실행 순서 제어를 위한 동기화 상호 배제를 위한 동기화 위 두가지 케이스로 나뉠수 있다. 대표적으로 생산자 소비자 문제가 있는데 생성자는 데이터를 추가하면 변수 1을 증가시키고 소비자는 데이터를 삭제하면 변수 1을 감소시킨다. 총합 == 10 생산자(){ 데이터 추가 총합 변수 1 증가 } 소비자(){ 데이터 삭제 총합 변수 1 감소 } 생산자를 1000번 소비자를 1000번 실행 시키면 결과값은 항상 0이 나오지 않는다. 생산자와 소비자가 동기화 되있지 않아서 생기는 문제이다. 소비자 작업이 끝나기 전에 생산자가 수정되어 공유자원에 문제가 생긴다. 공유자원(shared resource)이란 동시에 접근해서는 안되는 자원이..
istio(이스티오)와 서비스 메시, 프록시 쿠버네이티스와 밀접하게 연관된 istio에 대해 정리 한번 해야겠다 생각만하다가 이제 서야 정리한다. 일단 istio를 설명하기 전에 서비스 메시라는것을 우선 알아야 한다. 서비스 메시 애플리케이션 트래픽을 관리, 추적 및 보안성을 강화하기 위해 플랫폼 레이어에 구성되는 네트워크 제어 방법 대표하는 기능은 크게 3가지 1. 애플리케이션 트래픽 관리 (Traffic Management) 2. 관찰 가능성(observability) 3. 보안 1. 애플리케이션 트래픽 관리 - 트래픽 관리를 위한 라우팅은 더 나은 배포 전략을 가능하게 한다. - 트래픽 라우팅 규칙을 사용하면 서비스 간의 트래픽 흐름 및 API 호출을 쉽게 제어한다 - 서킷 브레이커, 타임아웃 및 재시도와 같은 구성을 단순화한다 - A/B 테..
mysql aborted clients 문제 해결 db를 mysql 을 쓰고 있는데, 갑자기 이슈로 client abort 되는게 너무 많다고 전달 받았다. 원인을 찾고 이슈를 수정하기 까지의 과정을 정리해본다. aborted clients 는 클라이언트가 제대로 연결을 닫지 않고 죽어서 중단된 연결 수를 의미한다. 해당 오류 관련해서 mysql 공식문서를 찾아봤더니 아래와 같이 가이드 되고 있었다. Aborted_clients 에러가 발생하면 확인 하면 좋을것들 error log를 봐라 general query log를 봐라 The Aborted_***xxx*** and Connection_errors_***xxx***가 있을테니 상태를 확인해라 mysql 에서 저 로그를 찍는게 설정을 바꿔야 해서 mysql 에서 설정 바꾸다가 잘 쓰고 있던 도커 컨..
자바스크립트 event loop와 scope chain 이해 난 자바개발자라 그냥 이슈 수정하는 정도만 알면되지 했다가 얼마전 딥한 이슈를 수정하다가 많은 문제들을 마주쳐서 정리 해봤다. JavaScript 는 싱글스레드다. 한번에 하나씩만 작업을 처리하게 되어있다! 자바스크립트는 내부는 어떻게 동작 할까? single-thread의 문제에 대한 솔루션으로 자바스크립트는 비동기 처리를 하는데 이 비동기 처리를 위한 자바스크립트의 구조를 알아보자. WEB (Browser) APIs **Web(Browser) API**란 브라우저가 우리에게 제공해주는 기능들을 자바스크립트 코드로 사용할 수 있도록 해주는 인터페이스이다. Callback Queue Callback Queue 혹은 **Task Queue**는 일종의 자료구조로서 특정 때가 되면 실행 될 콜백 함수들이 자..
java 에서 백분위수 빠르게 구하는 방법 회사에서 성능 개선을 위해서 쓴 블로그글~~ 한줄 요약하자면 백분위수를 구하기 위해서 dd-sketch 를 분석한 글이다. 논문 링크 : https://www.vldb.org/pvldb/vol12/p2195-masson.pdf 이 논문을 보고 쓴 글인데 논문 읽다가 도대체 이런건 누가 쓰는걸까 하고 저자를 찾아봤다 Jee E. Rim 이분하고 Homin K. Lee 이분 한국사람 이름인거같아서 찾아봤더니 포항공대를 나오셨다. 세상에는 참 똑똑한 사람이 많구나 저런사람들이 개발자라고 하는거지 내가 개발자라고 할 수 있을까 이런 생각이 들었다. 이런 사람들은 어떤 생각으로 살까 참 궁금하기도 하고 공부를 하면서 이 생각 저생각이 많이 들었다. Intro. 한번은 들어본 ‘평균의 함정’ 모니터링 시스템에서는 ..
Spring Reactive 도입기 - R2dbc에서 multiDatabaseSource 요즘 Reactive로 개발을 하면서 이것저것 온갖 고난을 맛봤다. 괜히 도입을 했나 싶을 정도로 디버깅도 어렵고 값 추적이 쉽지 않다. 롤백할까도 많이 고민했었다 자바만 하다 보니 비동기에 대한 이해도 부족하고 왜 이렇게 돌아가는지 이해도 잘 안 되는 거 같은데 어느 정도 정리가 된 거 같아 글을 써본다. Reactive 도입의 필요성? 전통적인 프로그래밍은 많은 양의 데이터를 실시간으로 처리하는 데 어려움을 겪을 수 있다. 이때 전통적인 프로그래밍이란 Spring MVC인데 전통적인 Servlet 기반의 Web Application Framework이며, 요청 당 스레드를 할당하여 동작한다. 반면, Spring WebFlux는 Reactive Streams를 기반으로 한 Non-Blocking IO ..