목록CS 지식 (87)
Taking baby-developer steps

운영체제가 뭘까? 왜 배워야 할까? → 운영체제란, 컴퓨터 시스템을 운영하는 소프트웨어! ->컴퓨터는 뭐지?→ 정보를 처리하는 기계! → 정보는 뭔데? → 클로드 섀넌의 정의에 의하면, 어떤 사건 x가 있을 때, 이 사건 x의 정보량(부피, 크기 )는[I(x)] 이 사건이 발생할 확률[P(x)]에 -log2 한 값이라고 정의한다. ex> 동전 던지기 어떤 사람 A가 동전을 던져서 앞면이 나왔는지, 뒷면이 나왔는지(확률은 1/2) 를 B에게 전달 한다고 할 때, 전달하는 정보의 량[I(x)] = -log2(1/2) =- log2(2^(-1)) = log2(2) = 1 • 정보의 단위는 뭘까? ⇒ bit 즉, 정보란 “어떤 불확실한 상황”을 측정해서 수치적으로 표현한 것이다! •이런 정보를 컴퓨터는 어떻게 ..
이번 장은 "이상한 나라의 앨리스"이야기의 한 부분을 인용해, 해당 부분에서 "앨리스"라는 객체가 지닌 "상태"와 "행동"이 어떻게 연관되어있고 의존적인지를 이해시켜준다. 이 앨리스 비유에서 가지는 앨리스의 특징은 다음과 같다. 앨리스는 상태(키 120cm)를 가지며 상태는 변경 가능하다. 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다.(이야기 속 버섯 베어물기, 물마시기, 케이크 먹기) 행동의 결과(물마시기)는 상태에 의존적(원래 키(120이라는 상태)에서 0.5배가 된다)이며 상태를 이용해 서술할 수 있다. 행동의 순서가 결과에 영향을 미친다.(앨리스가 여러가지의 문을 거쳐서 정원에 도착하는데, 각 문의 크기가 제각각이라 각 문의 크기에 알맞은 상태가 되려면 행동의 순서가 중요하다) 앨리스는 어떤..
시너지를 생각하라. 전체는 부분의 합보다 크다 -스티븐 코비- 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 객체 지향을 설명할 때 "객체"를 현실 세계의 "사물"로 표현하는 것을 많이 보아왔다. 이는 설계 및 구현하는 실무적인 관점에서는 딱 맞는 표현은 아니지만, 초심자들이 기본 사상을 이해하고 학습하기에는 효과적이다. 책의 초반 부에서는 이 전통적인 관점, "객체지향은 실세계를 모방한다"라는 관점을 빌려 객체지향의 세계를 이해시킨다. 먼저, 객체지향에서 가장 중요한 개념 세가지는 역할, 책임, 협력이다. 협력은 요청과 응답으로 이루어져있다. 문제를 해결할때 다수의 역할이 필요하기 때문에, 하나의 요청이 또 다른 대상에게로 요청을 유발한다. 따라서 요청은 연쇄..

현재 내 컴퓨터에서(터미널에서) 디폴트로 사용하는 java와 javac의 버전을 다음 명령어로 확인 할 수 있다. java -version javac -version 내가 사용하고 있는 mac OS에서는 brew를 이용해 openjdk@17를 깔았다. brew install openjdk@17 그런데, 이 패키지 어디에 깔렸는지를 알 필요가 있었다. 다음 명령어로 brew가 해당 패키지를 어느 경로에 저장했는지 알 수 있다. brew --prefix openjdk@17 보통은 /user/local/opt/openjdk@17/ 이 Homebrew를 사용해 OpenJDK 17을 설치했을 때의 기본 설치 위치라고 하는데, 나는 /opt/homebrew/opt/openjdk@17 에 설치되어있었다. 다음 명령어..

