연결함정(Connection Trap) 연결함정의 개념 - 관계형 데이터베이스에서 데이터간에 관계가 모호해져서 원하는 결과를 얻을 수 없거나 업무 처리시 영향을 주는 ER모델의 문제점 연결함정의 유형 부채꼴 함정(Fan Trap) - 개체 집합(Entity Set) 사이에 관계성 집합(Relation set)이 정의되어 있지만 관계성이 모호한 경우 부채꼴 함정이라 한다 균열 함정(Chasm Trap) - 개체 집합 사이에 관계성 집합이 정의되어 있지만 일부 개체집합과 개체집합 사이에 관계성이 존재하지 않는 경우 균열 함정이라 한다. 부채꼴은 관계성이 모호한 것이고, 균열은 일부 개체의 관계성이 존재하지 않는 경우이다 부채꼴 함정의 사례 및 해결 방법 부채꼴 함정의 사례 유재석이라는 교수 경우 상경대학인것..
카프카(Kafka)에서는 다양한 언어로 데이터를 주고 받는 기능을 제공하는데 본 포스팅은 파이썬(Python)으로 구현하는 프로듀서(producer)/컨슈머(consumer) 즉 데이터를 보내고 받는 방법을 설명한다. 파이썬으로 카프카를 호출하는 방법이 대표적으로 2가지 방법이 존재하는 것 같다. 하나는 카프카를 만든 제이 크렙스(Jay Kreps)가 만든 회사인 confluent가 제공하는 라이브러리이고, 다른 하나는 kafka-python이라는 라이브러리를 사용하는 방법이다. 후자인 kafka-python을 범용적으로 많이 사용하는데 성능은 컨플루언트의 라이브러리가 더 좋다. 후자를 사용하는 이유는 단하나 confluent는 c로 만든 라이브러리를 호출하여 사용하는 방식이라 별도의 설치과정이 존재하기..
맥 어드레스(Mac Address) 혹은 맥 주소는 네트워크의 OSI 7 Layer에서 데이터 링크 계층에 존재하는 놈으로 네트워크 인터페이스에 할당되는 고유 식별자이다. 맥 주소는 쉽게 생각했을 때 하드웨어 제조업체 즉, 네트워크 하드웨어 제조업체에서 고유 번호를 부여하는 값으로 동일한 값이 존재하지 않는다. 많이들 착각하는 것이 컴퓨터 하나당 맥 어드레스가 고유할 수 있다 생각하는 것인데 맥어드레스는 여러개가 존재할 수 있다. 컴퓨터의 고유 주소가 아닌 컴퓨터 부품 중 하나인 네트워크 인터페이스 컨트롤러(NIC)의 고유 주소이기 때문이다. NIC는 컴퓨터 하나당 여러개를 가질 수 있기 때문에 당연히 한 컴퓨터는 여러개의 맥 어드레스를 가질 수 있다. 맥 어드레스 확인법 ipconfig -all 맥 주..
주키퍼(ZooKeeper) 카프카(Kafka)는 분산 어플리케이션이기 때문에 이를 통제해주는 별도의 솔루션이 필요하다. 그래서 카프카를 독립적으로 설치하지 않고 필수적으로 주키퍼(Zookeeper)라는 하둡 진영의 분산 코디네이터를 설치하게 되는데 카프카 역시 아파치 프로젝트에 속해있기 때문이다. 주키퍼 설치프로세스 설치경로 : https://zookeeper.apache.org/releases.html 위 사이트에서 Apache ZooKeeper 3.6.2(asc, sha512)를 클릭하면 다운로드 사이트로 이동하게 되며 압축파일을 받고 아래와 같은 프로세스를 진행하도록 한다. 1. 원하는 폴더에 압축 파일을 옮긴 후, Command(cmd) 창을 열고 해당 위치로 가서 tar -xvf [주키퍼파일]을..
카프카에서는 파티션 단위로 분산처리를 수행한다. 이 분산 처리를 할 때 핵심적인 기능이 바로 복제(Replication)이라 볼 수 있다. 분산 처리를 할 때에는 모든 브로커에 데이터를 동일하게 보내는 것이 아니라 Master -> Slave 방향으로 데이터를 복제하는 것처럼 카프카는 리더가 팔로워에 복제를 수행하게 된다. 한마디로 Master는 Leader가 되고, Slave는 Follower로 되는 것과 같다. 위 그림처럼, 프로듀서는 리더에게 메시지(Message)를 전송하게 되고, 리더는 자신을 바라보는 팔로워에게 데이터를 복제한다. 그런데 위 그림으로만 보면 마치 복제를 할 때 토픽단위로 하는 것처럼 보이지만 사실 내부는 그리 단순하지 않는 것이 함정이다. 복제(replication) 방식 위 ..
토픽(Topic) 카프카(Kafka)는 데이터를 최종적으로 토픽(Topic)이라는 곳에 저장을 하며 데이터를 구분하기 위한 분류값 혹은 구분된 저장소라 이해하면 된다. 아파트에 있는 호별로 만들어진 우편함이라든지 이메일 주소라든지 이런 데이터를 받을 수 있는 값도 역시 카프카 관점에서는 토픽이라 볼 수 있다. 카프카는 데이터를 주고 받을 때 지정된 토픽으로 주고 받게 되며, 토픽을 어떻게 설계할 것인지가 핵심이 될 수도 있다. 파티션(Partition) 카프카의 저장소명을 토픽이라 한다면 파티션은 저장소 안에 분리되어진 공간이다. 파티션의 목적은 데이터를 더 많이 더 빨리 보내고 처리할 수 있는 것을 위해서 만들어진 것으로 파티션이 없다면 마치 1차선으로 된 도로를 달리는 것과 같지만, 파티션을 늘리고 ..
카프카(Kafka)에서는 페이지 캐시 기능을 써서 매우 높은 처리 속도를 가지고 있다. 페이지 캐시 기능은 OS에서 사용하는 페이지 캐시와 동일한 것이며, 메모리(RAM) 영역에 어플리케이션이 사용하는 부분을 할당하고 남은 잔여 메모리를 캐시로 전환하여 디스크 접근을 최소화해 I/O 성능을 향상시키는 메모리 영역이다. 카프카는 페이지 캐시를 적극적으로 사용하고 있기 때문에 서버에 디스크를 SSD로 구성하지 않아도 되며, 페이지 캐시를 사용하기 위해서 잔여 메모리를 쓰기 때문에 카프카 서버에 다른 어플리케이션을 함께 실행하는 것을 권장하지 않는다. JVM 힙사이즈 카프카는 JVM에서 돌아가기 때문에 메모리 할당 영역을 자바처럼 설정할 수 있다. 메모리 설정 방법은 KAFKA_HEAP_OPTS=-Xmx, X..
카프카(Kafka)의 분산 시스템이라고 포스팅 주제를 적긴 했으나 해당 내용은 빅데이터를 어느 정도 알고 공부했던 사람이면 사실 본인들이 알고 있는 지식에서 별 차이가 없다는 것을 잘 알고 있을 것이다. 카프카를 쓰는 이유가 빅데이터를 쓰던 사람이 카프카를 쓰는 것이 아닌 단일 시스템 혹은 분산이긴 하지만 빅데이터 플랫폼과 같이 flexible하고 scale out하지 않는 시스템에서 넘어온 케이스가 많을테니 말이다. 일단 본 포스팅에서는 카프카의 분산 시스템의 장점을 3가지 꼽을려고 한다. 카프카의 장점일수도 있지만 이는 분산 시스템 기반의 수많은 빅데이터 플랫폼의 장점이기도 하니 어찌보면 빅데이터 분산 시스템의 장점으로 이해해도 다를 바 없을 것이다. 높은 성능, 처리량(Throutput) 카프카의 ..
Maven으로 프로젝트를 만들게 되면, 기본적으로 Java 버전이 1.5를 사용하게 된다. 현재 카프카를 테스트 하기 위해 만들어진 임시적인 Maven 프로젝트를 기준으로 설명을 하게 되면... 현재 Pom.xml 4.0.0 kafka test 0.0.1-SNAPSHOT kafka-test jar http://maven.apache.org org.apache.kafka kafka-clients 2.6.0 이와같이 Pom.xml에는 그 어디에도 Java를 지정한 곳이 없다. 이건 아무래도 IDE에 따라 다를거라 판단되는데 필자가 사용한 Eclipse 혹은 전자정부프레임워크(이놈도 사실 eclipse)에서 maven java project를 생성 후 simple모드를 할 경우 java 버전을 별도로 설정하지..
카프카(Apache Kafka)를 만든 링크드인(Linkedin)은 초창기 Point to Point 구조를 사용하다가 모든 요구사항을 충족시키기 위한 카프카를 만들게 되면서 Pub/Sub 모델을 채용하게 된다. Pub/Sub(펍섭) 모델은 Publish와 Subscribe를 의미하며 그림으로 설명하자면 아래와 같다. 우측의 펍섭 구조를 보면 사실 그냥 중앙에 서버가 있고 통신을 하는 것처럼 보이며 사실 틀린말이 아니다. 카프카가 전송해주는 발신자와 수신자를 연결하는 것은 같기 때문이다. 하지만 펍섭의 모델은 우측의 모형처럼 통신이 양방향이 아니라 단방향으로 이루어지며 한가지 추가적인 기능이 존재한다. 발신자(Publish) 발신을 하는 역할을 하는 사람은 카프카에게 전송만하게 되고 수신자가 누구인지 알..
카프카(Kafka)는 세계적인 소셜 구인구직 플랫폼인 링크드인에서 만든 스칼라로 개발한 메세지 프로젝트이다. 이 내부 시스템은 2011년 아파치(Apache) 공식 오픈소스로 공개되었으며 현재 엄청나게 많은 업체들이 이 시스템을 사용중에 있다. 해외뿐만 아니라 국내 유수의 IT업체들도 카프카를 사용중에 있다. 우선 IT 양대 산맥인 네이버(Naver)와 카카오(Kakao) 역시 이 시스템을 사용중에 있으며 카프카 홈페이지 첫화면을 보면 포츈(Fortune) 100개의 기업 중 카프카를 사용하는 기업이 80%라고 할 정도로 자체적인 메시지 시스템이 구축되지 않는 이상 카프카를 기본적으로 사용한다 봐도 무방할 정도다. 링크드인의 히스토리 링크드인(Linkedin)은 2002년 12월에 시작했으며 모바일 산업..
본 포스팅에는 형태소 분석기등을 이용하여 검색을 하는 고급적인 부분들을 제외한 검색방법을 다뤄보는 포스팅이다. 이전 포스팅에서 주식에 관련된 정보를 stock이라는 인덱스에 넣어보긴 했었으나, 삼성전자에 대한 레코드만 넣었기 때문에 포스팅의 편의를 위하여 최근에 말도 많고 탈도 많은 방탄소년단의 빅히트와 블랙핑크의 와이지엔터테인먼트(YG) 주식 정보를 포함하여 총 3건의 레코드를 stock 인덱스에 추가한 후 검색을 하는 형태를 진행하고자 한다. 포스팅에 사용된 레코드 정보 PUT /stock/_doc/1 { "stockId" : "1", "stockNm" : "삼성전자", "stockType" : "보통주", "stockCd" : "005930", "trade" : "KOSPI", "current" :..