Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
저번 게시글에서는 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는 일종의 프로세스처럼 취급될..

3Tier 기본적으로 3Tier는 Presentation, Application 그리고 Data Tier로 나뉜다.여기서 웹서비스라면 Presentation Tier는 Web server로, Application Tier는 WAS(Web Application Server)로 대표된다. Data Tier는 주로 RDBS처럼, 웹 개발 중에 자연스럽게 분리되는데 문제는 Web server와 WAS이다.검색하는 여러 장점이 있더라도 Web server와 WAS를 굳이 다른 서버로 분리할 필요가 있을까?WAS의 Nginx나 Apache가 Web server의 역할도 수행해도 문제가 없어 보이기도 한다. 실제로 PHP의 대표적인 웹 서비스 오픈소스인 워드 프레스는 web server와 WAS가 하나로 합쳐..

참조:https://captcha.tistory.com/78 [#1. Kubernetes 시리즈] 3. CNI란? (Container Network Interface) 이번 글에서는 쿠버네티스를 설치하기 전에 간략하게 CNI(Container Network Interface)에 대하여 알아보겠습니다. 무작정 문서대로 설치만 하기 보다는 내가 설치하는 애가 무엇인지 알고 가는게 좋을 captcha.tistory.com 참조: https://coffeewhale.com/packet-network2 [번역]쿠버네티스 패킷의 삶 - #2 쿠버네티스 패킷의 삶 #1에서 살펴 봤듯이, CNI plugin은 쿠버네티스 네트워킹에서 중요한 역할을 차지합니다. 현재 많은 CNI plugin 구현체들이 존재합니다. 그 중..

Kubernetes Deployment 버전 업데이트를 위해 사용한다. Replica set의 상위 오브젝트로서 생성 시, 대응되는 Replica set도 자동 생성된다. 따라서 Replica set을 생성하는 경우는 거의 없다. Deployment는 애플리케이션을 업데이트할 때 레플리카셋의 변경 사항을 저장하는 리비전을 남겨 롤백을 가능하게 해주고, 무중단 서비스를 위한 롤링 업데이트 전략을 적용할 수 있다. 하나씩 없애고 v2에 새로 생성한다. 트래픽을 점차 v2 pod들로 옮겨주면, 서비스 중단 없는 무중단 서비스가 실현이 된다. Deployment 생성해 보기 # deployment.yaml cat > deployment.yaml apiVersion: apps/v1 kind: Deployment#..

Kubernetes Replicasets 일정 개수의 파드를 유지하는 컨트롤러이다. 동일한 여러 개의 파드를 유지해야 할 때, 파드들을 일일이 정의해서 직접 생성하기 보다는 Replica set이라는 오브젝트를 사용한다. Replicaset을 사하면 더 이상 파드의 상태를 관리할 필요가 없어지고, Replica set이 자동으로 일정 개수만큼 유지해 준다. Replica set 또한 Pod처럼yaml파일로 정의 후에 apply 시키면 된다. # 테스트 레플리카 # replicaset.yaml cat > replicaset.yaml apiVersion: apps/v1 kind: ReplicaSet# kind가 레플리카 셋 metadata: name: replicaset-cloud spec:# 레플리카의 스..