Weekly Paper

yeonjeong·2025년 2월 24일

🔹프로세스와 스레드에 대해 설명해주세요

1. 프로세스(Process)란?

: 프로세스는 실행 중인 프로그램을 의미하며, 운영체제(OS)에서 자원을 할당받아 독립적으로 실행되는 단위

✅ 특징

•	운영체제로부터 독립적인 메모리 공간(코드, 데이터, 힙, 스택 등)을 할당받음
•	하나의 프로세스는 여러 개의 스레드를 가질 수 있음
•	프로세스 간에는 메모리를 공유하지 않음 (통신 시 별도의 방법이 필요함: IPC(Inter-Process Communication))

✅ 구성 요소

•	코드(Code) 영역: 실행할 명령어가 저장됨
•	데이터(Data) 영역: 전역 변수, 정적 변수 등이 저장됨
•	힙(Heap) 영역: 동적으로 할당된 메모리 공간
•	스택(Stack) 영역: 함수 호출 시 생성되는 지역 변수, 매개변수 저장

✅ 예시

•	Chrome 브라우저를 실행하면 여러 개의 프로세스가 생성됨 (탭마다 독립된 프로세스일 수도 있음)
•	VS Code를 실행하면 하나의 프로세스가 생성됨

2. 스레드(Thread)란?

: 스레드는 프로세스 내에서 실행되는 작업의 단위야. 하나의 프로세스 안에서 여러 개의 스레드가 실행 될 수 있음

✅ 특징

•	같은 프로세스 내에서 메모리(코드, 데이터, 힙)를 공유함
•	독립적인 실행 흐름(Stack을 따로 가짐)
•	프로세스보다 가볍고 빠르게 생성 및 종료됨
•	동기화 문제(데이터 충돌)가 발생할 수 있음

✅ 구성 요소

•	PC(Program Counter): 실행할 명령어 주소 저장
•	레지스터: 연산에 필요한 데이터 저장
•	스택(Stack): 함수 호출 시 지역 변수, 매개변수 저장 (스레드마다 독립적)

✅ 예시

•	웹 브라우저에서 여러 개의 탭이 동시에 실행 (각 탭이 다른 스레드일 수 있음)
•	게임에서 화면 렌더링, 입력 처리, 네트워크 통신이 동시에 수행

3. 프로세스와 스레드의 차이점

구분프로세스스레드
메모리 공유X (각자 독립적인 메모리)O (코드, 데이터, 힙 공유)
생성 속도느림 (운영체제의 자원 할당 필요)빠름 (프로세스 내에서 생성)
통신 방식IPC 필요 (파이프, 메시지 큐, 소켓 등)공유 메모리를 사용하여 통신 가능
독립성개별적으로 실행 가능하나의 스레드가 비정상 종료되면 전체 프로세스에 영향 가능

4. 멀티 프로세스 vs. 멀티 스레드

✅ 멀티 프로세스(Multi-Process)

•	여러 개의 프로세스를 실행하는 방식
•	장점: 독립적 실행 (한 프로세스가 죽어도 다른 프로세스에는 영향 없음)
•	단점: 프로세스 간 통신이 어렵고, 메모리 사용량이 많음

✅ 멀티 스레드(Multi-Thread)

•	하나의 프로세스 내에서 여러 개의 스레드를 실행하는 방식
•	장점: 메모리 공유로 인해 자원 사용 효율이 높음, 빠른 데이터 공유 가능
•	단점: 동기화 문제 발생 가능 (하나의 스레드가 문제를 일으키면 전체 프로세스에 영향을 줄 수 있음)

5. 언제 멀티 프로세스 vs. 멀티 스레드를 사용할까?

✅ 멀티 프로세스가 유리한 경우

•	독립적인 작업을 수행할 때 (크롬 브라우저의 각 탭)
•	자원 공유가 필요 없는 경우
•	하나의 작업이 실패해도 다른 작업에 영향을 주지 않아야 할 때

