IT한 것 116

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

블루스크린(BSOD) DRIVER_POWER_STATE_FAILURE 오류 해결 절차

Windows 의 대명사 중에 하나인 블루 스크린. Windows 7 이후로 잘 못 보던 것인데 다시 나에게 돌아왔다. 보통 블루 스크린은 따로 해결한 적이 없어서 새로 설치하는 방법으로 잘 살아왔는데, 새로 설치해도 같은 상황이 발생하는 터라 직접 해결하게되어 그 절차를 기록해본다. ※ 원래는 진짜 (light) blue screen인데 Windows 10 Insider Preview 버전을 사용해서 색상이 조금 다르다. 나의 증상은 컴퓨터를 사용하다가 간헐적으로 이렇게 시스템이 중단되는 상황이므로 부팅해서 일부 시간동안에는 내부 정보를 확인 할 수 있다. 내가 확인 한 절차는 아래와 같다. 이벤트 뷰어를 확인 (Windows Log -> system) DRIVER_POWER_STATE_FAILURE와..

IT한 것/WINDOWS 2021.03.17

Xcode 12 iOS 시뮬레이터용으로 빌드시 실패하는 경우

Xcode 12, building for iOS Simulator, but linking in object file built for iOS, file for architecture arm64 아마 이미 많은 검색을 해봤을거라고 판단한다. 위와와 비슷한 문구를 만났을 것이고, 해결책도 많이 봤을 것이다. 보통 그런 해결책들 (VALID ARCH 관련 옵션처리)이 맞긴 하겠지만, 나 처럼 configure 를 이용하여 커맨드라인으로 직접 빌드하는 환경에는 전혀 도움되지 않았다. 때문에 대체 뭐가 바뀌었고, 무엇 때문에 안되는지 파악하기로 했다. 기존에는 -arch armv6 -arch armv7 -mios-version-min=6.0 -isysroot 등의 옵션을 사용하여 iOS Device 라이브러리를 ..