yeardream25week01-part01

YoungCoder Diary·2025년 3월 20일

IT 리터러시와 컴퓨터 구조

컴퓨터의 이해

기계어, 프로그래밍 언어, 컴파일링

  • 컴퓨터의 동작 방식
    : 키보드와 마우스같은 입력 장치로 명령어를 입력하면 컴퓨터가 이를 실행해줌

  • 언어의 구분

    • 자연어 : 인간이 사용하는 언어 ex)한국어, 영어...
    • 프로그래밍 언어
    • 고급언어 : High-Level Language
      : 인간이 사용하기 쉬운 언어
      ex) Python, JAVA, JavaScript
    • 중간 수준 언어 : Mid-level Language
      : 실행 속도가 빠르며, 하드웨어 제어가 가능하고, 비트 연산이나 메모리 조작 등 어셈블리어와 비슷한 기능을 제공해서 C언어를 어셈블리어와 혼동하는 경우가 있음.
    • 어셈블리어 : Low-Level Language
      : 기계어와 일대일 대응이 가능한 언어
      : 어셈블러를 통해 기계어로 변환
      ex) GASGAS(GNU Assembler) - AT&T 문법
      NASM(Netwide Assembler) - Intel 문법
      MASM(Microsoft Macro Assembler) - Intel 문법 ...
    • 기계어 : 이진수로 이루어진 컴퓨터 언어
  • 컴파일러 vs 인터프리터

    • 컴파일러(compiler)

      실행과정 Ex) C언어
      1) 코드 작성
      2) 전처리(Preprocessing)
      3) 컴파일(compile) : C -> 어셈블리어
      4) 어셈블(Assemble) : (실행되진 않지만)실행하려는 목적을 가지고 프로그래밍(.O)
      5) 링크(Linking)
      6) 실행(Execution)

      • 전체 파일을 스캔하여 한꺼번에 번역한다.
      • 초기 스캔시간이 오래 걸리지만, 한 번 실행 파일(오브젝트 코드)이 만들어지고 나면 빠르다.
      • 기계어 번역과정에서 더 많은 메모리를 사용한다.
      • 전체 코드를 스캔하는 과정에서 모든 오류를 한꺼번에 출력해주기 때문에 실행 전에 오류를 알 수 있다.
      • 컴파일러를 사용하는 대표적인 언어로 C, C++, JAVA 등이 있다.
    • 인터프리터(interpreter)

      실행과정 Ex) Python
      1) 소스코드 작성
      2) 토큰을 구문 트리로 변환
      3) (선택적) 바이트 코드 생성
      4) 프로그램 실행

      • 프로그램 실행시 한 번에 한 문장씩 번역한다.
      • 한번에 한문장씩 번역후 실행 시키기 때문에 실행 시간이 느리다.
      • 컴파일러와 같은 오브젝트 코드 생성과정이 없기 때문에 메모리 효율이 좋다.
      • 프로그램을 실행시키고 나서 오류를 발견하면 바로 실행을 중지 시킨다. 실행 후에 오류를 알 수 있다.
      • 인터프리터를 사용하는 대표적인 언어로 Python, Ruby, Javascript 등이 있다.

컴퓨터의 구성

컴퓨터 전체 동작 흐름
1) 입력 장치에 데이터와 명령어 입력
2) CPU와 메모리로 데이터 전달
3) CPU에서 레지스터 및 산술 논리 연산 장치를 통해 명령어 수행
4) 처리 결과를 출력 장치로 전달.

메모리

