분류 전체보기 477

개발 서적을 집필을 시작하는 방법 2가지

최근에 개발 서적을 집필하면서 많이 물어보시는 질문 중 한가지가 집필을 어떻게 시작하게 되었느냐입니다. 책을 쓴다는 행위를 통해 책이 출판된다는 것이 알지만 어떻게 시작하는지 모르는 경우가 많아서 시작 조차 못하는 경우가 많습니다. 이 포스팅에서는 개발 서적을 집필을 시작하는 방법 2가지를 제 경험에 비추어 설명드리겠습니다. 첫번째 방법 - 관련 컨텐츠 제작 후 집필 제안 받기 저는 지난 3년 동안 데브원영 유튜브 채널(바로가기)과 개발 블로그(여기)를 통해 다수의 컨텐츠를 꾸준히 제작하였습니다. 카프카 관련 영상을 7개 가량 유튜브에 올렸었습니다. 그리고 개발 블로그에는 카프카 관련 개발을 진행하면서 트러블 슈팅했던 내용들과 어려웠던 내용들, 새로배운 내용을 글의 퀄리티나 문장의 길이에 상관없이 올렸습..

local kafka single broker 띄우기 with 도커

wurstmeister/kafka-docker는 사실상 표준(디팩토)으로 카프카 도커 이미지로 띄우는 용도로 사용하고 있습니다. 사용 방법은 아래와 같습니다. $ git clone https://github.com/wurstmeister/kafka-docker.git $ cd kafka-docker wurstmeister/kafka-docker에 있는 docker-compose-single-broker.yml 의 내부 설정 중 KAFKA_ADVERTISED_HOST_NAME을 변경합니다. $ vi docker-compose-single-broker.yml version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181"..

빅데이터/Kafka 2021.03.05
특정 시점(날짜+시간)의 레코드부터 가져오도록 설정하기.

카프카의 토픽에 저장된 레코드는 0.11.0.0 이후부터 timestamp가 저장됩니다. 그러므로 kafka-consumer-group.sh 스크립트로 오프셋을 직접 지정할 수 있는데 --to-datetime을 사용하면 특정 시점(시간) 데이터부터 가져가도록 설정할 수 있습니다. Example) 토픽의 레코드가 다음과 같이 있다고 가정합니다. ConsumerRecord(topic = test, partition = 0, leaderEpoch = 0, offset = 5, CreateTime = 1614748497034, serialized key size = -1, serialized value size = 1, headers = RecordHeaders(headers = [], isReadOnly = ..

빅데이터/Kafka 2021.03.03
kafka console consumer 여러 토픽 컨슘하기

kafka console consumer를 사용하다보면 --topic으로 토픽을 컨슈밍 하기도 하지만 여러 토픽 또는 정규식을 사용해서 확인해보고 싶을 때가 있다. 이 때 --whitelist를 사용하면 된다. Example) hello-topic과 hello.topic 토픽을 컨슈밍 하고 싶다면 $ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --whitelist 'hello-topic|hello.topic' Example2) 모든 토픽을 컨슈밍 하고 싶다면 $ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --whitelist '.*'

빅데이터/nosql 2021.02.25
아파치 카프카를 데이터 레이크로 사용할 수 있을까?

데이터 레이크란? 데이터 레이크의 기본 개념은 기업단위의 서비스 데이터들을 한곳의 저장공간에 모아 두는 것입니다. 이렇게 저장된 데이터로부터 BI(Business Intelligence) App으로 조회하거나 시각화, 머신러닝을 수행하였습니다. 데이터 웨어하우스와 다르게 '일단 저장'하고 나서 이후에 스키마를 적용하는 'Schema-on-Read'에 초점을 잡고 있습니다. 데이터 레이크라는 단어가 나온 이래로 지속 발전을 거듭했고 데이터 레이크 기술은 다음과 같이 발전 하였습니다. - 1세대 데이터 레이크 : HDFS, 맵리듀스, 피그, 하이브, 임팔라, 플룸, 스쿱 - 2세대 데이터 레이크 : 클라우드 네이티브로 성장하였고 오브젝트 스토리지(S3), 스파크, 플링크, 프레스토, 스트림셋 스트리밍 데이터..

빅데이터/Kafka 2021.02.25
AWS CDK 명령어 사용시 auto approve 사용하기

