본문 바로가기

전체 글31

[Javascript Byte 다루기] ByteArray <-> UTF-8 ( over the 'fromCharCode' ) NodeJs에서 byte를 Decoding 하는 함수는 fromCharCode 이다. 문제는 이 함수의 인코딩이 ASCII만 지원된다는 것이다. 그러니까 영어와 숫자 정도를 다루는데는 무리가 없으나 한글이 끼어버리는 순간 망해버린다. 이때는 ByteArray에서 Byte들을 일일이 가져와 독해하고 처리하는 과정이 필요하다. 고맙게도 구글의 closure 코드 중에 관련된 처리를 해주는 함수가 있어서 기록해둔다. 또 좀더 단순해보이는 코드를 어느 블로그에서 발견해서 그것도 기록해둔다. 코드 분석을 해보고 싶지만 엄청난 비트 연산의 나열을 보면 차마 엄두가 안난다. 그냥 가져다 써야징~ 구글 참고 https://github.com/google/closure-library/blob/8598d87242af59a.. 2022. 11. 22.
Netty 기반 경량 Http Server 구성 ( with Gradle ) Netty는 이벤트 기반 네트워크 어플리케이션 구성을 위한 프레임워크다. 통상 NIO 기반 비동기 프로토콜 서버 구축용 프레임워크로 더 잘알려져있다. NIO는 New input output의 약자로 Channel Buffer의 방식으로 입출력을 다루는 자바의 기본 IO 라이브러리를 뜻한다. Netty가 비동기 프로토콜 서버를 구출할 수 있는 이유는 이러한 NIO를 사용하기 때문이며 달리 말하면 NIO가 Non-Blocking IO를 지원하기 때문이다. Blocking IO란 먼저 입력된 데이터가 처리되어 출력되기 전까지 새로운 데이터를 입력받지 않는 방식을 말하며 Non-Blocking은 이와 반대로 먼저 입력된 데이터의 처리 여부와 상관없이 다른 데이터들의 입력을 받고 입력 순서과 상관없이 처리 순서에.. 2022. 9. 25.
Cursor 와 Loop Query 그리고 Procedure ( in MYSQL ) 통상적인 관계형 데이터베이스 작업은 DB와 Connection 을 맺고 SQL을 던져서 질의 결과를 반환받는 과정이다. Connection 이 성공적으로 맺어지고 SQL 구문 상의 오류가 없다면 RDB는 전달받은 SQL에 맞춘 알맞은 실행 계획을 세워 질의를 수행하고 결과를 만들어 반환해준다. 거의 모든 데이터베이스 작업은 이런 DML 작업으로 충분히 처리되지만 간혹 조금 더 자유도가 높은 처리가 필요한 때가 있다. 가령 Table의 Row 단위로 처리를 통제하거나 질의 내에서 Loop 를 돌리는 처리 등이 있겠다. CURSOR 커서는 흔히 GUI 환경에서 마우스를 따라 움직이는 작은 이미지를 가리키는 명칭으로 쓰인다. 프로그래밍적으로 말하자면 커서는 마우스의 위치와 마우스 동작 이벤트의 정보를 저장하는.. 2022. 9. 23.
DNS ? Hostname ? Domain ? A RECROD, CNAME ? Name Server? 인터넷에 연결된 수많은 컴퓨터들은 ip로 서로를 식별한다. 일반적인 ip는 점과 숫자로 구성된다. 모든 통신의 과정에서 ip로 접근정보를 추려야하는 건 출석부의 학생들을 숫자와 문자가 혼용된 식별자로 구별해야하는 것처럼 난감한 일이다. 난감함을 피하고자 학생들에게 철수, 영희, 민수 등의 이름이 있듯이 컴퓨터에게도 보다 직관적인 이름이 붙여진다. 이를 도메인 혹은 Hostname이라고 한다. 허나 이름을 무엇으로 붙이던 거의 모든 프로토콜은 결국 ip를 이용해 접근공간을 파악한다. 따라서 도메인과 ip는 양방향적으로 수월히 변환되어야하고 이런 변환 서비스를 제공하는 것이 DNS ( Domain Name System ) 이다. 과거에는 접근이 필요한 모든 host의 정보를 client가 가지고 있었다. 요.. 2022. 9. 15.