: 컴퓨터는 메모리에 저장된 위치 주소를 참조해서 데이터를 식별함
(우편 시스템의 주소와 우편 번호를 생각하면 좋음)

  • 메모리 계층 구조(Memory Hierachy)

    : 상위 계층의 저장장치일수록 데이터 접근 빈도가 높고, 처리속도가 빠르며, 가격이 비싸며 용량이 작다.
    (= 하위 계층의 저장장치일수록 처리속도가 비교적 느린 대신 가격이 저렴하고 용량이 크며, 데이터 접근 빈도가 낮은 데이터를 보관한다.)

    구분RAMROM
    명칭Random Access MemoryRead-only Memory
    개요실시간으로 사용하는 정보를 저장하고 빠르게 접근할 수 있도록 하는 시스템의 단기 데이터 저장소컴퓨터 구동을 위한 기본적인 데이터가 담긴 장기 데이터 저장소
    쓰기읽고 쓰기 가능읽기만 가능
    처리속도빠른 처리 속도느린 처리 속도
    가격비싼 가격싼 가격
  • 주기억장치 : 현재 실행되고 있는 데이터와 명령어를 저장

    • RAM

      • SRAM(Static RAM)
        : 전원이 공급되는 동안만 내용을 저장
      • DRAM(Dynamic RAM)
        : capacitor를 이용해 전하를 축적함
        : 전원이 끊기면 저장된 데이터는 사라짐
      • SDRAM(Synchronous DRAM)
        : 전원이 공급되는 동안만 내용을 저장
    • ROM

      • Mask ROM (Mask Read Only Memory)
        : 제조 공정에서 데이터를 기록하여 데이터를 읽기만 가능
      • PROM(Programmable ROM)
        : 사용자가 데이터를 한 번 기록할 수 있음
      • EPROM(Erasable PROM)
        : 기록한 데이터를 지우고 쓸 수 있음
      • EEPROM(Electrically EPROM)
        : 전기를 통해 데이터를 지우고 쓸 수 있음
    • 보조기억장치 : 전원이 꺼져도 지워지지 않아야 할 데이터를 저장하는 기억장치.
      Ex) SSD(Solid State Driver, USB, CD-ROM...


CPU(Central Processing Unit)

: 데이터와 명령어를 처리하는 제어 장치, 프로세서(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의 산술 및 논리 연산 수행을 직접 지원함.

      • 누산기(Accumulator) : 연산 중 중간 결과나 최종 결과를 저장.
      • 플래그 레지스터(Flag Register) : ALU의 연산 결과에 따라 상태(오버플로우, 부호 캐리 등)를 기록함
      • 임시 레지스터(Temporary Register): 계산 중 임시 데이터를 보관.

      2) CPU 전반을 지원하는 역할
      : ALU와 간접적으로 작용하며 CPU의 실행 흐름과 데이터를 지원함.

      • 프로그램 카운터(Program Counter, PC) : CPU가 다음에 실행할 명령어의 주소를 저장.
      • 명령어 레지스터(Instruction Register, IR) : 현재 실행 중인 명령어를 저장.
      • 메모리 주소 레지스터(Memory Address Register, MAR) : 주기억 장치에서 데이터를 읽거나 쓸 때 사용하는 메모리 주소를 저장.
      • 메모리 데이터 레지스터(Memory Data Register, MDR) : 메모리와 CPU 간의 데이터 전송에 사용. MAR이 지정한 주소에서 읽은 데이터를 보관하거나, 메모리에 저장할 데이터를 보관.

      3) 입출력(I/O)을 지원하는 레지스터
      : CPU가 외부 장치와 통신할 때 사용하는 레지스터.

      • 입출력 주소 레지스터(I/O Address Register) : 특정 입출력 장치(I/O Device : 키보드, 모니터, 프린터...)의 주소를 저장하여 CPU가 해당 장치와 통신하도록 도움.
      • 입출력 버퍼 레지스터(I/O Buffer Register) : 입출력 장치와 데이터 교환(읽은 데이터 / 보낼 데이터 보관)을 수행할 때 데이터를 임시 저장.

      4) 스택 관련 레지스터
      : 스택 메모리를 사용하는 작업을 지원하는 레지스터

      스택 메모리
      : 함수 호출, 리턴, 로컬 변수 저장 등에 사용되며, 스택 포인터는 스택의 데이터 삽입(PUSH) 및 제거(POP)를 관리함

      • 스택 포인터(Stack Pointer, SP) : 스택의 최상단(top)을 가리키는 주소를 저장
    • 제어장치(Control Unit)
      : 처리할 명령어를 해독 및 실행하며 CPU의 전체적인 흐름을 제어

      • 명령어 레지스터(Instructionb Register) : 처리할 명령어를 기억하는 레지스터
      • 디코더(Decoder) : 명령어 레지스터로부터 받은 명령어를 해석하는 명령어 해독기
      • 메모리 주소 레지스터(Memory Address Register) : 기억장치에 저장된 데이터의 주소를 임시로 저장하는 레지스터
      • 메모리 버퍼 레지스터(Mewmory Buffer Register) : 기억장치에서 읽어온 데이터 자체를 임시로 저장하는 레지스터
      • 프로그램 카운터(Program Counter) : 다음에 실행할 명령어 주소를 기억하는 레지스터

