프로그래밍(Web)

    [바미] Golang sarama 연동하기(http_server)

    github.com/Shopify/sarama/tree/65f0fec86aabe011db77ad641d31fddf14f3ca41/examples/http_server Shopify/sarama Sarama is a Go library for Apache Kafka 0.8, and up. - Shopify/sarama github.com 이 부분 실행 방법에 대해 써보려고 합니다. 먼저 func (s *Server) withAccessLog(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { started := time.Now() next.ServeHTTP(w, r) en..

    [바미] Golang sarama예제로 Kafka 연동하기(interceptors).

    예제는 github.com/Shopify/sarama Shopify/sarama Sarama is a Go library for Apache Kafka 0.8, and up. - Shopify/sarama github.com 여기의 코드를 사용했습니다. 먼저 제가 사용한 부분은 github.com/Shopify/sarama/tree/master/examples/interceptors Shopify/sarama Sarama is a Go library for Apache Kafka 0.8, and up. - Shopify/sarama github.com 부분인데 그러기 위해서는 일단 go.mod 파일을 수정해 줄 필요가 있었습니다. module github.com/Shopify/sarama/examples..

    [바미] 카프카 Invalid config, exiting abnormally에러 대처하기

    위와 같이 ERROR Invalid config, exiting abnormally (org.apache.zookeeper.server.quorum.QuorumPeerMain) org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing C:\kafka_2.12-2.4.0\config\zookeeper.properties at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:154) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumP..

    [바미] Golang 카프카 삽질기...

    현재 Golang으로 구현한 log 수집 서버는 log파일에 log들을 수집하는데 파일에서 카프카로 도입하도록 수정되었습니다. 카프카를 쓰려면 주피카를 써야 하고, 이 둘에 대한 설명은 다음과 같습니다. 카프카 메시징 큐의 일종입니다. 그리고 다른 메시징 큐 activemq, rabbitmq 대비 우수한 TPS 를 나타냅니다.따라서 대용량의 실시간 로그 처리에 특화되어 있습니다. 메시지를 기본적으로 저장하는 기존 메시징 시스템과는 달리 파일 시스템에 저장합니다. 따라서 데이터 유실에 안전합니다. 구성은 Producer, Broker(kafka 서버) , Consumer 로 되어있습니다. 기존 메시징 시스템과의 차이점 기존시스템은 Broker가 Consumer 에게 들어오는 메시지를 Push 방식으로 진행..

    [바미] 테스팅을 잘하자!

    데이터 입력 문제를 해결하니 또 다른 문제가 발생했다. 무한정의 데이터를 받으면 서버부하는 물론이고, 공격을 받았을 때의 서버 상태를 생각해보니 제한을 걸어야 했었다. 아무래도 회사일이다 보니 이런 부분은 나 혼자 독단적으로 결정하는 게 아니기 때문에 타 부서와의 조율이 필요했다. 그렇게 해서 나온 값은 64KB였다. 64KB이상이면 데이터를 받지않고, 내부에서 따로 관리하는 log파일에만 표시하기로 했다. 원래는 이렇게 하려 했었으나 아래와 같이 하면 어떤 값을 보냈었는지 조회할 수 없기 때문에 // body값 가져오는 함수. func bodycheck(w http.ResponseWriter, r *http.Request) ([]byte, int) { getlength := r.ContentLength..

    [바미] r.Body.Read()와 ioutil.ReadAll()의 차이점.

    log수집 서버에서 invalid character '\x00' in string literal라는 에러가 빈번하게 발생하여 원인을 찾아보니 r.body에서 읽어오는 값의 크기가 특정 크기보다 커지면 저 에러를 발생시킨 것입니다. 그래서 JSON Data가 짤리게 출력 되는 모습을 보여주어서 현재 보다 더 많은 Data를 받아 올 수 있도록 수정해 주어야 했습니다. 먼저 얼마만큼의 데이터를 받아 오는지 확인하기 위해 length값을 조회했더니 저 에러가 나지 않는 범위가 length값이 3836이였을 때 였습니다. 그 때 썼었던 코드는 다음과 같습니다. func bodycheck(w http.ResponseWriter, r *http.Request) []byte { getlength := r.Conten..

    [바미] Typescript jwt_로그인 구현하기.

    Web에서 로그인을 구현하는 방법에는 여러 가지가 있습니다. 일반적으로 Session과 Cookie를 통한 로그인 구현 방식을 떠올릴 수 있는데요. JWT는 앞의 두 가지와 약간 다른 것으로 최근에 많이 사용되는 인증(Authentication) 방법 중 하나 입니다. 특히 Web Application이나 Mobile Application에서 사용자 인증하기 편한 방법으로 많은 서비스에서 사용하고 있습니다. JWT가 무엇인지 아래에서 알아보겠습니다. JWT란 무엇입니까? JSON Web Token (JWT)은 JSON 객체로서 당사자간에 안전하게 정보를 전송할 수있는 작고 독립적 인 방법을 정의 하는 공개 표준 ( RFC 7519 )입니다. 이 정보는 디지털로 서명 되었기 때문에 검증되고 신뢰할 수 있습..

    [바미] TypeScript를 사용하여 실시간 채팅 앱 작성

    reference 참고 사이트 참고 사이트 Releasing v1.0.0 of a Socket.io-TypeScript Chat Project Some months ago I implemented a simple chat version using TypeScript language only. This project was presented in a local conference. luixaviles.com 위 사이트 들을 바탕으로 작성된 글입니다. TypeScript를 사용한 실시간 앱 : Web Sockets, Node & Angular 및 통합. 얼마 전에 TypeScript 언어 만 사용하여 간단한 채팅 응용 프로그램을 구현했습니다. 주요 목표는 클라이언트 측과 서버에서이 프로그래밍 언어를 사용하는..

    [바미] Nestjs 및 TypeScript를 사용하여 AWS S3에 이미지 업로드

    Nestjs 및 TypeScript를 사용하여 AWS S3에 이미지 업로드 최근 프로젝트에서 백엔드에 있는 Nestjs와 Typescript를 사용하여 AWS S3에 이미지를 업로드해야 했습니다. Typescript와 Nestjs를 사용하여 이 작업을 수행하는 간단한 단계를 공유합니다. 이 코드는 Nestjs 및 typescript용 코드이지만 Express를 사용하여 Nodej에 대한 이미지 업로드에 대해서도 참조하고 그에 따라 변경할 수 있습니다. 먼저 이미지 업로드를 위해 AWS S3 버킷을 설정해야 합니다. 만약 당신이 그것을 어떻게 하는지 모른다면 여기를 참고하시기 바랍니다. 이제 typescript를 사용하여 이미지 업로드에 대한 백엔드 코드를 설정해야 합니다. 이미지 업로드를 S3으로 설정하..