IT한 것 117

python 파일 모니터링 및 지정한 곳으로 옮기기

시놀로지 나스를 사용하게 되면서, 나스에게 다운로드를 시키고, 적절한 곳으로 파일을 이용하는 것이 필요했다. 이미 다른 괜찮아 보이는 모듈이 있기는 했는데, 무슨 일인지 잘 설치가 되지 않아 간단하게 스크립트로 개발해봤다. 아래의 코드를 실행하면 /volume1/download라는 디렉터리를 탐색하고, *.mp3, *.avi를 지정한 경로로 파일 이동해준다. #!/bin/python #-*- coding: UTF-8 -*- import os import fnmatch import itertools import shutil destPattern = [] destDir = [] def add(pattern, dir): if (os.path.isdir(dir) != True): return False dest..

IT한 것 2021.04.02

python에서 SSL/TLS의 client certificate 제출

심심하신 분들은 아래 배경 부분을 읽어보시고, 바쁘시다면 그 다음부터 보시면 됩니다. 배경 언젠가부터 웹 환경에서 SSL/TLS를 사용하는 것은 아주 일반적인 일이 되었다. PKI 구조를 활용한 안전하게 설계된 프로토콜을 이용하여 우리의 웹은 안전해졌다고 들었을 것이다. 그런데 아쉽게도 생각보다 안전하게 않을 수 있다. 바로 단일 인증만들 사용하기 때문이다. 클라이언트가 서버를 인증서하는 절차는 강제이지만, 서버가 클라이언트를 인증하는 절차는 옵션이며, 대부분의 서버가 사용하지 않는 편이다. 만일 쌍방 인증을 하려면, 사용자도 적절한 인증서가 있어야한다. 그러려면 우리가 사용하는 웹 브라우저에 사용자의 SSL/TLS 인증서를 설치, 발급 하는 방법이 마련되어야 한다. 여기서 설치는 이미 웹 브라우저에서 ..

IT한 것 2021.04.02

python으로 SSL/TLS 사용시 인증서 오류와 대처법

이미 많이들 겪고 해결해서 아는 일들이겠지만, 최근에야 겨우 파이썬을 접해보면서 정리 삼아 남겨본다. 1. self signed certificate in certificate 오류 아래와 같이 서버인증서 검증에 실패했다고 나온다. File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1040, in _create self.do_handshake() File "..

IT한 것 2021.04.02

dart cp949 converter

예전에 작업 했던 내용이다. flutter에서 웹 관련해서 다루어본 적이 있었는데, 공교롭게도 웹 페이지의 한글 코드가 UTF-8이 아닌 CP949로 제공되는 것을 확인했다. 이 데이터를 읽어들여야하는데, dart 내부에서 사용하는 iconv는 cp949를 지원하지 않고 있었다. (새로 나온 flutter에서는 지원하려나..) 하여 직접 KSC5601테이블을 참조해서 UTF-16으로 변환하도록 코딩을 했다. 다른 플랫폼에도 비슷한 코드가 많으니 특별한 내용은 없는 편.. 그런데 쓰면서 보니 CP949 변환기라고 써놓고 KSC5601 테이블을 참조 했네.. 뭐 거기서 거기니까.. 대충 넘어가자 소스는 아래의 링크에서 다운 받을 수 있다 github.com/eususu/cp949_dart

IT한 것 2021.04.02

Vertx TCP 서버에서 JSON 기반의 통신을 쉽게 하기

제목이 좀 별로이긴한데.. TCP로 통신은 하는데, 실제 데이터는 Json으로 할 생각인데, vert.x의 TCP는 NetSocket에 ReadStream 형식을 블록 단위로 받아서 처리하도록 되어 있다. 크지 않은 단순한 데이터라면 어차피 BSD Socket Write 이벤트 한번이면 충분하니 별로 작업을 안해도 되는데, 그 데이터 량이 커지는 경우 Buffer 단위의 블록을 모아서 처리해야한다. 이 때, Buffer 블록이 얼마나 올지 예상을 하기 어려운 경우라면, 선택을 해야한다. 고정된 데이터 길이를 붙이고, 나머지 데이터가 올때까지 읽던가 아니면, Json 형식을 실시간으로 분석하면서 Json 형식이 끝날때까지 읽던가. 고정된 길이를 붙이는 첫번째 방법은 자주 해보던거라, 두번째 방식을 선택해봤..

IT한 것/Vert.X 2021.04.01

Vert.x TCP read에서 데이터가 잘리는 현상