입출력장치

  • 입력장치 : 사용자가 원하는 데이터와 명령어를 컴퓨터에 전달함
  • 출력장치 : 컴퓨터의 처리 결과를 사용자에게 전달함

시스템 버스와 메인보드

  • 시스템 버스
    : 컴퓨터 시스템 내에서 신호를 전송하는 경로
    : CPU, 메모리, 입출력장치 등 모든 장치는 시스템 버스를 통해 데이터를 주고받음

    • 시스템 버스의 종류
      • 데이터 버스(Data Bus): 데이터 전송에 사용.
      • 주소 버스(Address Bus): 메모리 및 장치의 주소를 전달.
      • 제어 버스(Control Bus): 데이터의 흐름을 제어.
  • 메인보드
    : 컴퓨터 장치들을 시스템 버스를 통해 물리적으로 연결하는 역할.


운영체제

운영체제(Operating System : OS)의 정의

: 하드웨어와 소프트웨어를 관리하고 제어하는 소프트웨어

  • 하드웨어 : 컴퓨터 시스템에 물리적으로 존재하는 모든 부품
  • 소프트웨어 : 사용자의 요구에 따라 컴퓨터 시스템에서 작동하는 프로그램
    • 응용 소프트웨어
      : 특정 작업을 수행하기 위해 설치하는 소프트웨어
      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) 할당
