728x90
반응형

helm 패키지를 업데이트하고 어느 순간부터 파일 탐색을 할 때

 

방향키로 이전/다음 디렉토리로 이동하지 않고 커서만 움직이는 현상이 발생했다.

 

찾아보니 더이상 해당 키로 기능을 제공하지 않고

 

Emacs 기본 동작만 하도록 변경돼서 원하는(기존에 사용하던) 대로 동작하지 않았던 것이었다.

 

다음과 같이 추가해주면 기존처럼 방향키로 파일 탐색을 할 수 있다.

(define-key helm-map (kbd "<left>") 'helm-previous-source)
(define-key helm-map (kbd "<right>") 'helm-next-source)
(customize-set-variable 'helm-ff-lynx-style-map t)

 

참고 문헌

  1. https://github.com/emacs-helm/helm/issues/2175#issuecomment-512663858

반응형

'Emacs' 카테고리의 다른 글

[Emacs] macOS Catalina 디렉토리 접근 문제 해결  (0) 2020.02.06
[Emacs] macOS Catalina 업그레이드 문제  (0) 2020.01.25
[Emacs] Window Move  (0) 2020.01.25
[Emacs] Python 개발 환경 구축  (0) 2020.01.25
[Emacs] Move Line  (0) 2020.01.25
728x90
반응형

Echo로 개발하여 API로 통신하는데 Content-Type: text/plain으로 통신을 해야했다.

func(c echo.Context) (err error) {
  body := &Body{}
  if err = c.Bind(body); err != nil {
    return
  }
  return c.JSON(http.StatusOK, body)
}

위와 같이 echo.Context.Bind를 이용하여 JSON 형식을 파싱하여 사용하고 있었는데

 

Content-Type: text/plain인 경우 415 Unsupported Media Type 에러가 발생했다.

 

말 그대로 지원하지 않는 미디어 형식이라 에러가 난 것이다.

 

이를 해결하기 위해서 다음과 같이 변경하면 Content-Type에 무관하게 동작하도록 할 수 있다.

func(c echo.Context) (err error) {
  rBody := &RegisterBody{}
  if b, err := ioutil.ReadAll(c.Request().Body); err == nil {
    if err := json.Unmarshal(b, &body); err != nil {
        return
    }
  }
  return c.JSON(http.StatusOK, body)
}

 

참고 문헌

  1. https://github.com/labstack/echo/issues/156#issuecomment-124684206

반응형

'Golang' 카테고리의 다른 글

[Golang] Go의 선(The Zen of Go)  (0) 2020.06.04
[Golang] Kafka 연동 문제  (0) 2020.04.30
[Golang] Go를 사용하면서 발생했던 문제들  (0) 2020.04.23
[Golang] Java gzip migration  (0) 2020.01.30
[Golang] 410 Gone  (0) 2020.01.25
728x90
반응형

ELK를 이용하여 로그 수집/분석을 하기 위해 Fluentd와 Kafka를 연동할 필요가 있었다.

 

그래서 Fluentd에서 Kafka로 로그를 전송할 수 있도록 설정을 추가했는데

 

Kafka가 죽어서(원인은 파악하지 못했다.) Fluentd가 설치된 로그 서버가 행이 걸리는 경우가 발생했다.

 

retry_limit의 기본값이 17로 돼있어서 발생한 문제로 Kafka로 전송이 실패해서 버퍼가 계속 쌓인 상태에서

 

해당 버퍼를 Kafka로 전송하려가 I/O가 가득 차 해당 서버가 행이 걸려 다른 서버로 절체된 것이었다.

 

retry_limit을 1로 주고 테스트를 해보니 Kafka 전송에 실패해도 버퍼가 더이상 쌓이지 않는 것을 확인했다.

<match>
  @type copy

  <store>
    @type kafka_buffered

    ...
    retry_limit 1
    ...
  </store>
</match>

Logstash에서 Kafka 연동할 때 토픽별로 인덱스를 설정해 Elastic Search에 저장하기 위해

 

filter와 output에 다음의 내용을 추가하면 된다.

if [@metadata][kafka][topic] == "topic" {
}

위의 설정을 추가하지 않는 경우 filter에서는 오류가 나지 않을 수도 있지만

 

output에서는 가장 먼저 설정된 인덱스만 인식하여 나머지 인덱스에는 저장이 되지 않는다.

 

참고 문헌

  1. https://docs.fluentd.org/v/0.12/output/kafka#retry_limit-disable_retry_limit

반응형

'Log' 카테고리의 다른 글

[Log] NoNodesAvailable 에러 해결  (0) 2020.02.27
[Log] Spark ElasticSearch Parquet  (0) 2020.01.25
[Log] Logstash Kafka 연동 에러 해결  (0) 2020.01.25
[Log] Logstash Pipeline 사용하기  (0) 2020.01.25
[Log] Fluentd 성능 튜닝  (0) 2020.01.25
728x90
반응형

앱을 개발하다보니 설정된 내용을 저장할 필요가 있어 async-storage를 사용하게 되었다.

 

React Native 버전이 0.59 이하인 경우 아래와 같이 하면 된다.

 

버전이 0.60 이상인 경우 link를 해주지 않아도 된다.

$ npm install @react-native-community/async-storage
$ react-native link @react-native-community/async-storage

데이터를 불러올 때 예제에서는 async, await 를 사용하는데

 

constructor에서는 사용할 수 없어 componentDidMountasync 함수로 사용했다.

constructor() {
  super();
  this.state = {
    ...,
    isLoading: true,
    ...
  };
}

async componentDidMount () {
  ...
  try {
    const value = await AsyncStorage.getItem('key');
    if (value !== null) {
      const data = JSON.parse(value);
      this.setState(data);
    }
  } finally {
    this.setState({isLoading: false});
  }
  ...
}

storeData = async (value) => {
  try {
    await AsyncStorage.setItem('key', value)
  } catch (e) {
  }
}

isLoading을 넣어준 이유는 데이터를 읽은 후 setState 함수에서 상태를 변경하는데

 

상태가 변경되기 전에 렌더링이 된 후 상태가 변경된 후 다시 렌더링을 되는 것을 막기 위해 추가했다.

 

참고 문헌

  1. https://github.com/react-native-community/async-storage

반응형

+ Recent posts