컴퓨터 시스템 (폰노이만 컴퓨터의 기본적인 구조) 프로세서(CPU)와 메모리(OS, Program) 그리고 Bus 형식으로 이어져 있는 I/O Controller로 구성된다. OS는 비휘발성 보조기억장치에 저장되어 있다. 프로그램이 실행되기 위해선 주기억장치로 복사 / 호출되어야 한다. 커널(Kernel) : 운영체제의 기능 중 항상 주기억장치에 상주하는 요소들을 의미한다. 본 강의에서는 넓은 범위의 ‘운영체제’로 이해하면 된다. 컴퓨터의 역사와 처리 방식 Serial Processing 사람에 의해 Operating되는 초기 운용 방식 Simple Batch Systems (단순 일괄 처리 방식) Monitor Software의 등장 마그네틱 카드로 이루어져 있는 일련의 프로그램의 묶음을 차례차례 메모..
2.5.2 HTTP/1.1 매번 TCP 연결이 필요한 HTTP 1.0 세대와 달리, 한 번 초기화한 후 keep-alive 라는 옵션으로 여러 개의 파일을 송수신할 수 있다. 기존에도 존재하긴 했지만, 본 세대부터 표준화되어 사용되기 시작했다. 문서 내의 리소스 용량이 커지면 선입선출의 개념으로 딜레이가 발생하기도 하는데, 이를 HOL Blocking이라고 한다. HOL Blocking 네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 또한 HTTP/1.1의 헤더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무거운 성능을 보인다. 2.5.3 HTTP/2 멀티플렉싱 여러 개의 스트림을 사용하여 송수신. 패킷이 손실되었더라도 해당 스트림에만 영향을 미친..
문제 머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling 이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요. 조건 1. 1 ≤ babbling의 길이 ≤ 100 2. 1 ≤ babbling[i]의 길이 ≤ 15 3. babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다. 4. 문자열은 알..
문제 N가지 종류의 화폐가 있다. 이 화폐들을 최소한으로 사용해 합이 M원이 되도록 하고자 한다. M원을 만들기 위한 최소한의 화폐 개수를 출력하는 프로그램을 작성하시오. 조건 입력조건 1. 첫째 줄에 N,M이 주어진다. 2. 이후의 N개 줄에는 각 화폐의 가치가 주어진다. 출력조건 1. 첫째 줄에 최소 화폐 개수를 출력한다. 2. 불가능할 때는 -1을 출력한다. 코드 n,m = list(map(int,input().split())) array=[] for i in range(n): array.append(int(input())) d=[10001]*(m+1) d[0]=0 for i in range(n): for j in range(array[i],m+1): if d[j-array[i]]!=10001: d..
2.4 IP 주소 2.4.1 ARP 컴퓨터 간의 통신은 IP주소를 통해서 이루어진다고 흔히 알고 있지만, 정확히 말하면 IP 주소 내부의 MAC 주소를 가져와 이를 기반으로 통신한다. 이 때 MAC 주소를 가져오는 프로토콜을 ARP라고 한다. 논리적 주소(IP)와 물리적 주소(MAC)를 상호 간에 통신을 가능케 하는데, 순방향을 ARP, 역방향을 RARP 프로토콜이 처리한다. 메인 서버에서 ARP Request 브로드캐스트를 하위 서버에다 뿌려주면, 그 중 해당 주소와 일치하는 장치가 ARP Reply 유니캐스트를 통해 MAC 주소를 찾게 된다. 2.4.2 홉바이홉 통신 건너뛰는 모습을 뜻하는 홉에서 알 수 있 듯 패킷이 라우팅 테이블을 이동하며 최종 목적지까지 도달하는 통신을 말한다. 이 때 라우팅 테..
유선 LAN (IEEE802.3 프로토콜) 전이중화 통신 (Full duplex) : 양쪽 장치가 동시에 송수신할 수 있는 방식. 송/수신로 서버가 나뉘어져 있으며, 현대에 사용하고 있는 고속 이더넷 방식이다. CSMA/CD : 데이터 전송 ‘이후’ 충돌이 발생한다면 일정 시간 이후 재전송 → 유선 LAN에 사용했던 반이중화 통신 방식 무선 LAN (IEEE802.11) 반이중화 통신 (Half duflex) : 양쪽 장치가 서로 통신할 수는 있지만, 동시에 이루어질 수는 없다. 충돌 가능성이 있기 때문에 방지할 시스템이 필요하다. CSMA/CA : 캐리어 감지 (회선이 비어 있는지 판단) 등 사전에 충돌을 방지하는 방식이다. 랜덤 값을 기반으로 정해진 시간만큼 기다린 후 데이터를 송신하는 IFS도 존재..
2.1 네트워크 2.1.1 처리량과 지연시간 네트워크란 노드와 링크를 통해 구성된다. 노드란 서버, 라우터, 스위치 등의 네트워크 장치를 의미하고 링크는 유무선 연결을 의미한다. 처리량 : 링크를 통해 전달되는 단위 시간당 데이터양으로, bps단위를 사용한다. 초당 전송 또는 수신되는 비트 수를 의미한다. 지연시간 : 요청이 처리되는 데에 걸리는 시간을 의미하며, 데이터가 두 장치 사이를 왕복하는 총 시간이다. 2.1.2 네트워크 토폴로지와 병목 현상 네트워크 설계 간 노드와 링크의 배치방법을 네트워크 토폴로지라 한다. 트리 토폴로지 : 계층형 토폴로지라고도 하며, 노드의 추가 및 삭제가 용이하고 트래픽이 집중될 때 하위 노드에도 영향을 미칠 수 있다. 버스 토폴로지 : 설치 비용이 적고 신뢰성이 우수한..
1.1.5 프록시 패턴 앞에서 옵저버 패턴을 설명할 떄, 객체의 상태변화를 감지하면 옵저버들에게 변화를 알려주는 객체를 프록시 객체라고 하였는데, 이를 이용해 대상 객체에 접근하기 전 흐름을 가로채 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다. 프록시 패턴은 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다. 프록시 서버는 실제 서버와 사용자 간의 중개자 개념으로, 사용자로부터 요청받는 정보들을 먼저 처리한다. 캐싱을 하여 네트워크 비용을 절감할 수 있고, 비정상적인 접근을 감지하여 DDOS를 방지할 수도 있다. 실제로 Node.js 앞단에 설치하는 Nginx를 프록시 서버로 주로 둔다. 이를 통해 본 서버의 포트를 숨길 수 있고, 버퍼 오버플로우를 방지할 수 있다. ..
1.1 디자인 패턴 디자인 패턴? 프로그램 설계간 발생했던 문제점들을 객체 간의 상호 관계 등을 따져 해결할 수 있게 만들어 놓은 규약 1.1.1 싱글톤 패턴 하나의 클래스에 하나의 인스턴스만 가지는 패턴. 보통 DB 연결 모듈에 사용된다. 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 인스턴스를 생성할 때 드는 비용을 줄일 수 있다. 단 의존성이 높아진다는 단점이 있다. 자바스크립트에서의 싱글톤 패턴 class Singleton { constructor() { if (!Singleton.instance) { Singleton.instance = this } return Singleton.instance } getInstance() { return this } } ..
문제 일직선으로 이어져 있는 식량 창고를 공격하여 한다. 각 식량 창고에는 정해진 수의 식량을 저장하고 있으며 선택적으로 약탈하여 식량을 빼앗을 에정이다. 서로 인접한 식량창고는 공격할 수 없다. 조건 입력 조건 1. 첫째 줄에 식량 창고의 개수가 주어진다. 2. 둘째 줄에 공백을 기준으로 각 식량창고에 저장된 식량 개수가 주어진다. 출력 조건 1. 첫째 줄에 개미 전사가 얻을 수 있는 식량의 최댓값을 출력하라. 코드 n = int(input()) array = list(map(int,input().split())) d=[0]*100 d[0] = array[0] d[1] = max(array[0],array[1]) for i in range(2,n): d[i] = max(d[i-1],d[i-2]+arra..