tae2089의 등록된 링크

 tae2089로 등록된 네이버 블로그 포스트 수는 67건입니다.

Fluentd 버퍼 테스트 하기(2) - Gin구현 및 Fluentd연결 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. "Fluentd 버퍼 테스트 하기(1) - 설계" 이라는 이름으로 포스팅했던 내용을 이어 Gin을 활용해 웹서버를 만들고 이를 fluentd와 연동해보겠습니다. (첫번째 포스팅을 안보셨다면 https://blog.naver.com/tae2089/222598476979 이 링크를 통해 봐주시면 감사드리겠습니다.) 먼저 gin을 설치하기 위해 다음과 같은 코드를 입력하겠습니다. 설치가 완료되었다면 간단하게 GetMapping을 해보겠습니다. 위 코드를 실행하시고 localhost:8080 에 들어가시면 hellow world를 확인하실 수 있습니다. gin을 활용한 웹 서버를 구현했으니 그 다음으로는 fluentd 연동을 위한 작업을 진행해.......

Go를 활용한 파이프라인 만들어보기 [내부링크]

안녕하세요. 갈비 만두를 좋아하는 개발자 임태빈입니다. 오늘은 Go에서 Channel을 활용한 간단한 파이프라인을 만들어보려고 합니다. 데이터를 생성하고 이를 Channel을 통해 전달하여 출력하고 총합을 구하는 코드를 구현해보곘습니다. 코드 구현에 앞서 그림을 간단하게 그려보면 다음과 같습니다. 그러면 이제 코드 구현을 해보겠습니다. 먼저 전체 코드를 공유하겠습니다. 첫번째로 볼 코드는 GenerateData입니다. 이 함수에서는 데이터를 생성합니다. 여기서 저는 sync.WaitGroup를 사용하지 않았습니다. 그 이유는 main함수 부분에서 TotalSumOfData(PrintData(GenerateData())) 이 함수가 엮이면서 달라지기 때문입니다. 먼저 Channel을.......

Go - luhn 알고리즘 구현 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 저는 이 사이트에 있는 알고리즘을 전부 다 직접 구현해보는 것을 목표로 잡았습니다. 그래서 오늘은 Go를 사용해 luhn 알고리즘을 구현해보려고 합니다!! 해당 알고리즘을 구현하기 전 luhn알고리즘이 무엇인지에 대해서 알아보겠습니다. luhn알고리즘은 다음과 같이 설명을 드릴 수 있습니다. 1. 신용카드번호, IMEI번호. 주민번호가 유효한 값인지 간단히 검사하는 알고리즘입니다. 2. 1960년대에 개발된 개방형 공식입니다. 3. mod10 알고리즘이라고 불립니다. luhn알고리즘을 구현하는 방법은 다음과 같습니다. 1. 값이 들어오면 홀수번째에 있는 값에는 2를 곱해주고 더해줍니다. 이.......

Go를 활용한 여러 서버 핑테스트 하기 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 현재 다니고 있는 회사에서 운영하고 있는 홈페이지가 공격을 당해 다운되는 상황이 있었습니다. 이를 보면서 하루에 한번씩 회사 소유의 여러 홈페이지들을 ping테스트를 통해 살아있는지를 확인한 코드를 만들어 보면 좋겠다고 생각했습니다. 이를 어떻게 하면 Go기반으로 해서 짤 수 있을지 고민했습니다. 추가적으로 개발자인 제가 쓰지 않고 운영을 하시는 분들이 손 쉽게 체크를 할 수 있도록 만들면 좋겠다고 생각했습니다. 그래서 저는 CommandLine을 통한 옵션과 yaml 파일 사용을 통해 사용자가 yaml에 옵션을 설정해주면 그에 맞게 코드가 동작할 수 있도록 만들면 좋겠다고 생.......

Go로 구현하는 라운드로빈(Round Robin) 스케줄링 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 오늘은 Go를 활용해 라운드로빈 스케줄링을 구현해보려고 합니다. Spark를 보면 데이터를 마스터에서 워커로 데이터들을 쪼개서 전달을 하는데 이때 어떻게 전달하면 될지 고민하게 되다가 찾게 되었습니다. 그러면 전체 코드 공유드립니다. 코드에 대해 설명하겠습니다. RoundRobin이라는 인터페이스와 roundRobin이라는 구조체를 만들었습니다. New함수는 roundRobin 구조체를 생성하는 함수이면 인자로 url 배열을 받아 저장합니다. 이때 next에 값은 추가하지 않습니다. 또한, 전달 받은 url 배열에 길이가 0이면 에러를 리턴해줍니다. Next함수는 roundRobin 구조체에 next에 값을 1 .......

Gin을 Dockefile로 빌드해보기 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 오늘은 Go의 웹프레임워크인 Gin을 Dockerfile에 올려보는 것을 해보려고 합니다. 많은 회사들이 컨테이너를 활용하며 빌드한 파일을 도커에 올리는 경우가 많아 이에 대해 간단하게 정리해보면 좋겠다고 생각했습니다. 그러면 한번 Gin을 Dockerfile에 올려보도록 하겠습니다. 먼저 go mod를 활용하여 go.mod를 생성하고 gin 웹프레임워크를 설치하겠습니다. 설치가 완료되었으니 코드를 작성해보겠습니다. 코드를 간단하게 설명드리면 localhost:3000 을 get메소드로 호출하면 컨테이너의 호스트네임을 리턴해줍니다. 추후에 이를 활용해 헬름차트도 만들어볼 예정이라 이런 코드를 짜게.......

Kubernetes에 gin 서버 올려보기 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 오늘은 쿠버네티스를 활용하여 지난번에 만든 gin을 배포해보려고 합니다. gin을 도커이미지로 만드는 것을 보실 분들께서는 위에 링크를 클릭해주세요:) 먼저 deployment관련 파일을 작성해보겠습니다. 이 파일에서는 tae2089/gindoc:latest 라는 이미지를 활용하였으며 3개의 레플리카를 만들었습니다. 또한, 서버가 3000포트에서 되기에 컨테이너 포트 또한 3000으로 작성했습니다. 다음으로는 서비스를 작성해보겠습니다. 제가 작성한 서비스의 경우 타입을 loadbalancer을 하여 레플리카로 생성된 서버들 모두를 하나의 url을 통해 번갈아 가면 데이터를 요청할 수 있게 만들었습니다.......

