목록분류 전체보기 (145)
쿼카러버의 기술 블로그
Ansible 시리즈 1탄을 작성한다. 본 시리즈의 목적은 다음과 같다 (1) Ansible 기본 개념 및 설치 진행 (2) Ansible를 활용해 여러 노드들에 동시에 명령어 실행 (패키지 설치 등) (3) Ansible를 활용한 부하테스트 진행 (locust) 사실 시리즈 2탄 까지만 봐도 Ansible를 활용도가 충분하다. 예를 들어 여러 대의 노드에 카프카를 설치한다든지 할 때 각 서버에 ssh로 접근해서 동일한 커맨드를 계속 반복하는 것보다는 Ansible를 활용하면 한번에 여러 노드에 설치할 수 있고, 이후에도 동일한 세팅을 설정할 수 있기 때문이다. 하지만 필자는 이번에 10대의 노드를 활용해 부하테스트를 진행해보았고, Ansible를 활용하면 간단하게 부하테스트도 세팅할 수 있기 때문에, ..
SSH key-based authentication 오늘은 SSH의 Key based authentication에 대해 다뤄보려고 한다. 사실 이런 개념 글을 정리하게 되는 가장 주된 동기 중 하나는 다른 글을 작성하면서 생긴다. 자세히 설명하자니 주제에서 벗어나게 되고, 설명을 안하자니 이해하기 어려운 글이 되버리기 십상이기 때문이다. 물론 다른 잘 정리된 글에 링크를 걸어줄 수도 있겠지만, 나 또한 한번 개념을 제대로 짚고 넘어가고 싶은 주제라면 이렇게 별도의 글로 나누어 설명한다. 자 서론이 길었다. 본론으로 돌아가자. AWS, GCP, 네이버 클라우드 플랫폼 등 클라우드 서비스를 사용해 서버를 운용하는 개발자라면 SSH를 뗄레야 뗄 수 없다. 이번 글에서는 항상 명령어 중심으로 사용만 해왔던 SS..
python에서 callable이란 호출가능한 클래스 인스턴스, 함수, 메서드 등 객체를 의미한다. 참고로 파이썬에서는 모든 것이 객체기 때문에, 함수도 하나의 객체다. 함수 안에 data variable, 또 다른 함수 등을 가질 수 있고, 다른 함수의 argument로 전달될 수도 있기 때문이다. 무튼 callable을 정리해보면 아래와 같다. (1) __call__ 메서드가 있는 클래스 인스턴스거나 (2) 호출 가능한 메서드나 함수 그리고 위와 같이 객체가 callable한지 아닌지 판단하도록 해주는 callble이라는 내장함수가 있다. 이 함수는 해당 객체가 호출가능한지 점검한다. 예를 들어보자 (1) 함수 = callable (2) __call__ 를 내장한 클래스 인스턴스 = callable ..
쿠버네티스는 container orchestration, 즉 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 툴이다. 쿠버네티스를 활용하면 다수의 컨테이너화된 어플리케이션을 쉽게 배포할 수 있다. 쿠버네티스를 활용한 어플리케이션 배포에 가장 기본이 되는 것은 yaml파일이다. 쿠버네티스의 오브젝트를 정의하고 생성할 때 yaml파일 형식을 활용하기 때문이다. 쿠버네티스를 통해 어플리케이션을 배포하기 위해서는 많은 object들이 필요하다. 대표적인 예가 deployment, pod, configmap secret, service, persistent volume, persistent volume claim 등이 있다. 위와 같은 쿠버네티스 object(리소스)들을 정의하고 다루는데 활용되는 yam..
Blocking I/O / Non Blocking I/O, synchronous / asynchronous 는 개발을 하다보면 자주 접하게 되는 용어다. 특히 파이썬, NodeJS와 같이 싱글스레드로 동작하는 언어에서는 성능을 위해 필수적으로 알아두어야 하는 개념 중 하나다. 하지만 이 term들의 개념을 설명하라고 해보면 많은 사람들이 sync/async의 개념과 blocking/nonblocking의 개념을 같은 것으로 설명하는 경우가 많다. 하지만 엄밀히 말하면 Blocking/Non Blocking과 sync/async는 독립적인 개념이다. 따라서 본 글에서는 다음을 다룬다. 1) I/O가 성능에 미치는 영향 2) blocking, non blocking I/O 개념 이해 3) IBM이 제안하는 ..
파이썬으로 직접 패키지 혹은 모듈을 개발하고 사용하다보면 자주 겪는 에러 중 하나가 Import Error다. 대표적인 예로 아래 두가지 에러가 있다. [Python] ImportError: attempted relative import with no known parent package [Python] ModuleNotFoundError: No module named 'module_name' 물론 pip로 패키지를 빌드하고 나서 사용할 때는 패키지만 잘 설치하면 잘 발생하지 않는다. 하지만 웹어플리케이션을 개발할 때 모든 패키지들을 pip로 설치해서 사용하지는 않고 프로젝트 디렉토리에 패키지들을 모아놓고 사용하는 경우도 있는데, 이 때 모듈 내에 import 경로를 잘못 설정하면 위에 말한 에러들을 자..
파이썬 입문자에게는 정말 헷갈리는 용어들이 있다. 모듈, 패키지, 라이브러리, 프레임워크가 대표적인 예고, 정확하게 이들을 어떻게 구분해야 하는지 헷갈릴 수 있다. 다 import해서 쓰는데 뭐가 라이브러리고 뭐가 프레임워크인지 헷갈리는 것이다. 따라서 본 글에서는 Modular Programming이 무엇인지 간단히 알아보고 모듈, 패키지, 라이브러리, 프레임워크의 차이를 간단하게 정리해보도록 하겠다. Modular programming Modular programming을 이해하기 앞서 모듈이 무엇인지 이해해보자. 모듈이란 프로그램을 구성하는 구성요소로, 쉽게 말해 프로그램의 기능의 일부분을 분리한 코드 덩어리를 모듈이라고 한다. 예를 들어 계산기와 관련된 함수들을 구현하고, 이를 한 곳에 모아놓았다..
HTTP 관련 서비스를 구현하다보면 persistent connection을 빼놓을 수 없다. 그렇다고 필자가 완벽히 이걸 다 이해한건 아니고 공부중이다 하핫. 본 글에서는 persistent connection의 기본적인 개념을 소개하고 HTTP/1.0의 keep-alive에 대해서 알아본다. Persistent Connection HTTP에서 persistent connection이 필요한 이유는 무엇일까? 대표적인 이유로 site locality가 있다. site locality란 웹에서 특정 페이지를 보여주기 위해 서버에 연속적으로 이미지 request를 보내는 것 처럼, 서버에 연속적으로 동일한 클라이언트가 여러 요청을 보낼 가능성이 높은 경우를 의미한다. 이러한 니즈가 계속됨에 따라 HTTP/..