컴퓨터 과학(CS)의 세계에서 하드웨어와 운영체제가 '개인'을 위한 기초라면, 네트워크는 개인과 개인을 연결하는 '사회'이고, 소프트웨어 공학은 그 위에서 가치를 창출하는 '건설 철학'이다. 이번 글에서는 데이터가 흐르는 길인 네트워크의 원리와, 견고한 소프트웨어를 만드는 공학적 방법론에 대해 정리한다.
1. 컴퓨터 네트워크: 데이터가 흐르는 길
네트워크는 단순히 선을 연결하는 것이 아니라, 서로 다른 시스템이 대화할 수 있도록 규칙(Protocol)을 정하는 과정이다.
1.1 통신망의 기초
디지털 시대에 우리는 왜 디지털 신호를 선호하는가? 아날로그는 외부 간섭에 약하지만, 디지털(0과 1)은 정보를 복구하기 쉽고(적은 정보 손실), 수학적 연산을 통해 암호화가 용이하기 때문이다.
데이터를 전송하는 방식에는 여러 기준이 있다.
- 전송 방식: 한 번에 한 비트씩 보내면 직렬(Serial), 여러 비트를 동시에 보내면 **병렬(Parallel)**이다. 또한, 클럭 신호에 맞춰 약속된 시간에 보내면 동기식, 시작/정지 비트를 사용해 임의로 보내면 비동기식이라 한다.
- 전송 방향: 라디오처럼 듣기만 하면 단방향, 무전기처럼 번갈아 말하면 반이중(Half-Duplex), 전화기처럼 동시에 말하고 들으면 **전이중(Full-Duplex)**이다.
- 망의 범위: 좁은 사무실은 LAN, 도시는 MAN, 국가나 대륙을 넘어서면 WAN으로 분류한다.
1.2 OSI 7계층 모델과 프로토콜
네트워크 통신의 복잡성을 해결하기 위해 ISO는 통신 과정을 7단계로 표준화했다. 이를 OSI 7계층이라 한다.