DockerFile timezone 설정해보기 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 오늘은 DockerFile에서 timezone을 설정하는 방법을 알아보겠습니다. DockerFile에 jre를 설치하는 과정에서 Timezone을 설정해야 하는 부분이 있었습니다. 컨테이너 내부에서 할때에는 직접 입력을 해주면 되지만 Dockerfile에서는 직접 입력이 되지 않아 빌드가 안되는 경험을 하게 되었습니다. 어떻게 하면 이를 해결할 수 있을지 찾아보던 중 사전에 timezone을 설정하면 된다는 내용을 찾게 되었습니다. 우분투에서 timezone을 여러 방법으로 설정할 수 있다고 해서 timedatectl을 사용해보거나 Dockerfile에서 환경변수로 DEBIAN_FRONTEND=noninteractive을 넣어주면 된다고 해.......

Fluentd 버퍼 테스트 하기(3) - Buffer 테스트 진행 및 결과 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 오늘은 Fluentd 버퍼 테스트 하기 마지막 파트인 Buffer 테스트를 진행해보려고 합니다. 먼저 fluentd서버 두개를 구축해보겠습니다. 두개의 서버 이름을 구분지어서 얘기하는게 이해하시기 좋을거 같아 fluentd1,fluentd2로 설명드리겠습니다. fluentd1는 웹서버로부터 로그를 받아 버퍼를 활용해 데이터를 모아서 보내주는 중간역하을 해줄 예정입니다. fluentd2에 경우 fluentd1에서 버퍼에 모아진 데이터를 출력하는 부분입니다. fluentd2는 버퍼가 잘들어오는지를 테스트 하기 위해 출력만 하는 것을 생각하게 되었습니다. 그러면 fluentd1과 fluentd2의 conf파일들을 작성해보겠습니.......

카프카 - 토픽과 파티션 [내부링크]

1. 토픽이란? 토픽은 카프카에서 데이터를 저장하는 곳이다. 주제를 정해서 데이터를 그 주제에 맞게 저장을 합니다. 이런식으로 데이터를 주제 혹은 기준을 통해서 저장합니다. 2. 파티션이란? 토픽 다음으로 중요한 파티션에 대해 알아보겠다. 파티션은 동일한 지점으로 들어오는 것을 분산화하여 많은 데이터가 원할하게 저장될 수 있도록 해주는 것이다. 예를 들어, 서울을 가기위해 톨게이트를 지난다고 생각해보자. 톨게이트 입구가 1개이면 많은 차들이 지나가는데 문제가 생길것이다. 하지만 톨게이트 입구가 3개 이상으로 늘어난다면 많은 차들이 훨씬 빠르게 지나갈 수 있을 것이다. 3. 파티션이 많으면 생길 수 있는 문제 2번 예시를.......

카프카 클러스터 - 도커 컴포즈 [내부링크]

카프카 클러스터를 도커 컴포즈로 활용해서 만들어보았다. 도커로 활용하면서 삽질을 많이 한것 같다. listeners와 advertised.listeners에 대해 자세히 알지 못한게 화근이 되었다. listeners는 카프카 브로커가 내부적으로 바인딩하는 주소이고 advertised.listeners는 카프카 프로듀서, 컨슈머에게 노출할 주소. 설정하지 않을 경우 디폴트로 listners 설정이 적용된다. 를 꼭 기억해야한다. 그리고 도커에서 127.0.0.1내부에서 사용하면 내부IP로 할당되기에 나중에 다른 브로커와 연결할때 인식을 못하는 경우가 발생할 수 있다. 이 점을 꼭 알아야 한다. 카프카 클러스터 코드는 다음과 같다. 여기에 broker를 추가적으로 연결하기를 원하.......

Docker에서 jupyternotebook실행하기 [내부링크]

1. 도커 이미지 다운 및 실행을 해준다. 2. 컨테이너에 접속해 준다. 3. jupyternotebook을 설치한다. 4. 쥬피터 환경 설정을 위해 패스워드를 생성한다. 5. /root/.jupyter로 이동해서 jupyter_notebook_config.py생성 6. jupyter_notebook_config.py에 설정 내용 입력 7. jupyter notebook 실행 8. 인터넷을 통해 접속 9. 초기에 설정한 비밀번호를 입력해준다. 로그인이 되면 해당 화면을 확인할 수 있다.

JAVA 기초(1) - 변수란? [내부링크]

안녕하세요. 갈비 만두를 좋아하는 개발자입니다. 오늘은 자바 변수에 대해서 정리해 보려고 합니다:) 변수는 단 하나의 값을 저장할 수 있는 메모리 공간을 말합니다. 여기서 메모리 공간은 JVM(Java Virtaul Machine) 안에 있는 stack과 heap영역에 저장이 되는 것을 의미합니다. 변수의 의미를 알아봤습니다. 그렇다면 이 변수를 어떻게 선언할까요? 변수를 선언하는 방법은 다음과 같습니다. 위 형식을 보시면 변수 타입(Int)을 선언하고 그 다음에 변수명(a)을 설정해줍니다. 좀 더 자세하게 나아가서 변수 타입은 변수에 저장될 값이 어떤 타입인지를 지정하는 것입니다. 저장하고자 하는 값의 종류에 맞게 변수의 타입을 선택해서 작성해.......

JAVA 기초(2) - 변수 타입 [내부링크]

안녕하세요. 갈비 만두를 좋아하는 개발자입니다. 오늘은 자바 변수 타입에 대해서 정리해 보려고 합니다!! 1. 기본형과 참조형 변수 타입은 기본형과 참조형으로 크게 나눠볼 수 있습니다. 기본형은 실제 값을 저장하는 반면, 참조형은 어떤 값이 저장되어 있는 주소를 갖습니다. 참조형은 연산을 할 수 없습니다. 참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로 클래스의 이름이 참조변수의 타입이 됩니다. 위 코드에서 보면 Person이라는 class를 타입으로 명시를 해줬습니다. 아직 클래스에 대해서 공부하지 않았기에 참조형 변수는 class를 타입으로 명시한다고만 아시면 괜찮습니다. 2. 변수 타입 변수 타입은 크.......

