[week19] 실무에 쓰이는 CS 지식 기초 (3) - 05/22

Kyulee·2026년 5월 22일

TIL 

목록 보기
93/93

이번 시간에는 컴퓨터 네트워크의 기본 원리와 소프트웨어공학의 핵심 개념을 정리했습니다.


컴퓨터 통신망 기초

네트워크란?

네트워크 는 여러 컴퓨터가 서로 데이터를 주고받을 수 있도록 연결된 시스템입니다. 우리가 웹사이트를 열거나 메시지를 보내는 모든 동작이 네트워크를 통해 이루어집니다.

네트워크의 종류

종류설명예시
LAN가정·사무실 등 좁은 범위의 네트워크회사 내부망
WAN넓은 지역을 연결하는 네트워크인터넷
MAN도시 단위의 네트워크케이블 TV망

패킷 교환 방식

데이터를 전송할 때 패킷(Packet) 이라는 작은 단위로 쪼개서 전송합니다. 각 패킷은 독립적으로 최적의 경로를 따라 목적지에 도착하고, 수신 측에서 다시 조립됩니다.


OSI 7계층 모델과 프로토콜

OSI 7계층이란?

네트워크 통신을 7개의 계층으로 나누어 각 역할을 명확히 정의한 모델입니다. 어느 계층에서 문제가 생겼는지 파악하고 해결하기 쉽게 만들어 줍니다.

7. 응용 계층 (Application)   → HTTP, FTP, DNS
6. 표현 계층 (Presentation)  → 암호화, 압축, 인코딩
5. 세션 계층 (Session)       → 연결 수립·유지·종료
4. 전송 계층 (Transport)     → TCP, UDP
3. 네트워크 계층 (Network)   → IP, 라우팅
2. 데이터링크 계층 (Data Link)→ MAC 주소, 이더넷
1. 물리 계층 (Physical)      → 전기 신호, 케이블

TCP vs UDP

전송 계층의 두 가지 핵심 프로토콜입니다.

항목TCPUDP
연결 방식연결 지향 (3-way handshake)비연결 지향
신뢰성데이터 순서·손실 보장보장 없음
속도상대적으로 느림빠름
사용 예HTTP, 파일 전송스트리밍, 게임, DNS

웹 브라우저와 서버가 통신할 때 사용하는 HTTP는 TCP 위에서 동작합니다. 반면 실시간 스트리밍처럼 빠른 전송이 중요하고 일부 데이터 손실을 허용할 수 있는 경우에는 UDP를 사용합니다.

HTTP와 HTTPS

  • HTTP — HyperText Transfer Protocol. 웹 데이터를 주고받는 프로토콜입니다.
  • HTTPS — HTTP에 TLS 암호화를 추가한 버전입니다. 데이터가 암호화되어 전송되므로 중간에 탈취되더라도 내용을 알 수 없습니다.

IP 네트워크와 주소지정

IP 주소란?

IP(Internet Protocol) 주소 는 네트워크에서 각 장치를 식별하는 고유한 주소입니다. 집 주소와 같은 역할을 합니다.

IPv4: 192.168.0.1  (32비트, 약 43억 개)
IPv6: 2001:db8::1  (128비트, 사실상 무한대)

IPv4 주소가 고갈됨에 따라 IPv6로의 전환이 진행 중입니다.

서브넷과 CIDR

IP 주소를 효율적으로 관리하기 위해 서브넷(Subnet) 으로 나눕니다.

192.168.0.0/24
└── /24: 앞 24비트는 네트워크 주소, 나머지 8비트는 호스트 주소
    → 192.168.0.1 ~ 192.168.0.254 까지 254개 사용 가능

공인 IP vs 사설 IP

구분설명
공인 IP인터넷에서 유일한 주소. ISP가 할당합니다
사설 IP내부 네트워크에서만 사용. 192.168.x.x 등이 해당합니다

공유기(라우터)가 NAT(Network Address Translation)를 통해 사설 IP를 공인 IP로 변환하여 인터넷과 통신합니다.

DNS (Domain Name System)

사람은 192.168.0.1 같은 IP 주소를 외우기 어렵습니다. DNS 는 google.com 같은 도메인 이름을 IP 주소로 변환해주는 인터넷 전화번호부입니다.

브라우저에 google.com 입력
  ↓
DNS 서버에 질의: "google.com의 IP가 뭔가요?"
  ↓
DNS 응답: "142.250.206.14"
  ↓
해당 IP로 HTTP 요청

당신의 주소는

실습 문제와 연계된 내용으로, 지금까지 배운 IP 주소·서브넷·DNS 개념을 바탕으로 내 컴퓨터의 네트워크 주소 정보를 직접 확인해보는 과정을 진행했습니다.

# 내 IP 주소 확인 (macOS/Linux)
ifconfig

# 내 IP 주소 확인 (Windows)
ipconfig

# DNS 조회
nslookup google.com

# 네트워크 경로 추적
traceroute google.com   # macOS/Linux
tracert google.com      # Windows

직접 명령어를 실행해보니 내 컴퓨터가 어떤 사설 IP를 가지고 있는지, 공유기를 통해 어떤 공인 IP로 나가는지 눈으로 확인할 수 있었습니다.


소프트웨어공학이란 무엇인가

소프트웨어공학의 정의