- Physical (물리 계층): 0과 1을 전기 신호로 변환한다. (장비: 허브, 리피터)
- Data Link (데이터 링크 계층): 물리적 주소(MAC)를 사용하여 인접 기기 간 신뢰성 있는 전송을 담당한다. 전송 단위를 **프레임(Frame)**이라 한다. (장비: 스위치, 브릿지)
- 이더넷(Ethernet): 유선 LAN의 표준. CSMA/CD 기술을 써서 데이터 충돌을 감지하고, 충돌 시 임의 시간 대기(Exponential Backoff) 후 재전송한다.
- 와이파이(Wi-Fi): 무선은 충돌 감지가 어려워 CSMA/CA (충돌 회피) 방식을 사용한다.
- Network (네트워크 계층): 데이터를 목적지까지 가장 안전하고 빠르게 보낼 경로(라우팅)를 찾는다. 단위는 **패킷(Packet)**이다. (IP, ICMP, IPSec)
- Transport (전송 계층): 양 끝단(End-to-End)의 사용자들이 신뢰성 있게 데이터를 주고받게 한다. (TCP, UDP)
- Session / Presentation / Application: 세션을 관리하고, 데이터 형식을 변환(암호화/압축)하며, 사용자가 실제 접하는 응용 프로그램(HTTP, FTP 등) 단계를 의미한다.
신뢰성을 위한 기술들:
- 흐름 제어(Sliding Window): 수신 측이 처리할 수 있는 만큼만 데이터를 보낸다.
- 오류 검출: 간단하게는 1의 개수를 맞추는 패리티 비트부터, 데이터 다항식 연산을 이용한 체크섬(Checksum) 등을 사용한다.
1.3 IP 네트워크와 주소 지정
인터넷은 거대한 약속, 즉 **프로토콜(Protocol)**의 집합이다.
- IP 주소: 네트워크상의 집 주소다. 과거에는 A, B, C 클래스로 나누었으나 낭비가 심해, 현재는 CIDR(사이더) 블록을 이용해 유연하게 주소를 할당한다.
- Port(포트): 집 안의 '방 번호'와 같다. 하나의 IP(서버) 안에서 웹(80), 메일(25) 등 어떤 프로세스가 데이터를 받을지 구분한다.
- TCP vs UDP:
- TCP: 연결 지향형. 3-way Handshake(SYN, SYN-ACK, ACK)를 통해 연결을 맺고 데이터를 확실히 보낸다. 느리지만 정확하다.
- UDP: 비연결형. 데이터를 던지기만 한다(Datagram). 스트리밍처럼 속도가 중요할 때 쓴다.
2. 소프트웨어 공학: 코딩을 넘어 공학으로
소프트웨어 공학(Software Engineering)은 소프트웨어의 개발, 운용, 유지보수에 체계적이고 정량적인 접근법을 적용하는 것이다. 즉, **"최소한의 비용으로 최대한의 품질을 뽑아내는 기술"**이다.
2.1 품질과 프로세스
소프트웨어는 눈에 보이지 않아 품질 보증이 어렵다. 이를 관리하기 위해 조직의 성숙도를 평가하는 모델이 존재한다.
- CMMI: 조직의 개발 프로세스 역량을 5단계(Initial ~ Optimizing)로 평가한다. 레벨이 높을수록 프로세스가 정량적으로 관리되고 최적화되어 있음을 의미한다.
- 형상 관리(SCM): 소스 코드의 변경 사항을 버전별로 관리하여, 실수했을 때 언제든 과거로 되돌릴 수 있게 한다(Git 등).
2.2 개발 방법론: 폭포수 vs 애자일
소프트웨어를 만드는 방식은 크게 두 가지 철학으로 나뉜다.
- 폭포수 모델 (Waterfall): 고전적 방식. 요구사항 → 설계 → 구현 → 검증 → 유지보수가 물이 떨어지듯 순차적으로 진행된다. 다음 단계로 넘어가면 되돌리기 어렵다. 명확한 요구사항이 있는 프로젝트에 적합하다.
- 애자일 모델 (Agile): 변화에 유연하게 대응하는 방식. "계획을 따르는 것보다 변화에 대응하는 것", "문서보다 작동하는 소프트웨어"를 중시한다.
- 스크럼(Scrum): 짧은 주기(Sprint)로 개발하고 피드백을 받는다.
- XP(eXtreme Programming): 짝 프로그래밍(Pair Programming) 등을 통해 품질을 극한으로 높인다.
2.3 클린 코드와 리팩토링
"돌아가기만 하는 코드"는 시한폭탄과 같다. 유지보수 가능한 코드를 작성해야 한다.
- 코드 리뷰: 동료들이 내 코드를 검토하는 과정. 버그 발견뿐만 아니라 지식 공유의 장이 된다. 격식을 갖춘 **코드 인스펙션(Inspection)**이나 FTR 같은 방식도 있다. 이때 핵심은 "작성자를 비난하지 않고 코드 자체만 비판하는 것"이다.
- 리팩토링(Refactoring): 외부 동작은 그대로 둔 채, 내부 구조를 깔끔하게 개선하는 작업. 기술 부채를 갚는 과정이다.
- 클린 코드: 읽기 쉽고, 의도가 명확하며, 중복이 없는 코드. 이것이 뒷받침되어야 애자일한 대응도 가능하다.
마치며
네트워크가 전 세계를 하나로 묶어주는 신경망이라면, 소프트웨어 공학은 그 신경망 위에서 돌아가는 시스템을 건강하게 유지하는 면역 체계와 같다. OSI 7계층의 흐름을 이해하고, 애자일한 사고방식으로 클린 코드를 작성하는 것. 이것이 훌륭한 엔지니어가 갖춰야 할 기본 소양이다.
'Programmers' 카테고리의 다른 글
| [89일차]웹 서비스 풀사이클 개발의 이해: 프로세스부터 아키텍처까지 (1) | 2026.01.27 |
|---|---|
| [88일차]클라우드 컴퓨팅의 이해와 마이크로서비스 아키텍처 (1) | 2026.01.26 |
| [86일차]하드웨어부터 데이터까지: 컴퓨터 구조, OS, 그리고 데이터베이스 (1) | 2026.01.22 |
| [85일차]컴퓨터의 언어부터 설계까지: 정보의 표현과 구조적 이해 (0) | 2026.01.21 |
| [84일차]모니터링 시스템과 전체 회고 (1) | 2026.01.19 |