우리가 매일 쓰는 인터넷, 카톡, 유튜브 전부 컴퓨터들이 서로 데이터를 주고받아서 돌아간다. 근데 컴퓨터끼리 어떻게 "말이 통하는" 걸까? 그걸 다루는 게 컴퓨터 네트워크. 핵심부터 한 줄로 정리하면 이렇다.
컴퓨터 네트워크 = 컴퓨터들을 연결해서, 정해진 약속(프로토콜)대로 데이터를 주고받게 하는 시스템
우편/택배 시스템이라고 생각하면 됨! 편지(데이터)를 봉투(패킷)에 담아서, 받는 사람 주소(IP 주소)를 적고, 우체국(라우터)들을 거쳐 배달된다. 주소가 틀리면 못 가고, 봉투가 너무 크면 여러 개로 쪼개서 보냄.
핵심은 "약속(프로토콜)" 이다. 전 세계 우체국이 다 다른 규칙으로 일하면 편지가 도착을 못 하잖아? 그래서 "주소는 이렇게 쓰고, 우표는 여기 붙이고" 하는 공통 규칙이 있는 거다. 네트워크의 프로토콜이 딱 그 역할 같음!
데이터를 주고받는 규칙들이다. 대표적으로:
네트워크는 한 덩어리가 아니라 여러 층으로 나눠서 동작한다. 택배로 치면 "물건 포장 → 송장 붙이기 → 트럭 배차 → 도로 주행"처럼 단계가 나뉜 거다. 각 층이 자기 일만 하니까, 한 군데가 바뀌어도 전체를 안 갈아엎어도 됨. 면접에서 자주 나오는 게 OSI 7계층(물리/데이터링크/네트워크/전송/세션/표현/응용)인데, 실무에선 TCP/IP 4계층으로 단순화해서 많이 본다.
| TCP | UDP | |
|---|---|---|
| 특징 | 신뢰성 ↑, 순서 보장 | 속도 ↑, 가벼움 |
| 비유 | 등기우편(수령 확인) | 전단지 뿌리기 |
| 용도 | 웹, 파일전송, 메일 | 실시간 게임, 영상통화 |
브라우저에 google.com 치고 엔터 누르면 이 일이 순식간에 일어난다.
google.com → 실제 IP 주소로 변환"주소창에 입력하고 엔터 치면 무슨 일이 일어나나요?"는 개발자 면접 단골 질문인데, 그게 통째로 컴퓨터 네트워크 이야기다!
실시간 기능도 마찬가지다. 예를 들어 실시간 투표 결과를 화면에 계속 밀어주는 SSE(Server-Sent Events) 같은 것도, 결국 서버랑 브라우저가 HTTP 연결을 유지하면서 데이터를 흘려보내는 네트워크 위에서 동작하는 거다. 와이파이가 끊기면 이런 실시간 연결이 툭 끊기는 것도 같은 맥락 같음!
| 구분 | 내용 |
|---|---|
| 한 줄 정의 | 컴퓨터끼리 약속대로 데이터 주고받는 시스템 |
| 비유 | 우편/택배 (주소·봉투·우체국) |
| 핵심 약속 | IP, TCP/UDP, HTTP, DNS |
| 왜 계층화? | 층별로 일을 나눠서 유연하게 |
| 단골 면접 | 주소창 엔터 → 화면까지의 과정 |
쉽게 외우면 "데이터를 안전하게 목적지까지 배달하는 약속의 집합" — 이렇게 보면 감 잡힐 듯!
"코딩 잘하면 됐지 무슨 공학이야?" 싶을 수 있는데, 혼자 작은 거 만드는 거랑 여러 명이 큰 서비스를 몇 년씩 굴리는 건 완전히 다른 게임이다. 그 "제대로 만드는 방법"을 다루는 게 소프트웨어 공학. 핵심부터 한 줄로 정리하면 이렇다.
소프트웨어 공학 = 소프트웨어를 체계적으로 설계·개발·운영·유지보수하는 방법론과 원칙
건축이라고 생각하면 됨! 강아지집 하나 뚝딱 만드는 건 그냥 망치질만 잘하면 된다(= 혼자 하는 취미 코딩). 근데 63빌딩을 지으려면? 설계도 그려야 하고, 공정 관리해야 하고, 여러 팀이 협업해야 하고, 안전 검수도 받아야 한다.
소프트웨어 공학이 딱 이 "건축의 노하우"다. 코드를 짜는 건 망치질이고, 설계·협업·일정관리·테스트·유지보수까지 챙기는 게 소프트웨어 공학인 거다. 그냥 만드는 거랑 "무너지지 않게, 고치기 쉽게, 여럿이서" 만드는 건 다른 차원의 일 같음!
소프트웨어를 만드는 데도 정해진 흐름이 있다.
소프트웨어 비용의 대부분은 "처음 만들 때"가 아니라 "만든 다음 고치고 유지할 때" 나간다. 그래서 소프트웨어 공학은 "처음에 빨리 만들기"보다 "나중에 고치기 쉽게 만들기" 를 훨씬 중요하게 본다.
팀 프로젝트 한 번 해보면 이게 왜 중요한지 바로 와닿는다.
요구사항부터 보면 흐름이 이렇다. 사용자가 원하는 걸 듣고 → 요구사항/PRD 정리 → 화면·구조 설계 → 개발 → 테스트 → 배포 → 피드백 받고 다시 개선. 이 사이클을 잘 굴리는 게 PM·PO·개발자가 같이 하는 일이고, 그 판 전체를 설명하는 게 소프트웨어 공학 같음!
| 구분 | 내용 |
|---|---|
| 한 줄 정의 | SW를 체계적으로 만들고 유지하는 방법론 |
| 비유 | 강아지집 vs 63빌딩 (혼자 vs 협업) |
| 핵심 흐름 | 요구분석 → 설계 → 개발 → 테스트 → 배포 → 유지보수 |
| 방법론 | 워터폴(순차) vs 애자일(반복) |
| 핵심 진실 | 비용의 대부분은 "유지보수"에서 나옴 |
쉽게 외우면 "코딩이 망치질이라면, 소프트웨어 공학은 건축 전체" — 이렇게 보면 감 잡힐 듯!