컴퓨터의 동작 방식
: 키보드와 마우스같은 입력 장치로 명령어를 입력하면 컴퓨터가 이를 실행해줌
언어의 구분
컴파일러 vs 인터프리터
컴파일러(compiler)
실행과정 Ex) C언어
1) 코드 작성
2) 전처리(Preprocessing)
3) 컴파일(compile) : C -> 어셈블리어
4) 어셈블(Assemble) : (실행되진 않지만)실행하려는 목적을 가지고 프로그래밍(.O)
5) 링크(Linking)
6) 실행(Execution)
인터프리터(interpreter)
실행과정 Ex) Python
1) 소스코드 작성
2) 토큰을 구문 트리로 변환
3) (선택적) 바이트 코드 생성
4) 프로그램 실행
컴퓨터 전체 동작 흐름
1) 입력 장치에 데이터와 명령어 입력
2) CPU와 메모리로 데이터 전달
3) CPU에서 레지스터 및 산술 논리 연산 장치를 통해 명령어 수행
4) 처리 결과를 출력 장치로 전달.
: 컴퓨터는 메모리에 저장된 위치 주소를 참조해서 데이터를 식별함
(우편 시스템의 주소와 우편 번호를 생각하면 좋음)
메모리 계층 구조(Memory Hierachy)