AWS CDK를 로컬에서 테스트를 하다보면 deploy시 change에 대한 y/n 선택이 나오게 된다. ....│ └───┴─────────────────────────────────────────┴─────┴────────────┴─────────────────┘ (NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299) Do you wish to deploy these changes (y/n)? y 이 선택을 건너뛰려면 다음 옵션을 사용하면 된다. $ cdk deploy --all --require-approval never cdk 명령어는 --reqire-ap..

개발이야기/AWS 2021.02.04
AWS IAM 정리 - 사용자, 역할, 그룹, 자격 증명 공급자, 고객 관리형 정책

참고영상 : IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트(AWS) IAM이란? AWS 서비스 및 리소스에 대한 액세스를 안전하게 관리하기 위한 수단. 서비스와 리소스란 S3에 대한 접근, ECR의 이미지에 대한 접근과 같은 AWS내 서비스를 사용할 수 있는 권한을 뜻한다. IAM Policy 종류와 사용 목적 - AWS SCP(Service Control Policies) : 어카운트 내의 특정 Principal에 대한 서비스 제어 - AWS IAM(Permission Policies, Permission Boundaries) : IAM Principal(Users, Roles)에 대한 상세 권한 설정 및 사용 가능 권한 경계 - AWS STS(S..

개발이야기/AWS 2021.01.15
자바와 스칼라 차이점

자바와 스칼라 둘다 JVM위에서 돌아간다는 공통점이 있다. 그러나 객체지향적 언어와 함수형 언어라는 점이 매우 다르다. 어떤 다른점이 있는지 개략적으로 살펴보자. TRAIT 스칼라의 trait는 자바의 인터페이스와 유사한 역할을 한다. 스칼라에서는 interface가 없다. trait는 변수를 선언하고 메서드를 구현할 수 있다는 점이 인터페이스와 차이점이다. 물론 자바 8부터는 인터페이스에서 default 메서드형태로 구현할 수 있는 점이 동일하다. 그러나 자바8의 인터페이스는 변수를 선언할 수 없고 메서드만 선언할 수 있기 때문에 trait와 차별점을 가진다고 볼수 있다. 그럼 추상클래스와 비슷하다고 볼 수 있지 않을까? 자바의 추상클래스는 2개 이상 상속가능하고 trait도 클래스에 2개 이상의 tr..

macOS에서 카프카 버로우 빌드 및 실행하기.

1. golang 설치 $ brew install go 2. burrow clone from github $ git clone https://github.com/linkedin/Burrow.git 3. go build, install $ cd to the source directory. $ go mod tidy $ go install 3. run $ $GOPATH/bin/Burrow --config-dir=/path/containing/config 버로우를 실행할 때 주의할점은 --config-dir은 말그대로 디렉토리를 설정해야한다. 파일을 설정하면 안된다. burrow.toml이 포함된 디렉토리를 설정한다. 로컬호스트에서 카프카, 주키퍼를 실행할 경우 아래와 같이 burrow.toml을 설정한다. [..

빅데이터/Kafka 2020.11.29
그래픽 레코딩 - 시각화와 회의의 조합

페이스북에서 재밌는 책에 대한 내용이 있어 공유합니다. at-living.press/culture/20115/ オンライン会議で議論を可視化&活性化!「グラフィックレコーディング(グラレコ)」の実 一部の人だけが話をしてほかの人がほとんど発言しなかったり、いつの間にか論点がズレてしまったり。対面に比べて話が宙に浮いてしまうことが多く、対話も生まれにくいオンライン会議 at-living.press 그래픽 레코딩 그래픽 레코딩은 문자, 그림, 도표를 사용하여 회의를 하는 모든것을 시각화하는 것이다. 아이디어나 논리를 시각적으로 보여줌으로써 더욱 효과적인 커뮤니케이션을 하는 것이다. 그래픽 레코딩에 대한 정확한 정의가 있는건 아니지만 간단한 그림으로 그리는 것이 첫번째 단계다. 회의를 하면서 있었던 일들을 그림으로 시각화한다. 만약 화이..

하둡 맵리듀스 동작방법

하둡의 맵리듀스에 대한 설명은 다음링크를 참조한다. voidmainvoid.tistory.com/399 하둡 맵리듀스 접근법 맵리듀스는 일괄질의처리기이다. 합리적인 시간 내에 결과를 보여주는 능력을 가지고 있음. 질의를 실행한 이후 수초내에 결과를 받는 시스템과는 다름. 하둡은 기존 병렬프로그래밍과 다른 분 blog.voidmainvoid.net 맵리듀스를 운영하는 2가지 방법을 알아본다. 첫번째는 전통적인 하둡의 맵리듀스를 사용하는 방식과 두번째는 YARN을 사용하는 방식이다. 각 방식에 대해 알아보자. 맵리듀스1 Job : 클아이언트가 수행하는 작업 단위. 하둡은 Job을 맵 태스크와 리듀스 태스크로 나우어 실행한다. Jobtracker : Tasktracker들이 수행할 태스크를 스케쥴링 Taskt..

빅데이터/하둡 2020.11.26
하둡 맵리듀스 접근법

맵리듀스는 일괄질의처리기이다. 합리적인 시간 내에 결과를 보여주는 능력을 가지고 있음. 질의를 실행한 이후 수초내에 결과를 받는 시스템과는 다름. 하둡은 기존 병렬프로그래밍과 다른 분산 프로그래밍 관점에서 바라봐야한다. MPI와 같은 병렬프로그래밍은 사용자로 하여금 직접적인 알고리즘을 짜도록 도와주지만 하둡은 최상위 수준에서만 동작한다. 개발자는 데이터의 흐름을 신경쓰지 않아도 되고 데이터 모델 관점에서만 생각하면된다. 맵리듀스와 같은 분산프로그래밍에서 어려운 점은 원격 프로세스의 실패/성공 여부이다. 프로세스(태스크)가 실패했을 경우를 감지하여 장애가 없는 머신에서 다시 돌려야한다. 하둡의 맵리듀스는 태스크간의 의존성이 없는 아키텍처이기 때문에 실패에 크게 고민하지 않아도 된다. 맵리듀스는 맵의 실패보..

빅데이터/하둡 2020.11.24
카프카 토픽의 오프셋 최대 크기는 얼마일까?

카프카의 토픽에는 파티션이 있습니다. 프로듀서가 레코드를 파티션에 저장하면 각 레코드에는 오프셋이라고 불리는 고유한 번호가 붙게 되는데요. 오프셋 번호가 최대값에 도달하면 어떻게 처리해야하는지 의문을 가질 수 있습니다. 오프셋 번호의 최대값에 대해서 확인해 보았는데요. 오프셋은 int64로 지정되어 있었습니다. private static final Field.Int64 OFFSET = new Field.Int64("offset", "The offset found"); 자바에서 int64의 최대값은 9,223,372,036,854,775,807 입니다. 9,223,372,036,854,775,807는 하루에 1조개의 record를 쌓더라도 25,269년이 걸리는 어마어마한 값입니다. 게다가 파티션을 1개만..

빅데이터/Kafka 2020.11.17
퍼블릭에서 접속가능한 EC2 인스턴스 만들기(VPC, 서브넷, IGW, 라우트 테이블 설정)

퍼블릭에서 EC2에 접속하기 위해서는 VPC생성, 퍼블릭 서브넷이 필요합니다. 위 내용을 실습하는 내용을 진행해보겠습니다. 주의해야하는 부분은 강조체, 붉은글씨로 변환하였습니다. 1. VPC 생성 특정 CIDR 블록을 포함한 형태로 이름을 작성하고 VPC를 생성합니다. VPC생성이 완료되면 처음에는 DNS 호스트 이름이 비활성화됨 으로 설정되어 있습니다. 변경을 위해 작업>DNS호스트 이름 편집으로 이동합니다. DNS 호스트 이름을 활성화 선택하고 변경 사항을 저장합니다. 2. 서브넷 생성 생성한 VPC에 속한 서브넷을 생성합니다. 3. IGW 생성 인터넷 게이트웨이를 생성합니다. 생성한 인터넷 게이트웨이는 반드시 VPC에 연결합니다. 작업>VPC에 연결 로 이동합니다. 4. 라우트 테이블 생성 및 설정..

개발이야기/AWS 2020.11.11
VPC 엔드포인트란?

AWS를 벗어나지 않고 EC2 인스턴스를 VPC 외부서비스와 프라이빗 하게 연결하기 위해서 사용됩니다. 이 경우 퍼블릭으로 해당 서비스를 노출하지 않더라도 연동할 수 있습니다. 즉, IGW, VPN, NAT, 프로시 등을 사용할 필요없이 연결할 수 있습니다. 여기서 외부 서비스란 AWS의 서비스를 뜻합니다. 예를 들어 VPC에 있는 EC2(프라이빗 서브넷)가 존재하고 S3가 존재한다면 EC2와 S3를 연동할때 퍼블릭으로 열지 않아도 됩니다. VPC 엔드포인트를 활용하여 연결할 수 있습니다. 특징 - 인터넷을 통해 통과할 필요가 없습니다. - 동일한 리전에 있어야 합니다. - 가용성이 뛰어나고 중복적이고 수평적으로 확장됩니다.

개발이야기/AWS 2020.11.11
VPC 피어링이란?

docs.aws.amazon.com/ko_kr/vpc/latest/peering/what-is-vpc-peering.html VPC 피어링이란? - Amazon Virtual Private Cloud 이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오. docs.aws.amazon.com AWS는 VPC의 기존 인프라를 사용하여 VPC 피어링 연결을 생성합니다. 이는 게이트웨이도, VPN 연결도 아니며 물리적 하드웨어 각각에 의존하지 않습니다. 그러므로 통신 또는 대역폭 병목에 대한 단일 지점 장애가 없습니다. 특징 - 인터넷 게이트웨이 또는 가상 게이트웨이가 필요없음 - 고 가용성 연결, SPO..

개발이야기/AWS 2020.11.11
EC2 인스턴스 실행시 스크립트 자동 실행하기

EC2 인스턴스를 실행할 때 사용자가 스크립트를 작성하고 실행하기 전에 지정한 스크립트를 자동으로 실행하도록 설정할 수 있습니다. 사용자 데이터의 설명은 다음과 같습니다. 시작 시 인스턴스를 구성하거나 구성 스크립트를 실행할 때 사용할 사용자 데이터를 지정할 수 있습니다. 한 번에 두 개 이상의 인스턴스를 시작하는 경우 해당 동일 시작 인스턴스의 모든 인스턴스에서 사용자 데이터를 이용할 수 있습니다. 즉, 스크립트를 넣으면 실행이 되는 것입니다. 예를 들어 wget으로 카프카 바이너리 파일을 다운받거나 java를 설치하고 싶다면 아래와 같이 코드를 추가하면 됩니다. #!/bin/bash yum install -y java-1.8.0-openjdk-devel.x86_64 wget https://downlo..

개발이야기/AWS 2020.11.11
가용영역별 지원 EC2인스턴스 확인하는 방법

Your requested instance type is not supported in your requested Availability Zone 에러는 해당 가용영역에 ec2인스턴스를 지원하지 않기 때문입니다. 이 경우에는 ec2인스턴스가 가용영역에서 지원하는지 확인해야하는데 아래 단계를 거치면 됩니다. t2.micro는 4개 가용영역에서 지원하지 않는 것을 알 수 있습니다. t3.nano, t3.micro를 비롯한 여러 인스턴스가 4개 가용영역 모두에서지원하는 것을 확인할 수 있습니다.

개발이야기/AWS 2020.11.10
카프카 커넥터 빌드시 JDK11이 아닌 JDK8로 그래들 빌드해야합니다.

카프카 커넥터를 직접 개발해야할 때가 있습니다. 이때 jar를 만들어서 카프카 커넥트에 커스텀 커넥터를 추가하곤 하는데요. 커넥터를 위한 jar을 만들때 JDK11이 아닌 JDK8 GRADLE JVM으로 반드시 빌드해야합니다. JDK11기반 GRADLE JVM으로 빌드하면 kafka 2.6.0 기준 카프카 커넥트에서는 정상적으로 커넥터를 추가하지 못합니다. 카프카 커넥터용 우버 JAR만드는 방법 jar { from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } }

