5월, 2020의 게시물 표시

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용 도커를 다운 받습니다. 여기서 문제가 없으면 도커가 실

Java의 Spring에서 @RequestMapping가 구현되어 있는 방식을 알아보자.

java의 spring에 대하여 공부를 하고 있는 중이다. 요즘은 오픈소스를 사용하는 법 보다는 동작 원리 자체가 궁금한 상태 이다, 이에 대하여 가장 간단한 RequestMapping이라는 어노테이션을 보기로 정하였다. 해당 어노테이션은 스프링에서 지원해주는 기능이지만 다른 언어에도 mvc 프레임워크는 있으므로 이것만 알면 다른 언어에서의 동작 원리는 비슷하게 이해할 수 있으리라 본다. RequestMapping 매핑할 메서드에 아래와 같이 매핑을 시켜주면 스프링에서 알아서 읽어 들어와서 api를 생성해준다. @RequestMapping ( value= "/post" ) 여기서 내가 궁금해진 것은 @RequestMapping과 같은 Annotation을 도대체 누가 들고 오는건가 하는 생각이다. 어디선가 어떤 클래스가 알아서 파싱 할것 같지만 그 주체가 누군인지가 궁금하다. RequestMappingHandlerAdapter RequestMapping에 대한 공식 문서 를 확인해보면 해당 어노테이션을 어디서 사용 할 수 있는지 볼 수 있다. GetMapping들과 같은 어노테이션은 단순히 RequestMapping의 Get 기능인듯 하다. 여기서 보면 RequestMappingHandlerAdapter 가 연결되어 있음을 볼 수 있다. 공식 문서에서도 또한 RequestMapping을 서포트 한다고 작성되어 있다. 코드를 보니  RequestMappingHandlerAdapter의 코드에서 RequestMapping을 검색하면 직접적으로 해당 클래스를 가져오는것 같은 코드는 없다.  @Nullable private ControllerMethodResolver methodResolver ; C ontrollerMethodResolver 직접적으로는 안쓰지만 위의 ControllerMethodResolver 라는 클래스에서  getRequestMappingMethod라는 메서드를 통해서 가져오는듯 한 느낌이 있다. 해당 메서드를 확인해보면

책 리뷰 저작권

나는 기술서적에 대하여 리뷰를 자주 하는 편이다. 읽기만 하는 공부법도 있다고는 하나, 고등학교때 필기를 하면서 하는 경우에 성적이 잘나온 경험이 많았기에 이것이 나의 공부법이라고 생각 한다. 그러나 책을 리뷰한다는 것은 저작권 문제가 발생할 수 있다. 그래서 저작권에 문제를 일으키지 않으려면 어떻게 해야하는지 알아보려고 한다. 보통은 보통은 원작자에게 물어보는게 원칙이다. 언제 외국어 사이트 내용을 한국어로 옮긴 경험이 있던것 같은데  해당 게시물에 한국어로 번역했다고 댓글을 달아 놓은 적이 있다. 대부분의 원작자는 감사하다고 하였지만 혹시라도 지우라고 하면 지울 생각은 있었다. 물론 그러면 글이 안타까우니 비공개를 했을 것이다.  어디까지? 지금 하려는 것은 영어책 번역이 아닌 한국어 번역본 공부이니 한국 저작권 법을 찾아보는게 맞을 듯 하다. 구글링 하면 많은 포스팅들이 있어서 굳이 내가 새롭게 포스팅 할 필요는 없어 보인다.  http://member.kpa21.or.kr/kpa/rights-qna/?pageid=7&uid=759&mod=document 일단 위의 링크에서 보면 정당한 인용의 범위를 다루고 있다. 위 링크 말고도 다른 포스팅들을 보니 어느정도 감으로는 "연구"의 목적, 글을 옮긴다는 내용보다는 인용을 한다는 관점으로 봐야 할것 같다. 이는 해당 책의 내용이 전부가 아닌 그를 인용하고 내가 새롭게 창작한다는 관점이 되어야 한다는걸로 보인다.  물론 이렇다 하더라도 대부분의 저자가 소송을 건것을 본적은 없고 검색을 해도 잘 나오지는 않는다. 하지만 혹시 모르는게 인생이기 때문에 저작권을 늘 생각하면서 포스팅을 해야겠다는 다짐이 든다.  그렇다면 나는 어디까지 인용을 할까? 라고 생각해보면 일단 대부분의 책은 교보문고 사이트에서 소제목 챕터 까지 상세하게 나온다. 이러한 내용은 책을 사지 않아도 알수 있는 내용으로 보이기에 굳이 저작권 문제는 전혀 없어 보인다.

Effective Java 2판 2장

현재 Effective Java 2판을 읽고 이에 대한 간단한 포스팅을 한다. 읽은 페이지는 4장 109페이지까지. 1장은 서론이니 생략 Start reading technical books 경험이 쌓이면서 이전에 읽었던 책이 기억이 잘 기억이 나지 않는다. 또한 지식에 따라 이해하는 내용이 다를 수 있다. 그렇기 때문에 읽었던 책을 다시 읽는 것을 목표로 하고 있다. Why This Book? 집에 많은 책이 있지만 이펙티브 자바와 같은 책은 자바의 특징이 담겨 있으나 어느정도는 대부분의 언어가 공유하는 내용을 담기도 한다. 그렇기 때문에 디자인 패턴을 담은 이책으로 시작하기로 한다. 2장 객체의 생성과 삭제 규칙 1 생성자 대신 정적 팩터리 메서드를 사용할 수 없는지 생각해보기 생성자를 안쓴다는 것은 new를 사용자가 하지 않는다는 것이고 호출하는 입장에서는 객체의 갯수를 조절할 수 없다. 객체를 무조건 하나만 쓰는 싱글턴이라거나 객체마다 커넥션을 유지하는 디비 연결같은 경우는 커넥션 풀을 사용하는데 이 경우에는 new를 조절해야한다. 사실 이 경우가 아니라더라도 굳이 new를 할 필요는 없다.  규칙 2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하기 생성자의 인자가 많을때 생성자를 그대로 많게 하면 너무 많은 케이스를 고려해야하고 그렇다고 Set 메서드를 통해서 하면 객체가 너무 자주 바뀌게 된다. 따라서 Builder 패턴을 통해서 간단한 생성자만 두고 나머지는 나열하는 방식을 통해서 해결 한다.  규칙 3 private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하기 여기서는 싱글턴을 구현하는 방법을 설명하고 있다. 클래스 내부에서 해당 인스턴스를 가지는 맴버 변수를 private로 하나 선언하고 사용할때는 해당 객체를 리턴하는 함수를 통해서 사용하면 된다. 규칙 4 객체 생성을 막을 때는 private 생성자를 사용하기 abstract로 선언해도 하위에서 바꿀수 있기에

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 임베딩 하기 블로그 포스팅에 임베딩도 가능 합니다. 아래는 이미지로 임베딩 한 모습 입니다. 이미지를 클릭한다고 이미지가 동작하지는 않고 링크를 통해서 이동 합니다. 아래 이미지를 보시면 한국어가 깨진것을 보실 수 있습니다. 이미지는 별로인것 같습니다. 아래는 스크립트를 통해서 임베딩 한 모습 입니다. 사이트에서 동작이 가능하기 때문에 이미지보다는 부드럽습니다. 스크립트 방식이 그렇듯 네이버 블로그같은 곳에는 삽입이 안될듯 하며, 지금 작성중인 구글 블로거에는 미리보기 표시가 되지 않아서 불편함이 존재 합니다.