: 상위 계층의 저장장치일수록 데이터 접근 빈도가 높고, 처리속도가 빠르며, 가격이 비싸며 용량이 작다.
(= 하위 계층의 저장장치일수록 처리속도가 비교적 느린 대신 가격이 저렴하고 용량이 크며, 데이터 접근 빈도가 낮은 데이터를 보관한다.)
| 구분 | RAM | ROM |
|---|---|---|
| 명칭 | Random Access Memory | Read-only Memory |
| 개요 | 실시간으로 사용하는 정보를 저장하고 빠르게 접근할 수 있도록 하는 시스템의 단기 데이터 저장소 | 컴퓨터 구동을 위한 기본적인 데이터가 담긴 장기 데이터 저장소 |
| 쓰기 | 읽고 쓰기 가능 | 읽기만 가능 |
| 처리속도 | 빠른 처리 속도 | 느린 처리 속도 |
| 가격 | 비싼 가격 | 싼 가격 |
주기억장치 : 현재 실행되고 있는 데이터와 명령어를 저장
RAM
ROM
보조기억장치 : 전원이 꺼져도 지워지지 않아야 할 데이터를 저장하는 기억장치.
Ex) SSD(Solid State Driver, USB, CD-ROM...
: 데이터와 명령어를 처리하는 제어 장치, 프로세서(Processor) 라고도 함
: CPU의 성능은 클럭 속도와 코어 수로 결정됨
클럭 속도 (Clock Speed)
: CPU가 초당 처리할 수 있는 연산 속도 (GHz 단위)
코어 수 (Cores)
: CPU 내에서 독립적으로 연산을 수행하는 단위 (듀얼코어, 헥타코어...)
CPU의 동작 흐름
Fetch(인출) : 메모리로부터 명령어 인출
→ Decode(해석) : 앞에서 받은 명령어 해석 후 필요한 정보 저장
→ Excute(실행) : 명령어 수행 후 결과 저장
구성
산술 논리 연산 장치(Arithmetic and Logical Unit)
: 산술 연산과 논리 연산을 계산하는 디지털 회로
논리 연산
: 참/거짓(True/False) 두 가지 값으로 수행하는 연산
: 논리곱(AND), 논리합(OR), 부정(NOT)을 가장 많이 사용
- 가산기(Adder) : 덧셈 연산을 수행하는 논리 회로
- 보수기(Complementor) : 2의 보수를 계산해주는 논리 회로
레지스터(Register)
1) ALU 연산을 지원하는 역할
: ALU의 산술 및 논리 연산 수행을 직접 지원함.
2) CPU 전반을 지원하는 역할
: ALU와 간접적으로 작용하며 CPU의 실행 흐름과 데이터를 지원함.
3) 입출력(I/O)을 지원하는 레지스터
: CPU가 외부 장치와 통신할 때 사용하는 레지스터.
4) 스택 관련 레지스터
: 스택 메모리를 사용하는 작업을 지원하는 레지스터
스택 메모리
: 함수 호출, 리턴, 로컬 변수 저장 등에 사용되며, 스택 포인터는 스택의 데이터 삽입(PUSH) 및 제거(POP)를 관리함
- 스택 포인터(Stack Pointer, SP) : 스택의 최상단(top)을 가리키는 주소를 저장
제어장치(Control Unit)
: 처리할 명령어를 해독 및 실행하며 CPU의 전체적인 흐름을 제어
시스템 버스
: 컴퓨터 시스템 내에서 신호를 전송하는 경로
: CPU, 메모리, 입출력장치 등 모든 장치는 시스템 버스를 통해 데이터를 주고받음
메인보드
: 컴퓨터 장치들을 시스템 버스를 통해 물리적으로 연결하는 역할.
: 하드웨어와 소프트웨어를 관리하고 제어하는 소프트웨어
- 하드웨어 : 컴퓨터 시스템에 물리적으로 존재하는 모든 부품
- 소프트웨어 : 사용자의 요구에 따라 컴퓨터 시스템에서 작동하는 프로그램
- 응용 소프트웨어
: 특정 작업을 수행하기 위해 설치하는 소프트웨어
Ex) 웹 브라우저, Word, Excel, 게임 등- 시스템 소프트웨어
: 하드웨어와 상호작용하며 컴퓨터 시스템을 관리해주는 소프트웨어
Ex) 운영체제, 컴파일러, 인터프리터 등
: 컴퓨터의 자원(resource)을 효율적으로 관리해주는 프로그램
프로그램
: 특정 목적을 위해 실행 순서를 정해둔 명령어들의 집합
운영체제의 종류로는 Window, Mac, Linux 등이 있다.
1) 메모리 관리
: 프로그램 실행 시 메모리 공간을 효율적으로 할당하고 보호하는 과정
: 프로그램은 논리 주소를 사용하여 실행되는데, 운영체제는 이를 물리 주소로 변환하고, 적절한 위치에 데이터를 저장함.
메모리 할당 (Memory Allocation)
: 프로그램이 실행될 때 메모리의 일정 공간을 제공해 주는 것.
메모리 공간 해제 : 프로그램이 작업을 마치면 할당을 마치고 메모리 공간을 비워줘야 함
메모리 보호 : 할당된 동안에는 프로그램끼리 서로의 메모리 공간을 침범하지 못함
연속 할당 (Continuous allocation)
: 연속돼있는 메모리 공간을 제공
=> 빠르고 관리가 쉬우나, 메모리 여유공간을 많이 요구함
불연속 할당 (Noncontinuous allocation)
: 메로리 공간을 무작위(연속적이지 않은 순서)로 할당
=> 여유공간을 줄여 메모리를 효율적으로 활용할 수 있으나, 관리가 복잡함
메모리 분할
: 여러 개의 프로그램을 동시에 적재하기 위해 메모리 공간을 여러 개로 나누는 기법
메모리 분할 문제
- 외부 단편화
: 메모리 공간이 남지만 연속적이지 않아서 사용할 수 없는 경우 발생하는 문제
- 고정 분할에서의 외부 단편화 예시
: 고정길이 3으로 분할된 빈 메모리 공간에서,
5의 길이를 필요로 하는 프로그램에 공간을 할당해줄 수 없는 경우- 가변 분할에서의 외부 단편화 예시
: 가변 분할 기준에서 최소 길이나 최대 길이에 제한이 있는 경우, (드물게) 해당 길이 제한을 초과하거나 미달하는 경우- 내부 단편화
: 할당해준 메모리 공간 중 일부를 사용하지 않는 경우 메모리가 낭비되는 문제
- 고정 분할에서의 내부 단편화 예시
: 고정길이 3으로 분할된 빈 메모리 공간에서,
1이나 2의 메모리를 필요로 하는 프로그램에도 3의 길이의 메모리를 할당해줘야 하는 경우- 가변 분할에서의 내부 단편화 예시
: 가변길이의 단위가 2인 경우, 홀수(1,3,5...) 길이의 프로그램에 2,4,6... 길이의 메모리 공간을 할당해줘야 하는 경우
2) 프로세스 관리
: 프로세스가 실행되는 순서를 관리
멀티태스킹
: 여러 개의 작업을 동시에 실행하는 것으로, 프로세스 스케쥴링을 통해 가능함
3) 사용자 인증, 방화벽 등 보안 및 인증 관리
4) 네트워크 자원 관리
5) 파일과 디렉터리를 생성, 복사, 삭제하는 파일 시스템 관리
6) 입출력 작업과 입출력 장치의 관리
메모리 관리 방식
스와핑(Swapping)
요구 페이징(Demand Paging)
: 페이지 단위의 스와핑
: 메모리를 페이지 단위로 나누어 프로그램을 여러 조각으로 분할하고, 요청이 있을 때 페이지 테이블에서 해당 페이지를 메모리에 로드함.
: 자주 사용하는 데이터를 실제 물리 메모리에 저장하여 빠르게 접근할 수 있도록 함. 이 때 실제 물리 메모리는 비교적 속도가 느린 하드 디스크의 캐시 역할을 하게 됨.
: 고정 단위로 페이지를 분할하기 때문에 내부 단편화 문제가 발생할 수 있음
페이지 테이블
: 가상 메모리(논리 주소)와 물리 메모리(물리 주소)를 매핑하는 표
- 페이지(Page)
: 메모리를 일정한 크기로 나눈 작은 단위
캐시(Cache)
: 자주 사용하는 값이나 데이터를 임시로 복사해놓는 장소
: 반복해서 자주 사용하는 데이터를 빠르게 접근할 수 있어 컴퓨터의 성능을 향상시킴
세그먼테이션(Segmentation)
: 프로그램을 논리적으로 나눈 세그먼트 단위(코드, 데이터, 스택 등)로 메모리에 할당함.
: 이 때, 세그먼트는 가변 크기의 단위이므로 각 세그먼트의 크기는 서로 다를 수 있음
페이징 + 세그먼테이션
: 세그먼테이션 방식으로 나눈 데이터를 페이지 단위에 따라 분할하는 방식
: 두 방식의 장점을 결합한 방식이나, 세그먼트 테이블과 페이지 테이블, 총 두 테이블을 거치는 단계가 필요하므로 속도가 느려질 수 있음

