Home

0

네트워크 - Web Socket

웹 소켓 Web Socket 웹 소켓이란 두 프로그램 간의 메시지를 교환하기 위한 통신 방법 중 하나, 현재 HTML5 에서 많이 사용하는 방식이다. WebSocket 프로토콜은 Text, Binary 두 가지 유형의 메세지를 정의하고 있지만 그 메세지의 내용까지는 정의하고 있지 않는다. 특징 양방향 통신 (Full-Duplex) 데이터 송수신을 동시에 처리할 수 있는 통신 방법 클라이언트와 서버가 서로에게 원할 때 데이터를 주고 받을 수 있다. Http 통신은 Client 가 요청을 보내고 Server 가 요청에 대해 응답을 보내주는 단방향 통신 실시간 네트워킹 웹 환경에서 연속된 데이터를 빠르게 노출할 수 있다. Web Socket 이전 기술 위 기술들은 HTTP 위에서 동작하므로 Request, Response 둘다 Header 가 불필요하게 크다. Polling 서버로 일정 주기로 요청을 송신하는 방식이다. Real-time 통신에서는 언제 통신이 발생할지 예측이 불가능 하므로 주기적으로 Request 와 Connection을 생성한다. 불필요한 Request 와 Connection 을 위한 자원 Loss 가 발생 Long Polling 서버에서 요청을 보내고 이벤트가 생겨 응답 받을 때 까지 연결을 종료하지 않는다. 응답을 받으면 귾고 다시 재요청을 한다. 많은 양의 메시지가 쏟아질 경우 Polling 과 같다. Streaming 서버에 요청을 보내고 끊기지 않는 연결 상태에서 끊임 없이 데이터를 수신한다. 클라이언트에서 서버로의 데이터 송신이 어렵다.

0

Database - 서브 쿼리

서브 쿼리 서브쿼리란 쿼리안의 보조 쿼리를 가르키는 용어다. 서브 쿼리가 어느 위치에 있는지에 따라서 불리는 용어가 살짝씩 다르다. 스칼라 서브 쿼리 인라인 뷰 중첩 서브 쿼리 스칼라 서브 쿼리SELECT 절에 서브쿼리가 있을 경우 스칼라 서브쿼리 라고 불린다. 스칼라 서브 쿼리는 반환되는 데이터 값이 1행 1열의 구조로 출력 돼야 한다. 인라인 뷰FROM 절에 서브쿼리가 있는 경우 인라인 뷰 라고 불린다. FROM 절 냅에 일시적으로 뷰를 생성하는 방식이라 인라인 뷰라고 불린다. 인라인 뷰의 결과는 내부적으로 메모리 또는 디스크에 임시 테이블을 생성해 활용한다. 중첩 서브쿼리WHERE 절에 서브쿼리가 있는 경우 중첩 서브쿼리 라고 불린다.

0

Oracle - Clustering Factor

Oracle - Clustering Factor 데이터베이스에서는 특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도를 의미한다. 인덱스 클러스터링 팩터가 좋다. 고 하면 인덱스 정렬 순서 와 테이블 정렬 순서 가 서로 비슷하다는 것을 말한다. Index Scan의 Cost에 큰 영향을 준다. Index Lookup을 통해 Data를 읽는 일량을 결정한다.

0

Kafka Consumer

Kafka Consumer카프카에서는 Consumer 가 데이터를 가져가도 데이터가 사라지지 않는다. Kafka Consumer 는 기본적으로 Topic 의 데이터를 가져온다. 데이터를 가져오는 것을 Polling 이라고 한다. Partition Offset 위치 기록(Commit) Consumer Group 을 통해 병렬 처리 offset 메시지가 파티션 내에서 가지는 고유의 번호 offset 은 토픽 별로 파티션 별로 별개로 지정된다. Consumer 가 데이터를 어느지점까지 읽었는지 확인하는 용도로 사용한다. Consumer 가 데이터를 읽어가면 offset 을 Commit 한다. Consumer 가 Partition 의 읽은 위치(offset) 은 Kafka 의 __Consumer_offset 토픽에 저장된다. Consumer 가 중지가 되더라도 시작 위치를 알고 있으므로 다시 복구하여 데이터를 처리할 수 있다. Multiple Consumer Consumer 개수는 Partition 개수보다 적거나 같아야 한다. 여러 Partition 을 가진 Topic 에 대해 Consumer 가 병렬 처리하게 하기 위해서는 Consumer 가 Partition의 개수보다 작아야 한다. 다른 Consumer Group

0

Kafka Partitioner

Kafka Partitioner Producer 가 데이터를 보내면 무조건 Partitioner 를 통해 Broker 로 데이터를 보낸다. Recode 에 포함된 Message Key 혹은 Message 값에 따라서 Partition 의 위치가 결정된다. Producer 를 사용할때 Partitiooner 를 설정하지 않는다면 UniformStickyPartitioner 로 설정된다. Key 가 있는 Message Message Key 를 가진 레코드는 Partitioner 에 의해서 특정한 Hash 값이 생성된다. 해당 Hash 값을 이용해 어느 Partition 에 저장될지 결정된다. 동일한 Message Key 를 가진 Record 는 동일한 Hash 값을 만들기 때문에 항상 동일한 Partition 에 들어가는 것을 보장한다. 순서를 지켜서 데이터를 처리할 수 있는 장점이 있다. Partition 내부에서는 Queue 처럼 동작하기 때문에 순서를 지킬 수 있다. Key 가 없는 MessageRound Robin 형태로 데이터가 들어가게 된다. UniformStickyPartitioner 는 프로듀서에서 배치로 모을 수 있는 최대한의 Record 를 모아서 Partition 으로 데이터를 보내게 된다. Message Key 가 없는 Record 들은 Partition 에 적절히 분배된다.

