F-Lab
🚀
깊이 있는 개발자 커뮤니티, 데브클럽에 함께 하세요

[기술 면접 대비] CS는 어디에 써먹을 수 있을까요? - 네트워크편

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

 

안녕하세요! F-Lab의 대표멘토 Fitz라고 합니다.

 

CS공부는 너무 지겨운데 정말 어디에 써먹을 수 있을까요..?

 

제가 상담을 하다보면 자주 듣는 이야기 중 하나가 “CS 공부는 하는데 어디에 써먹어야할지 모르니 동기부여도 안돼고 막막하다..” 라는 말을 자주 듣습니다.

 

그래서 IT서비스 기업과 빅테크 기업으로 취업/이직 준비를 하시는 분들을 위해 CS 지식의 활용처를 알 수 있는 꼬리질문 컨텐츠를 만들어보았습니다 🔥

 

이번 편에서는 네트워크의 기본적인 내용에 대한 얘기와 그 지식을 활용하여 어떤 문제들을 해결할 수 있는지를 소개하고 있습니다. 토글로 접혀있어 적어보일 수 있지만, 펼쳐보시면 여러 키워드들을 얻으실 수 있으실겁니다. 💪

 

많은 분들께 도움이 되길 바랍니다!

 

 



 

 

본질적인 질문

네트워크 통신은 성능을 상당히 저하시키는 작업이라고 알려져 있습니다. 왜 그럴까요?

 

빛의 속도는 1초에 지구를 몇 바퀴 돌 수 있을까요?
지구 반대편에 있는 미국에 있는 서버와 TCP 통신을 하려면 우리는 어느 정도의 성능 저하를 감수해야할까요?
TCP로 통신을 하려면 어떤 과정들을 거치게되나요?
3way handshake → 요청 → 응답 → 4way handshake
여러분이 지금 사용하고 있는 인터넷의 대역폭은 얼마인가요? 즉 초당 어느 정도의 데이터를 주고받을 수 있나요?
우리가 개발하면서 네트워크를 통해 주고받는 데이터는 어떤것들이 있을까요?
  • 웹, 모바일에서 사용되는 이미지, 폰트, 동영상
  • 웹, 모바일에서 서버에 요청하는 JSON 데이터
  • 서버에서 데이터베이스와 주고받는 데이터
  • 마이크로서비스에서 다른 서비스를 호출할 때 주고받는 데이터
위와 같은 데이터를 주고받을 때 데이터의 용량이 커지면 어떤 문제가 발생할까요?
  • 주어진 대역폭보다 큰 데이터를 주고받으면 지연이 발생합니다.


 



 

위의 이론을 활용해 해결할 수 있는 문제

지그재그, 에이블리와 같은 쇼핑몰 모아보기 서비스를 만들려합니다. 그럼 아주 많은 쇼핑몰들을 크롤링해야하는데 크롤링 속도를 어떻게 튜닝할 수 있을까요?
크롤링을 할 때는 어떤 자원들을 고려해야할까요? 네트워크 자원도 상관이 있을까요?
  • HTML을 파싱하기 위한 CPU 자원
  • 쇼핑몰 서버를 호출해서 데이터를 받아오기 위한 네트워크 자원
  • 파싱한 쇼핑몰 데이터를 데이터베이스에 저장하기 위한 네트워크 자원
  • 쇼핑몰 서버에서 가져온 방대한 데이터를 담아두기 위한 메모리 자원
크롤링 속도를 튜닝할 때 네트워크 자원을 어떻게 쥐어짜서 성능을 높힐 수 있을까요?
데이터를 최대한 많이 발송하고, 많이 수신하여 네트워크 대역폭을 최대한 활용해야합니다.
  • Blocking 방식을 이용할 경우 스레드의 개수를 늘려 동시 요청의 개수를 늘립니다.
  • Non-Blocking 방식을 이용하면 많은 요청을 빠르게 던질 수 있어 동시 요청의 개수를 편하게 늘릴 수 있습니다.
  • (RDB를 사용할 경우) Blocking 방식으로 통신하기 때문에 Connection 1개당 1개씩밖에 요청을 보내지 못합니다. 그래서 Connection Pool을 사용하여 동시에 많은 요청을 보낼 수 있도록 합니다.
