개발/잡다개발 82

IGMP

IGMP (Internet Group Managment Protocol) 서브넷 상의 멀티캐스팅 멤버십 제어 프로토콜 하나의 라우터와 여러 호스트로 구성되는 서브 네트워크 상에서 제어 프로토콜입니다. 전송용 프로토콜이 아니라, 제어용 프로토콜입니다. 멀티캐스트 라우터는 1. 멀티캐스트 라우터는 주기적으로 subnet 호스트 그룹들에게 IGMP Query 메세지를 전송 2. 호스트는 IGMP Query 메세지에 응답하며 다신의 그룹 정보(멀티캐스트 주소)를 IGMP 메세지를 통해 라우터에게 알려줌 참조 [1] - http://www.ktword.co.kr/abbr_view.php?nav=&m_temp1=1716&id=707

개발/잡다개발 2020.06.14

Readers Writer Problems

공유 데이터베이스에 접근할 때 생기는 문제입니다. Writer가 데이터를 쓰고 있을 때 다른 Writer가 동일한 공간에 접근하여 Write를 실행하는 것은 허락하지 않지만, Reader는 동시에 여럿이 접근하여 데이터를 읽을 수 있습니다. readcount = 0 (db에 접근중인 reader의 수) semaphore w_mutext (writer들 사이의 동기화 관리) semaphore mutex ( readcount와 wrt로 접근이 순차적으로 진행되도록 하는 세마포어) writer의 경우 shared data에 다른 process들의 접근을 차단하여 비교적 간단하게 구현합니다. do { wait(w_mutex); // 쓰기 수행 signal(w_mutex); } while (true); reade..

개발/잡다개발 2020.05.30

Scrapy 구조 분석

일단 기본적인 Scrapy 프로젝트를 만들면 위와 같이 나옵니다.(NewsUrlSpider.py는 만든 파일) 하나씩 보면 spiders 폴더 - 크롤러를 설정합니다. 실제로 데이터를 긁어오는 부분 items.py - 모델을 정의합니다. 어떤 형태로 모델을 만들어서 데이터로 저장할지 결정해주는 부분입니다. middlewares.py - 이름처럼 중간 세팅을 할 수 있습니다. 중간에 어떤 액션을 추가할지 등을 정할 수 있습니다. piplines.py - 데이터를 어떻게 저장할지 정합니다. 엑셀로 저장 or DB에 넣기에 대한 부분을 설정해줍니다. setting - 이름에서 볼 수 있듯이 크롤러 세팅입니다. 크롤러에 전체적인 세팅을 추가할 수 있습니다.

개발/잡다개발 2020.05.27

파이썬 크롤링 도구

크롤링을 하다보면 다양한 라이브러리를 사용합니다. beautifulSoup, Selenium, Scrapy를 주로 사용하는데 beautifulSoup 장점 - 매우 배우기 쉽습니다. 단점 - 기능에 제한적입니다. 단순하게 웹 페이지의 html을 가져와서 원하는 정보를 뽑아내는 수준입니다. Selenium 장점 - 브라우저를 직접 띄워서 사용하기 때문에, 여러 작업을 시킬 수 있습니다. 단점 - 브라우저 직접 띄워서 느립니다. Scrpay 장점 - 다양한 플러그인을 통해서 좀 더 효율적인 크롤링 작업을 할 수 있습니다. 단점 - 배우기 어렵습니다. 개인적으로는 beautifulSoup - 크롤링 연습용 Selenium - 가져와야 하는 데이터 양이 적은 서비스 Scrpay - 대용량 데이터 처리 정도로 정..

개발/잡다개발 2020.05.27

B+ Tree

B+ 트리는 키에 의해서 식별되는 레코드의 효율적 삽입, 검색, 통해 정렬된 데이터를 표현하기 위한 자료구조입니다. 다음과 같은 특성이 있습니다. B+ tree는 root, internal nodes, leaves로 구성됩니다. B+ 가치는 블록 중심 storage context 특히 파일 시스템에서 효율적을 검색을 위해 데이터를 저장하는 것입니다. - insert 차수 M이 홀수인 경우 t-1번째 index를 상위로 올리고, 차수 M 이 짝수인 경우 t번째 index를 상위로 올립니다. - delete 삭제의 경우에는 다양한 케이스가 존재하는데 삭제할 키가 leaf node에만 존재할 때 - 노드의 최소 개수 이상의 키가 있을 때는 간단하게 키를 삭제하면 됩니다. - 노드에 최소 개의 키가 있을 때는,..

개발/잡다개발 2020.05.25

ARM 프로세서

ARM의 user mode와 kenel mode모드에 대해서 알아보겠습니다. 일단 ARM이 무엇인지 알아야 하는데 ARM은 Advanced RISC Machine 즉 임베디드 기기에 많이 사용되는 RISC 프로세서입니다. RISC(Reduced Instruction Set Computer)는 이름에서 볼 수 있듯이 CPU 개수를 줄여 하드웨어 구조를 간하게 만드는 방법으로 마이크로프로세서를 설계하는 방법 중에 하나입니다. 그렇다면 User Level과, Kernel Level의 동작 모드에 대해서 알아보겠습니다. User Level은 Application과 연결되는 Library로 구성되며, 이 라이브러리에 가상화, 스케줄링, 동기화 등의 기능이 있습니다. User Level에서는 라이브러리에서 이 기능..

개발/잡다개발 2020.05.11

Synchronization Tools

Critical Section 이란 Process or Thread들이 공통 변수 선언하는 구역입니다. 이 문제 해결을 위해서 Mutual Exclusion - 어떤 Thread가 Critical Section 에서 수행되면 다른 Thread들은 접근할 수 없어야 합니다. Progress - 실행중인 프로세스가없고 중요 섹션에 들어 가려는 프로세스가있는 경우 다음에 중요 섹션에 들어갈 프로세스 선택을 무기한 연기 할 수 없습니다. bounded Waiting - 프로세스가 중요 섹션에 대한 요청을 한 후 요청이 승인되기 전에 다른 프로세스가 중요 섹션에 들어갈 수있는 횟수에 제한이 있어야합니다. Peterson’s Solution 이란 두개 이상의 프로세스의 동기화 문제를 해결하는 방법 중에 하나입니다...

개발/잡다개발 2020.05.07

Synchronization Examples

bounded-buffer problems은 공유 리소스에 대한 액세스의 전형적인 예시입니다. 버퍼가 가득 차 있으면 producers는 버퍼를 block하고 버퍼가 비어있으면 customer는 버퍼를 block합니다. Readers-Writers Problem 여러 명의 독자와 저자들이 하나의 저장 공간(버퍼)을 공유하며 이를 접근할 때 발생하는 문제이다. 독자는 공유 공간에서 데이터를 읽어온다. 여러 명의 독자가 동시에 데이터를 읽어오는 것이 가능하다. 저자는 공유 공간에 데이터를 쓴다. 한 저자가 공유 공간에 데이터를 쓰고 있는 동안에는 그 저자만 접근이 가능하며, 다른 독자들과 저자들은 접근할 수 없다. 변수 readcount : 현재 버퍼에 접근 중인 독자의 수를 나타낸다. (초기값=0) wrt..

개발/잡다개발 2020.05.07