Go Mapreduce 만들어보기 [내부링크]

안녕하세요. go를 활용해 MapReduce 코드를 구현해보려고 합니다. 저도 go린이라 다소 부족한 부분이 많습니다 ㅎㅎ. 해당 코드의 경우 Medium에서 어떤 분이 MapReduce를 관련해서 만드신 코드가 있어 한국어로 번역했다고 생각해주시면 감사드리겠습니다. 다만, 해당 코드에 경우 데이터가 사라져서 이 코드를 돌려보실 수 없다는게 큰 문제점입니다.ㅠㅠ MapReduce에 관련하여 어떻게 구현했는지만 간단하게 이해하시면 좋을거 같습니다. 먼저 폴더 구조는 다음과 같이 구현했습니다. 기능을 하는 부분과 구조체 부분을 구분하는 것이 저는 편해서 이렇게 진행했습니다. 이제 메인 코드에 대해서 알아보겠습니다. 파일을 읽고 이를 한줄씩 go .......

Go로 간단한 Stack만들어보기 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 간단하게 Go를 활용해서 Stack을 만드는 것을 해보겠습니다. 전체 코드는 다음과 같습니다:) 코드를 보면 총 세 가지의 함수와 Stack을 담는 구조체 하나를 만들었습니다:) 먼저 구조체를 보겠습니다. 구조체에 경우 데이터를 담는 그릇으로 배열을 만들었습니다. 그 다음으로 볼 것은 Stack구조체를 만드는 함수입니다. 위 함수서는 data에 slice를 넣어서 만들었습니다. data가 얼마나 많이 쌓일지 모르기에 동적으로 길이를 늘리수 있도록 만들었습니다. 그다음 함수는 Push 함수입니다. 이 함수가 제일 쉬웠습니다. 값을 추가해주기만 하면 되거든요 ㅎㅎ^^ 마지막 함수로 Pop함수를 보.......

Go를 공부하게 된 이유 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 제가 Go를 공부하게 된 이유에 대해 간단하게 작성해보고자 합니다. 왜 Go를 공부하는가? 첫번째는 동시성입니다. Go에 특징 중 하나이기도 한 동시성은 Goroutine이라는 Go에서만이 제공해주는 특별한 경량 쓰레드를 활용하여 빠른 속도로 동시 처리가 가능합니다. 이런점 때문에 여러개에 데이터들이 들어왔을 때 빠르게 데이터를 처리할 수 있다고 생각했습니다. 두번째는 문법이 많이 없다 입니다. 자바,파이썬에 경우 정말 많은 문법들이 존재합니다. 그러다보니 다 배우기에 많이 버겁다는 생각이 들었습니다. 하지만 Go에 경우 13개 정도에 대한 문법을 알고 있으면 되었습니다. 이.......

Fluentd 버퍼 테스트 하기(1) - 설계 [내부링크]

안녕하세요. 갈비만두를 좋아하는 개발자 임태빈입니다. 로그 시스템 구축에 대해서 공부를 하면서 로그 수집기인 Fluentd를 공부하고 있습니다. Fluentd를 엘라스틱처시와 연동하여 쓰려고 하다보니 Fluentd에서 겪을 수 있는 여러 케이스들에 대해서 테스트들에 대해 고민하게 되었습니다. 제가 생각한 케이스들에 대해서 설명을 먼저 하겠습니다. 첫번째 케이스는 Fluentd가 Elaistchsearch와 같은 저장소로 데이터를 보내고 있을 때, Elasticsearch가 갑작스럽게 동작을 못하게 된다면 Fluentd는 어떻게 대처를 해야할 것인가입니다. 두번째 케이스에 경우 Spring boot 혹은 Django와 같은 로그 데이터들을 Fluentd가 수집하고 있는 도중에 F.......

HDFS [내부링크]

HDFS란? 수십 테라바이트 또는 페타바이트 이상의 대용량 파일을 분산된 서버에 저장하고 , 많은 클라이언트가 저장된 데이터를 빠르게 처리할 수 있게 설계된 파일 시스템을 말한다. HDFS의 목표 1. 장애복구 HDFS를 구성하는 분산 서버에는 다양한 장애가 발생할 수 있음. 예를 들어, 하드디스크에 오류가 생겨서 데이터를 저장할 때 실패할 수 있고, 디스크 복구가 불가능한 경우 데이터 유실이 되는 심각한 상황이 발생할 수 있음. HDFS는 장애를 빠른 시간에 감지하고, 대처할 수 있게 설계 되어 있음. HDFS에 데이터를 저장하면 복제 데이터도 함께 저장되어 데이터 유실을 방지함. 또한, 분산 서버 간에는 주기적으로 상태를 체크해 빠른.......

HDFS 명령어 [내부링크]

HDFS 명령어 파일 목록 보기 - ls ls - 지정한 디렉토리에 있는 파일의 정보를 출력하거나, 특정한 파일의 정보를 출력하는 명령입니다. 파일 및 디렉토리 의 권한 정보, 소유자, 소유그룹, 생성일자, 바이트 수 등을 확인 가능 lsr - ls는 현재의 디렉터리만 출력하는 반면 lsr 명령어는 현재 디렉터리의 하위 디렉터리 정보까지 표현 파일 용량 확인 - du, dus du - 지정한 디렉터리나 파일의 사용량을 확인하는 명령어로, 바이트 단위로 결과를 출력 dus - 디렉터리와 파일별로 용량을 출력하지만 dus는 전체 합계 용량만 출력 파일 내용 보기 - cat, text cat - 지정한 파일의 내용을 화면에 출력 text - cat 명령어는 텍스트 파일만 출력할.......

하둡 - 맵리듀스 [내부링크]

