글

라벨이 Open Source인 게시물 표시

Spring Boot에 Swagger 붙이기

이미지
 안녕하십니까. 이번 포스팅에서는 Spring Boot에 Swagger API를 붙이는 방법에 대하여 알아 보려고 합니다. gradle 설정 gradle을 사용하실 경우 아래의 한줄을 build.gradle의 dependency에 추가해 줍니다. implementation 'io.springfox:springfox-swagger2:3.0.0' implementation 'io.springfox:springfox-swagger-ui:3.0.0'   Maven 설정 Maven을 사용하실 경우 아래의 설정을 추가하시면 됩니다. <dependency > <groupId > io.springfox </groupId > <artifactId > springfox-swagger2 </artifactId > <version > 3.0.0 </version > </dependency > <dependency > <groupId > io.springfox </groupId > <artifactId > springfox-swagger-ui </artifactId > <version > 3.0.0 </version > </dependency >   설정 파일 추가 gradle, maven을 통하여 코드를 불러오셨으면, 이에 따라 swagger 설정을 해야합니다. 다음과 같이 파일을 하나 생성하며 @Bean으로 등록해 주시면 됩니다. 코드는 간단하게 모든 api에 대하여 스웨거를 빌드한다는 내용 입니다. @Configuration @EnableSwagger2 public class SwaggerConfig {   @Bean public Docket swaggerApi ( ) { re...

Apache Kafka 사용기

이미지
 안녕하십니까. 이번 포스팅에서는 제가 사용하였던 아파치 카프카 에 대하여 간략하게 리뷰하려고 합니다.  Apache Kafka 아파치 카프카란? 아파치 카프카란 오픈소스 기반 확장 가능한 분산 스트리밍 플랫폼 입니다. 이에 대하여 각각 살펴봅시다. 아래에서의 모든 예시는 광고 노출 데이터로 가정하겠습니다.  확장 가능 분산 수평 확장이 가능하다는 말은 kafka에 트래픽이 몰리면 이를 위해 클러스터에 리소스를 더 투입할 수 있다는 말입니다. 스트리밍 pub sub 구조 스트리밍이라는 말은 데이터가 흐름과 같이 오면 이를 받아서 처리한다는 것과 비슷합니다. 예를 들어서 자료구조의 Queue를 생각하시면 편합니다. 이와 같은 구조를 펍 섭 구조라고 합니다. 데이터를 계속 넣어주는 부분을 publish 이라고 합니다. 이를 받아서 처리하는 부분을 subscribe 라고 합니다. pub sub은 디자인 패턴 중 하나로써 중간 플랫폼을 카프카가 담당을 하게되고, pub sub 부분은 개발자가 직접 디자인 해야 합니다.  Producer : 카프카에 데이터를 넣어주는 역할을 합니다. 예를 들어서 광고 노출이 직접 노출되는 클라이언트 코드에서 노출 데이터를 Producing하여 카프카에 전송 합니다.  Consumer : 카프카에 있는 데이터를 받아서 처리하는 역할을 합니다. 예를 들어서 광고 노출 데이터를 받아서 과금을 하는 등의 처리를 할 수 있습니다.  Partition Group Topic 카프카의 이해를 쉽게하기 위해서 다음과 같이 도식화 하였습니다. 카프카의 파티션 도식화 Message : 카프카 데이터의 가장 작은 단위 입니다. 예를 들어서 광고 노출 데이터라고 할 시에 노출 데이터 한건으로 볼 수 있습니다. Topic : 데이터의 그룹 중 가장 큰 단위 입니다. 예를 들어서 광고 노출 Topic으로 볼 수 있습니다. Partition : 토픽을 나누는 단위 입니다. 예를 들어서 광고 노출 토픽을 파티션 ...

logstash 도커 이미지 사용하기

이미지
안녕하십니까. 현재 저는 현업으로 엘라스틱 서치를 사용하고 있습니다.  엘라스틱 서치를 테스트 하는 도중 테스트 디비의 데이터를 indexing할 필요성이 생기게 되었는데요. 직접 DB 쿼리를 통해서 데이터를 조회하여 데이터를 입력하기에는 번거로움이 많습니다. 그래서 logstash를 사용하기로 결정 하였습니다.  logstash를 로컬에 설치하기도 또한 귀찮은 점이 있기도 하여서 도커를 통해서 사용을 하였고 이번에는 간략하게 사용 방법을 리뷰 해보려고 합니다.  Logstash Docker Image 다운로드 logstash 이미지는 엘라스틱 서치 공식 홈페이지에서 찾을 수 있습니다. https://www.docker.elastic.co/r/logstash  자신의 컴퓨터와 맞춰서 실행하시면 되고, 또한 ES 버전도 잘 맞아야 합니다.  저같은 경우는 ES 버전 6.6.0을 사용하였고, logstash는 최신 버전을 사용하였습니다. 이후 아래와 같은 오류를 보게 되었는데요, ES 공식 페이지의 글 에서는 ES의 버전을 올리라고 하였습니다. [ERROR] 2021-07-26 05:09:18.379 [[.monitoring-logstash]>worker0] elasticsearchmonitoring - Encountered a retryable error (will retry with exponential backoff) {:code=>400, :url=>"http://192.168.153.77:9200/_monitoring/bulk?system_id=logstash&system_api_version=7&interval=1s", :content_length=>1369}  가능하면 최신 ES를 사용하는게 좋을 듯 합니다. CONFIG 설정 이후에는 컨피그를 설정해주어야 합니다. 공식 페이지는 여기서 확인하실 수 있습니다. default ip는 elasticsearch 라는 ...

apache flink mac에 install 해보기

이미지
이글에서는 개인 맥북에 apache flink를 설치하는 것을 다루려고 한다. hadoop 시스템과의 연동은 여기서 다루지 않는다. 1. 아래의 사이트에서 최신 or 사용할 버전의 플링크를 다운로드 받는다. https://flink.apache.org/downloads.html 또는  brew install apache-flink 와 같이 homebrew를 통해 설치가 가능하다. 2. 플링크를 적절한 폴더에 옮기고 bin폴더를 path에 등록 한다. 적절히 등록이 되었다면 flink --version 명령어가 잘 동작 한다. 3. bin 폴더의 start-cluster.sh 를 실행 한다. (base) LM-SEL-16517004:bin mgim$ ./start-cluster.sh Starting cluster. Starting standalonesession daemon on host LM-SEL-16517004. Starting taskexecutor daemon on host LM-SEL-16517004. (base) LM-SEL-16517004:bin mgim$   4. 문제없이 실행될 경우 아래 URL에서 UI를 확인 할 수 있다. http://localhost:8081/#/overview 예제 코드 돌려보기 flink ui를 올려보았으니 예제를 돌려보기로 한다. 예제 코드는 개인 깃허브에서 참고 할 수 있다.  https://github.com/Myeongjoon/examples/tree/master/flink/wordcount 코드에서 mvn install을 하면 나오는 jar 파일을 아래와 같이 flink 명령어를 통해서 실행 시킬 수 있다. (base) LM-SEL-16517004:Desktop mgim$ flink run -c WordCount wordcount-1.0-SNAPSHOT.jar   Job has been submitted with JobID 4064689d15308387f381999c4...

kubenetes 설치하는 방법

이미지
안녕하십니까. 이번 포스팅에서는 kubenetes를 설치하는 방법에 대하여 다루려고 합니다. 개인적인 여건상 윈도우, 맥 둘다 다루어 보았기 때문에 둘다 포스팅 하도록 하겠습니다. Windows에서 Kubenetes 설치하기 윈도우에서 왜 쿠버네티스를 설치해야하나.. 하는 사람들이 있을듯 합니다. 보통 리눅스와 맥을 사용하기 때문 입니다. 그렇지만 본인의 회사가 C#을 통한 윈도우 환경 개발을 하거나, 게임 회사라면 상황이 달라 집니다. 저 또한 윈도우 환경을 지급 받았기 때문에 윈도우에서 설치하는 것을 다루도록 하겠습니다. WLS? WLS2? No! Windows 환경에서는 리눅스에 대항하기 위해서 윈도우 자체적으로 리눅스를 지원하기 위한 Windows Subsystem for Linux 를 무료로 풀었습니다. 최신 버전으로 2까지 나와 있습니다. 저 또한 WSL을 사용해 보았기에 사용해 보려고 하였으나 아무래도 안된다는 결론을 도출하였습니다. 안되는 이유는.. kubenetes에서 systemctl를 사용하는 것으로 보입니다. 이는 centos에서 구현된 시스템 관리 툴인듯 하나 wsl 상에서는 해당 명령어가 구현이 되어 있지 않습니다. sudo apt-get 등을 통해서 설치한다고 하더라도 wsl 자체가 systemctl이 pid = 1인 상태로 시작하지는 않기 때문에 해당 방법을 통해서는 할 수 있는 방법이 없습니다.  Docker를 통해서 설치 하기 https://www.oss.kr/index.php/info_techtip/show/2e408efc-900d-4a09-82e9-06613db8f591 저는 위의 oss에 올라와 있는 설치 방법을 통해서 설치 하였습니다. 위에 지침이 있긴 하지만 간단하게 여기서도 다루겠습니다. Docker For Windows를 설치 Docker 홈페이지에서  https://docs.docker.com/docker-for-windows/install/  Desktop용 도커를 다운 받습니다...

apache beam와 word count 예제

이미지
이 글에서는 apache beam이라는 오픈소스에 대하여 다루려고 한다. apache beam이라는 오픈소스에 대하여 알아보기 위해서 간단한 예제인 word count example 을 돌려 보았다. word count example 예제를 돌리는 것은 매우 간단하다.  주어진 예제에서 설명한것 처럼 아래와 같이 인풋 파일에는 일반 아무런 문장을 적고 아래 한줄을 실행하면 된다. python - m apache_beam.examples.wordcount_minimal - - input YOUR_INPUT_FILE - - output counts 결과로는 파일이 리턴 되는데 counts-00000-of-00001 이런식으로 이름이 되어 있다. 파일의 크기가 크면 나뉘는듯 하다. 파일에는 문장에 있는 단어의 빈도가 각각 count 되어 있다. 해당 예제는 이전에 hadoop의 예제인 word count 와 완전 동일하다. 차이점이라면 하둡 예제는 로컬에 hdfs 노드를 설정해야하고 여러 불편한 점이 있었는데 해당 예제는 오픈소스 자체에 내장이 되어 있어서 매우 간단하다. word count example Code wordcount_minimal.py 예제 코드는 길지 않아서 이해하기 매우 어려운 편은 아니다. 간단히 보면 input의 args들을 parsing한 후 파일을 통해서 pipeline을 생성 한다. 각 워드마다 카운트를 한 후 리턴을 하면 끝이다. 궁금증 1 : apache beam sdk method wordcount_minimal.py 의 중간에 아래와 같은 코드가 있다. lines = p | ReadFromText(known_args.input) counts = ( lines | 'Split' > > ( beam.FlatMap( lambda x : re.findall( r ' [ A-Z a-z \' ] + ' , x)). ...

windowed aggregation에 대하여

Tensorflow TFX에 대하여 공부하던 도중 다음과 같은 issue를 발견하였다. RFP 001: Adding non-Transform feature engineering TFX Use Case - Windowing Raw Data sliding window 내용의 전체는 아니나 부분적으로 time-window aggregation기능을 원한다는 것이다. time-window라는 단어를 배운 기억은 없지만 streaming data 오픈소스인 카프카의 문서 를 보면 일정 시간 간격동안의 간격을 window라고 하며 이를 sliding한다는 것은 해당 간격을 유지하면서 이동한다는 것임을 알 수 있다.  sliding window on Apache Beam 위의 sliding window 기능이 tensorflow tfx에 구현이 되어 있지 않으나 apache beam에 비슷한 내용이 있기 때문에 이를 통해 예제를 구현한다고 한다. 다음 링크에 보면 sliding window 클래스가 구현되어 있음을 알 수 있다.  아직 아파치 빔을 사용해본 경험이 없으니 다음 내용은 아파치 빔을 사용하고 업데이트 할 예정.

cmd 녹화 asciinema 사용하기

이미지
안녕하십니까. 이번 포스팅에서는 cmd를 간단하게 녹화할 수 있는 asciinema에 대하여 알아보겠습니다. asciinema? asciinema는 커멘드 라인을 녹화해주는 오픈소스 입니다. 녹화를 하고 이를  https://asciinema.org/ 에 업로드를 할 수 있으며 url을 통해서 공유 할 수 있습니다. 가장 큰 장점으로는 일반 비디오와는 다르게 텍스트로 되어 있어서 명령어들을 복사 붙여넣기 할 수 있습니다. 녹화 자체가 매우 간단합니다. 커멘드 한방이면 됩니다. 설치하기 설치하는것은 매우 간단합니다. 아래의 사이트에 방문하시고 Start Recording을 누르시면 설치하는 방법을 알려줍니다. 저는 맥북이고 맥북 패키지 관리 시스템인 brew를 통하여 알려주는것으로 보아 사용자의 OS에 따라서 다르게 보여주는듯 합니다. https://asciinema.org/ 설치하기 사용하기 사용하는것도 또한 간단 합니다. 커맨드라인에서 asciinema rec를 입력하시고 커멘드를 녹화하시면 됩니다. exit을 입력하시면 녹화를 종료할 수 있고 사이트에 업로드된 링크를 알려 줍니다.  기본적으로는 비공개가 되어 있고 사이트에서 설정하시면 아래와 같이 공개가능한 링크를 얻으실 수 있습니다. https://asciinema.org/a/325855 임베딩 하기 블로그 포스팅에 임베딩도 가능 합니다. 아래는 이미지로 임베딩 한 모습 입니다. 이미지를 클릭한다고 이미지가 동작하지는 않고 링크를 통해서 이동 합니다. 아래 이미지를 보시면 한국어가 깨진것을 보실 수 있습니다. 이미지는 별로인것 같습니다. 아래는 스크립트를 통해서 임베딩 한 모습 입니다. 사이트에서 동작이 가능하기 때문에 이미지보다는 부드럽습니다. 스크립트 방식이 그렇듯 네이버 블로그같은 곳에는 삽입이 안될듯 하며, 지금 작성중인 구글 블로거에는 미리보기 표시가 되지 않아서 불편함이 존재 합니다.

Google Summer Of Code 2020 지원서 제출

이미지
english :  https://joonprogramming.blogspot.com/2020/04/google-summer-of-code-2020-applied.html 구글 서머 오브 코드 지원서 제출 안녕하십니까. Google Summer Of Code (GSOC) 2020이라는 매년 개최되는 구글의 오픈소스 이벤트에 지원서를 제출 하였습니다. 저는 텐서플로우의 TFX라는 Machine Learning Pipeline에 지원하였습니다. 서로에게 좋은 기회가 될 수 있기를 바랍니다. 제출하였던 proposal은 추후에 accept가 될시에 공개 하도록 하겠습니다.

윈도우에 tensorflow gpu를 돌리기

이미지
안녕하십니까. 이번 포스팅에서는 윈도우상에서 텐서플로우를 GPU를 통하여 돌리는 것을 포스팅 하려고 합니다. 목적 window 컴퓨터 위에서 딥러닝 프레임워크인 tensorflow를 그래픽 카드를 사용하여 돌릴 수 있도록 환경을 구축 한다. 필요 요건 그래픽 카드를 구매하시고 장착을 잘 하신다음 아래와 같이 장치 관리자의 디스플레이 어뎁터에서 그래픽 카드가 인식 되도록 합니다. 아래에서 UHD 630은 내장 그래픽 카드이고 GT 730은 외장 그래픽 카드 입니다. 그래픽 카드 장착 완료 cuda 설치 cuda는 GPU를 사용하는데에 도움을 주는 라이브러리 입니다. cuda를 설치하지 않고 tensorflow를 실행시키려고 할시에는 아래와 같은 에러를 리턴 합니다. (tensorflow_gpu) C:\Users\mgim>python Python 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 14:00:49) [MSC v.1915 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow 2019-12-23 14:55:23.325444: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_100.dll'; dlerror: cudart64_100.dll not found 그렇기에 cuda를 설치 합니다. https://developer.nvidia.com/cuda-downloads 위의 링크에서 cuda를 다운 받습니다. 최신 버전을 ...