분류 전체보기

    [NCA(naver cloud associate)] container, kubernetes

    [NCA(naver cloud associate)] container, kubernetes

    CONTAINER, KUBERNETES 컨테이너(Container) VM과 마찬가지로 서버 가상화를 위한 기술이다. 가장 큰 차이점은 os를 포함하냐 안하냐의 차이이다. - VM(OS 레벨 가상화)은 os를 포함한 단위로 배포하게 된다. 따라서 hypervisor가 여러 os를 지원해주는 역할을 담당하게 된다. 각각의 os가 있어서 서로 데이터를 공유하지 않는다. - Container(SW 레벨 가상화)은 동일한 os커널을 공유한다. os위의 Container Engine(대표적으로 Docker)이 hypervisor과 비슷한 역할을 하게 된다. Container은 os를 부팅할 필요가 없기 때문에 배포 속도가 매우 빠르고 효율적이다.(os 종속성 하락) - NCP에서 Container Registry ..

    [NCA(naver cloud associate)] Compute

    [NCA(naver cloud associate)] Compute

    COMPUTE 먼저 서버 가상화 구조는 위와 같다. 하드웨어에 주로 CPU, NIC카드 등이 꽂히고 그 위에 하이퍼바이저(다양한 OS를 동시 지원), 그 위에 각각의 OS를 가지는 virtual machine들이 생성된다. 이때 각 VM들은 하나의 물리자원을 나눠 쓰게 된다(리소스 경합이 일어난다). Type1과 Type2의 차이점은 무엇인가? Type1은 native나 bare-metal방식으로도 불리는데, 하드웨어 위에 바로 하이퍼바이저를 깔고 vm을 올리는 방식이다. 이는 중간에 host OS가 없어서 좀더 빠르다고? 한다. 일반적으로 기업에서 사용하는 방식이라고 함.. (대표적으로 XenServer, Hyper-V, Vmware ESXi가 있음) Type2는 hosted방식으로, 하드웨어위에 ho..

    [자료구조] 큐 (Queue)

    [자료구조] 큐 (Queue)

    07. 큐 (Queue) 07-1. 큐의 이해와 ADT 정의 큐(Queue)는 선입선출 방식의 자료구조이다. FIFO(First-In, First-Out) 구조라고도 불린다. 따라서 스택과 달리 데이터를 넣을 땐 앞에서 넣고, 뺄 땐 뒤에서 빼는 구조이다. 큐도 스택처럼 배열을 기반으로, 연결 리스트를 기반으로 모두 작성 가능하다. 큐 자료구조의 ADT는 다음과 같다. void QueueInit(Queue * pq); - 큐의 초기화를 진행한다. - 큐 생성 후 제일 먼저 호출되어야 하는 함수이다. int QIsEmpty(Queue * pq); - 큐가 빈 경우 TRUE(1)을, 그렇지 않은 경우 FALSE(0)을 반환한다. void Enqueue(Queue * pq, Data data); - 큐에 데이..

    [자료구조] 스택 (Stack)

    [자료구조] 스택 (Stack)

    06. 스택 (Stack) 06-1. 스택의 이해와 ADT 정의 스택(Stack)은 후입선출 방식의 자료구조이다. LIFO(Last-In, First-Out)구조라고도 불린다. 예시로 스택은 한쪽은 막히고 한쪽은 뚫려있는 초코볼 통에 비유할 수 있다. 먼저 들어간 것이 나중에 나오는 구조이다. 이러한 스택은 선형자료구조의 일종이다. 이에 따라 스택은 배열을 이용해서도 구현이 가능하고, 연결 리스트를 이용해서도 구현이 가능하다. 스택의 대표적인 기능인 넣고, 꺼내고, 들여다 보는 연산을 각각 push, pop, peek이라 한다. 이러한 연산을 바탕으로 ADT를 정의할 수 있다. 스택의 ADT는 리스트 자료구조에 비해 상대적으로 정형화 된 편이다. void StackInit(Stack * pstack); ..

    [자료구조] 원형 연결 리스트 (Circular Linked List)

    [자료구조] 원형 연결 리스트 (Circular Linked List)

    05. 연결 리스트 (Linked List) 05-1. 원형 연결 리스트 (Circular Linked List) 원형 연결 리스트는 연결 리스트에서 마지막 노드가 첫 번째 노드를 가리키게 한 것이다. (연결의 형태가 원을 이룸) 원형 연결 리스트는 머리와 꼬리의 구분이 없다고도 한다. 원형 연결의 장점은 머리와 꼬리를 가리키는 포인터 변수를 각각 두지않고 꼬리 변수 포인터만 있어도 머리 또는 꼬리에 노드를 간단히 추가 할 수 있다는 점이다. (꼬리의 next가 머리를 가리키기 때문) 노드를 꼬리에 추가했을 때와 머리에 추가했을 때의 유일한 차이점은 tail이 가리키는 노드가 다르다는 점이다. (노드의 순서는 결국 같다) 이에 따라 원형 연결 리스트에서 LNext함수를 실행하면 무한 반복 호출이 가능하다..

    [자료구조] 연결 리스트(Linked List)

    [자료구조] 연결 리스트(Linked List)

    04. 연결 리스트 (Linked List) 04-1. 연결 리스트의 개념적인 이해 앞서 공부한 배열리스트는 메모리의 길이를 변경하는 것이 불가능했다. 따라서 필요로하는 메모리의 크기에 유연하게 대처하기 위해 '동적인 메모리 구성'이 필요하다. 연결 리스트는 필요할 때마다 구조체 변수를 하나씩 동적 할당해서 이들을 연결한다. 위의 사진처럼 노드는 '데이터를 저장할 장소'(Data)와 '다른 변수를 가리키기 위한 장소'(Next)로 나뉘어 있다. 연결 리스트는 손으로 구조를 그려가며 공부하는 것을 추천한다. 연결 리스트에서는 데이터를 삭제할 때 다음과 같이 삭제 포인터를 두개 만든다. Node * delNode = head; Node * delNextNode = head->next; 이유는 delNode의..

    [자료구조] 배열 리스트 (Array List)

    03. 배열 리스트 (Array List) 03-1. 추상 자료형 : Abstract Data Type '구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것'을 가리켜 추상자료형(ADT)라 한다. 예를들어 지갑에 동전을 넣고 빼는 과정을 자세히 설명하면 다음과 같다. 지갑을 들어 지퍼를 열고 동전을 안에 넣고 지퍼를 다시 닫는다. 지갑을 들어 지퍼를 열고 동전을 집고 동전을 빼고 지퍼를 다시 닫는다. 이를 추상자료형으로 나타내면 다음과 같이 나타낼 수 있다. 동전의 삽입 / 동전의 추출 03-2. 배열을 이용한 리스트의 구현 리스트 자료구조는 구현방법에 따라 크게 두가지로 나뉜다. 순차 리스트 : 배열을 기반으로 구현된 리스트 연결 리스트 : 메모리의 동적 할당을 기반으로 구..

    [자료구조] 재귀(Recursion)

    [자료구조] 재귀(Recursion)

    02. 재귀(Recursion) 02-1. 함수의 재귀적 호출의 이해 재귀 함수의 흐름은 재귀함수가 복사되는 것이라고 이해하면 쉽다. "Recursive 함수를 실행하는 중간에 다시 Recursive 함수가 호출되면, Recursive 함수의 복사본을 하나 더 만들어서 복사본을 실행하게 됩니다." - 팩토리얼(Factorial) $n!$을 계산하는 식은 $(n-1)$항에 대한 일반항으로 나타낼 수 있으므로 재귀함수를 활용하여 나타낼 수 있다. #include int Factorial(int n){ if(n==0) return 1; else return n*Factorial(n-1); } int main(void){ printf("5! = %d \n", Factorial(5)); } 02-2. 재귀의 활용..