맵리듀스란? 맵리듀스 프로그래밍 모델은 맵과 리듀스라는 두 가지 단계로 데이터를 처리한다. 맵은 이력 파일을 한 줄씩 읽어서 데이터를 변형한다. 리듀스는 맵의 결과 데이터를 집계한다. 맵리듀스 프로그래밍 모델을 함수식으로 표현하면 다음과 같다. 맵은 키와 값으로 구성된 데이터를 입력받아 이를 가공하고 분류한 후, 새로운 키와 값으로 구성된 목록을 출력한다. 이떄 맵 메서드가 반복해서 수행되다 보면 새로운 키를 가진 여러 개의 데이터가 만들어진다. 리듀스는 새로운 키로 그룹핑된 값의 목록을 입력 데이터로 전달받는다. 그리고 값의 목록에 대한 집계 연산을 실행해 새로운 키로 그룹핑된 새로운 값의 목록을 생성한다.

맵리듀스 아키텍처 [내부링크]

맵리듀스 아키텍처 맵리듀스 시스템은 클라이언트, 잡트래커, 태스크트래커로 구성된다. 클라이언트 클라이언트는 사용자가 실행한 맵리듀스 프로그램과 하둡에서 제공하는 맵리듀스 API를 의미한다. 사용자는 맵리듀스 API로 맵리듀스 프로그램을 개발하고, 개발한 프로그램을 하둡에서 실행할 수 있다. 잡트래커 클라이언트가 하둡으로 실행을 요청하면 맵리듀스 프로그램은 잡이라는 하나의 작업 단위로 관리된다. 잡트래커는 하둡 클러스터에 등록된 전체 잡의 스케줄링을 관리하고 모니터링한다. 전체 하둡 클러스터에서 하나의 잡트래커가 실행되며, 보통 하둡의 네임노드에 서버에서 실행된다. 잡트래커는 꼭 네임노드에서 진행할 필요는.......

맵리듀스 - 데이터 플로우 [내부링크]

맵리듀스의 데이터 플로우 맵리듀스의 데이터 플로우는 맵 -> 셔플 -> 리듀스로 이루어져 있다. 먼저 맵 단계에 대해 알아보겠다. 맵 단계는 첫번째 단계로 입력 받은 파일을 읽어 맵의 출력 데이터를 생성하는 맵 처리 단계이다. 클라이언트로부터 실행 명령을 받고 이를 태스크 트래커에서 맵 태스크와 리듀스 태스크를 생성한다. 또한, 입력 받은 데이터는 HDFS 기본 블록 크기로 쪼개져서 입력 스플릿으로 나뉘어진다. 이를 맵 탭스크 마다 입력 스플릿의 데이터를 레코드 단위로 한 줄씩 읽어서 계산을 진행한다. 다음을 셔플 단계이다. 셔플 단계에서는 맵 태스크이 출력한 데이터를 리듀스 태스크에게 전달하는 일련의 과정이다. 이.......

맵리듀스 프로그래밍 - 데이터 타입 [내부링크]

맵리듀스는 네트워크 통신을 위한 최적화된 객체로 WritableComparable 인터페이스를 제공한다. 맵리듀스 프로그램에서 키와 값으로 가용되는 모든 데이터 타입은 반드시 WritableComparable 인터페이스로 구현되어야 한다. 1. WritableComparable 인터페이스 WritableComparable인터페이스는 Writable 인터페이스와 Comparable인터페이스를 다중 상속한 인터페이스다. Comparable인터페이스는 java.lang패키지의 인터페이스로 정렬을 처리하기 위한 compareTo메서드를 제공한다. Writable 인터페이스는 writre메서드를 통해 데이터값을 직렬화하고 readFields를 직렬화된 데이터 값을 해제해서 읽는 역할을 한다. 2. 데이터 타입 3. InputFormat.......

맵리듀스 - 코드 구현 [내부링크]

이번 시간에는 맵리듀스를 자바로 구현해볼 계획이다. 맵리듀스는 맵,리듀스,드라이버로 구성되며 추가적으로 파티셔너, 정렬, 콤바이너 등이 포함될 수 있다. 1. 의존성 라이브러리 추가 이번 시간에는 기본적인 구성인 맵, 리듀스, 드라이버로 구현해볼 계획이다. 맵리듀스를 구현하기 위해서는 맵리듀스 라이브러리들이 필요하다. 라이브러리들을 찾기가 어려워서 gradle을 활용해 의존성 라이브러리들을 추가했다. 2. Mapper 구현 먼저 매퍼(Mapper)을 구현해볼 것이다. 매퍼(Mapper)는 맵리듀스 프로그래밍 모델에서 맵 메서드의 기능을 수행한다. 매퍼는 키와 값으로 구성된 입력 데이터를 전달받아 이 데이터를 가공하고 분류해 새로운 데.......

DockerFile - python 만들기 [내부링크]

도커 파일을 활용해 python을 만들계획이다. Dockerfile을 생성해준다. 그런 다음 다음과 같이 코드를 입력해주면 된다. 해당 코드만 작성해서 docker build를 해준다면 python을 사용할 수 있다. 파이썬 사용 시 python를 사용해주면 된다.

쿠버네티스 - 포드(Pod) [내부링크]

1. 포드(Pod): 컨테이너를 다루는 기본 단위 포드는 쿠버네티스에서 컨테이너 에플리케이션의 기본 단위이며, 1개 이상의 컨테이너로 구성된 컨테이너의 집합이다. 해당 코드는 pod관련 yaml 파일이다. yaml파일에서 알아야 하는 것은 apiVersion,kind,metadata,spec 이 네가지만 알면 된다. - apiVersion: yaml 파일에서 정의한 오브젝트의 API 버전을 나타낸다. 오브젝트의 종류 및 개발 성숙도에 따라 apiVersion의 설정값이 달라질 수 있다는 것만 알고 넘어가겠습니다. - kind: 이 리소스의 종류를 나타낸다. 위 yaml파일에서 생성하려고 하는 것이 포드이기 때문에 Pod를 입력했습니다. kind 항목에 사용할 수 있는 리소스 오브젝트 종류는.......

쿠버네티스 - 레플리카셋(ReplicaSet) [내부링크]

