- [ 컴퓨터 과학/운영체제 ][CS] CGI(Common Gateway Interface), 웹 컨텐츠의 이해(정적, 동적)2022-12-11 22:49:49CGI(Common Gateway Interface)란? CGI란 공통 게이트웨이 인터페이스(Common Gateway Interface)의 약어로, 웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다. 웹 서버와 응용프로그램이 상호 작용하여 동적 컨텐츠를 제공해주고, 웹 서버와 수많은 언어들로 만든 프로그램이 상호 작용하기 위한 표준화 된 약속이 필요한데, 바로 그 약속이 CGI(Common Gateway Interface) 기술이다. CGI의 기능 웹 서버 프로그램의 핵심 기능은 미리 준비된 정보를 클라이언트의 요구에 응답하는 것이다. 즉, 초기의 웹 서버는 이미 준비된 자료인 '정적 컨텐츠'의 정보만 제공해 줄 수 있었다. 사용자로부터 입력을 받아 정보를 동적으로 생성하고 클..
- [ 컴퓨터 과학/운영체제 ][CS] 커널(Kernel) & 시스템 콜(System Call) & 인터럽트(Interrupt)2022-12-04 00:27:07커널(Kernel)과 인터페이스(Interface) 커널(Kernel) 커널(Kernel)은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로, 자동차에 비유하자면 엔진에 해당된다. 자동차는 종류가 다양하지만 성능은 엔진이 좌우하는데, 이와 마찬가지로 운영체제의 성능은 커널이 좌우한다. 커널이 존재하는 이유는 시스템을 보호하기 위해 존재한다. 만약 커널이 없다면 우리가 작성한 프로그램이 함부로 하드웨어 자원을 다 점유해서 사용하고, 그래서 다른 프로세스가 영향을 받게되고, 그러다보면 전체 시스템이 붕괴될 수 있는 여러 가지 위험한 부분들을 방지하기 위해 시스템에 전반된 부분이나 하드웨어에 관련된 부분은 커널이 관리하게 된다. 따라서 우리가 작성한 프로그램은 커..
- [ 크래프톤정글/CS:APP ][CS] 동적 메모리 할당(Dynamic Memory Allocation), 프로세스 메모리 구조, 메모리 누수(Memory Leak)2022-12-01 20:50:08동적 메모리 할당(Dynamic Memory Allocation)이란? 동적 메모리 할당(DYNAMIC MEMORY ALLOCATION) 은 컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것을 말한다. 즉, 프로그램이 실행되는 동안(runtime) 입력되는 데이터에 맞게 기억 공간을 확보하는 것을 동적 메모리 할당이라고 한다. 이는 프로그램이 실행하는 순간 프로그램이 사용할 메모리 크기를 고려하여 메모리의 할당이 이루어지는 정적 메모리 할당과 대조적이다. 그럼 정적 메모리 할당은 무엇일까? 정적 메모리 할당(STATIC MEMORY ALLOCATION)은 프로그램을 컴파일하는 단계에서 필요한 기억 공간의 크기를 결정하는 것이다. 즉, 프로그램을 작성한 이후 컴파일러는 "이 프로그램이..
- [ 크래프톤정글/C 언어 ][C] 이진 탐색 트리(Binary Search Tree, BST) 개념 및 구현2022-11-28 21:38:06이진 탐색 트리(Binary Search Tree, BST) 원소를 특정한 조건에 따라 정렬해 놓은 이진트리를 말한다. 이진 탐색 트리는 탐색을 위해 정렬을 해놓은 트리이다. 이진 탐색 트리는 검색 수행 연산은 O(logN) 이다. 이진 탐색 트리의 속성 모든 원소는 유일한 키 값을 갖는다. 즉, 중복된 내용을 가지는 항목은 없다. 왼쪽 서브트리의 모든 원소들은 루트의 키보다 작은 값을 갖는다. 오른쪽 서브트리의 모든 원소들은 루트의 키보다 큰 값을 갖는다. 왼쪽 서브트리와 오른쪽 서브트리도 이진탐색트리이다. 즉, 일반 트리나 이진트리하고 똑같이 이진탐색트리도 재귀적인 정의를 한다.(서브트리에서 볼 때나 루트노드에서 볼 때나 위의 조건은 모두 성립되므로) 트리 안에서 어떤 노드를 루트로 잡던지 위 조건은..
- [ 크래프톤정글/C 언어 ][C | WEEK05] 연결리스트 구현 - 추가예정2022-11-27 20:32:49C 언어로 연결 리스트 구현 정글에서 5주차가 진행되고 RB-Tree를 구현하는 과제가 주어졌다. 그것도 C 언어를 이용해서 RB-Tree의 자료구조를 구현해야 하는데, C 언어에 대한 문법도 익숙치 않을 뿐더러 RB-Tree 자료구조 구현 자체가 쉽지 않다기에 비교적 쉬우면서도 선수지식으로 알아야 할 '연결 리스트'와 '이진 검색 트리'를 C 언어를 구현해 봄으로써 C 언어를 익히고, RB-Tree를 구현하고자 한다. Operator 1. 연결리스트 구조체 만들고 사용하기 연결 리스트에서 노드를 추가하는 규칙 노드에 메모리 할당 next 멤버에 다음 노드의 메모리 주소 저장 data 멤버에 데이터 저장 마지막 노드라면 next 멤버에 NULL 저장 아래 이미지는 사용자가 정의한 구조체를 이용해 연결리스..
- [ 크래프톤정글/자료구조 & 알고리즘 ][자료구조&알고리즘 | WEEK04] 그리디 알고리즘(Greedy Algorithm)2022-11-20 16:26:51그리디 알고리즘이란? 그리디 알고리즘은 글로벌 최적을 찾기 위해 각 단계에서 로컬 최적의 선택을 하는 휴리스틱 문제 해결 알고리즘이다. 그리디 알고리즘(Greedy Algorithm)란 바로 눈 앞의 이익만을 쫓는 알고리즘이다. 대부분의 경우에는 뛰어난 결과를 도출하지 못하지만, 드물게 최적해를 보장하는 경우도 있다. 그리디 알고리즘은 최적화 문제를 대상으로 한다. 최적해를 찾을 수 있으면 그것을 목표로 삼고, 어려운 경우에는 주어진 시간 내에 그런대로 괜찮은 해를 찾는 것을 목표로 삼는다. 이러한 특성때문에 '욕심쟁이 알고리즘'이라는 별명이 붙은 알고리즘이기도 하다. 아래 이미지를 보면 큰 값을 찾기 위한 '그리디 알고리즘의 동작방식과 실제 큰 값은 다르다.'는 것을 알 수 있다. (진짜 욕심쟁이네....