[기술면접 기초] 개발자

MINSU KANG·2019년 12월 10일
1

** 실제 면접 때 질문 받았던 내용 포함 **

HTTP keep alive 란?

HTTP 기본 구조를 바탕으로 맺어진 Socket 연결이 종료된 시점(HTTP Response 이후)부터 웹 서버에 정의된 Keep alive Timeout까지 기존 연결(Socket)을 유지하는 기능.
즉, 정의된 Timeout 내에 새로운 HTTP 요청이 발생한다면 연결을 유지하고 그렇지 않다면 연결을 끊는 기능


리틀 엔디안과 빅 엔디안

예) 32비트형 4바이트 값 : 0x01020304 -> 0x04, 0x03, 0x02, 0x01
예) 32비트형 4바이트 값 : 0x01020304 -> 0x01, 0x02, 0x03, 0x04
컴퓨터에서 어떤 크기의 데이터를 메모리에 저장할 때 바이트 단위로 나누어 저장하는데 이러한 방식을 바이트 오더 라고 한다. 바이트 오더라고 하면 가장 먼저 떠오르는 것이 리틀 에디안, 빅 에디안이다.
리틀 에디안이란, 낮은(시작)주소에 하위 바이트부터 기록, Intel CPU 계열
빅 에디안이란, 낮은(시작)주소에 상위 바이트 부터 기록, 주로 UNIX를 사용하는 RISC CPU 계열
네트워크를 통해 전송되는 것은 빅 에디안, 데이터를 보낼 땐 htonl같은 함수를 이용하여 바이트 순서를 빅에디안으로 정렬시켜줘야 한다. 받아서 읽을 땐 ntohl로 다시 정렬해야함 (리틀에디안, intel일 때)
나뉜 이유는 산술연산유닛에서 메모리를 읽는 방식이 메모리 주소가 낮은 쪽에서부터 높은 쪽으로 읽기 때문에 산술 연산의 수행이 더 쉽다는 점이 있다. 또한, 데이터를 다른 시스템으로 전송할 때 서로 다른 데이터 저장 방식의 시스템끼리 통신하게되면 전혀 엉뚱한 값을 주고 받을 수 있기 때문이다.


TCP 연결 과정 (3way)

A가 B에게 SYN(M) 패킷을 보낸다.
B는 SYN(M) 패킷을 받고 받았다는 표시로 ACK(M+1)와 다음은 SYN(N)으로 보내라는 패킷을 보낸다.
A는 ACK(M+1) 패킷을 받았다고 확인을 한 후 다음 신호인 SYN(N) 으로 ACK(N+1)을 보낸다.
중간에 ACK 응답 신호가 오지 않는다면 중간에 손실됐다고 생각하여 다시 보낸다.


Linux fork()

자신의 프로세스를 복사하여 자식프로세스를 만드는 함수
리턴값은 부모기준으로 성공하면 자식 프로세스 id를 받고, 실패하면 -1
자식기준으로는 0을 리턴받고 실패하면 동일하게 -1 그리고 fork() 밑의 처리는 병렬처리 된다.
getpid()는 자신의 id 리턴, getppid()는 부모의 id 리턴


대칭키 암호화

암호화 알고리즘의 한 종류로서 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘


공개키 암호화

대칭키와 달리 공개 키와 비밀 키가 존재하며, 공개 키는 누구나 알 수 있지만, 비밀 키는 키의 소유자만이 알 수 있어야 한다.
비대칭 암호라고 부르기도 한다.
공개키 암호화 방식은 복잡한 계산때문에 속도가 느린 단점이 있음. 그래서 대칭키 암호를 통해 암호화한다.
그 다음 이 비밀 키를 다시 수신자의 공개 키로 암호화하여 메시지와 함께 전송하는 방법으로 효율적으로 활용할 수 있다.


공개키 서명

인장으로 편지봉투를 봉하는 것에 비유할 수 있음.
이렇게 봉인한 편지는 누구나 열어볼 수 있고 인장 확인을 통해 인장을 소유한 발신자가 이 편지를 보냈음을 증명할 수 있다.


인덱스

인덱스란 테이블의 값을 빠르게 엑세스 하도록 하는데이터베이스 객체이다.
B* 트리를 사용하며 논리적으로도 물리적으로도 테이블과는 독립적이다.
언제든지 생성,삭제가 가능하지만 수정은 안된다. 다른 인덱스에 영향을 주지 않는 독립적인 객체.


fork()와 vfork() 의 차이점

fork()는 부모프로세스의 메모리를 복사하여 사용
vfork()는 부모프로세스와의 메모리를 공유. 복사하지 않기때문에 fork()보다는 생성 속도가 빠르다. 하지만 자원을 공유하기 때문에 자원에 대한 race condition이 발생하지 않도록 해주기 위해서 부모 프로세스는 자식프로세스가 exit 하거나 execve가 호출되기 전까지 block 된다.