네트워크 통신 자체가 비싼 작업이므로 통신하는 횟수를 줄여야합니다.
  • 반복문을 돌며 DB에 1개씩 Insert 작업을 시키기보단 Bulk Insert를 활용해야합니다.
(보너스) 다른 자원들은 어떤 것들을 고려해야할까요?
CPU를 쥐어짜려면 어떤 것들을 고려해야할까요?
  • 멀티 스레딩과 멀티 프로세싱을 활용하여 멀티코어를 활용할 수 있어야합니다.
  • 스레드가 Block되지 않도록 하여 CPU 활용률을 높혀야합니다.
  • 너무 과도한 스레드를 사용하지 않게 하여 컨텍스트 스위칭 비용을 줄입니다.
메모리는 무엇을 고려해야할까요?
  • 어쩌다 갑자기 너무 많은 양의 데이터가 메모리에 쌓여버려서 Out of memory 에러가 발생하면 어플리케이션이 죽어버릴 수 있지 않을까요?

 

 

웹페이지를 만들었는데 접속했을 때 페이지가 뜨는 속도가 느립니다. 빠르게 하려면 어떻게 해야할까요?
폰트, 이미지들의 파일 용량이 크면 네트워크로 전송하는데에 시간이 오래 걸려 성능이 저하될 수 있습니다.
  • Image Compressor 를 검색해보시면 이미지의 용량을 줄일 수 있습니다.
  • 이미지나 동영상의 사이즈를 줄이는 것도 방법입니다. 대부분의 상황엔 초고화질의 이미지가 필요 없기 때문입니다.
  • 폰트도 저용량버전이 있습니다.
  • 개발자 도구를 켜셔서 네트워크 탭을 보시면 어떤 것들이 용량이 큰지 확인하실 수 있습니다.

 

서버를 운영중인데 유저가 많아져 대용량 트래픽을 처리해야합니다.
  • API에서 제공되는 json의 크기를 줄이는 것도 방법입니다. 예를 들자면 개행과 공백은 필수적인게 아니기에 지우면 용량을 줄일 수 있습니다. 일반적으로 프레임워크를 사용할 경우엔 내부적으로 이런 옵션이 내장되어 있습니다.


 



 

여기까지 준비해봤습니다. 긴 질문 보느라 고생 많으셨습니다.

감사합니다!


 

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수

멘토링 코스 선택하기

  • 코스 이미지
    Java Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Node.js Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Python Backend

    대규모 서비스를 지탱할 수 있는 대체 불가능한 백엔드, 데이터 엔지니어, ML엔지니어의 길을 탐구하는 성장 과정

  • 코스 이미지
    Frontend

    기술과 브라우저를 Deep-Dive 하며 성능과 아키텍처, UX에 능한 개발자로 성장하는 과정

  • 코스 이미지
    iOS

    언어와 프레임워크, 모바일 환경에 대한 탄탄한 이해도를 갖추는 iOS 개발자 성장 과정

  • 코스 이미지
    Android

    아키텍처 설계 능력과 성능 튜닝 능력을 향상시키는 안드로이드 Deep-Dive 과정

  • 코스 이미지
    Flutter

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    React Native

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    Devops

    대규모 서비스를 지탱할 수 있는 데브옵스 엔지니어로 성장하는 과정

  • 코스 이미지
    ML Engineering

    머신러닝과 엔지니어링 자체에 대한 탄탄한 이해도를 갖추는 머신러닝 엔지니어 성장 과정

  • 코스 이미지
    Data Engineering

    확장성 있는 데이터 처리 및 수급이 가능하도록 시스템을 설계 하고 운영할 수 있는 능력을 갖추는 데이터 엔지니어 성장 과정

  • 코스 이미지
    Game Server

    대규모 라이브 게임을 운영할 수 있는 처리 능력과 아키텍처 설계 능력을 갖추는 게임 서버 개발자 성장 과정

  • 코스 이미지
    Game Client

    대규모 라이브 게임 그래픽 처리 성능과 게임 자체 성능을 높힐 수 있는 능력을 갖추는 게임 클라이언트 개발자 성장 과정

F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 1600-8776 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로63길 12, 438호 | copyright © F-Lab & Company 2024