1. 레플리카셋(Replica Set): 일정 개수의 포드를 유지하는 컨트롤러 레플리카셋의 역할은 다음과 같다 - 정해진 수의 동일한 포드가 향상 실행되도록 관리한다. - 노드 장애 등의 이유로 포드를 사용할 수 없다면 다른 노드에서 포드를 다시 생성한다. 2. 레플리카셋을 사용하는 이유 동일한 포드의 개수가 많아질수록 일일이 정의하는 것은 매우 비효율적인 작업이다. 또한, 포드가 모종의 이유로 삭제되거나, 장애가 발생해 더 이상 포드가 접근하지 못하게 됐을 때 해당 포드를 복구하지 못하기에 종료된 상태로만 남는다. 이러한 한계점을 해결주는 방법으로 레플리카셋이라는 쿠버네티스 오브젝트를 함께 사용하게 되었다. 3. 레플리카셋 사.......

쿠버네티스 - 디폴로이먼트(Deployment) [내부링크]

1. 디폴로이몬트(Deployment): 레플리카셋, 포드의 배포를 관리 - 디플로이먼트는 레필리카셋의 상위 오브젝트이다. 디플로이먼트를 생성하면 해당 디폴로이먼트에 대응하는 레플리카셋도 같이 생성된다. 위 항목과 같이 yaml파일을 작성하고 create 명령어를 통해 deployment를 생성하면 레플리카셋과 포드과 함께 생성되는 것을 확인할 수 있다. 2. 디폴로이먼트를 사용하는 이유 - 레플리카셋만으로도 동일한 개수의 포드를 충분히 유지할 수 있는데 왜 디플로이먼트를 사용해 간접적으로 레플리카셋을 생성하는지 의문점이 생길 것이다. 디플로이먼트를 사용하는 핵심적인 이유 중 하나는 애플리케이션의 업데이트와 배포를 더욱 편하게 만들.......

쿠버네티스 - 서비스(Service) [내부링크]

1. 서비스(Service): 포드를 연결하고 외부에 노출 - 포드를 외부로 노출시키기 위해 사용되는 오브젝트이다. 서비스는 다음과 같은 특징을 갖고 있다. •여러 개의 포드에 쉽게 접근할 수 있도록 고유한 도메인 이름을 부여한다. •여러 개의 포드에 접근할 때, 요청을 분산하는 로드 밸런서 기능을 수행합니다. •클라우드 플랫폼의 로드 밸런서, 클러스터 노드의 포트 등을 통해 포드를 외부로 노출한다. 2. 서비스의 종류 서비스는 여러 가지 종류가 있으나 주로 사용하는 서비스 타입은 크게 3가지 이다. •ClusterIP 타입: 쿠버네티스 내부에서만 포드들에 접근할 때 사용한다. 외부로 포드를 노출하지 않기 때문에 쿠버네티스 클러스터 내.......

쿠버네티스 - 네임스페이스(Namespace) [내부링크]

1. 네임스페이스(Namespace) - 리소스를 논리적으로 구분하는 장벽 쿠버네티스에서는 도커나 도커 스웜모드와 달리 리소스를 논리적으로 구분을 해줄 수 있다. 이러한 구분을 위해 사용되는 오브젝트를 네임스페이스라고 한다. 네임스페이스를 사용하면 포드, 레플리카셋, 디플로이먼트, 서브시 등과 같은 쿠버네티스 리소스들을 묶어 하나의 가상 공간 또는 그룹을 나누어준다. 2. 네임 스페이스 확인방법 위 명령어를 사용하면 현재 쿠버네티스에서 사용되고 있는 namespace들을 확인할 수 있다. 해당 네이스페이스에 속해있는 오브젝트 확인을 원한다면 위 명령어 처럼 사용하면 된다. 이처럼 네임스페이스는 쿠버네티스의 리소스를 논리적으.......

큐(Queue) [내부링크]

큐는 컴퓨터의 기본적인 자료구조 중 하나로 먼저 집어 넣은 데이터가 먼저 나오는 FIFO (First In First Out)구조로 저장하는 형식이다. 예시로 주문 배달이 들어오면 먼저 주문이 들어온 것부터 배달하는 원리와 같다. 파이썬에서 큐를 사용하는 가장 간단한 방법은 list를 사용하는 것이다. list의 메소드 중 하나인 pop를 이용하면 맨 앞에 있는 값을 추출할 수 있고 append를 통해 맨 뒤에 값을 넣을 수도 있기 때문이다. 반대로도 가능하지만 리스트를 활용한 큐에 대해 검색해본 결과 리스트는 무작위 접근에 최적화된 자료구조이기에 그렇게 좋은 성능을 내지 못한다고 한다. 파이썬에서는 collections모듈의 deque와 queue 모듈의 Queue.......

AWS CDK python으로 Dynamodb만들어 보기 [내부링크]

시작에 앞서 aws configuration 작업을 하고 난 다음에 하는 것을 추천한다. 연습을 하는 것이기에 사용자 역할에 권한을 fullAccess하기를 바란다. 회사에서 사용할 떄에는 주어진 권한에 맞게 활용하길 바란다. 설치방법 1. npm을 설치한다. https://nodejs.org/en/ -> 이 사이트에 들어가서 밑에 사진에 표시된 부분을 눌러 설치를 진행한다. Recommended For Most Users라 적혀있는 부분을 클릭해서 설치하면 된다. 2. npm install cdk npm설치가 완료됬다면 터미널을 통해 aws-cdk 설치를 진행한다. 3. 설치가 완료 되었다면 폴더를 하나 생성하고 이동한다 4. python 타입의 cdk를 생성한다. 5. cdk를 생성하면 가상환경과 파일들이 여.......

카프카에 대해서 [내부링크]

카프카의 탄생 배경 가. 배경 카프카는 리크드인에서 처음 출발한 기술로서, 링크드인 사이트가 급속도로 성장하면서 발생하는 내부 여러 이슈들을 해결하기 위해 탄생했다. 아래 그림은 링크드인이 카프카를 개발하기전 과거 데이터 시스템의 구성도이다. 이 그림을 처음 본 사람은 정말 복잡하다고 생각할 것이다. 이러한 복잡한 구조는 다양한 문제들을 만든다. 첫번째 문제는 실시간 트랜젝션 처리와 비동기 처리가 동시에 이뤄지지만 통합된 전송 영역이 없으니 복잡도가 증가할 수밖에 없다. 두번째 문제는 데이터 파이프라인 관리의 어려움이다. 실시간 트랙ㄴ잭션 데이터베이스, 하둡,모니터링 시스템 등 많은 데이터 시스템이 있는데 이.......