Race Condition

일 처리에 대한 권한을 서로 갖기 위해 경쟁하는 것


가상메모리

프로세스에서 사용하는 메모리 주소와 실제 물리적 메모리 주소는 다를 수 있음.
실제 메모리 + 가상 메모리 = 메모리 라는 개념으로 생각하면 안됨.
메모리가 부족하여 가상메모리를 사용하는 것은 맞지만 가상메모리를 쓴다고하여 실제 메모리처럼 사용하는 것은 아니다.
실제 메모리 안에 공간이 부족하다면 가상메모리에 현재 사용하고 있지 않은 데이터를 빼내어 가상메모리에 저장해두고 실제 메모리에선 처리만하게하는 것이 가상메모리의 역할이다.
즉, 실제 메모리에 놀고있는 공간이 없게 계속 일을 시키는 것. 그것을 도와주는 것이 가상메모리


이진트리

한 노드가 최대 2개의 자식 노드를 가짐
균형이진트리에서 깊이는 logN
균형트리가 아니라면 최악의 경우 N (선형구조), 균형트리라면 최악도 logN


메모리 단편화

메모리의 빈공간, 자료가 여러개의 조각으로 나뉘는 현상
메모리를 할당할 때 빈공간보다 클 경우 다음 메모리로 넘어가서 할당하게 되는데 이 때 빈공간이 발생함.
수치상으로는 많은 메모리공간이 남아있지만, 하나둘 쌓이게되면 사용할 수 없는 메모리가 발생함.
내부 메모리 단편화
할당될 크기에 비해 실제 할당된 단위자원의 크기가 커서 해당 단위 자원 내부에 사용하지 않는 메모리 공간이 발생 할 때
외부 메모리 단편화
총 할당 가능한 자원의 합에 비해 실제 할당할 수 있는 자원의 크기가 작은 상태
메모리 단편화를 해결하는 방법
메모리 압축
여러 곳에 분산되어있는 단편화된 메모리공간들을 결합하여 하나의 공간으로 만드는 것 (디스크 조각 모음)
CPU가 몇개의 바이트씩 읽어오고 다시 쓰는 방법으로 반복해서 재배치하기 때문에 CPU 처리시간이 증가하여 처리기 효율이 크게 감소함
메모리 통합
단편화가 발생된 공간에서 인접해있는 다른 단편화 공간들을 하나로 통합시켜 큰 공간으로 만드는 기법
가상기억장치(가상메모리)를 모두 같은 크기의 블록으로 편성하고 이 일정한 크기인 블록을 페이지라고 한다.
주소 공간을 페이지 단위로 나누고 실제 기억공간(RAM)은 페이지 크기와 같은 크기의 블록을 프레임으로 나누어 사용한다. 그리하여 사용하는 메모리는 프레임에 올리고, 사용하지 않는 메모리는 페이지에 저장시킴.
필요한 메모리는 페이지 단위로 프레임에 올리고, 사용하지 않는 프레임은 페이지로 옮기는 기법이다.
외부단편화는 해결하지만, 내부단편화는 해결하지 못한다.
페이징
가상기억장치(가상메모리)를 서로 크기가 다른 논리적 단위인 세그먼트로 분할하고 메모리를 할당하며 주소변환을 하는 기법이다. 세그먼트들의 크기가 서로 다르기 때문에 메모리를 페이징 기법에서처럼 미리 크기를 잡아 둘 수 없다.
세그멘테이션
메모리에 적재될 때 빈공간을 찾아 할당하는, 사용자 관점의 가사 메모리 기법이다. 크기에 맞게 할당하기 때문에 내부단편화는 발생하지 않지만, 외부단편화가 발생함.


선점 스케쥴링

어떤 프로세스가 cpu를 할당받아 실행 중에 있어도 다른 프로세스가 실행중인 프로세스를 중지하고 cpu를 강제로 선점할 수 있다.
모든 프로세스에게 cpu사용 시간을 동일하게 부여할 수 있다.
높은 우선순위를 가진 프로세스들이 빠른 처리를 요구하는 시스템에 사용
운영체제 프로세서 자원을 선점하고 있다가 각 프로세스의 요청이 있을 때 특정 요건의 기준으로 자원을 배분하는 방식이다.
빠른 응답시간을 요구하는 대화식 시분할 시스템에 적합.


비선점 스케쥴링