: 애플리케이션은 응용 소프트웨어이므로 실제 운영체제의 범위는 쉘까지임
가상 메모리(Virtual Memory)
: 가상 메모리는 실제 주소(물리적 주소)가 아닌 가상의 주소(논리적 주소)로 메모리를 관리함
: 실제 물리 메모리 용량이 부족할 경우, 프로그램이 실제로 실행되는 부분만 메모리에 저장하여 물리 메모리 크기보다 큰 프로그램을 실행할 수 있도록 해줌.
=> 사용자 입장에서는 실제 메모리 크기보다 더 큰 메모리를 사용하는 것처럼 보임
: 운영체제로부터 실행을 위해 필요한 자원을 할당받아 운영체제 안에서 실행 중인 프로그램.
- 싱글 프로세스 : 하나의 프로세스만 실행
- 멀티 프로세스 : 여러 개의 프로세스가 독립적인 메모리 공간에서 실행
정적 할당과 동적 할당
| 구분 | 정적(Static) 할당 | 동적(Dynamic) 할당 |
|---|---|---|
| 설명 | : 프로그램 실행 전 미리 메모리를 할당함 | : 프로그램 실행 도중에 메모리를 할당함 |
| : 실행 전 할당받은 메모리 크기가 실행 중 변하지 않음 | : 실행 도중에 할당받을 크기가 변할 수 있음 | |
| 장점 | 프로그램 실행 중 메모리를 할당받는 과정이 없어 속도가 빠름 | 실행에 필요한 메모리 크기를 실행 중 변경 가능해서(가변적) 필요한 만큼의 메모리만 사용할 수 있음 |
| 데이터 크기가 늘어났을 때 추가로 메모리를 할당받을 수 있음 (코드를 변경하지 않아도 됨) | ||
| 단점 | 잉여 메모리가 발생하여 자원의 낭비가 이루어질 수 있고, 데이터 크기가 커질 경우 코드를 수정해야 함 | 실행에 필요한 메모리 크기를 예측해야 하고 예측한 크기를 실행 중에 바꿀 수가 없어서, 실제 데이터 크기에 비해 많은 메모리를 요구함 |
프로세스의 메모리 구조
커널(Kernel)
: 하드웨어와 소프트웨어(Application)의 인터페이스
: 프로세스 스케쥴링, 메모리 관리, 입출력 제어 등 운영체제의 핵심 기능을 담당하는 소프트웨어
쉘(Shell)
: 커널과 사용자 간의 인터페이스, 명령어 해석기라고도 불림
Ex) dash, cmd, Powershell...
: 사용자가 입력한 명령어를 해석하여 커널에 전달하고, 커널이 실행한 결과는 사용자에게 출력하는 소프트웨어
=> 서로 다른 프로세스가 동시에 자원에 접근했을 때 발생할 수 있는 동기화 문제 등을 관리해줌
프로세스의 상태
프로세스의 상태 전이도