어차피 최종 서비스는 TCP over TLS로 갈것이긴 한데, 편안한 개발 환경을 위해서 종종 TLS를 끄고 개발을 진행했다. 슬슬 데이터가 잘 오가는 것 같아서, 단순한 더미데이터에서 실제에 가까운 테스트 데이터로 변경하여 작업하니 문제가 발생했다. 1차로 보여지는 파싱 오류가 발생했다 - 우리가 사용하는 데이터는 JSON 형식인데, 해당 형식에 맞지 않는다는 것 바로 길이가 의심되서 일단 읽은 데이터의 길이를 찍어보니 2048. 딱 감이 온다. NetServer의 생성 옵션을 보면 setReceiveBufferSize가 있어서, 이 값이 기본 2048인것으로 짐작했으나, 의외로 -1로 제한 없음이다. 라고 생각했는데.. 제한 없음이 아닌 것 같다. 직접 2048 이상의 값을 설정하니, 잘림 현상이 사..

IT한 것/Vert.X 2021.04.01

Event Driven 방식 서버와 Socket

Windows Message 등의 방식이나 Javascript의 DOM Event 방식을 이미 알고 있었기 때문에, vert.x가 이벤트 방식이라는 것을 알았을때, 그냥 그러러니 했다. 그런데 특별한 생각없이 하던데로 Socket 코드를 짜다보니, 뭔가 이상한 증상이 발생했다. 분명히 하나의 Request를 보냈는데, 서버에는 여러개의 Request가 들어가고 데이터가 잘리는 현상이 발생한 것이다. 뭐지? 뭐지? 한동안 고민했는데, 답은 아주 단순했다. Socket에서 Event Driven이란 Socket Descriptor에 Read, Write 이벤트가 발생하는 것이다. 내가 시험했던 클라이언트에서 여러번의 Write를 수행하면서, 서버는 각 Write를 하나의 이벤트로 감지해서, 적절하게 동작한 ..

IT한 것/Vert.X 2021.03.29

SQLClient 사용시 oracle prepared statement 오류

java.sql.SQLException: 지원되지 않는 기능입니다: getMetaData at oracle.jdbc.driver.ArrayDataResultSet.getMetaData(ArrayDataResultSet.java:1029) ~[ojdbc8.jar:12.2.0.1.0] at com.mchange.v2.c3p0.impl.NewProxyResultSet.getMetaData(NewProxyResultSet.java:987) ~[c3p0-0.9.5.4.jar:0.9.5.4] at io.vertx.jdbcclient.impl.actions.JDBCQueryAction.decodeReturnedKeys(JDBCQueryAction.java:182) [vertx-jdbc-client-4.0.2.jar:..

IT한 것/Vert.X 2021.03.17

duplicate symbol 찾기 스트립트

iOS 개발을 하다보면, 외부 라이브러리를 사용하면서 종종 기호 충돌을 겪기 마련이다. 뭐 한두개 정도는 그냥 슥슥 이름 바꾸거나 빼면 되지만, 그 목록이 많은 경우에는 참 곤란해진다. 그래서 귀찮아서 아카이브 파일을 분석해서 비교하는 스크립트를 간단 개발해봤다. #!/bin/bash MODULE="find_dup.sh" DATE="20180213" FILEA=$1 FILEB=$1 if [ ! $# -ge 2 ]; then echo "> This script($MODULE) find duplicated symbols between archive files." echo "> Usage:" echo "$MODULE archive_file1 archive_file2" echo " It has no option..

IE11 캐시 및 데이터베이스 탭이 오래걸리는 경우

당연히, 윈도우즈의 문제라고 생각했는데... 아니었다. 우선 나의 스토리를 늘어놓고.. 특정 IE11에서 indexedDB의 동작이 느리다는 문제(분 단위 수준)를 보고 받았다. 때문에 timeout 지원이 가능한가 확인하고 느리면 대체 하는 방법을 사용하려고 조사하다보니, timeout을 지원하지도 않고, javascript는 single thread이기 때문에 억지도로 불가능하다는 결론을 내렸다. 결국 해당 시스템을 원격하기로 해서 내부 정보를 분석해봤다. 인터넷 옵션 -> 검색 기록 항목에서 설정 버튼 -> 캐시 및 데이터베이스 탭 -> 웹 사이트 캐시 및 데이터베이스 허용 체크항목을 이용하여 indexedDB를 끄고 켤 수 있기 때문에 값을 확인해보았는데, 이때 이 탭를 누른 순간 분단위의 시간이..

IT한 것/WINDOWS 2021.03.17