하둡 클러스터 (도커 컴포즈) [내부링크]

하둡에 대해 공부하던 중 클러스터를 구축해보고 싶었다. 도커 컴포즈에 대해서 찾아보던 중 외국에서 사용되는 코드가 많지만 그 코드 안에 해킹 프로그램이 있을 수도 있다고 생각을 하게 되었다. 그래서 내가 직접 도커 컴포즈를 활용해 하둡 클러스터를 구축해봤다. 코드는 다음과 같다. 여기서 마스터 노드 하나와 슬레이브 노드 2개를 구축했다. 도커 컴포즈 3.x부터는 Link 문구가 없어도 자동으로 연동되긴 하지만 정확하게 사용하고자 link를 작성했다. tty 명령어는 docker 에서 -it 옵션과 동일한 것이다. command에서 test.sh에는 하둡을 실행하는 명령어를 입력해 뒀다. 하둡 실행 시 ssh접속이 필요한데 이부분은 .ssh의 config 파.......

Docker - 컨테이너 log 확인하기(1) [내부링크]

컨테이너 로그 확인하는 방법에 대해 알아보겠다. 먼저 컨테이너를 생성한다. 컨테이너 생성이 완료되었다면 로그를 확인하기 위해서 다음과 같이 코드를 입력한다. 위 명령어를 사용하면 하단의 그림과 같이 로그가 뜨는 것을 확인할 수 있다. 해당 명령어를 치면 많이 긴 로그가 나타나기에 원한는 부분을 보고 싶다면 여러 옵션들을 통해 확인 할 수 있다. 그중에서 --tail옵션과 --since다. --tail은 마지막 로그 줄부터 출력할 줄의 수를 설정할 수 있다. 코드 예시는 다음과 같다. 결과는 밑에 있는 그림과 비슷하게 나올 것이다. 다음으로는 --since이다 --since 옵션은 유닉스 시간을 입력해 특정 시간 이후에 나온 로그들을 확인하는 방.......

리스트(List) [내부링크]

리스트는 여러 개의 값을 [](대괄호)로 묶어 한 변수의 요소로 하여 저장해준다. 위 예시 처럼 만들 수 있다. 주의해야 할 것은, [](대괄호)를 써야 한다. ()를 쓰면 튜플로 인식되기에 조심해야 한다. 그렇다면 리스트에 값을 저장할 떄 자료형이 동일해야 할까? 정답은 그렇지 않다. 위 예시와 같이 모든 자료형을 같이 리스트에 넣을 수 있다. 리스트에 여러 요소를 넣을 수 있다는 것을 알았으니 만드는 방법은 무엇일까? 리스트 생성 방법 위 샘플 두개 중 하나를 사용하면 된다. 샘플을 사용한 예시를 보면 이해하기 쉬울 것이다.

AWS 공인 솔루션스 아키텍트 1장 공부 정리(1) [내부링크]

# 클라우드 컴퓨팅과 가상화 #클라우트 컴퓨팅 아키텍처 1.클라우드 컴퓨팅 최적화 클라우드는 확장성, 탄력성을 갖추고 있고, 기존 인프라보저다 저렴하므로 기업의 중요 워크로드에 널리 사용된다. 클라우드에서 애플리케이션 또는 서비스를 효과적으로 배포하기 위한 3요소는 다음과 같다. 가. 확장성 - 확장성 있는 인프라를 구축하면 얘치 않게 수요가 증가하더라도 자동으로 애플리케이션에 리소스를 추가해서 효과적으로 대응할 수 있다. 다음 그림과 같이 실행하는 가상 머신의 수를 동적으로 늘릴 수 있다. *AWS에서 가상 머신을 인스턴스라 한다. 나. 탄력성 줄이는 개념이라는 점에서 차이가있다. 탄력성을 통해 필요할 떄만 리소스를.......

안드로이드 공부 정리(1) [내부링크]

Do it 안드로이드 책을 공부하면서 함수들 정리한 것 이론부분 안드로이드는 위젯,뷰,뷰그룹으로 이루어져 있음 Convert view -> 레이아웃 변경 가능 Common attribute에서 originentaion을 통해 수직 수평 으로 바꿀수 있음 match_parent -> 부모 레이아웃에 맞추기 wrap_conent -> content에 맞추기 레이아웃 그레비티와 일반 그레비티 차이점 -> 뷰 안 밖에 차이 레이아웃 weight를 활용해 범위 지정하기 Res - dreawble -> image 일반적으로 있음 string.xml을 사용하면 좋은 점 -> 다국어 지원 가능 하며, 범용성이 좋아진다. Manliness -> 줄 제한하기 Image view에서 image는 srcCompat으로 바꾼다 버튼 이미지 효과.......

Docker - 도커 다루는 법(2) [내부링크]

rm - 도커 컨테이너를 삭제하는 방법 create - 도커 컨테이너 생성 도커 파일 복사하기

docker - 도커 허브에 이미지 파일 올리기 [내부링크]

도커 허브에 이미지 파일을 올리는 방법을 알아보겠다. 먼저 도커 허브에 가입을 한다. 허브 가입은 다른 사이트들에 검색해서 가입을 하기 바란다. 가입을 완료 했다면 도커 파일에 올릴 이미지를 정한다. 그런 다음 도커 이미지 이름은 dockerhubID/이미지명 으로 수정하고 올리면된다. 코드는 다음과 같다 이 순으로 진행하면 된다. 만약에 도커 허브에 올릴 이미지 이름이 도커허브ID/이미지명 으로 되어 있다면 굳이 tag명령어를 통해 바꿀 필요가 없다.

RDBMS 와 맵리듀스의 비교 [내부링크]

