서버가 쿠버네티스 환경으로 이전하게 되면서부터 client ip 추출 이슈가 발생하기 시작했습니다. 203.0.113.1 와 같이 클라이언트의 공인 아이피가 잘 추출되었는데 서버 환경이 바뀌면서부터 203.0.113.1, 192.168.1.100 와 같이 두 개의 아이피가 추출되는 현상이였습니다. 아이피 추출 코드String clientIp = request.getHeader("X-Forwarded-For"); 기존 서버 구성은 다음과 같았습니다.새로운 서버 구성은 다음과 같습니다. | 문제의 원인쿠버네티스 환경으로 이전하게 되면서 web server 앞단에 k8s proxy 가 추가되었습니다. client에서 L4 스위치로 패킷이 전달되면 L4 스위치는 X-Forwarded-For 헤더에 클라이언트 아..
본, 깨p.10요건대 부모가 아이들에게 가르치고 전해야 하는 것은 숙달에 이르는 보편적 원리다. 어떤 사회, 어떤 자리에 놓이더라도 그곳에서 숙달의 경지에 이르는 이치를 간파하여 내 것으로 만들어 나가는 힘. 아이들에게 이 힘을 길러줄 수 있다면, 부모로서 느끼는 불안감은 상당 부분 덜게 될 것이다. 어떤 분야에서든 숙달의 경지에 이르는 요령을 한번 터득하면 낯선 일에도 자신감을 가지고 임할 수 있으며, 이는 결국 성공으로 이어진다. p.41'기술을 훔치는 힘'은 '기술을 훔치려는 의지'가 있어야 강해질 수 있다. 단순한 모방과 훔쳐서 내 것으로 만드는 것의 차이가 바로 이 부분이다. 기술을 훔치려면 그저 눈으로 보기만 하는 것으로는 부족하다. 범위를 좁혀 반드시 훔쳐야 할 핵심을 찾아내야 한다. 이 핵..
브라우저에서 https://google.com URL을 호출 했을 때 패킷이 어떻게 만들어지고 전송되는지를 알아보겠습니다.1. 도메인 이름을 IP 주소로 변환 (DNS 조회)브라우저는 google.com 도메인에 대한 IP 주소를 알아내기 위해 DNS 서버에 요청합니다. UDP 패킷을 만들고, DNS에 질의하면 DNS 서버가 응답을 해줍니다. DNS 서버가 응답해준 UDP 패킷에는 google.com 도메인에 대한 IP 정보가 담겨져 있습니다. 그리고 IP 정보를 로컬 PC의 DNS 캐시에 저장합니다. 테스트를 한번 해보겠습니다. 브라우저에서는 자체적으로 관리하는 DNS 캐시가 있기 때문에 윈도우에서 테스트 하는 방법으로 해보겠습니다. 윈도우 PowerShell 프로그램을 실행하고, ping google..
본, 깨p.33왜 특정한 몇몇만이 얼토당토않은 자기합리화로 그런 잔인하고 극악무도한 범죄를 서슴지 않고 저지르는 것일까? 그것은 바로 위에서 언급한 고립감 때문이다. 공동체에서 나의 존재가 소외되어 있다고 느끼는 사회적 배제감, 자신만이 고립되어 있다고 느끼는 이 생각들이 무력감으로 이어지고, 이 무력감이 분노로 치환되는 것이다. p.79세상에는 그 어떤 사건도 가벼운 사건은 없다. 보통 '살인 사건과 사기 사건은 다르지 않나?'라고 생각할 수 있다. 이것은 피해자의 입장이 되어보지 않아서 쉽게 하는 말이다. 피해 당사자가 되어보지 않으면 누구도 쉽게, 그리고 가볍게 범죄의 경중을 따질 수 없다. 그 어떤 범죄도 사소하고 가벼운 것은 없다. p.82이론과 실제는 반드시 같은 거야. 틀리다면 둘 중에 하나..
NAT의 종류를 알고 있더라도 실제 WebRTC 에서의 홀펀칭을 대입해 보면 생각보다 복잡하고, 머릿속에서 잘 정리되지 않습니다.이때 가장 쉽게 이해하는 법은 NAT의 매핑 테이블을 기준으로 홀펀칭을 이해하는 방법이 가장 좋다고 생각합니다.각 NAT별 홀펀칭을 설명하기에 앞서 Peer에서 UDP 소켓을 생성하여 패킷을 전송하고 수신하는 코드를 잠시 살펴보겠습니다. Java를 예제로 한 샘플 코드입니다.import java.net.DatagramSocket;import java.net.DatagramPacket;import java.net.InetAddress;public class UdpClientExample { public static void main(String[] args) { ..
본, 깨p.69새로운 것을 선택하기 전에 과거의 것은 모두 훌훌 털어 내야 한다. 하지만 우리는 그 끝에서 과거의 틀은 그대로 유지하려는 경향이 있다.중요한 선택을 해야 하는 시기에 항상 발목을 잡는 것은 과거에도 그리고 지금에도 내가 누리고 있는 것들이다. 과거에 연연하지 말고, 앞으로 5년 10년 뒤의 내 모습을 그려보자. 그럼 선택이 좀 더 쉬워질 것이다. p.70밤에는 아무리 늦게까지 깨어 있어도 이미 몸과 마음이 지쳐서 스트레스 해소거리를 찾을 수밖에 없습니다. 반면 일찍 자고 다음날 일찍 일어나면 정신은 맑고 몸은 에너지를 회복합니다. 그리고 그 좋은 에너지를 가장 먼저 내가 하고 싶은 일에 쓰는 것이죠.중요한 일, 우선 순위가 높은 일을 가장 먼저 해야 한다. 에너지가 충만한 시간에 중요한 ..
WebRTC를 이용하여 서비스를 하게 되면 NAT 동작 원리에 대한 깊은 이해를 요구하게 된다.처음 WebRTC 스트리밍 서비스를 개발할 때에는 NAT 동작 원리에 대해서 신경쓰지 못했다. 막연하게 NAT에서 UDP 홀펀칭을 지원하고, WebRTC 라이브러리를 사용하면 P2P 통신이 가능하다고 이해했을 뿐이다. P2P 통신이 불가능한 상황이 발생할 수 있으므로 이럴 때에는 relay 통신을 지원하기 위한 turn 서버가 필요하다고만 생각했다. 서비스를 운영하고, 고도화 하는 과정에서 P2P 연결에 대한 의문점들이 계속 쏟아져 나왔다.개발 환경에서 테스트 할 때 항상 relay 통신만 되는 이유?회사 안에 있는 peer와 회사 밖에 있는 peer가 서로 스트리밍 연결이 될 때 항상 relay 통신만 되는 ..