이번 포스팅에서는 Kubernetes in Action, 매니징 쿠버네티스 을 활용하였습니다. 이 포스팅과 더불어 한우형님의 블로그, Rancher Labs 자료 등을 함께 보시면 더 좋습니다. 1. 기본적인 특징 * 네트워크 구성방식과 관계없이 파드간의 통신 - 모든 Pods는 다른 Pod와 NAT(Network Address Translation)을 사용하지 않고 통신할 수 있다. - 모든 Nodes는 NAT를 사용하지 않고 모든 Pods와 통신할 수 있다. 2. Container-to-Container Networking * NET namespace가 외부와 통신하는 방식 veth interface를 이용하여 두 개의 interface가 Pair를 맺은 후, 한쪽 Interface에 패킷이 들어오면..
ATDD 강의 코드리뷰 중 이런 질문을 받았다. 질문의 요지는, /stations/{id} 혹은 /stations?name={name} 등과 같은 요청에 해당하는 데이터가 없을 경우, 어떤 응답코드가 적절한가이다. HTTP Status Code에 대해서는 나름대로 기준을 세웠던지라 별다른 고민은 없었는데, 팀원과 이야기 중에 생각이 다른 부분이 있어 다른 리뷰어들과도 이야기를 나누어보았다. 이 내용을 정리하고 공유하고 또 다른 의견들을 듣는 것도 좋을 거 같아 포스팅해본다. 우선, 200이 적절하다는 주장을 살펴보자. HTTP에서 이야기하는 resource 라는 개념을 서버 데이터와 엮지 않고 온전히 URI 라고 보아야 한다. 즉, 서버의 데이터 없음을 HTTP resource와 엮지 않아야 한다는 것으..
이번 포스팅에서는 Real MySQL, 시스템 성능 최적화, 데이터베이스를 지탱하는 기술, 데이터 전문가 지식 포털 을 활용하였습니다. 1. 왜 학습해야 할까? 대부분의 웹 애플리케이션은 DB에서 데이터를 조회하고 저장하는 작업이 주를 이루므로, 통상 서버 처리시간의 70% 이상이 SQL을 처리하는데 사용되곤 한다. (Datastore 비교) 성능과 관련된 이미 여러 글(부하란 무엇인가?, 테크세미나 후기)에서 언급했듯 성능 개선에 앞서 병목지점을 확인하는 것이 중요하다. 2. 어떤 단계로 학습할 것인가? APM을 사용할 경우, 요청의 지연현상을 파악하기가 수월하며, 최근 Google은 Service mesh를 활용하여 SLO 등의 지표로 시스템을 관리하기도 한다. 하지만 도구에 의존적인 학습은 사용법을..
이번 포스팅에서는 HTTP 완벽가이드 책을 활용하였습니다. 1. Gateway 프로토콜/통신계층/애플리케이션 등 이질적인 두 개의 네트워크 간에 인터페이스를 담당한다. 일반적으로, LAN구간의 Ethernet 망과 WAN 구간을 연결하는 장비를 지칭하기도하며, 3 Layer로 한정할 때 Router 장비가 Gateway 역할을 담당한다. (서버의 Default route 설정이 자동으로 Gateway로 되어 있어 모르는 네트워크에 대한 통신을 할 경우엔 Gateway에게 패킷을 보낸다.) 1) Proxy ARP 다른 네트워크의 MAC 주소를 알아오고 싶을 때 네트워크를 분리해주는 장비(보통 라우터)에서 Proxy ARP를 설정하여 라우팅되어 있는 다른 네트워크 호스트의 MAC 주소를 자신의 것으로 대신 ..
이번 포스팅에서는 HTTP 완벽가이드 책을 활용하였습니다. 7장 Cache 이 포스팅에서는 웹 캐시를 집중적으로 다룬다. 캐싱의 숨겨진 요소들에 대해서는 이 링크를 참조하는 것이 좋겠다. 네트워크를 통해 데이터를 가져오는 것은 하드디스크나 메모리에 비해서 상당히 느리다. 그래서 웹 브라우저는 웹 페이지에 접속할 때 HTML, CSS, JS, Image 등 정적 파일을 캐싱해뒀다가 재사용한다. - 브라우저 캐시 활용 웹 캐시는 자주 쓰이는 문서의 사본을 자동으로 보관하는 HTTP 장치이다. 웹 요청이 캐시에 도착했을 때, 캐시된 로컬 사본이 존재한다면(cache hit) Origin Server가 아니라 그 캐시로부터 제공된다. - HTTP 캐싱 * 웹 캐시 이점 - 캐시는 불필요한 데이터 전송을 줄여서,..
이번 포스팅에서는 HTTP 완벽가이드 책을 활용하였습니다. 5장 web server는 github의 구현코드를 확인 바랍니다. 추가적으로 Connection 관리 학습을 하며 TCP 밑단 프로토콜 학습을 위한 코드도 작성하였으니 테스트 코드를 돌려보시거나, 직접 코드 수정 후 wireshark로 확인하실 수 있습니다. 6장 Proxy 1. Proxy란? 같은 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결하는 용도로 사용된다. (HTTP version 변환은 가능하며, 상용 Proxy Server는 SSL, 방화벽, FTP 접근 등 웹 기반 애플리케이션을 지원하기 위해 Gateway 기능이 구현되어 있다.) * 서로 다른 프로토콜을 사용하는 둘 이상을 연결하기 위해서는 Gateway를 사용한다. 2. ..
이번 포스팅에서는 HTTP 완벽가이드, 네트워킹과 웹 성능 최적화 기법, 리눅스 커널 이야기, 와이어샤크를 활용한 실전 패킷 분석 책을 활용하였습니다. 4장 Connection 관리 4. Keep-Alive * TIME_WAIT 소켓의 문제점과 대안 패킷 유실에 따른 비정상적인 통신흐름이 발생할 수 있다. 가령, 아래 그림과 같이 마지막 ACK가 중간에 유실될 경우 FIN에 대한 ACK를 받지 못했기에 LAST-ACK상태이고, SYN 요청에 대해 RST를 보낸다. 반면, TIME_WAIT이 있을 경우에는 이상을 감지하여 한번 더 FIN 패킷을 요청한다. active closer(먼저 연결을 끊는) 쪽에서 TIME_WAIT 소켓이 생성된다. [TIME_WAIT이란] TIME_WAIT 상태란 무엇인가 · T..
이번 포스팅에서는 HTTP 완벽가이드, 네트워킹과 웹 성능 최적화 기법, 리눅스 커널 이야기, 와이어샤크를 활용한 실전 패킷 분석 책을 활용하였습니다. 4장 Connection 관리 3. TCP 성능에 대한 고려 TCP의 신뢰성을 보장하기 위한 기능들이 성능과 Trade off되기도 한다. 이에 이번 포스팅에서는 성능을 보완하기 위한 몇가지 조언을 정리해본다. TCP 네트워크 지연은 하드웨어의 성능, 네트워크와 서버간의 전송속도, 요청과 응답 메시지의 크기, 클라이언트와 서버간의 거리에 따라 달라진다. * TCP Connection handshake 지연: 어떤 데이터를 전송하든 새로운 TCP connection을 열 때면, TCP 소프트웨어는 connection을 맺기 위한 조건을 맞추기 위해 연속으로..
이번 포스팅에서는 HTTP 완벽가이드, 네트워킹과 웹 성능 최적화 기법, 리눅스 커널 이야기, 와이어샤크를 활용한 실전 패킷 분석 책을 활용하였습니다. 4장 Connection 관리 2. TCP 오류 복구 기능 (신뢰성) * TCP 3 way handshake는 왕복시간 한번만큼의 latency를 발생시킨다. * TCP Slow start는 connection이 새로 만들어질 때 항상 발생한다. * TCP Flow control과 Congestion control은 모든 Connection의 처리량을 조절한다. * TCP 처리량은 현재 cwnd(Congestion Window) size에 의해 결정된다. 1) 흐름제어 흐름제어는 송신자가 수신자에게 처리하지 못할 만큼의 많은 데이터를 전송하는 것을 미리 ..
이번 포스팅에서는 HTTP 완벽가이드, 네트워킹과 웹 성능 최적화 기법, 리눅스 커널 이야기, 와이어샤크를 활용한 실전 패킷 분석 책을 활용하였습니다. 4장 Connection 관리 1. TCP Connection이란 HTTP가 메시지를 전송하고자 할 경우, 현재 연결되어 있는 TCP Connection을 통해서 메시지 데이터의 내용을 순서대로 보낸다. TCP는 Segment라는 단위로 데이터 스트림을 잘게 나누고, Segment를 IP Packet이라고 불리는 작은 조각에 담아서 인터넷을 통해 전달한다. 1) TCP와 IP IP(Internet Protocol)은 3계층의 프로토콜로 서로 연결된 네트워크의 인터네트워크를 통해 패킷(3계층의 PDU는 패킷 데이터그램)을 전달하는 목적으로 사용 특징 설명 ..