본문 바로가기

Programming177

[REACT] react developer tools 사용하기 chrome extention에서 react develop tools을 설치한다. https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi React Developer Tools Adds React debugging tools to the Chrome Developer Tools. Created from revision 336ac8ceb on 7/13/2022. chrome.google.com 그러면 아래와 같이 chrome developer 창에 Components와 Profiler 탭이 생긴 것을 확인할 수가 있다. react app을 실행시키고 chrome developer 창을 연 .. 2022. 8. 6.
selenium으로 크롤링 하기 로그인 한 후 데이터를 긁어와야 하는 웹 페이지는 어떤 식으로 데이터를 긁어와야 할까?? 이것 저것 찾아보다가 selenium이란 패키지를 발견했다. selenium은 headless (브라우저를 띄우지 않고 브라우저처럼 행동하는 것) chrome을 이용해서 실제 사용자가 액션을 취한 것처럼 동작시키는 작업을 한다. 기본 작업 방법은 다음과 같다. 1. chrome driver 설치 2. crawling 관련 패키지 설치 3. selenium으로 로그인 후 세션 찾기 4. 세션을 python requests 세션에 넣은 후 api 호출하기. 1. 우선 selenium을 사용하기 위해서는 chrom driver를 설치해야 한다. 해당 환경은 mac이라서 brew를 이용해서 아래와 같이 설치했다. $> br.. 2022. 2. 24.
puppeteer 설치 하기 phantomJS를 이용해서 url rendering 프로그램을 돌리고 있던 나에게 어느 순간 PhantomJs 관리자가 사실 상 개발을 중단했다는 소문을 듣게 되었다. 구글 크롬팀에서 크롬에 headless chrome을 내장하기 시작했고, 그에 맞춰 puppeteerjs를 release 한 게 phantomjs 중단 원인이라 할 수 있겠다. 그래서 이번 기회에 나도 puppeteer로 갈아타기로 결심했다. 우선 puppeteer를 설치해 보자. puppeteer를 설치하기 위해서는 nodejs를 먼저 설치해야 한다. 아래의 링크에서 nodejs를 다운 받자. https://nodejs.org/ko/download/ 다운로드 | Node.js Node.js® is a JavaScript runtime .. 2021. 12. 2.
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.