후하하핫
5k
2021-12-24 09:49:03
20
3661

TCP/IP는 바보 같은 아이디어였다 (feat. 기술이 선택되는 이유에 대해)


0. 전화기, 라디오, 그리고 TV


TCP/IP가 처음 나왔을 때, 이건 굉장히 비합리적인 아이디어였습니다. 당시의 가장 널리 퍼졌던 네트워크인 전화와 비교해서 설명해 보죠.

전화의 클라이언트와 서버를 생각해보면, 클라이언트, 즉 전화기는 아주 아주 단순한 원리로 만들어져 있습니다. 극단적으로는 종이컵에 실을 끼워서 대화하는 것을 전기공학으로 옮겼다고 말할 수 있을 정도죠.

대신 서버, 즉 교환기 (처음엔 교환원이었죠) 가 복잡해집니다. 즉, A가 B에게 전화를 걸고 싶을 때 그 둘을 연결 시켜주는 과정이 복잡합니다. (그러니까 처음에 사람을 썼겠죠?) Circuit switching 이라고 부르는 이 방식은 회로와 회로의 연결성을 매우 큰 경우의 수로 바꿔줘야 했는데, 이 이유로 교환기는 매우 가격이 비싸졌고, 교환기를 운영하는 통신사의 권력이 매우 막강했습니다.


사실 라디오와 TV도 마찬가지입니다. 아시다시피 라디오는 중학교 기술가정 시간에 만드는 걸 배울 정도로 만드는 게 쉽고, TV 역시 디스플레이 기술이 빡센 거지 안테나만 있으면 정보를 수신하는게 그렇게 어려운 기술이 아니었습니다. 대신 송신을 위한 인프라를 설치하는게 빡셌고, 그 이유로 방송사의 권력이 막강했었던 이유 중 하나입니다.


일견 당연합니다. 사용자들은 인프라 사업자들에 비해 돈이 없고, 그러다 보니 더 싼 기계를 쓰는게 맞고 서버는 더 비싼 장비들로 구성 되는 게 맞지 않나요?


TCP/IP는 어떨까요?


1. TCP/IP: 사용자에게 책임을 다 떠넘기는 구조


TCP/IP는 완전히 다른 방식을 택합니다. 클라이언트에게 서버보다 더 많은 일을 하게 하는 거죠.


OSI 7 Layers Explained the Easy Way - REAL security

그림. OSI 7 계층


OSI 7 계층을 보면, 저 layer 하나가 추가 될 때마다 패킷 헤더가 하나씩 붙습니다. A가 B에게 카카오톡 메시지를 보내면, HTTP 헤더 붙고, SSL 헤더 붙고, session 헤더 붙고, TCP 붙고, IP 붙고, link 붙고, phy 붙은 후에 전자적인 형태로 바뀌어서 전송되죠.


그 유선일지 무선일지도 모르는 신호는 전화 시대의 교환기에는 비견되지 않을 정도로 간단한 라우터와 스위치들을 타고, link까지만 까보거나 많이 까봐도 IP까지 까보면서 B에게 도착합니다.


B의 컴퓨터에서는 또 다시 phy 까고 link 까고, IP 까고, TCP 까고, 여기서 순서 맞게 왔는지, ack 왔는지 확인하고 (A도 똑같이 이 짓을 하고 앉아 있겠죠?), 맞으면 세션 까고, SSL 까고, HTTP를 까서 고작 텍스트 메시지 "ㅎㅇ" 를 보여주게 되는겁니다. 심지어 이 과정 전에 handshake 까지 하려면 패킷이 몇번 왔다갔다 했을 걸 고려하면 지금 설명한 것보다 훨씬 많은 과정을 거쳤겠죠.


이렇게 생각해보면, 인터넷이라는건 전화 시대의 엔지니어들에겐 말도 안되는 비효율적인 아이디어이지 않았을까요? ㅎㅎ 실제로도 그 시절 논문들을 보면 왜 서버를 똑똑하게 하지 않고 저렇게 클라이언트한테 일을 다 시키냐, "ㅎㅇ" 보다 패킷 헤더가 더 크겠다 등등 TCP/IP에 대한 비판적인 얘기들이 많습니다.


2. SSH: 가성비 망함


SSH를 생각해보죠. ssh 를 통해 리눅스 서버에 들어갑니다. 가서 vim을 키기 위해 v 를 입력하는 순간, 그 1바이트를 전송하기 위해 붙는 패킷 헤더는 https://datatracker.ietf.org/doc/html/rfc6242 이 문서에 나오는 내용들을 고려해서 붙어야 하고 (ㅎㅎ 귀찮아서 안읽었습니다), 그 외에도 TCP 붙고.... 등등을 또 해야 합니다.


