컴퓨터 네트워크를 공부하는 이유가 뭘까?

Murhyun2·2025년 4월 2일
0

네트워크

목록 보기
1/7

개발 공부를 하다 보면 CS(Computer Science) 지식의 중요성을 느끼는 순간이 오곤 한다. 특히 프로젝트에서 인프라를 담당해서 배포를 하다보니 종종 이게 도대체 어떻게 동작하고 통신은 어떻게 하는가 하는 궁금증이 생겼다. 마침 스터디에서 네트워크를 주제로 공부하기로 하여 "혼자 공부하는 네트워크" 책을 구매해 공부를 시작했다.

네트워크 들어보기는 했는데..

네트워크란 뭘까? 아주 간단하게 말하면, 컴퓨터 네트워크는 두 대 이상의 장치가 서로 연결되어 데이터를 주고받거나 리소스를 공유할 수 있도록 하는 시스템이다.

  • 데이터 교환: 우리가 웹사이트를 보거나, 메신저로 대화하거나, 파일을 다운로드하는 모든 행위가 네트워크를 위에서 이루어진다.
  • 리소스 공유: 프린터나 스캐너 같은 주변 장치를 여러 컴퓨터에서 함께 사용하거나, 특정 서버에 저장된 파일이나 데이터베이스에 접근하는 것도 네트워크 덕분이다.

우리가 매일 사용하는 인터넷 또한 전 세계의 수많은 컴퓨터 네트워크들이 연결된, '네트워크의 네트워크'라고 할 수 있다.

네트워크는 규모나 연결 방식에 따라 여러 종류로 나뉘지만(LAN, WAN 등), 결국 핵심은 '연결'과 '통신'이다. 그리고 이 연결과 통신이 원활하게 이루어지도록 하는 다양한 규칙(Protocol)이 존재한다. 한번쯤 들어봤을 TCP/IP, HTTP 이런 것들이 다 그 규칙들이다.

그래서 개발자가 네트워크를 알아야 할까?

"나는 코드를 짜는 개발자인데, 네트워크는 인프라 담당자나 알면 되는 거 아니야?" 라고 생각할 수도 있다. 하지만 다음과 같은 이유들 때문에라도 네트워크 지식은 필수적이다.

  1. 문제 해결 능력 향상 (Troubleshooting)

    • "API 요청이 왜 이렇게 느리지?", "서버에 접속이 안 돼요!", "이미지 로딩이 실패해요." 와 같은 문제들은 코드 자체의 문제일 수도 있지만, 네트워크 문제일 가능성도 높다.

    • 네트워크 지식이 있다면 ping이나 traceroute 같은 기본적인 도구를 사용해 네트워크 상태를 진단하고, '아, 이게 내 코드 문제인지, 서버 문제인지, 아니면 중간 어디가 맛이 간 건지' 감이라도 잡을 수 있다. 우리가 개발하며 맨날 보는 HTTP 상태 코드(404, 500..)를 제대로 아는 것만으로도 문제 해결의 실마리가 보인다. 모르면? 그냥 끝없는 삽질의 시작이다..😂

  2. 애플리케이션 성능 최적화

    • 네트워크의 지연 시간(Latency)과 대역폭(Bandwidth)은 애플리케이션 성능에 직접적인 영향을 미친다.

    • 네트워크 동작 방식을 이해한다면 '아, 이 데이터는 줄여서 보내야겠다', 'API 호출 횟수를 줄여볼까?', '캐싱을 이렇게 써먹으면 빨라지겠네?' 같은 생각을 하면서 성능 개선 코드를 짤 수 있게 된다.(페이로드 최적화, 요청 횟수 최소화, 캐싱 전략)
      예를 들어, 프론트엔드 개발자는 리소스 번들링이나 이미지 최적화를 통해 네트워크 부하를 줄일 수 있다.

  3. API 및 외부 서비스 연동

    • 요즘 서비스 중에 외부 API 안 쓰는 서비스는 거의 없다.(RESTful API, GraphQL 등)

    • HTTP/HTTPS 프로토콜의 작동 방식, 요청/응답 구조, 헤더, 쿠키, 인증 방식 등에 대한 이해가 있어야 안정적으로 API를 연동하고 사용할 수 있다.

    • 어떤 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용해야 하는지, 상태 코드는 무엇을 의미하는지 아는 것은 필수라고 할수 있다.

  4. 보안에 대한 이해 증진

    • 네트워크 통신 중에 데이터가 털릴 수도 있고(중간자 공격), 갑자기 트래픽 폭탄 맞아서 서버가 뻗을 수도 있고(DDoS). 이런 위협을 알아야 '아, 내 코드는 이렇게 짜면 위험하겠구나' 생각하고 대비할 수 있다.

    • HTTPS(SSL/TLS)의 중요성, 방화벽의 역할, VPN 등 기본적인 보안 개념을 알고 코드를 작성하는 것과 모르고 작성하는 것은 큰 차이가 있다.

  5. 클라우드 및 인프라 환경 적응

    • 요즘은 작은 프로젝트라도 다들 AWS, Azure 등 클라우드 환경에서 개발하고 배포하는 것이 일반적이다.

    • 클라우드 서비스들은 VPC(Virtual Private Cloud), 서브넷, 보안 그룹, 로드 밸런서 등 다양한 네트워킹 개념을 기반으로 구성된다. 이런 개념을 이해해야지만 서비스를 효과적으로 구성하고 관리하가 가능하다.

  6. 분산 시스템 및 마이크로서비스 아키텍처 이해

    • 많은 서비스가 여러 개의 작은 서비스(마이크로서비스)로 나뉘어 서로 네트워크 통신을 통해 상호작용하는 방식으로 개발된다.

    • 이런 환경에서는 '서비스끼리 어떻게 불러야 빠르고 안정적일지, 하나가 죽었을 때 다른 애들한테 영향 안 주려면 어떻게 해야 할까...' 이런 고민들이 다 네트워크랑 관련이 있다.

요즘은 많은 프론트 혹은 백엔드 개발자들 또한 기본적인 배포는 다들 할 줄 알고, 배포에는 필연적으로 다양한 네트워크적 지식이 필요하다.

예전 프로젝트에서 MySQL을 Docker 컨테이너로 서버에 올려 사용했는데, 보안 문제로 인해 DB가 해킹당하면서 모든 데이터를 날린 적이 있다...😢
그때 기본적인 포트 설정이나 접근 제어 같은 네트워크 지식만 있었더라면 막을 수 있었을 텐데...
그 일을 겪고 나서야 '아, 네트워크를 정말 알아야 하는구나'라고 뼈저리게 느꼈다.

마치며..

컴퓨터 네트워크는 단순히 '연결' 그 이상의 의미를 가진다. 우리가 만드는 소프트웨어가 사용자에게 전달되고, 다른 시스템과 상호작용하는 모든 과정의 기반이라고 할 수 있다. 네트워크 전문가 수준의 깊은 지식까지는 아니더라도, 기본적인 동작 원리와 핵심 프로토콜, 그리고 네트워크가 애플리케이션에 미치는 영향을 이해하는 것은 더 나은 개발자로 성장하는 데 중요한 밑거름이 될 것이라고 생각한다.

profile
왜?를 생각하며 개발하기

0개의 댓글