■토목직 공무원의 ㅈ같은 하루
공무원 합격했다.
드디어 취준 끝났다.
부모님은 좋아하셨다.
"이제 안정적인 직장 다니는구나."
나도 그렇게 생각했다.
근데 그때는 몰랐다.
안정적인 건 직장이 아니라
매일 들어오는 민원이었다.
첫 출근.
40분 일찍 오라고 했다.
막내니까 커피포트 물 채우고,
회의실 치우고,
탕비실 과자 채우고,
쓰레기통 확인하라고 했다.
나는 직무교육보다 먼저
커피포트 위치를 배웠다.
8시 58분.
서무 주무관님 출근.
탕비실 보더니 한마디 하셨다.
"과자 채우는 순서가 있는데요?"
어제는 그냥 채우라며.
아무도 알려주지 않았지만
나는 이미 틀렸다.
그때 느꼈다.
여긴 모르면 배우는 곳이 아니라
모르면 혼나는 곳이구나.
내가 현장 가는 건지 콜센터 출근한 건지 헷갈렸다.
잠깐 전화 안 받았다.
사무실에서 전화 왔다.
"왜 전화 안 받아요? 민원인이 나한테 전화했잖아요. 나한테 피해 안 가게 전화 좀 잘 받아요."
그때 알았다.
내가 사고 나는 것보다 민원이 사무실로 들어오는 게 더 큰일이었다.
현장 도착.
먼지 맞고 사진 찍었다.
공사장 소장은 말했다. "원래 이렇게 합니다." "다른 데도 다 이렇게 해요." "보완하려면 돈 더 듭니다."
공무원 권한 말라며?
신규 토목직 권한은 딱 네 개였다.
욕먹기. 사진 찍기. 보고하기. 다시 욕먹기. 사무실 복귀.
아침에 22건이던 국민신문고가 되는 무렵 27건이 되어 있었다. 하루 종일 일했는데 업무가 늘었다.
처리하면 줄어드는 줄 알았다.
근데 민원은 달랐다. 처리하면 추가 민원. 답변하면 재민원. 현장 나가면 신규 민원. 한 명 달래면 다른 한 명 전화.
토목직의 하루는 끝나는 게 아니다.
그냥 내일로 이월된다.
퇴근길에 생각했다.
이러다 자명에 못 살겠다.
분명 안정적인 직장이라고 했다.
맞긴 했다.
민원은 안정적으로 들어왔고, 욕은 안정적으로 쌓였고, 업무는 안정적으로 늘어났다.
내 멘탈만 불안정했다.
그리고 6개월 뒤 퇴사 살았다.
다시 스터디카페에 앉았다.
다시 취준생이 됐다.
부모님은 걱정하셨다.
근데 나는 조금 행복했다.
스터디카페 책상은 알이 없었다.
민원도 안 봤다.
전화도 안 됐다.
적어도 그 책상은 나한테 욕하지는 않았다.
TCP/UDP 소켓, 네트워크 코어.
이름만 보면 솔직히 좀 지루하다.
포트, 패킷, 버퍼, 3-Way Handshake, UDP, NAT, DNS, IPv6.
그냥 면접 전에 외워야 하는 CS 용어처럼 느껴지기도 한다.
근데 어떤 지식은 자세히 알수록 대상 자체가 더 재미있어진다.
커피도 그렇다.
처음에는 그냥 맛있는 커피와 맛없는 커피 정도로만 느끼다가,
산미, 바디, 향, 후미를 조금씩 알게 되고,
원두가 어떻게 볶였는지,
물이 어떤 속도로 지나갔는지,
추출 과정에서 무엇이 달라졌는지 알게 되면
같은 한 잔도 훨씬 더 입체적으로 느껴진다.
네트워크도 비슷하다고 생각한다.
우리가 만드는 대부분의 인터넷 서비스는 결국 이 계층 위에 존재한다.
브라우저에서 버튼을 누르고,
서버가 요청을 받고,
파일이 업로드되고,
실시간 메시지가 오가고,
다른 지역의 사용자에게 응답이 도착하는 모든 과정 뒤에는
주소, 포트, 소켓, 패킷, 버퍼, 스트림이 계속 움직이고 있다.
이걸 모른다고 서비스를 못 만드는 건 아니다.
요즘은 프레임워크도 좋고, 클라우드도 좋고, AI도 코드를 잘 써준다.
하지만 내부를 알면 개발이 조금 달라진다.
`localhost`에서는 되는데 외부에서는 왜 안 되는지.
TCP 데이터가 왜 내가 보낸 단위 그대로 도착하지 않는지.
대용량 업로드에서 왜 메모리가 터질 수 있는지.
`write()`가 false를 반환했다는 게 무슨 신호인지.
UDP는 왜 빠르지만 믿고 맡기면 안 되는지.
이런 것들이 단순한 암기 지식이 아니라,
내가 만드는 서비스가 실제 세계와 만나는 방식으로 보이기 시작한다.
아마 그때부터 네트워크 공부는 조금 덜 지루해진다.
그리고 우리가 하는 개발도 조금 더 재미있어진다.
그래서 이 강의가 꽤 반갑다.
"AI 딸깍의 시대" 원리로 돌파하는 Node.js와 CS Part 3: TCP/UDP 소켓과 네트워크 코어
Express나 NestJS 같은 프레임워크 사용법으로 바로 들어가기보다, 순수 Node.js의 `net`, `dgram`, `stream`, `Buffer`를 바닥부터 만져보면서 네트워크가 실제로 어떻게 흐르는지 확인한다.
크게 네 가지 흐름을 따라간다.
먼저 네트워크 계층과 소켓의 기본 구조를 코드와 연결한다.
주소, 포트, MAC, IP 같은 개념을 암기용 단어가 아니라 서버가 연결을 식별하는 방식으로 다시 본다.
그 다음 TCP 서버를 직접 만들며 연결을 제어한다.
3-Way Handshake, Keep-Alive, 좀비 소켓, `localhost`와 `0.0.0.0`의 차이처럼 실제 서버를 띄울 때 자주 만나는 문제를 다룬다.
이후에는 양방향 소켓 통신과 데이터 파싱으로 넘어간다.
TCP 데이터가 쪼개지거나 뭉쳐 들어올 수 있다는 전제 위에서 누적 버퍼링, JSON 직렬화, 다중 접속 브로드캐스팅을 구현한다.
마지막으로 UDP, DNS, GSLB, IPv6, 그리고 대용량 파일 업로드의 스트림 배압까지 이어진다.
특히 OOM 없이 파일을 전송하고, `drain` 이벤트와 `.pipe()`로 I/O 속도 차이를 다루는 부분은 Node.js 백엔드에서 한 번쯤 제대로 봐둘 만하다.
이미 Node.js 기본기가 있다면 이 편만 따로 봐도 꽤 얻어갈 게 있어 보인다.
네트워크를 "면접용 CS"로만 두지 않고,
내가 만든 서비스가 바깥 세상과 연결되는 과정을 계속 코드로 확인하게 해준다.
감사하게도 얼리버드로 70% 를 할인중이시니 기회가 된다면 꼭 들어보시길 추천드린다.
https://t.co/4VR0Zi0JEG
디자인 감각이 없어서 프론트엔드 화면 만들 때마다 막막했던 개발자들 있을 거임.
쉽게 말해 Apple이나 Spotify 같은 대기업이 쓰는 UI 규칙을 AI한테 학습시키는 요령임.
유명 기업 디자인 시스템을 모아둔 깃허브 저장소를 Claude Code 같은 코딩 툴에 참고 자료로 지정해주면 됨. AI가 검증된 컴포넌트 규격과 색상 표를 바탕으로 코드를 짜주니까 엉성한 화면이 안 나옴.
나중에 혼자 프로토타입 UI 뽑아낼 때 디자인 뼈대로 활용하기 딱 좋음.