효율을 중시하는 엔지니어 입장에서, 이런 ssh 라는 프로토콜이 납득이 가십니까? ㅎㅎ


3. 그럼에도 불구하고


그럼에도 불구하고, 인터넷은 세계에서 가장 큰 WAN이 됩니다. SSH가 없는 세상을 생각할 수 있나요? ㅎㅎ


다른 질문으로, 왜 인류는 인터넷을 만들고 ssh를 만들었을까요?


하나의 요인은 다른 기술들의 발전입니다. 컴퓨터가 이렇게 좋아지고, 모두가 컴퓨터를 쓰게 될거라고 생각을 못했죠. 또한 통신 속도가 이렇게 빨라져서, ssh 헤더 보내는 정도는 문제가 안될지는 몰랐죠.

하지만 결국 이러한 발전이 일어난 근본적인 이유는 기술이 사람들의 문제를 해결해 주는 방법이기 때문이라고 생각합니다. 사람들은 더 연결되고 싶어하고, 컴퓨터를 원격으로 사용하고 싶어하잖아요.


재밌게도, 이렇게 사람들의 니즈를 해결하기 위해 기술적으로 말도 안되는(?) 짓을 하고 나니, 오히려 기술적으로 가능한 것들이 생깁니다. Packet switching 방식으로 바뀌다 보니, 패킷 사이의 시분할을 할 수 있게 되고, 그 덕에 유튜브를 끊김 없이 보면서 카카오톡을 할 수 있게 되었죠. Circuit switching의 전화 시대에서는 생각을 할 수 없는 변화가 일어나게 된 것입니다.

말도 안되는 짓을 한 김에, 사람들은 더 말도 안되는 짓을 합니다. 그냥 서킷 스위칭으로 되던 전화를 굳이 패킷 스위칭 기반으로 하고 (정말 뻘짓이죠), 비디오를 스트리밍해서 보는 미친 짓을 하게 되죠. 이 결과로 엄청난 산업들이 만들어지고, 통신사와 방송사의 권력 구조에도 영향을 주게 됩니다. (유튜버들은 TCP/IP에 감사해야 합니다 ㅎ)


4. 마치며


가끔 개발자끼리 토론할 때 "기술적으로 안되니까 이건 안돼" 라고 얘기하면서 상상의 폭을 좁히는 경우를 봤는데 (물론 저도 업무로 그런게 들어오면 당황스럽긴 할 것 같습니다만...), 어쩌면 혁신은 "지금까지 가능했던 것"과 "그럼에도 불구하고 사람들이 원하는 것" 간의 충돌에서 나타나는 것이지 않을까 싶습니다.


가능한 것을 상상하는 것보다 이루어 졌으면 하는 것, 실제로 사람들이 겪는 문제에 대해서 생각해보면 오히려 더 좋은 엔지니어링 문제를 풀 수 있게 되지 않을까요?


P.S.

이번엔 좀 기술적으로 스토리를 써봤는데, 덕후 취향(?)의 글이라 좋아하실지 모르겠네요. 반응이 좋으면 이런 식으로 야매(?) IT 기술사도 간간히 올려 보겠습니다.



