Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
알림 서비스가 분산 시스템을 사용하는 이유 애플리케이션으로 알림을 보내는 대표적인 서비스는 FCM(andriod)과 ARNs(IOS)이 있다.애플리케이션뿐만 아니라 이메일이나 slack 메시지 등 알림 서비스는 다양한 매체에 적용된다. 이러한 알림 서비스에서는 가장 중요한 것이 알림 데이터 손실을 방지하는 것이다.만약 단일 시스템을 사용한다면 single point of failure(단일 장애지점)이 되기 때문에 리스크가 크다.따라서 메시지를 보내는 앞단에 메시지 큐(Apache Kafka, RabbitMQ 등)를 적용하게 된다. 이러한 메시지 큐들도 결국 단일 장애지점을 피하기 위해 분산 시스템이 사용된다. 분산시스템의 Trade-off 그런데 여러 서버를 배치하는 분산 시스템에서는 정확히 한..
커스텀 명령어리눅스 쉘에 커스텀 명령어를 만들어보자. 리눅스 명령어에는 타입이 존재한다. 위와 같이 type 명령어를 통해서 명령어의 타입을 확인할 수 있다.cd와 같이 기본적인 셀 자체 내장의 명령어는 shell builtin으로으로 출력되지만외부 명령어인 mv, cp는 명령어 파일이 저장된 위치가 출력된다. 명령어 파일의 디렉터리모든 것이 파일인 리눅스에서는 명령어도 결국 파일로 이루어진다. 파일을 실행하기 위해서는 경로와 이름을 사용해서 실행한다.Ex) ./myfile 하지만 환경 변수인 PATH에 경로 정보를 등록하면 파일을 실행하기 위한 경로를 생략할 수 있다.따라서 경로 지정이 명령어 실행 시 현재 폴더에 해당 파일이 없다면, PATH에 등록된 정보를 통해 실행 가능한 명령어인지 확인하..
실시간 채팅 서비스를 만든다고 가정해 보자.이런 서비스에서 HTTP를 기반으로 메시지를 주고받는다면 어떻게 될까? HTTP(7계층)HTTP의 경우 stateless 서비스이다. (연결성의 보장은 4계층인 TCP의 역할)따라서 HTTP는 상대의 요청에 의한 Response만 가능하기 때문에 아래와 같이 클라이언트가 주기적으로 서버에 새로운 메시지의 여부를 물어보게 된다.이러한 과정을 폴링이라고 한다. 이런 과정은 당연히 폴링의 주기에 따라 서버의 부하가 달라진다.실시간 채팅이라면 연결과 해제가 수도 없이 발생하여 비효율적이다. 이런 문제를 해결하기 위해 롱 폴링 기법 사용된다. 롱 폴링은 연결 후 응답이 오거나 time out까지 연결을 유지할 수 있다.하지만 채팅이 적다면 time out마다 재연..
URL 링크 단축이란? 아래와 같이 긴 URL은 공유 시, 텍스트 크기가 굉장히 길어지는 단점이 있다.https://www.google.com/search?q=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&oq=%EB%A7%81%ED%81%AC+%EB%8B%A8%EC%B6%95&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIGCAEQRRg90gEINzcxNmowajGoAgCwAgE&sourceid=chrome&ie=UTF-8 🔎 링크 단축: Google 검색 www.google.com 이런 URL은 메시지나 SNS 공유를 위해 사용하기에는 불편하고 보기도 좋지 않다.이를 위해 최근에는 아래와 같이 같은 링크를 단축된 길이의 URL로 변환해서 공유를 하는 경우가 많다. ..
저번 게시글에서는 AWS IPv6 전용의 Egress only IGW를 다뤄보았다.EC2에서는 IPv4와 IPv6가 모두 사용가능한데, 실제 통신에 사용되는 것은 어떤 것일까? 일단 변하지 않는 원리는 하나다.IPv4 주소는 IPv4로, IPv6 주소는 IPv6로 통신한다.IPv4와 IPv6는 엄연히 구조가 다른 주소 체계이므로 하나를 안다고 다른 하나를 유추할 수는 없다. 두 가지 주소를 모두 지원한다면 어떤 주소 방식으로 통신할지는 아래의 과정을 따른다. 1. DNS 조회서버의 IP를 DNS 서버로부터 쿼리한다.이때 해당 서버가 IPv4 주소만 가진다면 IPv4로, IPv6 주소만 가진다면 IPv6로 통신하게 된다.(다른 IP 주소를 유추할 수 없으므로 방법이 없다. )하지만 서버가 IPv4와..
Docker 컨테이너들의 대부분은 리눅스 컨테이너로 만들어졌다. 하지만 AWS의 ECS(Docker engine base) 세팅에서 알 수 있듯이, Windows OS인 EC2 상에서도 리눅스 컨테이너는 동작할 수 있다.Windows에서는 리눅스 컨테이너가 어떤식으로 동작하는지 알아보자. WSL(Windows Subsystem for Linux)Windows OS를 사용한다면, 리눅스 환경을 위해 타입 1 혹은 2의 하이퍼바이저를 통해 리눅스 가상머신을 실행해야 한다.하지만 WSL을 사용하면, 별도의 가상머신 없이도 Windows OS에서도 리눅스 환경을 제공받아 리눅스 명령어를 실행할 수 있게 된다.WSL 1과 2는 구조적 차이가 존재한다. WSL 11버전에서는 Linux 커널 요청인 Sys..
정말 빠르면 1~2초 안에 시청자에게 도달하는 라이브 스트리밍 방송들은 어떻게 이뤄지는 걸까?이를 네트워크 프로토콜을 중심으로 알아보자. 1. 카메라 데이터의 인코딩 카메라로 촬영한 영상이 해당 플랫폼이 지원하는 코덱으로 변환되어한다. 코덱(codec)은 어떠한 데이터 스트림이나 신호에 대해, 인코딩이나 디코딩, 혹은 둘 다를 할 수 있는 하드웨어나 소프트웨어를 일컫는다. 또, 이를 위한 알고리즘을 가리키는 용어로도 쓰인다.일반적으로 코덱이라고 하면 영상, 음향 등 미디어 정보를 압축하는 기술을 가리킨다.- 위키피디아- 코덱을 통해 영상의 데이터 스트림을 디코딩이 가능하게 압축한다.이때 비손실 코덱의 경우 원본의 정보를 그대로 살려 압축하기 때문에 압축률이 높지 않다.데이터가 커질수록 네트워..
리눅스 계열의 OS를 사용하면 apt, yum, dnf와 같은 명령어를 사용해 패키지를 다운로드한다.이때 각 명령어가 어떻게 다른지 확인해 보자. 리눅스 배포판일단 리눅스는 각 배포판에 따라서 사용되는 패키지 다운/설치 명령어가 다르다.대표적으로는 데비안 계열과 레드헷 계열이 있다. 1. 데비안 계열의 경우데비안 계열의 대표적인 OS가 바로 Ubuntu이다.Ubuntu에서는 .deb 형식의 컴파일된 바이너리 패키지 포맷을 사용한다. dpkg이 .deb 형식의 데비안 패키지 관리 시스템이 dpkg이다.dpkg는 .deb 패키지의 설치, 삭제, 정보 제공을 위해 사용되는 저레벨 도구이다. 문제는 우리가 사용하는 대부분의 패키지들은 다른 기본 패키지들에게 의존성을 가진다는 것이다.dpkg로 패키..
Hypervisor의 OverCommit가상화의 핵심인 하이퍼바이저는 자원을 극한으로 효율적으로 사용하기 위해 OverCommit 기능을 사용한다. VM들이 모두 같은 자원량을 나누어 사용한다고 가정해 보자.이 기능을 사용하면, 하이퍼바이저가 물리 호스트의 자원을 정확히 VM 개수만큼 N등분하지 않고 N개 이상의 VM을 동작시킨다. 사실 모든 VM이 자원을 100% 활용하지 않기 때문에, AWS와 같은 CSP 입장에서는 자원을 1:1 크기로 예약해 두면 유휴 자원이 발생한다. 이러한 자원 낭비를 막고자 물리적인 컴퓨팅 자원보다 VM들에게 더 많은 CPU와 메모리를 프로비저닝 하게 된다. 이를 Overcommit이라고 한다. CPU overcommitCPU overcommit은 CPU 자원을 물..
Docker를 사용하다 보면, Ubuntu Image위에 세팅을 하여 container Image를 빌드하고는 한다.그렇다면 이 Image는 하나의 VM처럼 Ubuntu OS를 가상화해 제공해 주는 것일까?Host OS의 커널을 공유하기 때문에 경량화와 최적화가 가능했는데, 이런 것이 가능할까?또는 CentOS에 Docker를 설치하고 Ubnutu Image를 실행하면, 동작이 가능한 것일까? (미리 언급하면 가능하다.) 이번에는 이 주제에 대해서 알아보자. 핵심은 Host OS의 커널 공유 왼쪽에서 확인할 수 있듯이, Docker는 Host OS위에 Docker engine이 동작하여 Container 들이 이 커널을 공유하는 형태이다.따라서 container는 일종의 프로세스처럼 취급될..