설명: 프로그램 실행 전 미리 메모리를 할당함: 프로그램 실행 도중에 메모리를 할당함
: 실행 전 할당받은 메모리 크기가 실행 중 변하지 않음: 실행 도중에 할당받을 크기가 변할 수 있음
장점프로그램 실행 중 메모리를 할당받는 과정이 없어 속도가 빠름실행에 필요한 메모리 크기를 실행 중 변경 가능해서(가변적) 필요한 만큼의 메모리만 사용할 수 있음
데이터 크기가 늘어났을 때 추가로 메모리를 할당받을 수 있음 (코드를 변경하지 않아도 됨)
단점잉여 메모리가 발생하여 자원의 낭비가 이루어질 수 있고, 데이터 크기가 커질 경우 코드를 수정해야 함실행에 필요한 메모리 크기를 예측해야 하고 예측한 크기를 실행 중에 바꿀 수가 없어서, 실제 데이터 크기에 비해 많은 메모리를 요구함
  • 프로세스의 메모리 구조

    • 코드(Code): 프로그램 명령어 저장
    • 데이터(Data): 전역 변수와 정적 변수 저장
    • 힙(Heap): 동적 메모리 할당 (필요할 때마다 메모리 확보)
    • 스택(Stack): 지역 변수, 함수 호출 정보 저장 (임시적 저장공간)
  • 커널(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 멀티 스레드

  • 멀티 프로세스
    : 여러 개의 개별 프로세스가 서로 다른 메모리 공간과 리소스를 할당받아 각자 독립적으로 작업들을 동시에 처리하는 것
    • 각 프로세스들이 서로 독립적이기 때문에 특정 프로세스의 오류가 다른 프로세스에 영향을 주지 않고 안정적이나, 프로세스 간 자원 공유가 어려우며 메모리 사용량이 많음
  • 멀티 스레드
    : 한 프로세스 내에서 여러 개의 스레드가 서로 메모리와 자원을 공유하며 작업을 동시에 처리하는 것
    • 메모리와 리소스를 공유하여 처리속도가 빠르고 효율적이지만, 일부 스레드에서 문제가 발생했을 때 전체 프로세스가 중단될 위험이 있음

프로세스 간 통신 (IPC, Inter-Process Communication)

: 독립적인 프로세스들 간에 서로 데이터를 주고받는 것
: 프로세스들 간에 통신이 필요한 경우 운영체제(OS)가 정한 통신규칙임

IPC(프로세스 간 통신) 방식

  • 메시지 큐(Message Queue)
    : 운영체제가 큐 형태의 저장소에 데이터들을 넣어놓고 관리하는 방식. 각 프로세스들이 메시지 큐에서 데이터를 찾아와 운용할 수 있음
  • 공유 메모리(Shared Memory)
    : 메모리 일부를 여러 프로세스들이 사용할 수 있는 공유 메모리로 만드는 방식. 한 저장소 내에서 데이터를 그대로 사용하는 방식이라 동작 속도가 빠르지만 리소스 충돌의 위험이 있음.
  • 소켓(Socket)
    : 프로세스들이 서로 다른 네트워크에 있을 때, 통신 규약에 맞춰 데이터를 양방향으로 주고받을 수 있도록 하는 통신 방식.
  • 파이프(Pipe)
    : 한쪽 프로세스에서 데이터를 작성(Write)하면, 다른 프로세스가 이를 읽을 수 있도록 설정하는 방식. 데이터 전달이 비교적 간단하나, 두 프로세스를 서로 동기화해야 하며 양방향도 가능하나 대부분 단방향 통신에 사용됨

프로세스 스케쥴링
: 멀티 프로세싱 상황에서 CPU가 어떤 작업을 먼저 실행할지 결정하는 작업

  • 목적
    • 대기 시간 최소화
    • 모든 작업이 공평하게 실행되도록 함
    • 시스템 전체 성능 향상
  • 종류
    • 선입선처리(FCFS, First Come First Served)
      : 가장 먼저 들어온 프로세스부터 순서대로 처리하는 방법
      • 장점 : 구현이 간단하고 일괄처리가 효율적
      • 단점 : 처리 속도 긴 프로세스의 경우 처리 시간이 길어짐
    • 최단 작업 우선 (SJF, Shortest Job First)
      : 가장 처리시간이 짧은 프로세스부터 우선 처리하는 방법
      • 장점 : 평균적인 대기 시간을 최소화할 수 있음
      • 단점 : 처리시간이 긴 프로세스의 경우 우선순위가 계속 밀리는 기아 현상이 발생할 수 있음
    • 라운드 로빈(RR, Round Robin)
      : 일정한 시간을 정해두고 각 프로세스가 돌아가며 CPU를 사용할 수 있게 해주는 방식
    • 장점 : 실시간 시스템에서 유리하며 처리 과정이 공평함
    • 단점 : 프로세스를 계속 전환하는 추가 작업이 발생함

교착상태(Deadlock)
: 서로 자원을 기다리며 아무 일도 못 하는 상태

  • 교착상태 발생 조건 4가지
    • 상호배제(Mutual Exclusion) : 자원을 동시에 둘 이상 사용할 수 없음
    • 점유대기(Hold and Wait) : 일부 자원을 가지고 있는 상태에서 다른 자원을 기다림
    • 비선점(no Preemption) : 자원을 강제로 빼앗을 수 없음
    • 순환대기(Circular Wait) : 서로 자원을 기다리며 꼬리를 무는 형태
  • 교착상태 해결 방법
    : 완벽한 해결책은 없으나, 시도해볼 수 있음
    • 자원 검사(은행원 알고리즘) : 운영체제가 자원 할당 전 미리 자원을 검사해서, 교착상태 발생 위험이 있는 경우에 할당하지 않음
    • 교착상태 무시 : 교착 상태가 벌어질 확률이 희박하거나 성능 저하, 설계 어려움 등의 이유로 교착상태를 해결하지 않고 그대로 둠. 대체로 교착상태로 인해 일부 프로세스가 정지되어도 시스템 전체는 작동되게 설계돼있고, 문제가 발생하면 시스템을 재부팅하거나 종료함.
    • 프로세스 종료 : 문제가 되는 프로세스를 강제종료시킴

기아상태(Starvation)
: 우선순위가 밀려서 계속 실행되지 않는 상태

  • 기아상태 해결 방법
    : 우선순위를 재부여하거나, 처리순서를 우선순위 외 다른 기준으로 적용
    • 우선순위 조정 (Aging 기법) : 오래 기다린 프로세스의 우선순위를 상향 보정해줌
    • 라운드 로빈 방식 : 모든 프로세스가 서로 번갈아가며 일정 시간 동안 CPU를 사용할 수 있도록 함
    • FIFO(선입선처리) 방식 적용 : 먼저 요청이 들어온 프로세스붜터 처리함

앱/웹 서비스를 위한 모든 것

웹/앱 서비스를 만들기 위한 과정과 내용

  • 기획, 디자인, 개발, 배포, 유지보수

통신 프로토콜(HTTP)의 용어 정의

  • HTTP(HyperText Transfer Protocol)
    : 기기, 운영체제, 웹 브라우저의 종류에 상관 없이 통신할 수 있는 방식

Hyper text의 종류(형태)와 파싱

  • json, xml
  • 파싱(Parsing)
    : 구문 분석
    : 특정 규칙이 정해진 문장을 잘라내 분석하는 방법

WAS의 기본 구조

  • 요청과 응답, 엔드포인트
  • 비즈니스 로직과 정적/동적 웹사이트

클라이언트와 서버(FE/BE)의 관계와 기능

1요청 1응답 원칙
: 하나의 요청에는 반드시 하나의 응답만이 존재해야 한다.

클라이언트(FE)의 주요 특징

  • UI/UX의 정의와 반응형

    grid system
    : 페이지 콘텐츠를 논리적이고 일관성 있는 질서와 구조로 디자인할 수 있도록 돕는 그래픽 시스템(그리드 형태가 됨)
    GUI(Graphic User Interface)
    : 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘과 같은 그래픽으로 나타냄

  • 서버와 관계없는 독립적 기능
  • 사용자 패턴 분석을 위한 Analytics 구현

서버(BE)의 주요 특징

  • 데이터 처리, 비즈니스 로직 구현
  • 보안 및 사용자 인증
  • REST API 설계

동기/비동기

  • 동기(Synchronous) : 통신의 결과와 함께 움직임
  • 비동기(Asynchronous) : 통신의 결과와 상관없이 움직임

서버 요청(FE)/응답(BE)을 위한 통신 기능

  • GET : 조회
  • POST : 입력
  • PUT/PATCH : 같은 수정기능이지만 차이 있음
  • DELETE : 삭제
    -> 요청과 응답이 동일해야 함

REST API

약속되고 지정된 주소(URI : 서버에서의 특정 리소스 식별자)가지고 있고, 각 주소에 기능(함수)를 가지고 있는 형태


데이터베이스와 REST API

DB의 정의와 기본 기능

  • 뷰, 스키마, 인스턴스
  • 쿼리문 : INSERT, SELECT, DELETE,
  • 데이터베이스 설계

데이터 타입

  • 숫자 : int, float ...
  • 문자 : char, String ...
  • 논리 : True, False
  • 시간 : Datetime ...

    물리삭제 vs 논리삭제

    • 물리삭제
      : 데이터를 삭제해야 할 때 row를 바로 삭제해버리는 것
      (SQL구조상 행 전체를 날리거나, 행 내 특정 칼럼을 수정하는 것만 가능함)
    • 논리삭제
      : '삭제 여부'를 나타내는 별도의 컬럼을 두고 삭제되었음을 나타내는 값을 넣는 것

트랜잭션과 ACID 원칙

  • 원자성(Atomicity)
  • 일관성(Consistency)
  • 고립성(Isolation)
  • 지속성(Durability)

서버

  • 서버오류 : 클라이언트(FE)와 서버(BE)가 통신이 불가능해진 상황

    트래픽 : 서버 접속 시 발생하는 통신량

    • 트래픽 과부하
    • DB접속 오류
    • 백엔드 코드의 버그

DB와 웹 서버의 연결

API

  • Application Programming Interface : 프로그램(Code)끼리 대화하도록 도와주는 일
    • API 요청
      ex) 로그인 api, get api -국가코드에 따른 페이지 언어 변경
    • 네트워크를 통한 기능 호출