✅ 멀티 스레드가 유리한 경우

•	같은 데이터를 여러 개의 작업이 동시에 처리해야 할 때
•	프로세스 간 통신 비용을 줄이고 싶을 때
•	빠른 응답 속도가 필요한 경우 (게임, 실시간 채팅)

➡️ 정리

•	프로세스: 실행 중인 프로그램, 독립적인 메모리 공간을 가짐
•	스레드: 프로세스 내에서 실행되는 작업 단위, 메모리를 공유함
•	멀티 프로세스: 독립적인 작업을 여러 개 실행할 때 사용
•	멀티 스레드: 같은 데이터를 동시에 처리할 때 사용

🔹프레임워크와 라이브러리의 차이에 대해 설명해주세요.

1. 라이브러리(Library)란?

✅ 정의:

•	특정 기능을 수행하는 재사용 가능한 코드 묶음
•	개발자가 필요할 때 직접 호출해서 사용하는 방식

✅ 특징:

•	필요한 기능만 골라서 사용 가능
•	애플리케이션의 흐름을 개발자가 직접 제어
•	보통 함수, 클래스의 집합 형태

✅ 예시:

•	NumPy, Pandas (데이터 분석)
•	Lodash (JavaScript 유틸리티)
•	Matplotlib (파이썬 그래프 그리기)
•	jQuery (JavaScript DOM 조작)

2. 프레임워크(Framework)란?

✅ 정의:

•	애플리케이션 개발을 위한 전체 구조를 제공하는 틀
•	개발자가 그 틀에 맞춰 코드를 작성해야 함

✅ 특징:

•	기본적인 코드 구조가 미리 제공됨
•	개발자는 프레임워크의 규칙을 따라야 함
•	프레임워크가 애플리케이션의 흐름을 제어 (“제어의 역전” 원칙)

✅ 예시:

•	Spring (Java 웹 개발)
•	Django, Flask (Python 웹 개발)
•	React, Angular, Vue.js (JavaScript 프론트엔드)
•	Express.js (Node.js 백엔드)

3. 프레임워크와 라이브러리의 가장 큰 차이점: “제어의 흐름”

✅ 라이브러리: 개발자가 직접 호출해서 사용함

✅ 프레임워크: 프레임워크가 개발자의 코드를 호출함 (제어의 역전, Inversion of Control)

예를 들어:
• jQuery (라이브러리): 개발자가 $('#button').click() 같은 코드를 직접 호출해서 사용
• React (프레임워크): React가 useEffect() 같은 함수를 알아서 호출

4. 프레임워크 vs. 라이브러리 비교 정리

구분프레임워크라이브러리
제어 흐름프레임워크가 코드 실행 흐름을 제어개발자가 직접 코드 실행 흐름을 제어
유연성정해진 방식대로 개발해야 함필요한 기능만 가져다 사용 가능
사용 방식코드의 큰 구조를 제공하고, 그 안에서 개발특정 기능을 제공하며, 필요할 때 호출
예시Spring, Django, ReactNumPy, jQuery, Lodash

5. 언제 프레임워크 vs. 라이브러리를 사용할까?

✅ 프레임워크를 선택해야 할 때
• 프로젝트의 구조를 잡아야 할 때
• 확장성과 유지보수가 중요한 경우
• 일관된 개발 방식이 필요한 경우

✅ 라이브러리를 선택해야 할 때
• 특정 기능만 필요할 때
• 프로젝트 구조에 큰 영향을 주지 않고 사용하고 싶을 때

6. 한 프로젝트에서 프레임워크와 라이브러리를 함께 사용 가능

예를 들어:
• React (프레임워크) + Lodash (라이브러리)
• Django (프레임워크) + NumPy (라이브러리)

➡️ 프로젝트의 큰 틀을 잡아주고, 라이브러리는 필요한 기능을 추가할 때 사용

profile
Backend 개발자로 거듭나는 그 날까지 !

0개의 댓글