인프런 강민철님의 강의를 듣고 정리한 내용입니다.
강의에서 나오는 많은 언어는 https://csnote.net/ 에서 확인할 수 있습니다.

하드웨어

인코딩

EUC-KR은 완성형 인코딩이다. 표현하지 못하는 한글이 있어 유니코드가 등장했으며, 유니코드도 UTF-8, UTF-16 등 다양한 인코딩 방식이 있다.

CPU

레지스터는 CPU 내부에 있는 메모리로, 가장 작은 단위의 메모리이다. CPU는 레지스터에서 계산을 수행하고 결과를 다시 레지스터에 저장한다.

CPU는 의존성이 없는 명령어를 병렬 실행할 수 있다. 비순차적 명령어 실행(Out-of-Order Execution)을 지원하는 CPU는 의존성이 없는 명령어의 순서를 조정해 사이클을 최적화한다.

RISC vs CISC

구분RISCCISC
명령어단순, 고정 길이복잡, 가변 길이
구조단순복잡
전력 소비낮음높음
대표 예시ARMx86

ARM은 RISC 아키텍처로, 전력 소비가 낮아 ARM 기반 VM에 “탄소 절감”이라는 표현이 붙기도 한다.

메모리

참조 지역성의 원리

컴퓨터의 프로그램은 다음과 같은 경향이 있다. 캐시 메모리는 이 원리를 활용해 성능을 높이도록 설계되었다.1

  • 시간적 지역성(Temporal Locality): 최근 접근한 메모리 주소를 다시 접근하는 경향 (ex. 같은 변수나 함수를 여러 번 접근)
  • 공간적 지역성(Spatial Locality): 접근한 메모리 주소 근처를 접근하는 경향 (예: 배열 순회)

RAM 종류

  • DRAM (Dynamic RAM): 일반적으로 사용하는 RAM. DDR 세대가 올라갈 때마다(DDR2 → DDR3 → DDR4 → DDR5) 대역폭이 약 2배씩 증가한다.
  • SRAM (Static RAM): 데이터 상태를 유지할 수 있어 성능이 좋지만, 대용량에는 비효율적이다. 주로 캐시 메모리에 사용된다.

메모리는 주소의 시작점과 크기를 저장하고, 범위를 벗어난 요청을 거부한다.

저장장치

플래시 메모리

셀당 비트 수가 적을수록 입출력이 빠르고 수명이 길다. 대신 용량 대비 비용이 비싸다.

SSD

SSD는 삭제 단위가 쓰기 단위보다 크다. 따라서 Invalid 상태의 데이터가 존재하며, 유효한 데이터만 다른 블록에 새로 쓰고 원래 블록을 지우는 Garbage Collection이 수행된다.

RAID

여러 개의 하드디스크를 하나의 논리적인 디스크처럼 사용하여 안정성과 성능을 높이는 기술이다.

  • RAID 1: 단순 미러링(이중화)
  • RAID 4, 5, 6: 패리티 비트를 사용한 복구 지원

운영체제 (OS)

커널

커널이란 OS 내부에서 격리되어 적재된 영역으로, 하드웨어를 직접 제어하는 핵심 영역이다.

프로세스 스케줄링

I/O bound 작업은 CPU 소비가 적다. 일부 스케줄링 알고리즘에서는 I/O bound 작업의 우선순위를 높여 빠르게 처리하고, 남는 CPU 자원을 CPU bound 작업에 할당한다. (단, 이는 스케줄러 정책에 따라 다르다.)

자원별로 스케줄링 큐가 있으며, 우선순위가 적용되므로 단순 FIFO는 아니다.

메모리 관리

Swapping: 사용하지 않는 프로그램을 보조 기억 장치에 저장하는 기술이다.

외부 단편화: 연속 메모리 할당 시 빈 공간이 흩어져 총 잔여 메모리가 충분해도 할당이 실패하는 현상.

가상 메모리: 프로그램의 일부만 메모리에 로드하여 실제 메모리보다 큰 프로그램을 실행할 수 있게 하는 기술.

페이징: 메모리 주소를 페이지 단위로 나누어 불연속적으로 할당하는 기술. 페이지 테이블이 필요하다.

내부 단편화: 페이지보다 작은 프로세스가 있을 때 발생하는 메모리 낭비. 외부 단편화보다는 낭비가 적다.

페이지 테이블은 주로 메모리에 저장되지만, 자주 참조하는 부분은 TLB(캐시)에 저장된다.

파일 시스템

대부분의 OS에서 디렉토리는 특별한 형태의 파일이다. (Unix 계열 기준)


네트워크

패킷

패킷은 쪼개져서 전송되며, IP 계층에서는 기본적으로 순서가 보장되지 않는다. (TCP에서 순서 보장)

물리 계층

구리 선은 노이즈에 민감하여 일반적으로 Shield(차폐)가 필요하다.

국제 통신의 95% 이상을 해저 케이블이 담당한다. 위성 등 대안이 있지만 대역폭과 지연 시간에서 해저 케이블을 대체하지 못한다. 케이블이 손상되면 GPS 좌표를 파악하여 전용 수리 선박(Cable Ship)이 인양 후 수리한다.