대화형은 REPL : Read-Eval-Print Loop의 약자로 스칼라, 파이썬 등 대화형 환경을 말한다. 콘솔에서 컴파일 없이 코드를 입력하고 출력 결과를 확인 할 수 있는 환경을 말한다. 일괄 처리 방식(batch Processing)은 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식을 뜻한다. 초기의 일괄처리 방식은 사용자와 상호작용하는 것이 불가능했지만, 운영 체제가 발전함에 따라 프로그램 입출력을 통해 상호작용하는 것이 가능해졌다. 일괄 처리는 1950년대 전자 컴퓨팅 초기 시절 이후 메인프레임 컴퓨터와 함께하고 있다. Schema on Read는 데이터의 Schema 확인을 Data를 읽는 시점에서 한다는 뜻이다. schema on write는 데이터를.......

docker - file 작성 관련 명령어 [내부링크]

1. FROM - 해당 명령어는 base이미지를 지정해주기 위해 사용되며 DockerFile 내에서 최상단에 위치한다. 2. WORKDIR - 해당 명령어는 cd명령어 처럼 컨테이너 상에서 작업 디렉토리로 전환을 위해서 사용된다. 이후 실행되는 RUN,CMD,ENTRYPOINT 등에 명령어는 전환된 디렉토리에서 실행된다. 3. RUN - 해당 명령문은 마치 쉘(shell)에서 커맨드를 실행하는 것 처럼 이미지 빌드 과정에서 필요한 커맨드를 실행하기 위해서 사용된다. 주로 소프트웨어를 설치하는 명령어로 많이 사용된다. 4. CMD - CMD는 docker run 실행 시 명령어를 주지 않았을 때 사용할 default 명령을 설정하거나, ENTRYPOINT의 default 파라미터를 설정할 때 사용한다. C.......

쿠버네티스 - 오브젝트 [내부링크]

오브젝트란? 쿠버네티스는 대부분의 리소스를 '오브젝트'라고 불리는 형태로 관리한다. 오브젝트는 추상화된 집합이라고 생각하면 된다. 쿠버네티스에서 사용할 수 있는 오브젝트들에 대해 알고 싶다면 위 명령어를 통해 알아보기를 추천한다. 쿠버네티스는 명령어로도 많이 쓰지만 yaml파일을 더 많이 사용한다. 쿠버네티스 구성 쿠버네티스는 마스터와 워커 노드로 구성되어 있다. 마스터 노드에는 API서버, 컨트롤러 매니저, 스케줄러, DNS 서버 등이 실행 된다. 또한, 모든 노드에서는 오버레이 네트워크 구성을 위해 프락시와 네트워크 플러그인이 실행된다. Kubelet란? 쿠버네티스 클러스터 구성을 위해 kubelet이라는 에이전트.......

ubuntu Logstash 설치하기 [내부링크]

logstash 설치에 대해 알아 보겠다. logstash 설치를 하기 위해서는 하단에 사이트에 들어가면 된다. https://www.elastic.co/kr/downloads/logstash 주의해야 하는 점은 elk는 모두 같은 버전으로 설치해야하는 걸 꼭 기억해야 한다. 버전이 다를 경우 동작에 이상이 갈 수 있다는 점!! 위 사이트를 통해 자신의 OS에 맞는 프로그램을 설치하면 된다. 나는 리눅스로 활용했기에 tar 파일을 받았다. 파일을 다 받았으면 하단의 명령어를 통해 압축을 풀면 된다. 이렇게 압축을 풀고 파일까지 생성했다면 이제 logstash에서 돌릴 conf파일을 수정해야한다. logstash 압축을 풀면 config 디렉토리 안에 logstash-sample.conf파일이 있을거다 이것을.......

ubuntu 파이썬 3.5 버전에서 업그레이드하기 [내부링크]

ubuntu를 설치하면 자동으로 3.5버전때가 설치가 된다. 여기서3.5 버전이 낮아 버전을 변경하려는 부분이 있을 것이다. 파이썬 3.7 버전을 설치해서 이를 update-alternatives 라는 명령어를 통해 바꾸려는 많은 시도를 했겠지만 잘될수도 있지만 강제 변환으로 인해 오류가 생길 수 있다. 나는 이런 방법 보다는 anaconda를 설치하는 것을 권장한다. anaconda에는 3.7이상의 버전을 가지고 있으며 자동으로 변경을 해주기에 좋다 위 명령어를 통해 파일을 다운받는다. 다운 받은 파일을 하단 명령어를 통해 진행한다.. 진행이 완료되었다면 위 명령어를 통해 변동사항을 적용시켜 주면 된다. 위 명령어를 통해 버전을 확인하고 버전이 바뀌지 않.......

Spring 생성 방법 [내부링크]

스프링을 생성하는 방법에 대해 알아보겠다. 스프링을 생성하는 방법은 2가지가 있다. 1. https://start.spring.io/ 이 사이트에 들어가서 프로젝트를 생성하는 방법 2. STS를 설치해서 시작하는 방법이 있다. 이 외에도 여러가지 방법이 존재하지만 2가지 방법이 사용하기 쉽다. 자신에게 편한 방법으로 진행하면 된다. 첫번째 방법에 대해서 알아보곘다. 먼저 위 사이트에 접속하면 이러한 사이트에 들어 갈 것이다. SNAPSHOT과M2는 미완성 버전이기에 사용하지 말기를 권장하며 SNAPSHOT과M2 문자가 붙어 있지 않는 것들 중 최신 버전을 사용하면 된다. GROUP - 프로젝트마다 구별할 수 있는 고유한 이름이다. 보통은 java의 패키지 네이밍을.......

html - 인라인 요소 [내부링크]

1. a태그 가. download,href, rel, target등으로 구성되어 있다. - download는 다운로드에 관련된 것이다 - href는 주소에 관련된 내용이다. - rel은 관계에 대한 것이다. - target은 주소 이동 시, 자기 자신을 사용할지 새로운 페이지를 생성하는 것인지에 대해 표시해주는 것이다. 2.abbr 태그 가. 약어를 지정 - 약어에 대한 내용이 궁금할 수도 있기에 title를 사용 3. b태그 가. 문제가 다른 글자의 범위를 설정 - 특별한 으미를 가지지 않음 - 다른 태그가 적합하지 ㅇ낳은 경우 마지막 수단으로 사용 - 기본적으로 글자가 두껍게 Bold 표시됨 4. mark 태그 가. 사용자의 관심을 끌기 위해 하이라이팅할 때 사용 5. em 태그 가. 단순한 의.......

