개발자가 알아야할 네트워크 지식
roadmap.sh를 참고하면 프론트엔드와 백엔드 개발자 모두 인터넷이라는 기초 지식을 필요로 하다고 말합니다. 그렇다면 위 장비들이 인터넷을 사용하기 위해서 어떠한 용도로 사용되는 장비라는 것을 아는 개발자가 얼마나 될까요? 이미 이것들을 알거나 다루지 않는 경험 많은 개발자들은 “개발자는 저것을 사용할 일이 없어요”라고 할테지요. 물론 저도 위 장비들을 경험한 것은 개발자로 일하고 있는 지금이 아니라 컴퓨터공학과라는 이유로 가설병 보직을 받고나서 사단 내 유선 전화를 고치거나 신규로 다이렉트 전화선을 추가해야하는 요건이 있을때 사용해본 경험이 있을 뿐입니다.
심지어는 유선병이라는 이유로 늘어진 통신선을 정리하기 위해서 전봇대도 타야하는 상황도…
아무튼 위와 같은 경험이 없었더라면 인터넷을 사용하기 위해서 사용하는 RJ45 커넥터 규격이란 것을 떠올리거나 UTP 케이블을 커넥터와 결합할 때 일반적으로 나열하는 색상의 순서가 표준으로 정해져있다는 것을 알지 못했을 겁니다. 왜냐하면 현재 개발자로 일할때에는 인터넷 선에 대한 부분을 직접 다루어본다거나 이미 구성된 서버 인프라 환경을 통해서 애플리케이션을 배포하고 운영하기 때문이죠.
인터넷으로 전세계가 연결될 수 있다는 것을 알아도 우리나라에서 다른 나라로 트래픽이 전달되기 위해서는 수 많은 해저 광 케이블이 설치되고 경유한다는 것까지는 모를 수 있습니다. 실제로 개발자 또는 엔지니어가 아닌 사업팀에게 사용자의 클릭으로 인해 어떠한 요청이 서버로 전달되고 다시 돌아오는데까지 설명하더라도 바다를 통해서 다른 나라로 건너가서 서버로 들어오게 된다라고 설명하지는 않습니다.
개인적으로 궁금할 수는 있지만 굳이 모른다고해도 일하거나 이해하는데 지장이 없기 때문이죠.
해저 케이블 관련 정보
조직내에 서버 인프라 엔지니어가 있거나 인프라 팀이 존재한다면 애플리케이션으로 트래픽이 전달되도록 DNS와 NAT와 같은 설정들을 개발자가 담당하지는 않을겁니다. AWS와 같은 클라우드 서비스에서는 개발자가 직접 웹 콘솔을 통해서 클릭만으로도 서버 인프라 구성에 대한 설정을 쉽게 할 수 있도록 제공하긴 합니다. 그래서 클라우드 인프라 환경을 직접 다루는 저와 같은 개발자들은 요구사항에 따라서 인프라 구성을 검토하거나 설정을 변경해야하는 작업도 해야할 수 있기에 어느정도의 인프라 지식도 필요하게 되죠.
알아야하는 인프라 지식은 현재 조직에서 어떤 것을 경험하느냐에 따라 달라집니다.
일반적으로는 HTTP라는 통신 프로토콜을 사용하지만 사업 분야에 따라서 MQTT 통신 프로토콜를 통해 데이터가 전달된다거나 Modbus TCP를 통해 산업 자동화 장비와의 통신으로 데이터를 수집하고 심지어는 차량에서는 CAN 통신을 사용하고 OBD 모듈을 통해서 데이터를 전달받기도 하죠. 통신 프로토콜 뿐만 아니라 이더넷으로 인터넷에 접속하지 않고 프라이빗 네트워크 환경으로 연결하며 무선 통신을 통해서 인터넷으로 접속하는 인프라 환경을 경험해보지 않았다면 아마도 네트워크 우선 순위가 있다는 지식을 알지 못하고 있을 수 있씁니다.
셀룰러 모듈이 포함된 클라이언트 장비를 전달하고나서 유선 연결을 시도한 순간 인터넷 연결이 끊어져서 원격이 해제되었던 것을 실제로 경험하기도 했죠.
대부분의 개발자가 웹 서버 또는 애플리케이션에 SSL 인증서를 설치해서 HTTPS 통신을 할 수 있도록 구성할 수 있지만 AWS 클라우드 환경을 사용하지 않거나 ELB 중 NLB를 통해서 ECC 기반의 SSL 인증서를 설정하여 TLS 오프로드 기능을 설정하려고 시도하지 않았다면 2048 이상의 RSA 키 또는 EC 키가 포함된 인증서를 지원하지 않음에 대한 것을 알지 못할 수 있습니다.
결국은 개발자라는 직무에서 알아야할 네트워크 지식은 정해져있지 않으며 현재 내가 조직에서 어떠한 요구사항을 처리하는가 또는 어떤 것까지 담당하고 경험하는가에 따라 그 깊이와 범위가 달라질 수 있다는 점을 인지해야할 것 같습니다.