DBMS

  • Database Management System : 데이터베이스 운영관리를 위한 소프트웨어
    • MySQL, Oracle, MariaDB, PostgreSQL

관계형 데이터베이스(RDBMS) vs NoSQL

  • RDBMS : PK나 인덱스 등 고유값을 활용하여 연결(조인)에 유리함
  • NoSQL : 기록이 단순하고 대용량 처리에 유리


라이브러리와 프레임워크

  • 공통점
    • 코드 재사용성: 세 가지 모두 기존의 코드나 기능을 활용하여 개발 시간을 단축하고 중복 작업을 줄이는 데 도움을 준다.
    • 개발자 지원: 개발자들이 복잡한 작업을 더 쉽게 처리하거나 오류를 줄일 수 있도록 설계되었다.
    • 표준화: 코드를 표준화하거나, 특정 작업을 수행하는 데 정해진 방식으로 접근할 수 있도록 가이드를 제공한다.

차이점

운영체제

구분API라이브러리프레임워크
정의서로 다른 소프트웨어가 통신할 수 있도록 정의된 규칙이나 인터페이스반복해서 자주 사용하는 등의 특정 기능을 수행하기 위해 제공되는 코드의 모음(package라고도 함)애플리케이션을 개발하기 위한 구조와 규칙을 제공하는 기반
역할기능 접근 통로 (규칙 제공), 서비스 간 연결특정 작업을 돕는 도구애플리케이션 구조를 설계하고 개발 흐름을 제어
제어권호출 방식과 데이터 교환 정의개발자가 원하는 부분만 호출전체 애플리케이션 흐름 제어 (역제어)
예시REST API, Windows APIReact, NumPyAngular, Spring
  • API: 마치 레스토랑 메뉴처럼, "이 기능을 사용하려면 이렇게 요청하세요!"라고 명확히 정해진 규칙이다. 예를 들어, Google Maps API는 "내게 이렇게 요청하면 지도를 제공하겠다"는 약속을 의미한다.

  • 라이브러리: 주방에 놓인 다양한 요리 도구들이다. 개발자는 필요할 때 이 도구들을 골라서 사용하면 된다. 예를 들어, Python의 NumPy는 수학 계산을 위한 도구 모음이다.

  • 프레임워크: 요리 레시피와 주방 전체를 제공하는 체계라고 볼 수 있다. 개발자는 이 레시피대로 요리하며, 필요한 도구도 기본적으로 제공된다. 예를 들어, Spring은 Java 웹 애플리케이션을 만들기 위한 틀이다.