물리 계층에는 주소 개념이 없다. 순수하게 전송/수신만 담당하며, 데이터 링크 계층부터 주소(MAC 주소)를 사용한다.

데이터 링크 계층

스위치의 MAC 주소 학습

스위치는 송신지 MAC 주소를 기준으로 주소 테이블에 등록하는 식으로 학습한다. 수신지의 경우, 먼저 모든 포트로 데이터를 전송(Flooding)하고, 올바른 주소의 장치가 응답 프레임을 보내면 해당 주소를 학습한다. 이후에는 등록된 주소로만 데이터를 전송한다.

에이징(Aging)

일정 시간 이상 데이터를 받지 못한 포트의 MAC 주소 정보를 테이블에서 삭제하는 과정이다.

ARP (Address Resolution Protocol)

IP 주소를 통해 MAC 주소를 알아내기 위한 프로토콜이다. 네트워크 계층(IP)과 데이터 링크 계층(MAC) 사이의 주소 변환을 담당한다.

네트워크 계층

IP Fragmentation

MTU(Maximum Transmission Unit)보다 큰 데이터를 전송할 때, 패킷을 여러 조각으로 분할하여 전송하는 기술이다. 단편화는 CPU/메모리 오버헤드를 유발하고, 하나의 조각이 유실되면 전체 패킷을 재전송해야 하므로 성능에 부정적이다. 이를 방지하기 위해 패킷 크기를 MTU에 맞추어 보내거나, DF(Don’t Fragment) 플래그를 설정한다. DF가 설정된 패킷이 MTU를 초과하면 라우터가 해당 패킷을 폐기하고 ICMP 오류 메시지를 송신자에게 반환한다.

IP 주소 체계

IP 주소에는 클래스(A, B, C 등)가 있고, 클래스에 따라 네트워크 주소와 호스트 주소에 사용되는 octet 수가 달라진다. 현재는 클래스 구분 없이 유동적으로 할당하는 CIDR(Classless Inter-Domain Routing)를 사용한다. 네트워크 부분은 1, 호스트 부분은 0으로 표기한 것이 서브넷 마스크이며, 1의 개수만으로 표기하는 것이 CIDR 표기법이다(예: /24). 호스트 주소가 모두 0인 주소는 네트워크 자체를, 모두 1인 주소는 브로드캐스트용으로 예약되어 있다.

IPv6

IPv4의 주소 고갈 문제를 해결하기 위해 등장했다. 128비트 주소 체계로 더 많은 주소를 지원하며, 확장 헤더를 통해 유연한 기능 확장이 가능하다.

특수 IP 주소

  • 0.0.0.0/8: IP 주소가 없거나 지칭할 IP가 없을 때 사용한다.
  • 0.0.0.0/0: 모든 임의의 IP 주소를 의미한다. 라우트할 주소가 명확하지 않을 때 기본 라우트(default route)로 사용된다.
  • 127.0.0.1: 루프백(loopback) 주소로, 자기 자신을 가리킨다.

NAT (Network Address Translation)

Private IP와 Public IP를 변환하는 기술이다.

  • Static NAT: Private IP와 Public IP를 1:1로 영구 매핑한다. 외부에서 먼저 접속해도 매핑이 고정되어 있으므로 Inbound가 가능하다.
  • Stateful NAT (Dynamic NAT): 연결이 시작될 때 동적으로 매핑을 생성하고 연결 상태를 추적한다. “누가 먼저 연결을 시작했는가”를 기준으로 동작하므로, Outbound 연결과 그 응답만 자동 처리할 수 있다.

NAT 기술 자체는 방향성이 없지만, CSP는 비용 효율성을 위해 1:N 매핑이 가능한 Stateful NAT를 선택했다. Stateful NAT는 연결 시작점을 추적하므로 Outbound만 자동 처리된다. 따라서 클라우드의 NAT Gateway는 Outbound 전용이며, Inbound가 필요하면 Static NAT나 Port Forwarding을 별도로 구성해야 한다.

ICMP (Internet Control Message Protocol)

패킷 전송 과정에서의 문제와 네트워크 진단 결과를 알려주는 프로토콜이다. ping, traceroute 등에 사용되며, 신뢰성을 보장하는 프로토콜은 아니다.

전송 계층

TCP vs UDP

IP 통신은 빠른 성능을 위해 수신 확인이나 사전 연결 확인 없이 패킷을 보내기만 한다. TCP는 이러한 확인 과정을 모두 거쳐 신뢰성을 보장하고, UDP는 확인 과정 없이 빠르게 전송한다.

포트(Port)

포트는 하나의 IP 주소에서 여러 프로세스나 서비스를 구분하기 위한 개념이다. 브라우저와 같은 클라이언트는 주로 동적 포트(49152-65535)를 사용하고, 서버는 잘 알려진 포트(0-1023)를 사용한다.


기타

128비트 CPU가 없는 주요 이유는 현재 64비트의 성능과 메모리 지원 용량이 대부분의 용도에서 충분하기 때문이다.

Footnotes

  1. https://www.geeksforgeeks.org/computer-organization-architecture/locality-of-reference-and-cache-operation-in-cache-memory/