1) 생성(New/Created) 상태
: 메모리에 프로그램이 로드되어 프로세스가 생성된 상태
2) 준비(Ready) 상태
: 언제든 실행할 수 있는 상태의 프로세스들이 우선 순위대로 준비 리스트에 들어가서 CPU 할당을 기다리고 있는 상태
3) 실행(Running) 상태
: CPU가 할당된 프로세스들이 실제 작업(명령어)를 수행하는 상태
4) 대기(Blocked/Waiting) 상태
: 진행 중인 프로세스가 특정 작업(자원)/이벤트를 진행하기 위해서 잠시 대기하는 상태
: 대기 상태의 프로세스들은 블록 리스트에 들어가 있으며, 해당 작업이 끝나면 다시 Ready로 돌아감
4-1) 지연 준비 상태(Suspended Ready)
: 프로세스가 메모리 부족 등으로 인해 디스크로 Swap-out(스왑 아웃)되어 일시적으로 활동 중단된 상태
: Ready 상태로 돌아갈 준비는 끝났지만, 아직 메모리 자원이 다시 할당되지 않았기 때문에 CPU에 접근할 수 없음
: 메모리가 다시 확보되면, 프로세스는 Swap-in(스왑 인)되어 Ready 상태로 전환됨
4-2) 지연된 대기 상태(Suspended Block)
: 프로세스가 I/O 작업 또는 이벤트 처리를 기다리는 중에 메모리가 부족해 디스크로 Swap-out된 상태.
: Blocked(대기 상태)에 있었지만, 메모리 자원을 잃었기 때문에 완전히 중단된 상태.
: 필요 조건(예: I/O 작업 완료 및 메모리 회수)이 충족되면, Suspended Ready로 전환되고 다시 Ready Queue로 돌아갈 준비를 함.
5) 종료(Terminated) 상태
: 모든 명령어가 완료된 상태
: 이후 프로세스가 메모리에서 삭제됨
프로세스의 상태 전이
Dispatch (Ready → Running)
: 준비 큐(Ready Queue)에 있는 프로세스 중 하나를 선택하여 CPU를 할당하는 과정.
Ex) CPU가 대기 상태에서 가장 우선순위가 높은 작업(프로세스)을 실행하도록 선택.
목적: CPU가 할당되어 실행 상태로 전환.
Interrupt (Running → Ready)
: 프로세스가 CPU 사용 시간을 초과(Time Slice 경과)하거나 인터럽트 발생 시 CPU에서 내려오고 다시 준비 상태로 전환됨.
Ex) 하나의 작업이 너무 오래 실행되지 않도록 하여 다른 프로세스가 CPU를 사용할 기회를 얻음 (공정성 확보).
목적: CPU 독점 방지, 공정한 자원 분배
Block (Running → Waiting)
: 실행 중인 프로세스가 입출력(I/O) 등 추가 자원을 요청하면서 대기 상태로 전환됨.
Ex) 파일을 읽거나 네트워크 데이터를 수신하는 작업을 요청하면 프로세스는 Wait 상태로 전환.
목적: I/O 작업 완료를 기다리는 동안 CPU를 다른 작업에 할당하기 위함.
Wake-Up (Waiting → Ready)
: 대기 중인 프로세스가 I/O 작업 또는 이벤트 처리가 완료되면 다시 준비 큐로 이동하여 Ready 상태가 됨.
Ex) 네트워크 데이터 수신이 완료되었을 때 해당 프로세스가 다시 준비 상태로 돌아감(Ready 큐의 뒤에 추가됨).
목적: 작업 준비가 완료된 프로세스가 다시 CPU를 요청할 수 있도록 함.
Swap-Out (Ready 또는 Waiting → Suspended)
: 메모리 부족 등의 이유로 커널이 프로세스를 디스크로 이동(Swap-out)하여 메모리를 회수하는 과정.
Ex) 실행 대기 중이거나 대기 상태에 있는 프로세스가 디스크로 옮겨지고, 메모리가 다른 작업에 할당.
목적: 메모리 자원을 효율적으로 관리하고, 필요한 프로세스에 메모리 재할당.
Swap-In (Suspended → Ready 또는 Waiting)
: 디스크에 있던 프로세스가 다시 메모리로 로드(Swap-in) 되어 활동 상태로 돌아오는 과정.
Ex) 메모리에 공간이 확보되면 준비 상태 또는 대기 상태로 복귀.
목적: 프로세스가 메모리에 복귀하여 실행 대기 또는 작업을 완료할 수 있도록 함.
Exit (Running → Terminated)
: 프로세스의 작업이 정상적으로 완료되거나 오류 등으로 종료될 때 발생.
Ex) 프로그램 실행이 끝나거나, 예외 상황 발생으로 비정상 종료될 때.
목적: 완료된 프로세스를 메모리에서 제거하여 자원을 회수.
Context Switching (문맥 교환)
- 상태 전이가 발생할 때, 프로세스의 현재 작업 정보를 저장하고 새로운 프로세스의 작업 정보를 로드하는 과정.
- 주로 Dispatch, Interrupt, Block 시기에 발생.
: 프로세스 내 실행되는 작업의 단위
: 하나의 프로세스는 하나 이상의 스레드로 구성
- 싱글 스레드 : 하나의 작업을 완료할 때 까지 다른 작업을 수행하지 않음
- 멀티 스레드 : 여러 개의 스레드가 동시에 작업을 수행
멀티 프로세스 vs 멀티 스레드
- 멀티 프로세스
: 여러 개의 개별 프로세스가 서로 다른 메모리 공간과 리소스를 할당받아 각자 독립적으로 작업들을 동시에 처리하는 것
- 각 프로세스들이 서로 독립적이기 때문에 특정 프로세스의 오류가 다른 프로세스에 영향을 주지 않고 안정적이나, 프로세스 간 자원 공유가 어려우며 메모리 사용량이 많음
- 멀티 스레드
: 한 프로세스 내에서 여러 개의 스레드가 서로 메모리와 자원을 공유하며 작업을 동시에 처리하는 것
- 메모리와 리소스를 공유하여 처리속도가 빠르고 효율적이지만, 일부 스레드에서 문제가 발생했을 때 전체 프로세스가 중단될 위험이 있음
: 독립적인 프로세스들 간에 서로 데이터를 주고받는 것
: 프로세스들 간에 통신이 필요한 경우 운영체제(OS)가 정한 통신규칙임
IPC(프로세스 간 통신) 방식
프로세스 스케쥴링
: 멀티 프로세싱 상황에서 CPU가 어떤 작업을 먼저 실행할지 결정하는 작업
교착상태(Deadlock)
: 서로 자원을 기다리며 아무 일도 못 하는 상태
기아상태(Starvation)
: 우선순위가 밀려서 계속 실행되지 않는 상태

