전체 글 278

synology file indexing - synoindex

시놀로지 나스를 사용하면서 답답함을 느낀게 있다. 다운 받은 파일을 내가 원하는 디렉토리로 옮기도록 나름 이쁘게? 설정해뒀다. 그런데? Audio Station이나 Moments 등에서 새로운 파일을 감지하지 못하는 것을 확인했다. 백날 넣어주면 무엇을 하나, 정작 해당 파일을 사용할 서비스 프로그램에서는 예전 파일들만 나오는 것을 그게 아니라면, 설정 메뉴에 들어가서 재색인(reindex)를 해줘야하는데, 그 시간이 데이터에 비례에서 어마어마하게 걸릴 수 있다 그런데 자세히보니 nas에 직접 접속해서 synology의 관리툴로 파일을 복사, 이동 해주면 아무 이상없이 새로운 파일을 인식하는 것을 확인 했다. 이 문제에 대한 해답은 synoindex 명령이다. 실행해보면 알겠지만, 많은 옵션을 가졌고, ..

IT한 것 2021.04.02

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

WD12TB Elements 하드적출기

NAS의 백업 용으로 하드가 하나 필요했는데, 마침 아마존에서 적당한 가격에 올라와 구매를 했다. 일주일도 안돼서 물건이 왔길래 추출을 시도했다. 1. 박스 나름 박스는 심플하게 생겼다. 2년 보장 문구가 눈에 띄었지만.. 넌 해체될거야.. 미안..하기 보다는 잘 쓸게!! 2. 개봉 박스를 열어보면, 나름 공간을 잘 활용하고, 고정이 잘 되도록 포장이 되어 있는 것을 확인 할 수 있었다. 3. 본체 정면 4. 본체 뒷면 5. 본체 옆면 6. 구성품 7. 상태확인 1 혹시 모르니 정상 동작 확인을 위해 연결 해보았다. 알다시피 하드디스크의 Kilo 의 단위는 1024가 아닌 1000이므로 총 용량은 12TB로 계산되지 않는다.. 8. 상태확인 2 잘 모르겠지만, 건강은 “좋음“이란다 이제 상태를 알았으니 ..

만질만질 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