36
19
  • 댓글 20

  • wnjxj
    104
    2021-12-24 10:15:07
    신입 개발자인데 이러한 이야기는 재밌기도 하고 배울것도 생기네요 자주 써주세요
  • Ok_Ja
    20
    2021-12-24 10:16:36

    진짜 재밋게 읽었습니다

    다른 얘기도 기대할게요!!

  • Mambo
    7k
    2021-12-24 10:24:10
  • 후하하핫
    5k
    2021-12-24 10:26:16

    @Mambo: 와우… 제가 고터를 많이 가서, 갈때마다 왜 저렇게 디자인 했을까 궁금했는데 이런 이유가 있었군요. 덕분에 재미있는 글 읽었습니다, 감사합니다 ㅎㅎ

  • 글펑감별사
    256
    2021-12-24 10:31:44

    너무나도 재밌게 읽었습니다. 감사합니다.

  • 개발한발
    318
    2021-12-24 10:54:20

    긴 글 임에도 너무 재밌고 다시 생각하게 된 말씀이었습니다. 감사합니다.

  • richard7
    1k
    2021-12-24 11:54:52

    재밌게 읽었습니다 연재해주세요!    

  • Sangyoung
    2
    2021-12-26 08:23:18

    이야기 쉽고 재미있게 쓰시네요 감사합니다

  • illuza
    1k
    2021-12-26 22:02:24

    글 잘 읽었습니다. TCP/IP의 헤드가 그렇게 덕지덕지 붙은 이유 중의 하나는 그 당시 사람들은 데이터가 정말 안정적으로 이 컴퓨터에서 저 컴퓨터 사이 (컴퓨터 내부가 아님)로 전달이 될것인지 확신하지 못하였기 때문입니다.


  • 후하하핫
    5k
    2021-12-26 22:23:27

    @illuza: 그건 지금도 사실 그렇습니다. 무선 인터넷 환경이 만들어지고 IoT 시대가 되어가는 이유도 있고요.

  • 기획개발자
    109
    2021-12-26 23:20:01

    저같이 개발 후발주자들은 내가 사용하고 있는 기술의 기반들이 어떻게 생겨났는지를 구체적으로 알기가 어려운데 재미있게 읽어봤습니다.

    앞으로도 이런 주제로 글을 계속 올려주시기를 희망합니다. 🙏 (제발요)

  • 안녕임
    42
    2021-12-27 16:12:27

    관점이 좀 다르네요

    비트하나마다 이유를 보면 정말 대단하다고 생각하고 엄청 효율적이라고 생각했어요 처음부터

  • 지붕뚫고높이차
    1k
    2021-12-27 18:49:16
    여러번 읽어봤는데 잘 이해를 못하겠습니다.

    TCP/IP 어떤점이 바보같은 아이디어인지
    궁금하네요.
  • 커리조아
    36
    2021-12-28 00:25:40
    계층이 어떤느낌으로 작동하는지 헷갈렸었는데, 궁금함이 풀렸네요 감사합니다.
  • 베텔게우스
    90
    2021-12-28 14:37:46

    실제로 HTTP/3는 TCP의 비효율성을 개선하기위해 UDP 방식을 채택한걸로 알고있습니다

  • 후하하핫
    5k
    2021-12-28 18:12:45

    @안녕임: 그건 TCP/IP가 버전업을 계속 거쳐서 refine 된 것이기 때문입니다. 효율은 throughput 만 보면 헤더 안붙이는게 더 낫겠죠? Interoperability, Scalability, stability 는 안좋겠지만요.

    @지붕뚫고높이차: 실제로 바보 같다는건 아니고요 ㅎㅎ 예를 들면 전화가 있는데 굳이 TCP/IP를 왜 만드냐, 라고 말하는 옛날 사람이 있겠죠? (예전에 실제로 이렇게 생각을 했었고요) 기술 그 자체보다 그 기술을 이용해 어떤 것을 enable 시킬까가 중요하다는 얘기를 하고 싶었습니다.

    @베텔게우스: 말씀하신 유사 Transport layer protocol의 이름은 QUIC 입니다. 나중에 기술사 시리즈에서 얘기할 구글의 만행(…)으로 인해 탄생해서 쓰이고 있는 프로토콜입니다만, 이 친구도 multiplexing을 더 잘하는 장점이 있는 것 뿐이지 TCP 와 결국 하고 싶은 것은 같습니다.

    QUIC은 저에겐 참 걱정되는 프로토콜인데… 이것도 나중에 다뤄보도록 하겠습니다.

  • Cyp
    488
    2021-12-28 20:16:07

    동의합니다. 새로운 프로토콜을 도입할 필요성이 있지요.

    다만 인터넷이라는 특성상 모두가 사용하기에 완전히 바꾸려면 최소 30년은 걸릴듯 합니다.

  • positive
    1
    2021-12-30 11:14:56

    AI의 붐이랑 비슷하다는 생각이 드네요!

    폭발적인 성능의 하드웨어가 상용화되기 전에는 인공지능을 다들 포기했었으니 인공지능을 바보같은 생각이라고 여겼을 수도 있겠어요. 기술 발전으로 호황기를 맞았다는 점이 TCP와 유사하네요ㅎㅎ

    재밌는 얘기 들려주셔서 감사합니다 너무 재밌게 잘 읽었어요

    -1
  • OKKY
    3k
    2022-01-01 02:38:42
    해당 게시물은 관리자에 의해 사는얘기에서 칼럼로 이동 되었습니다.
  • 베텔게우스
    90
    2022-01-07 21:44:03

    @후하하핫 오... 기대하겠습니다!

  • 로그인을 하시면 댓글을 등록할 수 있습니다.