-
✅ Q: 함수와 명령어의 차이점에 대해 설명해주세요.
함수
- 프로그램의 함수는 명령어들의 집합입니다.
- 함수는 특정 작업을 수행하고, 필요에 따라 값을 반환할 수 있습니다.
명령어
- 명령어는 CPU가 실행할 수 있는 기본적인 작업 단위입니다.
- CPU는 프로그램이나 함수 내 단일 명령어(명령어 한 줄)을 차례대로 읽고 실행합니다.
- 보통 컴퓨터가 이해할 수 있는 기계어(바이트코드)나 어셈블리어로 작성됩니다.
- 각 명령어는 연산자와 피연산자로 구성됩니다.
-
✅ Q: CPU의 Fetch-Decode-Execute Cycle에 대해 설명해주세요.
Fetch-Decode-Execute Cycle은 CPU가 명령어를 처리하는 과정입니다.
- Fetch(인출): CPU는 메모리에 저장된 프로그램의 명령어 1개를 레지스터로 가져옵니다.
- Decode(해석): 명령어를 분석해 처리할 컨트롤 신호를 만듭니다.
- Execute(실행): 컨트롤 신호에 따라 실제로 연산, 처리, 메모리 읽기 또는 쓰기를 실행합니다.
-
✅ Q: CPU의 명령 파이프라인(파이프라이닝)에 대해 설명해주세요.
- 파이프라이닝은 CPU 클럭마다 Fetch, Decode, Execute를 순차적으로 반복해서 실행하는 것을 의미합니다.
- 이러한 사이클을 병렬적으로 처리해 CPU가 동시에 여러 명령어를 처리해 속도와 효율성을 증가시킵니다.
-
✅ Q: 컴퓨터 시스템의 구조에 대해 설명해주세요. (depth 1)
컴퓨터 시스템은 외부에서 데이터를 읽어와 처리하는 내부 장치와 내부에서 데이터를 받아 출력하는 외부 장치로 구성되어 있습니다.
- 중앙처리장치(CPU): 컴퓨터의 핵심적인 부분으로, 모든 계산과 명령 처리를 담당합니다. CPU는 명령어를 해석하고 실행하는 제어 유닛과 연산을 수행하는 산술 논리 장치(ALU)로 구성됩니다.
- 메모리 시스템: 데이터와 명령어를 임시로 저장하는 공간으로, RAM(랜덤 액세스 메모리)과 ROM(읽기 전용 메모리) 등으로 구성됩니다. 캐시 메모리와 같은 보조 메모리 시스템도 중요한 역할을 합니다.
- 입출력 장치: 키보드, 마우스, 모니터, 프린터 등이 여기에 해당합니다. 키보드와 마우스는 사용자 입력을 받아들이는 장치이며, 모니터와 프린터는 정보를 시각적으로 출력합니다.
- 저장 장치: 하드 드라이브, SSD 등은 데이터를 영구적으로 저장합니다. 각각의 특성에 따라 다른 용도로 사용됩니다.
- 버스 시스템: 데이터 버스, 주소 버스, 제어 버스 등이 컴퓨터 내의 다양한 구성요소 간의 데이터 전송을 담당합니다.
- 컨트롤러와 로컬 버퍼: 각 하드웨어 구성요소에는 해당 하드웨어를 제어하는 컨트롤러와 입출력을 위한 로컬 버퍼가 있습니다. 컨트롤러는 하드웨어의 동작을 관리하며, 로컬 버퍼는 데이터의 일시적 저장소로 사용됩니다.
- 운영체제와 소프트웨어: 운영체제는 하드웨어를 관리하고, 소프트웨어는 사용자가 컴퓨터를 사용할 수 있게 합니다.
요청받은 작업을 수행하며 로컬 버퍼에 데이터를 쌓고 작업이 끝나면 컨트롤러가 인터럽트를 발생시켜 OS의 도움을 받아(시스템 콜) 데이터를 CPU로 전송합니다. 이러한 구성요소들의 상호작용을 통해 컴퓨터는 복잡한 작업을 효과적으로 처리할 수 있습니다.
-
✅ Q: 컴퓨터 버스 시스템에 대해 설명해주세요. (depth 1)
✅ 버스 시스템은 컴퓨터 내부에서 데이터와 명령어를 다양한 구성 요소 간에 전달하는데 사용되는 통신 시스템입니다. 버스 시스템은 아래의 3가지 버스를 모두 사용하여 통신하게 됩니다.
- 데이터 버스(Data Bus): 데이터 버스는 CPU, 메모리, 입출력 장치 등 컴퓨터의 주요 부품 사이에서 데이터를 전송하는 역할을 합니다. 데이터 버스의 너비는 한 번에 전송할 수 있는 데이터의 양을 결정합니다. 예를 들어, 32비트 데이터 버스는 한 번에 32비트의 데이터를 전송할 수 있습니다.
- 주소 버스(Address Bus): 주소 버스는 CPU가 메모리나 다른 입출력 장치에 접근할 때 해당 장치의 위치를 지정하는데 사용됩니다. 주소 버스의 너비는 시스템이 접근할 수 있는 메모리 주소의 범위를 결정합니다. 예를 들어, 16비트 주소 버스는 2^16개의 다른 메모리 주소에 접근할 수 있습니다.
- 제어 버스(Control Bus): 제어 버스는 CPU와 다른 구성 요소들 간의 명령어와 신호를 전송합니다. 이는 시스템의 다양한 부분이 서로 동기화되어 작동할 수 있도록 합니다. 예를 들어, 메모리 읽기/쓰기, 인터럽트 요청, 시스템 클록 신호 등이 제어 버스를 통해 전달됩니다.
-
✅ Q: 카나리아 배포와 블루/그린 배포의 차이점에 대해서 설명해주세요. (depth 1)
카나리아 배포(Canary Deployment)와 블루/그린 배포(Blue/Green Deployment)는 소프트웨어 배포 전략으로, 둘 다 새로운 버전의 소프트웨어를 안전하게 배포하고, 문제 발생 시 빠르게 이전 버전으로 롤백할 수 있게 설계되었지만, 접근 방식에서 차이가 있습니다.
- 점진적 배포: 새로운 버전의 애플리케이션을 소수의 사용자에게만 먼저 제공합니다. 이를 통해 새 버전의 성능과 안정성을 실제 사용 환경에서 테스트할 수 있습니다.
- 위험 최소화: 새 버전에서 문제가 발견되면, 영향을 받는 사용자 수가 적기 때문에 전체 시스템에 대한 위험이 상대적으로 낮습니다.
- 점진적 확장: 초기 테스트가 성공적이면, 점차 더 많은 사용자에게 새 버전을 제공합니다. 이 과정은 여러 단계를 거쳐 진행될 수 있습니다.
- 병렬 환경: 블루(현재 운영 중인 버전)와 그린(새로운 버전) 두 개의 독립적인 환경을 구축합니다. 두 환경은 동일한 하드웨어와 소프트웨어 설정을 갖추고 있습니다.
- 빠른 전환: 배포 시, 트래픽을 현재 버전에서 새 버전으로 빠르게 전환합니다. 이는 종종 로드 밸런서나 DNS 업데이트를 통해 이루어집니다.
- 즉각적 롤백: 새 버전에 문제가 발생하면, 트래픽을 이전 버전으로 즉시 전환하여 롤백할 수 있습니다.
- 배포 범위: 카나리아는 소수 사용자에게 점진적으로 배포하는 반면, 블루/그린은 모든 사용자에게 한 번에 배포합니다.
- 롤백 속도: 블루/그린은 즉각적인 롤백이 가능하지만, 카나리아는 점진적으로 확장되므로 롤백 속도가 상대적으로 느릴 수 있습니다.
- 리소스 요구사항: 블루/그린은 동시에 두 개의 전체 환경을 유지해야 하므로 리소스 요구가 더 큽니다.
- 위험 관리: 카나리아는 점진적 배포로 인해 위험을 더 세밀하게 관리할 수 있지만, 블루/그린은 전체 사용자에게 새 버전을 노출시키기 때문에 초기 버전 검증이 중요합니다.
-
✅ 캐시 메모리란?
데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.
캐시는 다른 말로는 고속 기억 장치(메모리)라고 불리며, 시간을 절약하기 위해 데이터를 임시로 저장한다.
- 주기억장치와 CPU사이에 위치한다. cpu 위치마다 다름
-
- 캐시 메모리는 메모리 계층 구조에서 가장 빠른 소자이며, 처리속도가 거의 CPU의 속도와 비슷할 정도의 속도를 가지고 있습니다.
-
- 캐시메모리를 사용하면 주 기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리속도가 향상됩니다.
-
✅ CPU의 구조는 어떻게 되어 있나요?
**중앙처리장치(CPU)**는 명령어의 해석과 자료의 연산, 비교등의 처리를 제어하는 컴퓨터 시스템의 핵심장치이다.
다양한 입력 장치로부터 정보를 입력받아 처리한 후, 그 결과를 출력장치로 보내는 일련의 과정을 제어하고 조정하는 일을 수행한다.
### 1.**제어 장치 (CU, Control Unit)**
- 컴퓨터 시스템의 작동을 통제하고 지시하는 장치
- 기억 장치로부터 프로그랭 명령을 순차적으로 꺼내 **해독**하고, 해석에 따라서 명령어 실행에 필요한 **제어 신호**를 기억장치, 연산장치, 입출력 장치 등으로 보내는 장치
- 프로그램 카운터(PC), 명령 해독기, 부호기, 명령 레지스터 등으로 구성된다.
### **2. 연산 장치 (ALU, Arithmetic and Logical Unit)**
- 명령어를 실행하기 **위한 마이크로 연산을 수행하는 장치**
- **연산에 필요한 자료를 입력받아 산술, 논리, 관계, 이동(Shift) 등 다양한 연산을 수행하는 장치**
- **가산기, 보수기, 누산기, 데이터 레지스터 등으로 구성된다.**
### **3. 레지스터 (Register)**
- **CPU(중앙 처리 장치)내에 있는 소규모의 고속 기억장치**
- **명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장한다.**
- **레지스터는 메모리 계층의 최상위에 위치하며 가장 빠른 속도로 접근 가능한 메모리이다.**
- **용도에 따라 범용 레지스터와 특수 목적 레지스터로 구분됨**
-
✅ 컴파일러 vs 인터프리터?
컴파일러(Comiler)는 프로그램 전체를 스캔하여 이를 모두 기계어로 한번에 번역합니다.
- 전체 파일을 스캔하여 한꺼번에 번역한다.
- 초기 스캔시간이 오래 걸리지만, 한번 실행 파일이 만들어지고 나면 빠르다.
- 기계어 번역과정에서 더 많은 메모리를 사용한다.
- 전체 코드를 스캔하는 과정에서 모든 오류를 한꺼번에 출력해주기 때문에 실행 전에 오류를 알 수 있다.
- 대표적인 언어로 C, C++, JAVA 등이 있다.
인터프리터는 프로그램 실행시 한 번에 한 문장씩만 기계어로 번역합니다. 특징은 다음과 같습니다.
- 프로그램 실행시 한 번에 한 문장씩 번역한다.
- 한번에 한문장씩 번역후 실행 시키기 때문에 실행 시간이 느리다.
- 컴파일러와 같은 오브젝트 코드 생성과정이 없기 때문에 메모리 효율이 좋다.
- 프로그램을 실행시키고 나서 오류를 발견하면 바로 실행을 중지 시킨다. 실행 후에 오류를 알 수 있다.
- 대표적인 언어로 Python, Ruby, Javascript 등이 있다.
-
✅ 메모리 관리 에 대해 질문 가상 메모리에 대해 알고 계시나요?
가상메모리는 ssd나 하드를 램처럼 사용하는 기술입니다(램 하드 ssd 모두 읽고 쓰는 기능을 가지고 있지만 속도 휘발성 비휘발성 차이가 있기 때문에 현재 용도로 자리잡게 되었습니다) ssd나 하드를 가상메모리로 사용하면 저장장치 수명이 짧아집니다.(ssd와 하드는 수명이 정해져 있습니다) 또한 ssd나 하드는 램에 비해 읽고 쓰는 속도가 매우 느린편
빠르고 작은 기억장치(RAM)을 크고 느린 기억장치(디스크)와 병합하여, 하나의 크고 빠른 기억장치(가상 메모리)처럼 동작하게 하는 것