SEO : 검색엔진 최적화

  • Hashtag
  • Search Advisor

    구글의 검색엔진 3단계

    • 1. 크롤링
      : 신규/수정된 웹페이지를 찾는 프로세스.
      : 파싱을 통해 검색하고자 하는 정보 획득
    • 2. 색인 생성
      : googlebot이라는 크롤러를 통해서 크롤링 후, 알고있는 모든 페이지를 색인에 저장함.
      : 이 때, 색인 항목은 해당 페이지의 콘텐츠와 위치를 명시함
    • 3. 최종 검색결과 제공

크롤링

  • 목적 : ai학습, 비즈니스 로직 등 다양한 이유로 크롤링을 활용함
  • 쟁점 : 크롤러가 크롤링할 사이트에 접속 시 사이트에 트래픽이 발생하는데, 이 때 크롤링이 많이 발생할 시 트래픽 비용이 해당 웹사이트 관리자에게 청구되어 운영/유지 비용이 증대하고 속도가 저하되는 문제가 생김
    -> 검색 사이트 노출 방지 방법도 있고, 크롤링 불가능한 사이트도 있음.

현업에서의 용어

  • Version Control
    • git, github, bitbucket
  • 플로우차트
    : 어떤 서비스를 만들 것인지(기획) 핵심적인 흐름을 데이터와 함께 보여주는 것
    : 프로토타입 작업 등 다양한 방식 사용
  • 오픈소스
    : 프로젝트 전체 코드가 공개되어 활용할 수 있는 코드 소스 (https://www.olis.or.kr/)
    : 라이센스 규칙을 준수하는 한도 내에서 자유롭게 사용 가능
  • 클라우드 & DevOps
    : 실물 서버(컴퓨터) 없이, 인터넷을 통해 활용할 수 있는 서버와 소프트웨어
    • 장점
      • 유연하게 셋업 가능
      • 사용한 만큼 비용 지불
      • 운영 부담 감소
  • SaaS(Software as a Service)
    : 클라우드기반의 소프트웨어 서비스
    • 협업, 파일 공유 등 공유가 유연함
    • 소프트웨어 설치와 같은 과정을 거치지 않고 바로 사용 가능함
    • 구독 형태의 비즈니스 모델을 가짐
      ex) Figma, Google Docs
profile
제로베이스 비전공자의 개발자 성장 일지

0개의 댓글