목록CS (9)
에르노트
연결 리스트(Linkd List)를 확장하여 양방향으로 링크가 구성되는 이중 연결 리스트를 만들 수 있다. 단일 연결 리스트의 노드가 next 포인터만을 가졌다면 이중 연결 리스트의 노드는 prev와 next 두 개의 포인터를 갖는다. class LinkedListNode{ constructor(data){ this.data = data this.prev = null this.next = null } }그리고 DoublyLinkedList 클래스 자체도 head와 더불어 tail을 추가 멤버로 가진다.class DoublyLinkedList{ constructor(){ this.head = null this.tail = null this.size = 0 } isEmpty(){ return this.siz..
연결 리스트 연결리스트(Linked List)는 각 노드의 연결을 통해 리스트를 구현한 것이다. 자바스크립트 배열은 가변적이지만 C나 C++ 등의 전통적 언어에서 배열은 고정된 크기를 갖는 것이 일반적이다. 따라서 배열 대신 연결 리스트를 이용하면 실행 시간에 동적으로 메모리를 할당하고 해제할 수 있다는 장점이 있다. 생성 class LinkedListNode{ constructor(value){ this.data = value this.next = null } } class LinkedList{ constructor(){ this.head = null this.size = 0 } isEmpty(){ return this.size == 0 } } 리스트와 리스트에 담길 노드에 해당하는 클래스를 하나씩 만..
스택(Stack) 스택은 마지막에 삽입된 항목만 제거할 수 있는 자료구조이다. 그래서 후입선출, Last In First Out(LIFO) 방식의 자료구조라고 일컬어진다. 그리고 자바스크립트 배열은 이러한 스택의 특성을 그대로 살린 push()와 pop() 메소드를 제공한다. 따라서 자바스크립트 배열을 이용하면 손쉽게 스택을 구현할 수 있다. 생성 class Stack{ constructor(arr){ this.arr = [] if(arr) this.arr = arr } } 우선 Stack 클래스 내부에 멤버 변수로 배열을 하나 넣어준다. 삽입 push(val){ this.arr.push(val) } 그리고 배열의 push() 메소드를 이용하여 스택의 push()를 구현한다. 삭제 pop(){ retur..
RDT에서는 송신자와 수진자를 명시하기 위해 FSM(Finite State Machine: 유한 상태 머신)을 사용한다. RDT 1.0 하위 채널이 완전히 Realiable하다고 가정한다.- 비트 에러 없음- 패킷 손실 없음 송신측과 수신측이 분리된 FSM을 갖는다.송신측은 하위 채널로 데이터를 전송하고 수신측은 하위 채널로부터 데이터를 수신한다. RDT 2.0 하위 채널이 패킷에 비트 에러를 야기할 수 있다고 가정한다. - Checksum(검사합)을 이용한 에러 검출 - 어떻게 에러를 복구할 것인가?수신측의 피드백: Ack(Acknowledgement) 또는 NAK(Negative Acknowledgement)ACK: "패킷이 잘 도착했음." 송신측은 수신측에서 ACK를 받으면 다음 패킷을 전송한다.N..
테이블 생성 CREATE TABLE 테이블명 (필드명 자료형, ...) 레코드 추가 INSERT INTO 테이블명(필드명, ...) VALUES (값, ...) 이때 필드명(열 이름)은 생략하고 적절한 순서로 값들을 열거할 수 있다. 레코드 검색 SELECT * FROM Students (모든 필드 검색)SELECT 필드명 FROM Students(필드명에 해당하는 데이터 검색, 쉼표로 구분지어서 여러개 설정가능) 레코드 삭제 DELETE FROM 테이블명 WHERE 조건 아래 예시와 같이 name = 'Smith'라는 조건을 WHERE 뒤에 붙여줌으로써 Students 테이블에서 이름이 Smith인 튜플들을 모두 삭제할 수 있다. 이때 위에서와는 다르게 STUDENTS를 대문자로 표기하였는데, SQL은..
컴퓨터 네트워크 수업을 듣게되면서 각종 용어들에 대해 정리할 필요가 생겼다. 각 용어들의 의미를 파악하는 과정은 곧 네트워크, 그리고 인터넷의 발달 역사와 직결된다. 인터넷이 어떻게 발전해왔는지의 역사 속에는 네트워크 통신의 원리가 그대로 녹아있으리라. 따라서 네트워크 공부에 있어서 용어 정리는 단순한 용어 정의를 익히는 것 그 이상이라고 생각한다. 인터넷 "인터넷은 인간이 발명해 놓고도 이해하지 못하는 최초의 발명품이며, 역사상 최대 규모의 무정부주의에 대한 실험이다." - 에릭 슈밋 인터넷은 TCP/IP를 기반으로하여 전세계적으로 연결된 컴퓨터 네트워크를 일컫는다. 월드 와이드 웹(WWW)에 해당하는 전통적인 웹뿐만 아니라 모바일 앱 역시도 인터넷에 포함되며, 따라서 인터넷은 그야말로 유례없는 정보의..
앞서 포스팅했던 마인크래프트BE 서버를 여는 과정에서 FTP 클라이언트가 자주 쓰이게 됩니다. 뿐만 아니라 웹호스팅을 통해 일반적인 웹사이트를 운영할 때도 FTP클라이언트를 사용하면 편리할 때가 많습니다. 웹사이트 구축을 위해 ExpressEngine 혹은 GNU보드 등을 업로드하거나 호스팅한 가상서버의 저장소에서 파일을 다운로드 하는 등 그 용도는 정말로 많습니다. 또한 SHH로 접속하여 명령어로 처리해야하는 부분들을 그래픽UI를 통해 보고 손쉽게 처리할 수 있다는 점도 장점이라면 장점일 것입니다. 예를 들어 디텍토리를 만들고 싶을 때 'mkdir' 을 입력하는 대신 마우스를 우클릭하여 '디텍토리 생성'을 클릭하면 됩니다. 마찬가지로 파일 권한을 설정할 때도 chmod 명령어를 쓰는 대신 직관적인 체크..
기억장치컴퓨터가 계산을 수행하기 위해서는 비트와 바이트의 형태로 기억장치에 저장할 수 있어야 합니다. 컴퓨터가 나중에 데이터를 검색할 수 있도록 보관을 하는 것이지요. 하지만 기억장치는 종류마다 서로 다른 속도를 내고 내부에 저장할 수 있는 양에 차이가 있어, 서로 다른 장단점을 가지고 있습니다. CPU 캐시, 하드디스크, RAMCPU는 용량이 매우 큰 파일이나 데이터를 처리해야 하지만, 한번에 32 또는 64bit의 블록 단위로 굉장히 적은 양의 데이터를 조작하고 계산합니다. 하지만 중앙처리장치는 이러한 비트들을 굉장히 빠른 속도로 처리할 수 있습니다.이와 정 반대로 하드디스크는 CPU보다 훨씬 많은 양의 데이터를 저장할 수 있습니다. 근래의 하드디스크는 기기바이트나 테라바이트 단위의 데이터를 저장할 ..
오늘은 VPN에 대해 소개하고 가상 서버를 이용하여 직접 설치하는 과정을 보여 드리겠습니다. VPN이란? VPN(Virtual Private Network)은 가상사설망으로, 이를 이용하여 원격의 서로 다른 네트워크를 이용하는 장치들이 공통된 하나의 네트워크를 이용하는 것처럼 이용할 수 있습니다. 집에서 회사 네트워크에 보안된 상태로 접속하거나, 같은 와이파이를 공유하는 경우에만 멀티플레이가 가능한 게임에서 장거리 멀티를 즐기는 등 그 활용이 무궁무진합니다. 좀 더 흔한 용도로는 IP 우회가 있는데, 해외의 VPN으로 접속하면 특정 국가에서 막아둔 사이트를 우회 접속할 수 있습니다. 다양한 앱이나 프로그램에서 유료로 VPN 서비스를 제공하는 이유가 여기 있습니다. 단점이라 하면 사설망을 경유해서 오기 때..