목록분류 전체보기 (175)
가자미의 개발이야기
a. 프로토콜 레이어 각 레이어는 순차적으로 서비스를 진행. 보내는 쪽에서는 상위-하위 계층 순, 받는 쪽에서는 하위-상위 순으로 진행된다. 상위 계층은 하위 계층에게 서비스를 요청, 하위 계층은 상위 계층에게 서비스 제공. 이때 보내는 쪽과 받는 쪽이 같은 계층에 위치한 레이어끼리는 peer라고 부른다. 각 peer끼리는 헤더와 페이로드를 공유. 헤더에는 송수신지의 내용이 담겨있음. b. 왜 레이어링을 사용하는가 복잡한 시스템을 유지보수하기 유리함. 한 레이어를 바꾼다고 해도, 다른 레이어에는 큰 영향을 안줌. 레이어링은 계층들이 가장 근접한 계층들끼리 서비스를 요청하고 제공하는 시스템인데, 최근 들어 몇몇 계층을 생략하고 서비스를 요청하고 제공하는 시스템을 구축하기도.(크로스 레이어, 기존의 레이어링..
이벤트 기반 이벤트 발생시 미리 지정해둔 작업을 수행하는 방식. 이벤트 루프 : 호출된 콜백 함수의 실행 순서를 결정, 노드가 종료될 떄까지 이벤트 처리를 위한 작업을 반복 태스크 큐 : 콜백 함수들이 기다리는 공간. 백그라운드 : 타이머나 IO 작업 콜백 또는 이벤트 리스너들이 대기하는 곳 논블로킹 I/O node.js는 오래걸리는 작업을 백그라운드에 두고 다음 코드가 먼저 실행시키고 그 함수가 태스크 큐를 거쳐 호출 스택으로 올라오게 하는 방식으로 작업을 효율적으로 운용할 수 있다. 이를 논블로킹 방식이라 한다. 블로킹 방식의 코드 function lonRunningTask(){ //오래 걸리는 작업 console.log('작업 끝'); } console.log('시작'); longRunningTas..
복잡도 함수 : 입력값의 크기에 따라 시행 횟수를 추측하는 함수. 0보다 큰 정수를 가짐. Linear Time 알고리즘 : n이 인풋일 때 1차식으로 복잡도 함수가 나오는 알고리즘 Quadratic Time 알고리즘 : 2차식으로 복잡도 함수가 나오는 알고리즘 Order(차수) 어떤 알고리즘의 복잡도 함수의 최고차항의 차수 입력값이 커질 수록 차수는 알고리즘의 복잡도에 큰 영향을 미친다. 각 차수 별 입력값 증가에 따른 복잡도 증가 세타(Theta)의 집합은 빅오와 오메가의 교집합이다. 빅오 f(n)이라는 복잡도 함수의 빅오는 f(n)*양의 상수c를 했을 떄 무조건 작거나 같은 g(n) 다시 말해 어떤 N을 기준으로 cf(n)이 g(n)보다 무조건 크거나 같은 경우, g(n)은 f(n)의 빅오에 포함된..
알고리즘이란 어떤 문제를 해결할 수 있는 단계 별 절차 Sequential Search Algorithm //java persue code public static index SeqSearch(int n, keyType[] S, keyType x){ index location =1; while(location n) location = 0; return location; } Binary Search Algorithm 정렬된 상황에서만 가능 //java persue code public static idex BinSearch(int n, keyType[] S, keyType x){ index location, low, high, mid; low = 1; high = n; location = 0; while(..
1. 인터넷이란 무엇인가. a. 네트워크 하드웨어 PC, 서버, 스마트폰 등 = 호스트(엔드 시스템) 호스트를 연결해주는 선 = 통신 링크(커뮤니케이션 링크) ex.광섬유 등... bandwidth(전송률)이 중요. 교환 노드(패켓 스위치, 허브) : 자체로는 데이터를 발생시키지 않지만 중간에 위치한 것. 통신 링크가 여러개. ex. 라우터, 스위치, 공유기 b. 인터넷 ISP (internet service provider): 인터넷 사업자. sk, kt... 인터넷 : 다양한 ISP들을 서로 연결 "network of networks" 프로토콜 : 데이터를 주고받기 위해 네트워크를 제어하는 규약 ex. TCP, IP, HTTP 인터넷 표준 : 프로토콜을 정하는 행위. ex. RFC, IETF c. 서..
public static Set synchronizedSet(Set s) public static List synchronizedList(List list) public static Map synchronizedMap(Map m) public static Collection synchronizedCollection(Collection c) //콜렉션 인스턴스를 동기화 컬렉션 인스턴스 동기화의 예 class SyncArrayList{ public static List lst = Collection.synchronizedList(new ArrayList()); public static void main(String[] args) throws InterruptedException{ for(int i = 0; ..
쓰레드 풀 모델 : 사용가능한 쓰레드들을 쓰레드 풀에 담아두고 작업에 따라 쓰레드를 할당. (매 작업마다 쓰레드를 생성&소멸하면 리소스 낭비가 심각하기 때문.) 쓰레드 풀 활용 예시 class ExecutorsDemo{ public static void main(String[] args) { Runnable task=()->{//쓰레드에게 시킬 작업 int n1 = 10; int n2 = 20; String name = Thread.currentThread().getName(); }; ExecutorService exr = Executors.newSingleThreadExecutor();//하나씩 쓰레드를 할당 exr.submit(task);//쓰레드 풀에 작업 전달 exr.shutdown();//쓰레드..
쓰레드의 동시접근 문제. 여러 쓰레드의 작업이 순차적으로 진행되는 것이 아니고 무작위로 코어가 다른 쓰레드로 이동하는데, 이런 과정에서 작업결과가 우리가 예상한 것과 다르게 나오곤 한다. 이런 동시 접근 문제는 여러 쓰레드가 같은 메모리에 접근하거나, 같은 코드를 사용할 때 일어난다. 동시접근 문제는 쓰레드 동기화로 해결한다. 동기화(synchronized) 메소드 //synchronized에 주목! //둘 이상의 쓰레드가 접근하는 것을 막겠다는 의미 //한 클래스 내에 여러개의 synchronized 메소드가 존재하면 //하나로 취급. 즉 increment()를 한 쓰레드가 사용중이면, 다른 쓰레드가 decrement를 사용 못함. //메소드 코드량이 많아지면 성능저하를 일으킴. //메소드 코드량이 적..
현재 실행 중인 프로그램을 프로세스라고 부른다. 이 프로세스가 어떤 실행의 흐름을 만드는 최소의 단위를 쓰레드라고 한다. (프로세스는 공장이고 쓰레드는 일꾼이라고 생각하면 된다.) ex. 메인 메소드. 메인 쓰레드는 자동으로 생성되지만 다른 쓰레드는 프로그래머가 직접 생성해야 한다. 멀티쓰레딩의 장점 CPU의 사용률을 향상 자원을 보다 효율적으로 사용가능 사용자에 대한 응답성 향상 작업이 분리되어 코드가 간결 a. 쓰레드의 구현과 실행 Thread클래스를 상속 class MyThread extends Thread { public void run(){ /*작업내용*/} //Thread 클래스의 run()을 오버라이딩 } MyThread t1 = new MyThread(); //인스턴스 생성 Runnable..