1요청 1응답 원칙
: 하나의 요청에는 반드시 하나의 응답만이 존재해야 한다.
grid system
: 페이지 콘텐츠를 논리적이고 일관성 있는 질서와 구조로 디자인할 수 있도록 돕는 그래픽 시스템(그리드 형태가 됨)
GUI(Graphic User Interface)
: 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘과 같은 그래픽으로 나타냄
REST API
약속되고 지정된 주소(URI : 서버에서의 특정 리소스 식별자)가지고 있고, 각 주소에 기능(함수)를 가지고 있는 형태
물리삭제 vs 논리삭제
- 물리삭제
: 데이터를 삭제해야 할 때 row를 바로 삭제해버리는 것
(SQL구조상 행 전체를 날리거나, 행 내 특정 칼럼을 수정하는 것만 가능함)- 논리삭제
: '삭제 여부'를 나타내는 별도의 컬럼을 두고 삭제되었음을 나타내는 값을 넣는 것
서버오류 : 클라이언트(FE)와 서버(BE)가 통신이 불가능해진 상황
트래픽 : 서버 접속 시 발생하는 통신량




차이점
| 구분 | API | 라이브러리 | 프레임워크 |
|---|---|---|---|
| 정의 | 서로 다른 소프트웨어가 통신할 수 있도록 정의된 규칙이나 인터페이스 | 반복해서 자주 사용하는 등의 특정 기능을 수행하기 위해 제공되는 코드의 모음(package라고도 함) | 애플리케이션을 개발하기 위한 구조와 규칙을 제공하는 기반 |
| 역할 | 기능 접근 통로 (규칙 제공), 서비스 간 연결 | 특정 작업을 돕는 도구 | 애플리케이션 구조를 설계하고 개발 흐름을 제어 |
| 제어권 | 호출 방식과 데이터 교환 정의 | 개발자가 원하는 부분만 호출 | 전체 애플리케이션 흐름 제어 (역제어) |
| 예시 | REST API, Windows API | React, NumPy | Angular, Spring |
API: 마치 레스토랑 메뉴처럼, "이 기능을 사용하려면 이렇게 요청하세요!"라고 명확히 정해진 규칙이다. 예를 들어, Google Maps API는 "내게 이렇게 요청하면 지도를 제공하겠다"는 약속을 의미한다.
라이브러리: 주방에 놓인 다양한 요리 도구들이다. 개발자는 필요할 때 이 도구들을 골라서 사용하면 된다. 예를 들어, Python의 NumPy는 수학 계산을 위한 도구 모음이다.
프레임워크: 요리 레시피와 주방 전체를 제공하는 체계라고 볼 수 있다. 개발자는 이 레시피대로 요리하며, 필요한 도구도 기본적으로 제공된다. 예를 들어, Spring은 Java 웹 애플리케이션을 만들기 위한 틀이다.
구글의 검색엔진 3단계
- 1. 크롤링
: 신규/수정된 웹페이지를 찾는 프로세스.
: 파싱을 통해 검색하고자 하는 정보 획득- 2. 색인 생성
: googlebot이라는 크롤러를 통해서 크롤링 후, 알고있는 모든 페이지를 색인에 저장함.
: 이 때, 색인 항목은 해당 페이지의 콘텐츠와 위치를 명시함- 3. 최종 검색결과 제공