목록분류 전체보기 (175)
가자미의 개발이야기
a. 신뢰성있는 데이터 전송의 원칙 패켓에 있는 헤더의 특정 정보를 해석을 통해 정보가 제대로 왔는지 확인한다. 먼저 어플리케이션 계층에서 수송계층의 RDT의 rdt_send()를 요청하면 RDT에서는 정보를 패캣으로 나눠 담고 이를 네트워크 계층의 unreliable channel에게 udt_send() 요청을 하게 된다. 네트워크를 거쳐 정보가 수송계층에 도착하게 되면 rdt_rcv()요청이 이뤄지고, 패캣의 헤더 부분을 실행하고 문제가 없으면 데이터만 꺼내서 deliver_data()요청으로 어플리케이션에게 전달한다. b. FSM (Finite State Machines)로 rdt 프로토콜 기술 state : 프로그램이 실행되는 단계 화살표 : 프로그램의 상태 변화 event : 언제 상태변화가 이..
a. 수송 계층 ex. TCI, UDP 일반적으로 교환 노드에는 존재하지 않음.(방화벽 같은 예외가 있다.) 엔드 시스템에만 존재 보낼 때 조각으로 나눠서 각 조각마다 헤더를 붙여서 보낸다. 받을 때는 순서대로 받지는 않는다. 받는 쪽이 수송 계층을 통해 순서를 파악한다. b. 수송 계층 vs 네트워크 계층 네트워크 계층 : 어떤 경로로 메시지를 전달할 것인가 수송 계층 : 도착한 메시지를 어떤 프로세스로 처리할 것인가. (프로세스들은 포트번호로 구분한다.) c. 인터넷 수송 계층 프로토콜 순서대로 전달, 높은 신뢰성(오류 제어)(TCP) -순서 없이 오거나, 잘못된 메시지가 오거나(비트오류), -아예 도중에 메시지가 잃어버리거나, 같은 메시지를 여러번 받거나... =>TCP는 이를 해결할 능력이 있음...
대학교 과제로 이런 문제가 나왔다. 8번. 실행 예와 같이 키보드로부터 배열의 크기를 입력 받아서 배열 생성, 이 곳에 1에서 100까지 범위의 정수를 램덤 삽입하고 화면 출력. 배열에는 동일한 수가 없도록 하자. 실해 예) 정수 몇개?7 57 67 34 91 81 18 31 그래서 나는 재귀함수를 활용해 풀려고 했다. import java.util.Scanner; import java.util.Random; public class Practice8 { static int[] arrayStatement(int num) { int array[] = new int[num]; return array; } static int arrayRandomGet(int[] array) { Random random = ne..
a. DASH (Dynamic, Adaptive, Streaming over HTTP) 서버에서는 비디오 파일을 여러개의 청크로 나누고 청크들을 여러 방법으로 인코딩하고 저장 manifest file : 다양하게 저장된 청크들이 어디에 저장됐는지(URL) 알려주는 파일 클라이언트에서는 서버-클라이언트 대역폭(다운로드 속도)을 측정해서 속도에 따라 manifest가 적당하게 인코딩된 청크 위치a. DASH (Dynamic, Adaptive, Streaming over HTTP) 서버에서는 비디오 파일을 여러개의 청크로 나누고 청크들을 여러 방법으로 인코딩하고 저장 manifest file : 다양하게 저장된 청크들이 어디에 저장됐는지(URL) 알려주는 파일 클라이언트에서는 서버-클라이언트 대역폭(다운로드 ..
a. pure P2P 구조 -항상 켜져있는 서버가 존재하지 않음 -end system 끼리 직접 통신하게 된다. -이 end system을 peer라고 부른다. -한 서버가 여러 end system에게 전송하는 거 보다 end system끼리 자료를 주고 받게 하는 P2P가 더 확장성이 있음. b. Bit-torrent 파일을 256kb의 청크로 나눠 peer들 끼리 청크를 주고 받는 형식 traker는 피어들이 누구인지, 누가 참여하고 있는지를 추적하는 장치. 만약 새로운 피어가 들어왔을 때 이 피어는 트래커를 통해 어떤 피어와 연결해야하는지를 알 수 있다. 청크는 내 이웃 피어들에게서 가져오는데, 이때 청크는 가능한 희귀한(피어들이 덜 가지고 있는) 청크를 가져온다. 청크를 보내는 기준은 나에게 많은..
a. DNS : domain name system 각각의 노드들을 식별하기 위한 id가 필요하다. 대표적인 예시로 ip 주소(32비트)를 활용한다. www.something...com이라는 는 주소로 들어갈 경우 DNS가 이 도메인주소를 ip주소로 변환하여 컴퓨터들이 인식할 수 있게한다. 분산데이터 : 계층적인 구조를 갖는 네임서버들 어플리케이션 계층 프로토콜 : UDP를 사용 b. DNS : services host aliasing : 실제 이름을 줄여서 사용할 수 있게 해준다. 예를 들어 www.abcd.ef...com을 www.abcd.com 으로도 접속 가능하게 지원한다. mail server aliasing : 메일서버도 별명을 활용할 수 있다. load distribution : 하나의 웹서버..
promise.all : 여러 개의 프로미스 인스턴스를 받아 모두 완료될 때까지 기다리고 모든 반환값을 반환 promise.race : 여러 개의 프로미스 인스턴스 중 가장 먼저 끝날 때까지 기다리고 가장 먼저 끝난 반환 값을 반환 //promise.all & promise.race const getDog = async ()=>{ await sleep(1000); return 'bark!'; } const getCat = async ()=>{ await sleep(1000); return 'meow!'; } async function process2(){ const results=await Promise.all([getDog(), getCat()]); //promise배열을 받아 모두 끝나면 동시에 결과..
async : 함수 앞에 붙이면, 반환 값이 반드시 promise형이 된다. await : async에만 사용할 수 있음. 프로미스 인스턴스가 완료될 때까지 대기. then과 비슷 //async & await function sleep(ms){ return new Promise(resolve=> setTimeout(resolve,ms)); } async function process(){ console.log('hello'); await sleep(1000); console.log('nice to meet u'); return true;//async의 반환형은 promise(then catch사용 가능) } process();
promise : 특정 콜백을 조건에 따라 성공/실패로 나눠주는 역할. resolve : 성공했을 경우에 성공 결과를 반환하는 메소드 reject : 실패했을 경우에 에러를 반환하는 메소드 then : promise 인스턴스가 성공적으로 실행하고 나서 다음에 할 행동을 콜백으로 실행 catch : promise 인스턴스가 오류를 일으킬 경우 처리할 행동을 실행 //비동기 작업 다루기 promise //많은 콜백함수를 정리할 때 사용 const myPromise = new Promise((resolve, reject)=>{ setTimeout(()=>{ resolve('result');//성공하는 상황에서는 resolve }, 1000) setTimeout(()=>{ reject(new Error());/..
setTimeout : ms초 뒤에 백그라운드에서 작업할 콜백을 정의 //비동기 작업 다루기 setTimeout function work(callback){ setTimeout(()=>{//백그라운드에서 작업실행 const start = Data.now(); for(let i=0;i{ console.log('작업이 끝났어요'); console.log(ms+'ms'); }); console.log('다음작업'); 콜백을 매개변수로 받는 work 함수. work함수는 setTimeout으로 반복문 작업을 하고 매개변수 콜백을 마지막으로 실행.