소프트웨어공학(Software Engineering) 은 소프트웨어를 체계적이고 효율적으로 개발·유지보수하기 위한 원칙과 방법론을 연구하는 학문입니다.

코딩 실력만으로는 좋은 소프트웨어를 만들기 어렵습니다. 요구사항 분석, 설계, 테스트, 유지보수까지의 전체 과정을 어떻게 관리하느냐가 소프트웨어의 품질을 결정합니다.

소프트웨어 개발 수명 주기 (SDLC)

요구사항 분석 → 설계 → 구현 → 테스트 → 배포 → 유지보수

각 단계를 체계적으로 진행해야 요구사항 누락, 일정 지연, 품질 저하 같은 문제를 예방할 수 있습니다.


폭포수 모델과 애자일 모델

폭포수 모델 (Waterfall)

폭포수 모델 은 각 단계를 순서대로 완료한 후 다음 단계로 넘어가는 전통적인 개발 방법론입니다.

요구사항 분석
    ↓ (완료 후)
   설계
    ↓ (완료 후)
   구현
    ↓ (완료 후)
  테스트
    ↓ (완료 후)
   배포

장점 — 단계가 명확하고 문서화가 잘 됩니다. 계획대로 진행되면 예측 가능합니다.

단점 — 요구사항이 중간에 바뀌면 대처하기 어렵습니다. 문제가 뒤늦게 발견될 수 있습니다.

애자일 모델 (Agile)

애자일 은 짧은 스프린트(Sprint) 단위로 개발하고, 빠르게 피드백을 반영하는 유연한 방법론입니다.

계획 → 설계 → 개발 → 테스트 → 리뷰
  └──────── 2주 스프린트 ────────┘
  └──────── 반복 (Iteration) ────┘

장점 — 요구사항 변화에 유연하게 대응할 수 있습니다. 빠른 피드백 주기로 문제를 조기에 발견합니다.

단점 — 전체 일정과 범위를 예측하기 어렵습니다. 잦은 변경으로 팀 피로도가 올라갈 수 있습니다.

구분폭포수애자일
요구사항 변경어렵습니다유연하게 수용합니다
피드백 주기깁니다짧습니다 (2주 단위)
적합한 프로젝트요구사항이 명확하고 변경이 적은 경우요구사항이 자주 바뀌는 경우

코드 리뷰, 리팩토링과 클린 코드

코드 리뷰의 목적

코드 리뷰 는 다른 개발자가 작성한 코드를 검토하는 과정입니다. 단순히 버그를 찾는 것이 아니라 다음과 같은 목적이 있습니다.

  • 버그와 논리 오류를 사전에 발견합니다.
  • 코드 스타일과 컨벤션을 통일합니다.
  • 지식을 팀 전체에 공유합니다.
  • 더 나은 설계 방법을 제안합니다.

리팩토링이란?

리팩토링 은 외부 동작은 그대로 유지하면서 내부 코드 구조를 개선하는 작업입니다. 기능을 추가하는 것이 아니라 코드를 더 읽기 쉽고 유지보수하기 쉽게 만드는 것이 목표입니다.

// 리팩토링 전
function calc(a: number, b: number, t: string) {
  if (t === 'add') return a + b;
  if (t === 'sub') return a - b;
  if (t === 'mul') return a * b;
}

// 리팩토링 후
type OperationType = 'add' | 'subtract' | 'multiply';

const operations: Record<OperationType, (a: number, b: number) => number> = {
  add: (a, b) => a + b,
  subtract: (a, b) => a - b,
  multiply: (a, b) => a * b,
};

function calculate(a: number, b: number, type: OperationType) {
  return operations[type](a, b);
}

클린 코드 원칙

로버트 마틴(Robert C. Martin) 의 클린 코드 원칙에서 핵심만 뽑으면 다음과 같습니다.

  • 명확한 이름 — 변수, 함수, 클래스의 이름만 봐도 역할이 이해되어야 합니다.
  • 함수는 한 가지 일만 — 함수가 너무 많은 일을 하면 읽기 어렵고 테스트하기도 어렵습니다.
  • 주석보다 코드로 표현 — 주석이 필요하다면 코드 자체가 충분히 명확하지 않다는 신호입니다.
  • 중복 제거 (DRY) — Don't Repeat Yourself. 같은 코드를 여러 곳에 쓰지 않습니다.

좋은 소프트웨어를 만들기 위해

SOLID 원칙

객체지향 설계에서 좋은 소프트웨어를 만들기 위한 SOLID 5가지 원칙입니다.

원칙이름설명
S단일 책임 원칙하나의 클래스는 하나의 책임만 가져야 합니다
O개방-폐쇄 원칙확장에는 열려있고 수정에는 닫혀있어야 합니다
L리스코프 치환 원칙자식 클래스는 부모 클래스를 대체할 수 있어야 합니다
I인터페이스 분리 원칙사용하지 않는 인터페이스에 의존하지 않아야 합니다
D의존성 역전 원칙구현이 아닌 추상화에 의존해야 합니다

기술 부채 (Technical Debt)

빠른 개발을 위해 임시방편으로 작성한 코드가 나중에 수정 비용을 높이는 것을 기술 부채 라고 합니다. 부채는 이자처럼 쌓이기 때문에 정기적으로 리팩토링을 통해 해소해야 합니다.

profile
안녕하세요 매일의 배움을 기록으로 자산화하는 개발자 이규현입니다 😊

0개의 댓글