flask 시작 [내부링크]

명령어를 통해 flask 패키지를 다운 받는다. myflask 라는 폴더를 하나 생성한다. myflask에 들어가서 app.py를 생성한다. app.py에 기본적이 코드를 작성한다. python app.py 를 실행하면 서버가 진행된다.

Docker - network(2) [내부링크]

도커 네트워크 중에서 host,none에 대해서 알아보겠다. 먼저, 호스트 네트워크에 대해 알아보겠다. 호스트 네트워크는 호스트의 네트워크 설정을 그대로 사용한다고 생각하면 된다. 그래서 브릿지 네트워크와 다르게 호스트의 드라이버를 별도로 생성할 필요가 없다. 위 명령어를 사용하면 호스트 네트워크를 사용할 수 있다. 호스트 네트워크를 확인을 원한다면 "ifconfig" 명령어를 통해 확인하면 된다. 추가적으로 호스트 네트워크를 사용하면 별도의 포트 포워드가 필요없이 로컬에서 사용하는 것처럼 사용이 가능하다. none에 대해서 알아보겠다. none은 네트워크 연결을 하지 않는 것을 뜻한다. 만들어보기를 원한다면 다음과 같.......

Docker - network(1) [내부링크]

컨테이너 내부에서 ifconfig를 입력하면 eth0와 lo네트워크 인터페이스가 있는 것을 확인할 수 있다. 도커는 컨테이너에 내부 IP를 순차적으로 할당하며, 이 IP는 컨테이너를 재시작할 떄마다 변경될 수 있다. 이 내부 IP는 도커가 설치된 호스트, 내부 망에서만 쓸 수 있는 IP이므로 외부와 연결될 필요가 있다. 이과정에서 컨테이너를 시작할 떄마다 호스트에 veth''' 라는 네트워크 인터페이스를 생성이 이루어진다. veth인터페이스는 도커 컨테이너가 생길떄마다 자동으로 생성된다. veth는 실행 중인 컨테이너 수만큼 veth로 시작하는 인터페이스가 생성된다. 도커의 네트워크 기능은 총 4가지로 나뉜다. 1. 브리지(bridge) .......

SPARK - 액션(1) [내부링크]

1. first RDD요소 가운데 첫번째 요소를 불러온다. 2. take RDD의 첫 번째 요소로부터 순서대로 n 개를 추출해서 되돌려준다 3. takesample RDD요소 가운데 지정된 크기의 샘플을 추출한다. sample메소드와 똑같이 true,flase를 통해 복원,비복원 방식을 채택할 수 있다. 4.collect RDD의 모든 요소를 배열 혹은 리스트 같은 하나의 컬렉션에 담아서 돌려준다 5.count RDD에 있는 모든 요소의 개수를 돌려준디 6.countbyvalue RDD에 속하는 각 값들이 나타나는 횟수를 구해서 맵 형태로 돌려준다. 7.reduce RDD에 포함된 임의의 값 두개를 하나로 합치는 함수를 이용해 RDD에 포함된 모든 요소를 하나의 값으로 병합하고 결괏값을 반환한다. 입력.......

#1. 변수에 대하여 [내부링크]

변수는 고정되어 있지 않고 계속해서 변하는 수이다. 예를 들어, 함수에서 y=ax+b 에서 x라고 생각하...

#2.조건문 if [내부링크]

1.조건문이란? 조건문은 영어에서 배웠던 것처럼 만약 ~하면 이라고 생각하면 좋다 조건문이 맞다면 true ...

스파크 설치(MAC버전) [내부링크]

pc및 프로그램 언어 버전 사용 OS: mac Catalina 10.15.5 자바: jdk 8 스칼라: 2.13.2 파이썬 3.7.4 스...

이클립스 스파크 연동 [내부링크]

오늘은 이클립스에 스파크를 연동하는 방법이다! 순서 1. 메이븐 설치 및 연동 2. 스파크 연동 으로 진행한...

우분투 18.0.4 IP설정하기 및 ssh 연결하기 [내부링크]

나는 mac 을 사용한다. mac 터미널을 활요하는 방법에 대해서부터 설명하려고 한다. 1. 버츄얼 박스 설정을...

ELK 스택 - Elasticsearch 설치하기 [내부링크]

OS : MAC catalina java : jdk 8 ※elasticsearch 설치하기 전 jdk8로 설치하는 것을 권장한다. ->...

ElasticSearch- REST API [내부링크]

Elasticsearch는 http 프로토콜로 접근이 가능한 REST API를 사용한다. http 메서드인 PUT, P...

SEARCH API [내부링크]

Search API는 검색에 초점을 둔 api다 검색에 앞서 예제 연습을 위해 ES에서 제공해주는 데이터를 활...

SPARK RDD [내부링크]

1. RDD란? RDD는 Resilient Distributed Datasets의 약어로 문자 그대로 해석하면 "회복력을...

RDD - 트랜스포메이션(1) [내부링크]

1. map()함수 - 하나의 입력을 받아 하나의 값을 돌려주는 함수를 인자로 받는다. Map[U](f:(T) -> ...

RDD-트랜스포메이션(2) [내부링크]

1. zip - zip 연산은 두개의 서로 다른 RDD를 각 요소의 인덱스에 따라 하나의(키,값) 쌍으로 묶어줍니...

Docker - 도커 다루는 법(1) [내부링크]

도커를 다루기에 앞서 도커 이미지에 대한 설명을 하겠다. 도커 이미지는 [저장소 이름]/[이미지 이름]:[태...

RDD - 트랜스포메이션(3) [내부링크]

1. distinct - 중복되는 것을 없애주는 명령어이다. 2. cartesian - 수학에서 나오는 데카르트 곱을 의미한...

Docker - Volume [내부링크]

도커 이미지는 컨테이너로 생성하면 이미지는 읽기 전용으로 되고 컨테이너가 쓰기 전용이 된다. 이미 생성...

[공유] 무료 ppt 템플릿 기획서용으로 사용하기 좋아요! [내부링크]

안녕하세요 헨도입니다 오늘은 블랙을 컨셉으로 해서 깔끔한 디자인의 무료ppt템플릿을 만들어봤습니다. 비...