목록전체 글 (194)
센로그

◆ HTTP란? 서버-클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다 클라가 서버에게 HTTP request을 보냄. 그러면 서버가 이에 대한 HTTP response를 클라에게 주는 형태로 동작함. 그림을 보자. 웹 브라우저가 웹 서버에게 "HTTP라는 프로토콜로 root/index.html을 달라"고 요청하면, 서버는 "알겠어, 그거 여기 있고, 총 3150 length야. 가져가." 하고 주는 것임. 굉장히 심플하다. ※ 어떻게 이렇게 심플할 수 있는 걸까? → 전제조건: 초기에 HTTP를 짤 때, "무조건 HTTP 밑에는 TCP가 돌아야 한다!" 라는 걸 생각하고 짰기 때문에 가능하다. 즉 어차피 TCP가 에러 검출 및 복구를 할 거기 때문에, HTTP는 그걸 신경쓰고 싶지 않고 간단..

◆ Deadlock 이란? 둘 이상의 프로세스가 서로가 점유하고 있는 자원을 무한정 기다리고 있는 상황 ex) 데드락 예시를 보자. 다음은 데드락이 발생할 가능성이 있는 코드이다. S랑 Q라는 세마포어가 있다. 각 세마포어의 초기값은 1이다. (binary semaphore) P0과 P1이 번갈아가며 한줄씩 실행된다고 하자. P0은 wait(S) → wait(Q) 순서로, P1은 wait(Q) → wait(S) 순서로 실행될 것이다. P0에서, 우선 wait(S)는 통과하고 S--를 한다. (S=0) P1에서도, 우선 wait(Q)는 통과하고, Q--를 한다. (Q=0) 그런데 이때, Q=S=0이 되었으므로, 이제부터 P0는 P1이 홀딩하고 있는 Q를 기다리고, P1은 P0가 홀딩하고 있는 S를 기다리게..

◆ Synchronization Examples Synchronization에 관한 고전적인 문제들이 있다. Bounded-Buffer Problem Readers and Writers Problem Dining-Philosophers Problem 각각을 어떻게 해결하는지 알아볼 것임. ◆ Bounded-Buffer Problem (Producer/Consumer Problem) 버퍼에 (producer가 생산한) item이 있는 경우에만 consumer가 접근해서 사용할 수 있도록 하는 문제. 개수가 n개로 고정(bound)되어 있다고 버퍼가 있다고 하자. 각 버퍼는 하나의 아이템만 홀드할 수 있다. (full 또는 empty 둘 중 하나의 상태일 것이다) 버퍼가 여러 프로세스에 의해 공유된다고 가정..

◆ ZeroMQ란? 소켓 통신을 기반으로, 사용하기 편하게 만들어놓은 비동기 메시징 라이브러리. 다양한 형태와 방법, 서비스에 대해 메시지를 주고받을 수 있는 오픈소스 라이브러리이다. 결국 통신을 하다보니, 어느 정도 정해진 틀이 잡힌 것이다. 그래서 그 설계를 여러곳에 쓰고, 다시 쓰고 하다보니 ... "이런 설계를 많이 쓸거면, 미리 라이브러리로 만들어놔서 편하게 쓰면 않을까?" → 소켓을 밑에 깔고, 그 위에 1:N이나 M:N 통신을 쉽게 짤 수 있도록 미리 만들어놓은 게 ZMQ 설계 자체를 재활용하는 느낌. ◆ 프로토콜의 위치 ZMQ의 등장에 대해 설명하기 위한 배경. 통신 프로토콜들은 어디에 위치할까? 과거) Kernel 에 위치 전통적으로 OSI7 레이어에서, L1 은 하드웨어에 들어가고, L..

◆ Synchronization프로세스들은 concurrently하게 실행된다.인터럽트가 언제든지 발생할 수 있으므로, 한번에 끝까지 실행되는 경우는 별로 없다. 그런데 concurrent하게 동작하는 여러 스레드가 공유 메모리에 있는 하나 데이터에 접근하면, 누가 먼저 접근하느냐에 따라 결과 값이 매번 달라질 것이다. (Race Condition) 따라서 이런 경우 일관성이 보장되도록 동기화해주는 작업이 필요하다. ◆ Race Condition프로그램을 실행한 결과가 deterministic하지 않고, 각각의 instruction들의 실행되는 순서에 따라서 바뀌는 경우를 race condition이 있다고 한다. 여러 개의 스레드 데이터가 레이싱을 하고있는데스레드의 상대적인 속도(실행 순서)에 따라서..

※ 참고 포스팅 https://grace7040.tistory.com/34 Chapter 23. TRANSPORT LAYER : UDP AND TCP ◆ Process-to-Process Delivery 데이터 링크 계층은 node-to-node (hop-to-hop) 네트워크 계층은 host-to-host 전송 계층은? process-to-process 서버-클라이언트 의 관계를 갖고 있음. (서버-클라이언트 프로세스는 서로 grace7040.tistory.com ◆ Socket 소켓은 L3과 L4 사이의 커뮤니케이션 인터페이스이다. API. 어플리케이션은 소켓을 열고, 소켓에 정보를 주어서 상대 어플리케이션까지 가고.. 하면서 통신함. 소켓을 사용한 프로그램들은 bidirectional을 지원한다. ..