3tier 구조 중 wordpress-php 서버를 만드는 도중, alpine:3.17 기반 컨테이너 내부에서 wp core install command로 wordpress를 설치하려는데 다음과 같은 에러가 발생했다. 이 에러는 WordPress가 MySQL database에 connect 하기 위해 "필요한 extension"을 php server가 가지고 있지 않다는 의미라고 한다. (https://kinsta.com/knowledgebase/php-installation-missing-mysql-extension-required-by-wordpress) 1. php, wordpress의 버전을 확인한다. 최신 버전의 php와 오래된 버전의 wordpress를 사용하는 경우 이와같은 문제가 발생 할 ..

EC2 (ubuntu) 환경에서 3tier 구조의 nginx, wordexpress + php, mariadb 서버가 돌아가는 컨테이너의 이미지를 make 파일로 빌드하고 컨테이너가 돌아가는 중, 갑자기 인스턴스 ssh 연결이 끊겼고, 혹시나 하는 마음에 인스턴스를 재부팅 해봤지면 여전히 connection timed out 오류가 났다. https://ppost.tistory.com/entry/AWS-인스턴스-생성-후-주의할것 AWS 인스턴스 생성 후 주의할것. 이번엔 아주 심플하고 쉬운 AWS 인스턴스 생성 후 쉘스크립트인 PuTTY(이하 쁘띠)와 파일질라를 통해 접속하기까지 생길 수 있는 오류를 기록한 글이다. 시작!AWS 인스턴스 생성에 대한것은 콘솔에 ppost.tistory.com https:..

이진 탐색 트리(Binary Search Tree) 이진 탐색 트리란, 이진 탐색이 항상 동작하도록 구현해서 탐색 속도를 극대화 시킨 자료구조이다. 이진 탐색 트리의 동작 방식 이진 탐색 트리에서는 항상 부모 노드가 왼쪽 자식보다는 크고, 오른쪽 자식보다는 작다. 위의 이진트리에서 37이라는 원소를 찾는 다면, 37이 루트노드(30)보다 큰 값이기 때문에, 루트노드의 왼쪽자식들은 탐색할 필요가 없다. 따라서 오른쪽 자식 중 48보다 작으므로 48의 왼쪽 자식만 탐색하면 된다. 이진 탐색 트리의 탐색 위의 예제에서 볼 수 있듯이, 이진 탐색 트리에서는 한번 확인할 때마다 탐색해야하는 원소의 개수가 절반씩 줄어든다는 점에서, O(logN)의 시간 복잡도를 가진다. 이진 탐색 트리에서, 찾고자 하는 값이 부모..

깊이 우선 탐색(DFS/Depth First Search) 깊이 우선 탐색은 탐색을 함에 있어서 보다 깊은 것을 우선적으로 탐색하는 알고리즘이다. 기본적으로, 전체 노드를 맹목적으로 탐색할 때 사용한다. 깊이 우선 탐색 알고리즘은 스택(Stack)자료구조에 기초한다. 빠르게 모든 경우의 수를 탐색하고자 할때 사용한다. 깊이 우선 탐색 알고리즘 탐색 시작 노드를 스택에 삽입하고 방문처리 한다. 스택의 최상단 노드에게 방문하지 않은 인접 노드가 하나라도 있으면, 그 노드를 스택에 넣고 방문처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. ex) 깊이 우선탐색 알고리즘 1을 최상단 노드라고 가정하고 시작. 1과 연결된 노드..

그래프의 개념과 구현 그래프(Graph)란 사물을 정점(Vertex)와 간선(Edge)으로 나타내기 위한 도구이다. 그래프는 아래의 두 가지 방식으로 구현할 수 있다. 인접 행렬(Adjacency Matrix) : 2차원 배열을 사용하는 방식 인접 리스트(Adjacency List) : 리스트를 사용하는 방식 인접행렬(Adjacency Matrix) 2차원 배열로서 그래프를 표현한다. 무방향 비가중치 그래프와 인접 행렬 모든 간선이 방향성을 가지지 않는 그래프를 무방향 그래프라고 한다. 모든 간선에 가중치가 없는 그래프를 비가중치 그래프라고 한다. 무방향 비가중치 그래프가 주어졌을 때, 연결되어 있는 상황을 인접 행렬로 출력할 수 있다. #define _CRT_SECURE_NO_WARNINGS #incl..

순차 탐색 순차 탐색(Sequential Search)은 특정한 원소를 찾기 위해 원소를 순차적으로 하나씩 탐색하는 방법이다. 찾을 문자열 깜보 인덱스 0 1 2 3 4 원소 코코 왕자 다롱 깜보 뽀랑 (인덱스 0부터 해당 원소를 찾을 때까지 하나하나 탐색한다.) 순차탐색은 데이터 정렬 유무에 상관 없이 가장 앞에 있는 원소부터 하나씩 확인해야 한다는 점에서 O(N)의 시간 복잡도를 가진다. 문자열 순차 탐색 구현 #define _CRT_SECURE_NO_WARNINGS #include #include #include #define LENGTH 1000 char **array; //2차원 배열(2중 포인터) int founded; //해당 값을 발견 했는지에 대한 정보 int main(void){ int..