어떤 프로세스가 cpu를 할당받으면 그 프로세스가 종료되거나 입출력 요구가 발생하여 자발적으로 중지 될 때까지 계속 실행되도록 보장한다.
모든 프로세스들에게 순서대로 처리될 수 있게한다.
다음에 처리해야할 프로세스와 관계없이 응답시간을 예상할 수 있으며 선점 방식보다 스케쥴러 호출 빈도가 낮고 문맥교환에 의한 오버헤드가 적다.
하지만 실행시간이 짧은 프로세스를 오랫동안 대기시킬 수 있으므로 처리율이 떨어지는 단점이 발생.
일괄 처리 시스템에 적합.


문맥 교환

하나의 프로세스가 cpu를 사용중인 상태에서 다른 프로세스가 cpu를 사용하도록 하기 위해, 이전의 프로세스의 상태(문맥)를 보관하고 새로운 프로세스의 상태(문맥)를 적재하는 작업을 말한다.
즉, 쉽게 말해 A프로세스가 진행하던 다양한 내용들을 PCB에 기록하고 다른 B프로세스를 실행한다. 그리고 다시 A프로세스가 실행될 때 PCB에 기록된 자원들로 다시 프로세스가 진행된다.


Process Control Block(PCB) 프로세스 제어 블록

프로세스의 ID, 상태.
이 프로세스 다음에 실행할 명령어의 주소를 가리키는 프로그램 계수기
cpu 레지스터 및 일반 레지스터
cpu 스케쥴링 정보
해당 프로세스의 주소 공간
페이지 테이블, 스케쥴링 큐포인터, 소유자, 부모 등 프로세스 계정 정보
프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등 입출력 상태 정보
부모, 자식 프로세스에 대한 포인터, 프로세스 위치를 가리키는 포인터
특정한 프로세스를 관리할 필요가 있는 정보를 포함하고 있는 운영체제 커널의 자료구조
즉, 운영체제가 프로세스 스케쥴링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스를 PCB라 한다. 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거된다.
문맥교환시에 PCB를 사용하여 현재 정보들을 담고있다.


가상주소에서 물리주소로 변환

페이징 테이블을 사용하여 계산
예를 들어 가상주소가 908이다. 페이징사이즈가 2048이라고 하자. 0 2048 + 908 = 908 이다.
페이징사이즈가 0개이니까 가상주소 페이지번호는 0. 이 번호에 따른 가상 프레임은 페이징 테이블을 참고해 숫자를 대체.
3이라고 가정하면 3
2048 + 908 이 실제 물리주소


OSI 7계층 정리

응용계층 (7)
사용자와 컴퓨터를 연결해주는 Interface를 제공해주는 단계
표현계층 (6)
데이터를 구분짓는 단계. 암호화, 압축화를 수행함
시스템에 맞는 방식으로 데이터를 구분지어 재구성함
세션계층 (5)
양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공하는 단계
통신 경로 확립이나 단절, 전달방식을 정하고 TCP/IP 세션을 만들고 없애는 책임을 가짐
전송계층 (4)
데이터 전송 방식을 결정하고, 포트번호를 구분하는 단계
TCP, UDP 결정
포트번호는 아파트의 호수라고 생각하면 됨. 각 아파트 마다 비슷한 기능을 하는 것들끼리 모여 살고있다. 그 것을 분류해주는 것이 포트번호. 예) HTTP, FTP, Talnet, SSH
전송단위는 세그먼트
L4 스위치
네트워크계층 (3)
논리적 주소를 구분하고, 목적지까지의 최적의 경로를 정해주는 단계
IP 가 이 단계에 있음.
여러개의 노드를 거칠때마다 경로를 찾아준다.
ARP, RARP, ICMP 가 있음.
ARP는 IP는 알지만 MAC을 모를 때 알아오는 프로토콜.
RARP는 MAC은 알지만 IP를 모를 때 알아오는 프로토콜
ICMP는 연결확인을 하는 프로토콜 (Ping)
통신단위는 패킷, 데이터그램
L3스위치 외에도 라우터가 있다.
데이터링크계층 (2)
물리적 주소를 구분하고 데이터의 전송 형태를 결정하는 단계
MAC 주소를 통하여 통신
MAC 주소란, 랜카드가 만들어 질 때부터 부여받은 주소 (물리적 주소)
통신단위는 프레임
L2스위치 외에도 브릿지가 있다.
물리계층 (1)
데이터를 비트로 변환, 비트를 전기적 신호로 변환하여 실제 전송
전송단위는 비트
허브, 리피터, 케이블, 커넥터가 있다.
결론 : 데이터가 목적지를 잃지않고 원하는 곳에 전달되기 위해 단계들을 세분화 한 것이 OSI 7계층이다. 즉, 모든 단계에서 해당되는 일만 처리 후 단계들을 거쳐나간다.


profile
ㄱㅂㅈ

0개의 댓글