0

Kafka Producer

카프카 프로듀서카프카 프로듀서는 브로커에 존재하는 토픽에 메시지를 전달하는 역할을 담당합니다. Topic 에 해당하는 메시지를 생성 후 해당 Topic으로 데이터를 publish 한다. 또한, 메시지 전송이 실패할 경우, 재전송을 한다. 카프카 프로듀서는 브로커로 메시지를 보낼때 파티션 Key 도 함께 보낼 수 있습니다. 브로커는 파티션 Key 의 유무에 따라 데이터를 저장하는 방식이 달라집니다. 파티션 Key 가 null 인 데이터 전송Topic 에 Partition 이 한개인 경우는 데이터들이 순차적으로 쌓이게 된다. Topic 에 Partition 이 여러개인 경우 Round Robin 형식으로 데이터가 쌓이게 된다. 파티션 Key 를 전송할 경우Kafka 는 Key 를 특정한 Hash 값으로 변형 시켜 Partition 과 1:1 매칭을 시킵니다. 각 파티션에 동일 Key 의 Value 만 쌓이게 된다. Partition 의 개수와 Key 의 개수가 일치하지 않는 경우 Key 와 Partition 의 매칭이 깨지게 돼 Key 와 Partition 연결은 보장되지 않습니다.

0

Kafka Replication

Kafka Broker카프카가 설치 돼 있는 서버 단위를 말한다. 보통 3개 이상의 Broker 로 구성해 사용하는 것을 권장 Replication 데이터의 복제를 의미한다 Replication 은 Partition 의 고가용성 을 위해 사용된다. 3개 이상의 Broker 를 사용할 때 Replication 은 3으로 설정하는 것이 좋다 Replication 이 1인 경우 Partition 이 원본 1개만 존재한다는 것이다. Replication 이 2인 경우 Partition 이 원본 1개와 복재본 1개 총 2개가 존재함을 의미한다. Replication 이 3인 경우 Partition 이 원본 1개와 복재본 2개 총 3개가 존재함을 의미한다. Broker 개수에 따라서 Replication 개수가 제한된다. Replication 의 개수는 Broker의 개수를 넘어설 수 없다. 원본 Partition 은 Leader Partition 이라 부르고, 복재본 Partition 은 Follower Partition 이라 부른다. Leader Partition 과 Follower Partition 을 합쳐서 ISR (In Sync Replica) 라고 부른다. Producer 가 Topic 의 Partition 에 데이터를 전달할 때 전달받는 주체가 Leader Partition 이된다. Replication 이 1인 경우 Partition 이 한개고 Replication 이 1인 Topic 이 존재하고 Broker 가 3대라면 Broker 3대 중 1대에 해당 Topic 정보가 저장된다.

0

Kafka 설치

카프카 설치http://kafka.apache.org/ 주키퍼 실행bin/zookeeper-server-start.sh config/zookeeper.properties Properties 변경server.properties에서 Listner 설정을 추가해 줘야 한다. listeners=PLAINTEXT://127.0.0.1:9092 kafka 실행bin/kafka-server-start.sh config/server.properties

0

Kafka 구조

Kafka 구조 Topic 데이터를 구분하기 위해 사용하는 논리적인 단위 (데이터 베이스의 테이블 명과 유사하다고 생각하면 된다.) Topic은 한개 이상의 partition으로 구성된다. 카프카에서는 데이터를 주고 받을 때 Topic 을 이용해 pub/sub 형태로 데이터를 주고 받는다. Partition 토픽에 속한 Record 를 실제 저장소에 저장하는 가장 작은 물리적인 단위 Consumer 가 Record 를 가져가더라도 Record 는 삭제되지 않는다. 파티션은 늘리는 것은 가능하지만 줄이는 것은 불가능하므로 파티션을 늘릴때는 주의 해야 한다. Record 파티션에 저장되는 데이터 Kafka Pub/Sub 모델 Kafka 를 사용하기 위해서는 Message 를 발행하는 Producer 와 Message 를 구독하는 Consumer 로 구성한다. Kafka 에서는 메시지를 발행하는 Publisher 를 Producer 로 메시지를 구독하는 Subscriber 를 Consumer 라고 부른다. Kafka 에서는 Consumer 가 데이터를 가져가도 데이터가 사라지지 않는다. Kafka Producer Kafka Producer 는 데이터를 Kafka 로 보내는 역할을 한다.

0

Spring Web Socket - Chat 프로그램 만들기 1

Spring boot Web Socket - Chat 프로그램 만들기 1참고 https://docs.spring.io/spring-framework/docs/4.3.x/spring-framework-reference/html/websocket.html https://daddyprogrammer.org/post/4731/spring-websocket-chatting-server-redis-pub-sub/ Message BrokerMessage Broker 는 Publisher 로부터 전달 받은 Message 를 Subscriber 로 전달하는 중간 역할을 하며 응용 소프트웨어 간에 메시지를 교환할 수 있게 한다. 이때, 메시지가 적재되는 공간은 Message Queue 라고 하며 메시지 그룹을 Topic 이라고 한다. Message Broker 는 데이터를 보내고 처리하고 삭제한다. Message Interceptor 정의하기 ChannelInterceptor 는 Message 를 MessageChannel 로 보내기 전과 Message 가 MessageChannel 로 보낸 후 추가적일 로직을 수행할 수 있게 도와주는 Interface 다. ChannelInterceptor 인터페이스를 구현해 Socket 통신 상태를 로그로 찍어 확인한다.