빅데이터/Kafka 2020.11.02
EC2 에 있는 파일 로컬로 다운로드 받기

EC2에 있는 파일을 로컬에 다운받기 위해 아래와 같은 절차를 진행합니다. 준비물 - EC2 가상서버 - pem파일(접속 키) 1. 파일 확인 EC2에 접속해서 다운로드할 파일을 확인합니다. $ ll test.log $ pwd /tmp 2. 파일 권한 변경 권한을 변경하여 로컬에서 가져갈수있도록 합니다. $ chomod 777 /tmp/test.log 3. scp를 사용하여 다운로드 파일이 있는 경로를 지정하여 다운로드 진행 합니다. $ scp -i genesis-test.pem centos@13.125.173.119:/tmp/test.log . test.log 100% 78MB 21.2MB/s 00:03

개발이야기/AWS 2020.10.27
go get으로 특정 github 레포지토리의 태그 가져오기

go get을 통해 레포지토리 코드를 가져오고 해당 레포지토리의 태그를 가져오는 방법입니다. 이 방법은 golang 1.15버전을 기준으로 작성하였습니다. 1. 레포지토리 가져오기 $ go get github.com/grafana/grafana package github.com/grafana/grafana: build constraints exclude all Go files in /root/go/src/github.com/grafana/grafana 2. 디렉토리 가기 $ cd /root/go/src/github.com/grafana/grafana 3. git명령어로 체크아웃 $ git checkout v7.2.2

