[카테고리:] IT

  • 유챗 봇 만들기 #0 – 프로토콜 분석

    유챗 봇 만들기 #0 – 프로토콜 분석

     유챗에서 작동하는 간단한 봇을 만드려는 중에, 관련된 자료가 검색해도 보이지 안길레 적어본다. 어디까지나 내가 코드를 분석하면서 찾은것을 기반으로 작성한 글이기에 부정확한 내용이 있을 수도 있다. 우선 유챗의 통신 내용을 들여다보면 아래와 같이 나온다: 모든 통신은 웹소켓을 기반으로 동작하고 있음을 볼 수 있다. 특히 웹소켓중 바이너리 타입으로 데이터를 송수신 함을 볼 수 있다. 하나의 웹소켓 패킷(바이너리 타입 메세지) 안에서는 \n을 기준으로 여러개의 메세지를 담을 수 있다. 메세지는 중간에 끊어짐이 없다. 각 줄의 메세지는 다시 \x02, \x03, \x04, \x05, \x06, \x07 등으로 내용 구분된다.   다시 말하자면, 우선 바이너리 타입의 웹소켓 패킷으로 메세지의 덩어리가 온다. 들어온 메세지 덩어리는 우선 \n 단위로 나눠진다. 그렇게 나눠진 한줄 한줄 나눠진 메세지는 다시 \x02~\x07을 구분자로 해서 내용이 나뉘어진다. 맨 앞에는 메세지의 타입(기능)을 구분해 놓은것 인 것 같고, 나머지는 자신의 데이터 맨 앞에 있는 구분자에 의해 해당 내용(데이터)의 타입이 정해지는 것 같았다. 메세지1에 \x03 ESukmean 이라고 있으면, 이는 문자열 “ESukmean”임을 뜻한다. \x04 1이 있으면 이는 true를 의미한다. 내용들이 구분자로 (\x03 ~ \x07, \n등) 쪼개지기에 프로그램이 구분자와 일반 데이터를 구분하는것이 매우 중요하다. 누군가의 채팅 내용에 \n이 있었는데, 그것을 메세지의 분리로 인식하면 프로그램의 버그가 발생할 것이다. 이를 방지하기 위해 혹시라도 구분자에 해당되는 데이터가 들어온다면 그 앞에 \을  붙여서 escape하는 것 같았다. 예를 들어, 채팅 내용이 “가나다라 \n 아자차카” 라면, 우리가 받는 메세지는 “가나다라\\\n아자차카”가 되는것이다. “1234 \x06 5678″ 이라는 데이터는 “1234 \\\x06 5678″로 들어올 것이다. UChat.js를 보면 아래와 같은 구분자 타입이 존재함을 알 수 있다.…

  • 프로그램을 조금더 빠르게 – AoS vs SoA 프로그램 비교

    프로그램을 조금더 빠르게 – AoS vs SoA 프로그램 비교

    저번 글에서 AoS와 SoA의 개념에 대해 글을 써 보았다. AoS와 SoA 이야기를 논하려면 데이터가 메모리에 가지런히 모여있다는 전재를 해야한다. 배열을 만들었으나 실제로는 데이터가 연속적으로 모여있지 않고 뿔뿔히 흩어저 있으면 메모리 캐싱이 될 리가 만무하다. 즉, AoS와 SoA는 메모리 구조가 시스템적일수록 더욱 효율적으로 동작한다. 배열의 저장과 그 외 기능의 동작이 군더더기 없이 딱 필요한 기능만 동작될…

  • 프로그램을 조금 더 빠르게 #1 – AoS와 SoA

    프로그램을 조금 더 빠르게 #1 – AoS와 SoA

    메모리 속도는 CPU에 비해 훨 느리다. 이것을 극복하려면 CPU 캐시 메모리를 잘 써야한다. 이를 위해서는 SoA와 AoS (Struct of Array, Array of Struct)을 알 필요가 있다. 메모리 속도에 따른 프로그램 동작 속도를 알아보자.

  • Docker-Compose로 PHP + MySQL 묶기

     지금 이 블로그도 그렇듯 서버내 모든 서비스가 도커 내에서 돌아가고 있다. 서버 맨 앞에 nginX를 두고 적절한 도커 컨테이너로 연결을 중계해 준다. 이때 기본 nginX로 다루기 껄끄러운 커넥션은 다시 Rust를 통해 다시 핸들링한다. 이런 구조속에서 각 컨테이너간 서로 통신해야할 일이 생길수 있다. 나로 같으면 PHP와 MySQL를 서로 연결해줘야 하는 상황이 생긴것이다. 짜피 Docker-Compose를 쓰기에 PHP와…

  • 메모리 Reallocation (재할당)

    메모리 Reallocation (재할당)

     메모리 재할당은 “필요한 메모리의 양이 바뀌어서 다시 메모리를 할당 받는것”이다. 코딩을 하다보면 메모리를 재할당 받아야 할 때가 종종 찾아온다. 사용자가 직접 메모리 재할당을 할 때도 있고, Python처럼 언어에서 보이지 않게 알아서 재할당을 진행할 때도 있다.  위의 그림을 해석해 보자. 기존에는 데이터를 저장할 때 8Byte의 공간을 필요로 했으나, 어떤 사정에 의해 14Byte가 필요해 졌다. 그래서 메모리…

  • Docker로 설치한 워드프레스 업데이트

     도커로 워드프레스를 설치하고 잘 사용하다가 업데이트를 마딱드린 순간이 찾아왔다. 워드프래스 내의 자동 업데이트 기능을 사용해 보려 했으나, FTP 정보를 입력 해라는둥 도커 시스템에는 적합하지 않는 업데이트 방법만 제시했다. 그래서 도커를 이용해서 WordPress를 업데이트할 방법을 찾아봤다.  방법은 간단하다. 파일 두개를 삭제한 후, Docker의 워드프레스 이미지를 업데이트 하고 컨테이너를 재생성 하면 된다. 전체 코드는 아래와 같을것이다: Docker…

  • 리눅스 사지방 유튜브 접속기

    이 병사는 20. 05. 16일 자로 전역하였습니다. (현지전역 제도 고려시 이미 4월달에 집 갔습니다 ㅋ) 사지방에 들어갈 수 없기에, 장애가 발생해도 알아채기 어렵습니다. 만약 장애 발생시 여기를 통해 제게 연락해 주시길 바랍니다.  사지방이 윈도우에서 리눅스로 바뀌며 사지방 이용에 필수적인 유튜브 사지방 접속기가 작동이 되지 않는다. 윈도우용으로 만들어저있기에 당연하다. 작동이 되지 않을 뿐 아니라, 그 프로그램…