본문 바로가기

전체 글418

Trust anchor for certification path not found 해결하기 Android 앱에서 https 연결을 시도하려고 할 때 Trust anchor for certification path not found 라는 에러가 발생하면서 연결이 실패했다. 서비스 중인 앱이라 부랴부랴 원인을 찾기 시작함. 원인은 해당 앱에 신뢰성 있는 인증서를 찾지 못했기 때문인 것 같다. 우선 첫번째로 TrustManager를 사용해서 인증서 회피를 시도했다. TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[].. 2021. 11. 25.
multi process 구현하기 python을 이용해서 multi process를 구현해 보기로 한다. 코드는 엄청 간단하다. from multiprocessing import Process def start_node(index): print(index) if __name__ == "__main__": num = 1 proc = Process(target=start_node, args=(num,)) proc.start() proc.join() 위의 예제 코드를 활용해서 기존 코드를 multi process로 전환하였지만 아래와 같은 문제가 발생했다. 해당 프로세스를 종료시켰으나, fork시킨 process가 종료되지 않고 좀비 프로세스로 남아있는 문제였다. 이를 방지하기 위해 Process 생성 시 daemon = True argume.. 2021. 11. 19.
Elastic search 모든 데이터 가져오기 Elastic search의 경우 각각의 shard에서 데이터들을 저장하고 있고, 검색 시 각 shard 들로부터 데이터를 모은 후 정렬해서 결과를 뿌려주는 방식으로 검색이 제공된다. 이렇게 모은 후 정렬해서 결과를 뿌려주기 때문에 더 큰 사이즈 혹은 더 많은 사이즈의 요청 시 해당 결과를 못 주는 경우가 있다. 다시 간단히 설명하자면, 내가 만약 10000개의 데이터를 Elastic search에 요청하게 되면, 각 shard에서는 10000개씩 데이터를 가져오게 되고, 10000개씩 모든 데이터(예를 들어 shard가 5개라면 50000개)를 정렬 후에 10000를 추린 후 결과를 주게된다. 결과적으로 from, size 등을 통해 es에서 모든 데이터를 가져오려고 시도하게 되면, 10000건 이전까.. 2021. 11. 14.
키바나에 이미지 표시하기. (링크 달기) es에 있는 데이터를 키바나를 통해 많이 확인하곤 한다. 하지만 가끔씩 키바나로 보는 데이터가 불편할 때가 있다. 첫 번째 예로 이미지 데이터의 경우 키바나에서 렌더링 결과를 뿌려주면 데이터 확인이 더 쉬울 것 같은데 해당 기능을 찾지 못해서 매번 이미지 주소 클릭 후에 이미지를 확인하곤 했었다. 두 번째 불편함은 url 주소가 있는 경우 링크를 클릭하면 해당 페이지로 렌더하면 편한데 그게 안되서 복사한 후 브라우저에 붙여서 확인하는 점이 불편했다. 이 포스팅에서는 위 두 가지 불편함을 해소할 수 있는 키바나 기능에 대해 알아보고자 한다. 우선 kibana의 왼쪽 메뉴에 있는 management를 클릭한다. management를 클릭 후 오른쪽 화면에서 변경하고자 하는 index name을 선택 한다. .. 2021. 10. 18.
gunicorn 메모리 leak 해결하기. 파이썬에서 가장 간편한 웹 서버로 flask를 주로 이용한다. flask를 이용하다가 조금 규모가 커지거나 로직이 필요한 작업이 생기면, 이때부터 async를 고려하게 되는데, 나 같은 경우에는 gnicorn을 사용함으로써 async 문제를 풀곤 했다. 그런데 gunicorn 사용 후 어느 순간부터 메모리가 차츰 차츰 올라가는 것을 발견했다. '어.. 이거 왜 안떨어지지??' 메모리가 아주 느리지만 조금씩 올라가고 있는 것을 확인해 볼수가 있다. 엄청난 인고의 고통 속에 원인이 gunicorn이란 것을 밝혀냈다. 또한 구글에서 "gunicorn memory leak" 으로 검색해보면 나같이 메모리 릭으로 고생하고 있는 수많은 블로그들을 찾아볼 수가 있다. 원인은 gunicorn에서 생성한 worker 노.. 2021. 10. 6.
violation of our Malicious Behavior policy???? 크롤링 하는 서버가 http -> https로 변경됨에 따라 나 역시 서비스 중인 앱을 https로 변경하였다. 단순히 주소만 https로 변경하면 되는 줄 알았는데, 그게 아니었다 ㅠ_ㅠ 인증서 없이 간단하게 https 통신을 가능하게 하기 위해서 아래의 코드처럼 모든 인증서를 허용해주는 객체를 만들고 httpsConnection에 설정을 추가해 준다. TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager(){ public X509Certificate[] getAcceptedIssuers(){return new X509Certificate[0];} public void checkClientTrusted(X509Certificat.. 2020. 12. 4.
python에서 multi line으로 진행상황 나타내기 2016/11/19 - [Programming/python] - python에서 Progressbar 표현하기 python에서 Progressbar 표현하기 Python script를 실행하는데 이게 돌고 있는건지.. 아니면 멈춘건지 의구심이 들때가 간혹 있다. 언제 끝나는지 궁금하기도 하고... 그래서 python으로 progressbar를 표현할 수 있는게 없나 구글에서 찾아봄. htt.. yujuwon.tistory.com 위의 코드를 활용해서 multi line으로 화면에 진행상황을 출력하려고 했으나, 번번히 실패를 경험하게 된다. 가령 stdout에 '/r', '/n'등을 입력하고 flush를 하게 되면 출력하려고 하는 문장이 1줄로만 나타나거나, newline이 동작하여 아래로 쭉 써지게 된다.. 2019. 11. 24.
[ELASTIC SEARCH] full scan 하기 elastic의 index table을 full scan 하려고 아래와 같이 코드를 작성해서 호출했다. 처음에 total size를 가져온 후 from의 window size를 옮겨가며 전체 데이터를 가져오는 방식이다. 그런데 위와 같이 작업 할 경우 아래와 같은 에러메시지가 나타나게 된다. Limit of total fields 10000 in index has been exceeded. 해당 index에서의 최대 결과 윈도우는 기본으로 10000으로 설정되어 있으며( index.max_result_window) 해당 값을 넘어갈 시에 위와 같은 메시지가 발생한다. 내가 아무리 from을 13000, size를 100으로 줬다고 하더라도 es 내부에서는 전체 13100개를 가져온 후 0~13000개는 .. 2019. 8. 8.
[골빈해커의 3분 딥러닝] 05_01_TensorBoard 텐서플로우로 만든 모델을 저장 및 로딩하고 모델 파라미터 값들을 tensorboard에 표현해 보자. data = np.loadtxt('../data/data.csv', delimiter=',', unpack=True, dtype='float32') x_data = np.transpose(data[0:2]) y_data = np.transpose(data[2:]) data.csv 파일을 읽어서 앞의 두개의 데이터는 x_data로 나머지 데이터는 y_data에 저장하자. 참고로 data.csv는 아래의 형태로 구성되어 있다. 1 0 0 0 1 1 1 0 1 0 0 0 1 0 0 x_data의 경우 transpose를 안해줄 경우 2x3 형태의 데이터 [[1 1 0] [0 1 0]] 로 저장이 되기 때문에 .. 2019. 6. 7.