토픽의 메시지 값을 직렬화/역직렬화가 정상적으로 이루어지지 않는 경우 테스트

토픽의 메시지 값 또는 메시지 키는 직렬화하여 저장되어 있다. 만약 직렬화와 역직렬화 포맷이 다르면 어떻게 될까? - test 토픽 - 직렬화 : StringStringSerializer - 역직렬화 : UUIDDeserializer 의도적으로 직렬화 포맷과 역직렬화 포맷을 다르게 하여 테스트를 진행합니다. 1. 프로듀서 public class SimpleProducer { private static String TOPIC_NAME = "test"; private static String BOOTSTRAP_SERVERS = "localhost:9092"; public static void main(String[] args) { Properties configs = new Properties(); conf..

빅데이터/Kafka 2020.10.15
강의 도입부에서 이야기 해야하는 것

1. 자기소개 강의자의 특징, 전문성을 언급하면서 수강생으로 하여금 주의집중을 하기 위함. 공통점을 이야기하는 것도 좋음 2. 주의집중 흥미로운 이야기, 통계자료, 짧은 인용, 유명인사의 말, 유머, 경험담, 청중질문 등이 있음 3. 동기부여 참가자의 니즈에 대해 한번 짚을것. 강의를 들음으로써 얻는 이익과 강의를 제대로 듣지 않았을 경우 받는 불이익 설명 4. 강의개요 학습 목표, 내용(목차, 순서 등), 운영방법(학습시간, 쉬는 시간, 과제 등)

일상 2020.10.14
정말정말 간단한 스프링 카프카 컨슈머 애플리케이션 예제

스프링 카프카는 카프카를 스프링에서 쉽게 사용할 수 있도록 하는 라이브러리입니다. 스프링 카프카를 통해 컨슈머를 만드는 가장 간단한 코드를 공유합니다. 준비물 - 그래들 - 스프링부트 - 인텔리제이 디렉토리구조 ├── build.gradle ├── settings.gradle └── src └── main ├── java │ └── com │ └── test │ └── Main.java └── resources └── application.yaml build.gradle plugins { id 'java' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { compile 'org.springf..

빅데이터/Kafka 2020.10.13
엘라스틱서치에 중복 id로 값을 보내면?

엘라스틱서치에 중복id로 값을 보내면 버젼이 올라간다. $ curl --location --request PUT 'localhost:9200/books/book/2d12dd2' \ --header 'Content-Type: application/json' \ --data-raw '{ "_id":"1", "tile": "Nesoy Elastic Guide", "author": "Nesoy", "date": "2019-01-15", "pages": 250 }' { "_index": "books", "_type": "book", "_id": "2d12dd2", "_version": 2, "result": "updated", "_shards": { "total": 2, "successful": 1, "faile..

Reactive를 품은 스프링 카프카 시청 정리 자료

아래 영상자료를 보고 정리한 글입니다. 1. 카프카 그리고 스프링 카프카는 현대의 메시지드리븐아키텍처의 핵심 플랫폼. 다양한 종류로 사용 가능 스프링에서 카프카를 사용하는 방법은 아주 쉬워졌음 마치 webMVC에서 request패턴 사용한것처럼 사용. 하지만 동시성문제는 어떻게 해결할까? 파티션을 나눠서 병렬처리는 가능. 리액티브프로그래밍의 본질은 어떤 대상을 Async하게 다루는 것. Async하게 다루는것을 스트림으로 처리하겠다. Flux로 비동기 처리하는 것이 핵심. 프로듀서를 생성한 코드 컨슈머 코드 스프링카프카에서 리액트 사용 방법 2. 적용 프로젝트 관찰대상 서버가 다수가 되면서 모든 데이터를 처리하는 것이 중요 최악의 경우를 고민해야함.. - 1,000대이상의 서버에서 동시다발적으로 이벤트 ..

빅데이터/Kafka 2020.09.26