본문 바로가기

Framework and Tool108

Kubernetes - 개요 - 출처: Kubernetes in action - 모놀리스 to 마이크로서비스 과거에는 대부분의 시스템들이 모놀리스 형태였다. 하지만 점차 시스템들이 대형화되면서 모놀리스 시스템의 단점이 드러났다. 모놀리스 시스템은 해당 구성요소들이 너무 강하게 결합되어있기 때문에 시스템 구성요소의 일부분만 변경해도 전체 배포 과정을 거쳐야 한다. 또한 만약 시스템의 사용자가 많아지면 확장해야하기 마련인데 수직 형태의 증설(Scale up)은 CPU나 RAM을 2배로 올린다고 성능이 선형적으로 정확히 2배로 증가하지 않기 때문에 한계가 존재한다. 그래서 수평 형태의 확장(Scale out) 을 보통 선택하는데 어플리케이션 코드가 크게 변경되어야 하는 경우도 있어서 이 역시 쉽지 않다. 이를 극복하기 위해 나온 개념이 .. 2022. 10. 2.
음원 인식의 개요 - 출처: 2002. "A Review of Algorithms for Audio Fingerprinting" 저자: P.cano, E.Batle, T. kaler, J.Haitsma 를 기반으로 작성하였습니다. - 출처: "An Industrial-Strength Audio Search Algorithm" 저자: Avery Li-Chun Wang - 출처: "A Highly Robust Audio Fingerprinting System" 저자: philips research - 들어가기 전에 필자는 신호처리나 음원 인식에 대한 경력이 전무하다. 음원 신호를 디지털 신호로 변환하는 과정만 하더라도 1초에 몇번 신호를 측정할것이냐라는 sampling rate에 대한 개념, sampling rate 수치를 .. 2022. 8. 6.
Fluentd - Overview - 출처: https://docs.fluentd.org/ - 개요 Fluentd는 일종의 logging 계층을 통합하기 위한 data collector 라고 할 수 있다. 라이센스는 Apache License v2.0 이며, Treasure Data(https://www.treasuredata.com/) 에 의해 제작되었다. Fluentd는 다양한 Input Source들(Apache access log, Front 및 Back end의 App log, System log) 들을 filter, buffer, routing 하는 과정을 거쳐 다양한 Output Source들(MySQL, MongoDB, Hadoop, Amazon S3)로 보낼 수 있다. Fluentd는 일반적으로 많이 사용하는 JSON 형.. 2022. 7. 4.
Kafka - introduction - 출처: https://kafka.apache.org/documentation/#introduction - Event streaming Event streaming이란 인간의 중추 신경계(뇌와 척수로 구성되어 있으며 판단을 통해 감각 뉴런과 운동 뉴런을 연결시키는 역할을 함)와 같다. 비즈니스가 소프트웨어로 정의, 자동화되어 상시 가동하는 세상을 위한 기술의 기반이라고 할 수 있다. 기술적으로 말하자면 event stream으로 된 형태의 DB나 센서, 모바일 기기, 클라우드 서비스, 소프트웨어 어플리케이션등의 event 원천에서 실시간으로 데이터를 취하는일이라고 할 수 있다. 또한 나중에 검색할 수 있도록 이런 event stream들을 저장한다. 실시간으로 조작, 처리, event stream에 대.. 2022. 6. 6.
Protocol buffer - Convention - 출처: https://developers.google.com/protocol-buffers/docs/style - Formatting protocol buffer 파일을 작성할 때에는 아래의 format을 따른다. 1 라인당 80 글자수 들여쓰기는 2 space string은 ""를 사용 - File 구조 File은 lower_snake_case.proto 형태를 갖는다. 파일내에 기술되는 항목의 순서는 다음과 같다. License header File overview Syntax(2, 3) Package Imports (sorted) File options 그 외 - Packages package 명은 소문자 여야 한다. - Message and field name Message: CamelCase.. 2022. 4. 29.
Protocol buffer - Proto3 - 출처: https://developers.google.com/protocol-buffers/docs/proto3 - Message Type 정의 아래는 .proto 파일에 메시지를 정의한 예제이다. syntax = "proto3"; message SearchRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3; } 맨 첫줄 syntax = "proto3";은 proto3 문법을 사용하겠다는것을 나타낸다. 만약 이 선언이 없다면 proto2를 사용한다고 가정한다. 위의 .proto 파일에는 SearchRequest 메시지 안에 3개의 field가 존재한다. 그리고 각 field는 이름과 형을 갖는다. 예제에서는 scal.. 2022. 4. 24.
RabbitMQ vs Apache Kafka - 원글: https://www.cloudamqp.com/blog/when-to-use-rabbitmq-or-apache-kafka.html - 개요 두 메시지큐는 queue나 topic을 통해 생산자와 소비자간의 메시지를 전송한다. 메시지는 어떤 것이든지 될 수 있는데, 웹사이트에서 일어나는 이벤트에 관한 정보라던가 다른 Application의 이벤트를 발생시키는 간단한 메시지와 같은 형태일 수도 있다. 이런 종류의 시스템은 다른 component를 연결 시키거나, 마이크로 서비스를 구축하거나, data의 실시간 스트리밍 또는 원격 작업자에게 특정 작업을 전달하는데 적합하다. 그래서 언제 Kafka를 사용하고 또 어떨 때 RabbitMQ를 사용하는가? - Message handling Kafka가 다른.. 2022. 3. 24.
Protocol buffer - 출처: https://developers.google.com/protocol-buffers/docs/overview - 개요 Protocol buffer는 언어 및 Platform에 중립적이며 구조화된 데이터를 직렬화하거나 그 반대 방향으로도 변환가능한 확장 매커니즘이다. JSON과 비슷하지만 더 작고 빠르며 지원하는 언어라면 해당 언어에 맞는 코드를 생성한다. Protocol buffer는 정의하는 부분(.proto 파일)과 proto 컴파일러가 생성하는 코드 부분으로 구성되어 있다. - Protocol buffer를 사용하여 어떤 문제를 해결할 수 있는가? Protocol buffer는 최대 몇 MB정도 되는 구조화되거나 형을 갖는 데이터 package을 위한 직렬화 형태를 제공한다. Protoc.. 2022. 3. 13.
gRPC with protobuf - 출처: https://grpc.io/docs/what-is-grpc/introduction/ - 출처: https://grpc.io/docs/languages/go/quickstart/ - 출처: https://github.com/grpc/grpc-go/tree/master/examples/helloworld - 개요 google에서 개발한 Remote Procedure Call이다. IDL(Interface Definition Language) 및 기본 메시지 교환형식으로 protocol buffer를 사용할 수 있다. RPC와 비슷하게 서버측에서는 interface를 구현하고 gRPC 서버를 실행하면 클라이언트에서는 서버와 같은 메소드의 stub을 갖는 구조이다. gRPC는 여러 언어를 지원하는데.. 2022. 3. 13.
RPC(Remote procedure call) - 출처: https://en.wikipedia.org/wiki/Remote_procedure_call#Analogues - 출처: https://pkg.go.dev/net/rpc - RPC란 무엇인가 gRPC에 관해 알아보기 전에 RPC란 개념부터 알아보기로 하자. RPC란 Remote procedure call 의 약자이다. 다른 주소공간(일반적으로는 같은 네트워크를 공유하는 다른 컴퓨터)의 procedure를 실행할 때, 원격 세부사항에 관한 명시적인 코딩없이 마치 local 컴퓨터의 procedure를 호출하는것처럼 사용하는 방식이다. OOP에서는 RMI(Remote method invocation)으로 표현하기도 한다. Go에서는 package rpc를 제공하며 Java에서는 Java RMI를 .. 2022. 3. 13.