안녕하세요, 오늘은 기술면접 준비내용과 최종프로젝트 진행상황을 정리해보았습니다.
프로세스와 쓰레드에 대해서 설명하고 그 차이에 대해서 설명해주세요.
프로세스 (Process)
- 프로세스는 컴퓨터에서 실행 중인 독립적인 프로그램의 인스턴스입니다.
- 각각의 프로세스는 자체 메모리 공간을 할당받으며, 독립적인 실행 환경을 갖습니다. 이것은 프로세스간 데이터 공유가 기본적으로 어렵다는 것을 의미합니다.
- 프로세스는 운영체제에 의해 관리되며, 프로세스 간 통신(IPC) 메커니즘을 사용하여 서로 통신할 수 있습니다. 일반적으로 프로세스 간 통신은 오버헤드가 크고 비용이 많이 들 수 있습니다.
쓰레드 (Thread)
- 쓰레드는 하나의 프로세스 내에서 실행되는 작은 실행 단위입니다.
- 모든 쓰레드는 같은 프로세스 메모리 공간을 공유하며, 이로 인해 쓰레드 간 데이터 공유가 쉽습니다. 하지만 이로 인해 동시에 여러 쓰레드가 같은 자원에 접근할 때 데이터 충돌 문제가 발생할 수 있습니다.
- 쓰레드는 프로세스의 일부로 간주되며, 하나의 프로세스 내에서 여러 쓰레드를 생성하고 관리할 수 있습니다.
차이점
메모리 공유
- 프로세스는 독립적인 메모리 공간을 가지고 있으므로 데이터 공유가 어려우며, 프로세스 간 통신이 필요합니다.
- 쓰레드는 같은 프로세스 내에서 실행되므로 메모리 공간을 공유하고 쉽게 데이터를 전달할 수 있습니다.
오버헤드
- 프로세스 간 전환은 쓰레드 간 전환보다 오버헤드가 큽니다. 이는 쓰레드 간 전환은 단순히 스레드 레지스터 값을 변경하는 것에 비해, 프로세스 간 전환은 메모리 맵핑, 컨텍스트 스위칭 등 복잡한 작업을 수행해야 하기 때문입니다.
병렬성
- 쓰레드는 프로세스 내에서 동작하므로 쓰레드 간 작업이 서로 더 쉽게 협력하고 병렬 처리될 수 있습니다.
- 프로세스는 완전히 독립적이기 때문에 병렬 처리를 위해 별도의 IPC 메커니즘을 사용해야 합니다.
안정성
- 쓰레드 간의 데이터 공유로 인한 경쟁 조건과 교착 상태와 같은 다중 쓰레드 문제를 관리해야 합니다.
- 프로세스는 독립적이기 때문에 프로세스 간 상호 작용이 간단하고 안정적일 수 있습니다.
멀티프로세스와 멀티쓰레드의 특징에 대해 설명해주세요.
멀티프로세스 (Multiprocessing)
- 독립성: 멀티프로세스는 각각의 프로세스가 독립적으로 실행됩니다. 이는 하나의 프로세스가 오류를 발생시켜도 다른 프로세스에 영향을 미치지 않는다는 것을 의미합니다.
- 자원 분리: 각 프로세스는 독립된 메모리 공간을 가지고 있으므로, 데이터를 공유하기 위해서는 별도의 메커니즘이 필요합니다.
- 안정성: 하나의 프로세스가 충돌하더라도 시스템 전체에 큰 영향을 주지 않기 때문에 안정성이 높습니다.
- 오버헤드: 각 프로세스는 운영체제에서 관리해야 하므로, 프로세스 간 전환 및 통신에 오버헤드가 발생할 수 있습니다.
멀티쓰레드 (Multithreading)
- 공유 메모리: 멀티쓰레드는 하나의 프로세스 내에서 여러 쓰레드가 동작하며, 이들은 동일한 메모리 공간을 공유합니다. 이로 인해 데이터 공유가 쉽고 빠릅니다.
- 경량화: 쓰레드는 프로세스 내에서 생성되므로 프로세스 간 전환에 비해 경량화되어 빠른 작업을 지원합니다.
- 위험성: 한 쓰레드가 다른 쓰레드의 데이터나 자원을 부정하게 접근하면 예기치 않은 문제가 발생할 수 있으므로 동기화가 필요합니다.
- 단일 프로세스 안에서 동작: 멀티쓰레드는 하나의 프로세스 내에서 동작하므로, 하나의 쓰레드가 오류를 발생시키면 전체 프로세스가 영향을 받을 수 있습니다.
최종프로젝트
진행상황체크
AWS 도커 배포
api 추가, 수정
프론트 기능 연결
중간발표 자료 준비
아키텍처 설계
시연영상