전체 글
-
블록체인 모니터링 시스템 개발기Architect 2023. 9. 27. 22:20
이더리움, 바이낸스 스마트 체인(현재는 BNB 스마트 체인), 폴리곤의 블록체인 이벤트 추적기를 개발했었는데, 셋 다 EVM 계열이라 다른 점은 없었다. 이 포스팅에서는 개발하면서 겪었던 문제와 해결을 위해 적용한 방법, 전체적인 아키텍처를 설명하고자 한다. 초기 아키텍처 굉장히 굉장히 간단하게 Point-to-Point로 구성했다. 개발한 계기가 이더리움에 존재하는 자사의 토큰을 바이낸스 스마트 체인으로 브릿징 하는 것이었고 이외의 니즈는 존재하지 않았다. 메시지 큐와 같은 일반적으로 데이터를 서빙할 때 주로 사용하는 시스템은 도입하지 않았다. 단순 토큰 브릿징 이벤트를 모니터링 하는데에 과한 시스템이었고, 소비 형태가 하나로 정해져있어 메시지 시스템 없이 재처리를 구현하기가 간단했기 때문이다. 아키텍..
-
보안 초보의 라이브 게임 보안 설계 이야기Architect 2023. 9. 26. 02:43
블록체인 게임사의 CTO로 일할 때, RPG 게임을 블록체인화 하는 계약을 체결했다. 블록체인 영역은 우리가 개발하고 게임 개발은 상대 개발사가 맡은 뒤 우리 블록체인 플랫폼에서 퍼블리싱 하는 계약이었다. 감사하게도 엑시 인피니티로 인해 P2E 시장의 붐으로 우리는 업비트 상장폐지라는 대형 악재를 맞았음에도 글로벌로 주목을 받게 되었다. 게임 출시 전에 우리 플랫폼에서 NFT 사전판매를 진행했는데 11만개 가량 판매를 완료했다. 여러 라운드로 나눠 진행한 NFT 선착순 판매가 수 초 안에 마감되는 등 당시 한국의 어떤 기업도 내지 못한 독보적인 성과를 냈고, 바이낸스 등 여러 글로벌 회사들이 먼저 우리에게 연락해 오며 다양한 행사에 공식적으로 참가하는 등 우리 프로젝트는 순항 중이었다. 그런데 오픈 전,..
-
DynamoDB 설계를 싱글 테이블로 하는 것이 과연 맞는가?DB 2023. 9. 22. 23:04
DynamoDB을 도입하려고 검토하던 당시에는 참고할 수 있는 레퍼런스가 많이 없었다. 대부분은 AWS에서 직접 작성한 문서와 Best Practice였는데 내가 가장 먼저, 그리고 많이 고민을 하고 레퍼런스를 찾으려고 노력했던 부분은 모델링과 트랜잭션이었다. AWS에서는 DynamoDB의 모델링을 싱글 테이블 디자인으로 하기를 적극 권장하는데 이 글에서는 싱글 테이블 디자인이 무엇인지, 내가 DynamoDB를 서비스의 메인 DB로 채택했지만 AWS의 권고에도 불구하고 싱글 테이블으로 디자인 하지 않은 이유에 대해 설명하고자 한다. 싱글 테이블 디자인 관계형 DB나 NoSQL 기반으로 테이블 설계를 해본 사람들에게는 행-열 식의 테이블이 눈에 매우 익숙할 것이다. 간단한 정보만 포함되어 있는 상품 테이블..
-
AWS CloudFront에서 CloudFlare로 이관한 후기Cloud Computing 2023. 9. 20. 03:13
2023년 6월, 여러 게임의 편의 기능을 제공하며 유저를 조금씩 모아보겠다는 취지로 사이드 프로젝트를 개발하여 오픈했다. 개발 시간은 1.5일 정도 걸렸지만 오픈한지 한 달이 되던 때에 하루에 700~800명 정도가 사용하고, 리텐션은 40%가 살짝 넘는 지표를 오가닉으로 만들어냈다. 지표는 점점 성장 중이었고, 서비스 확장에 대한 고민을 하며 하루를 보내던 중 충격적인 문자메시지를 받았다. 당시 이미지와 같은 리소스 크기가 비교적 큰 것들은 AWS 외부의 호스팅을 이용했고, 서버 연동이 일체 없는 정적 웹사이트를 호스팅해서 서비스 중이었다. CloudFront 및 S3의 비용은 굉장히 넉넉하게 프리티어의 선을 넘지 않을 것이라고 생각했기에 어떠한 모니터링도 진행하지 않았다. 과금 메시지를 보고 당황해..
-
Node.js에서 스케줄러 Graceful Shutdown 시키기Programming Language/JavaScript 2020. 10. 3. 15:24
Node.js에는 대표적인 스케줄러 모듈로 node-schedule과 node-cron이 있다. 단순히 스타 수와 사용자가 많다는 이유로 node-schedule을 사용하고 있었는데 node-schedule을 사용하면서 문제가 생겼다. 스케줄러 특성상 실시간 HTTP API에서 서비스 DBMS와 트랜잭션이 힘든 기능들을 실행하는 경우가 자주 있는데(외부 서비스 연동 등) 시스템에서 인터럽트를 발생시키면 동작 중인 코드가 다 실행되는 것을 기다리는 것이 아닌 그냥 종료시키는 것이었다. node-schedule 코드를 잠깐 확인해 보니 이런 상황을 방지하기 위해선 모듈 외부가 아닌 내부에서 처리를 하던가, API를 추가해야 하는 듯 했다. 그래서 이런 기능을 추가하여 컨트리뷰션 해도 되는지 이슈를 남겼는데 ..
-
파이썬의 메모리 관리Programming Language/Python 2019. 12. 6. 18:14
참고 - https://github.com/python/cpython - https://devguide.python.org/compiler/ 파이썬은 메모리 관리를 쉽게 하기 위해 PyArena와 Arena라는 것을 사용한다. 이 둘의 차이는 PyArena는 파이썬 코드를 AST로 컴파일한 객체의 메모리 관리를 위해 사용되는 것이고,(.py 파일을 실행할 때 사용됨) Arena는 실제로 우리가 생각하는 객체의 메모리 관리에 사용한다. 그렇다고 둘이 아예 분리해서 생각하면 안 된다. PyArena에서 사용되는 객체(변수, 상수 등 a_objects에 저장)는 Arena에서 관리되기 때문이다. PyArena는 pyarena.h/pyarena.c에 상당히 깔끔한 코드로 구현되어 있고, Arena는 비교적 지저..
-
EOS 스마트 컨트랙트 개발환경 구축Blockchain 2018. 11. 26. 00:08
스마트 컨트랙트를 발행하기 전에, 개발환경 설정을 해야 합니다. contracts 라는 이름의 작업할 디렉토리를 생성하고 경로를 복사합니다.mkdir contracts cd contracts pwd | pbcopy docker로 eos를 설치하고 실행합니다.docker pull eosio/eos:v1.4.2 docker run --name eosio \ --publish 7777:7777 \ --publish 127.0.0.1:5555:5555 \ --volume /Users/baekchangmyeong/contracts:/Users/baekchangmyeong/contracts \ --detach \ eosio/eos:v1.4.2 \ /bin/bash -c \ "keosd --http-server-ad..
-
[Python] arsenic을 이용한 웹 크롤링Programming Language/Python 2018. 9. 6. 02:45
브라우저 제어로 크롤링을 한다면 보통 Selenium을 사용합니다.하지만 Python Selenium은 Sync Syntax로 동작합니다. 병렬로 크롤링을 하려면 프로세스를 여러 개 실행시키거나, 스레드를 생성해야 하는 번거로움이 있습니다. arsenic은 async/await syntax 를 지원하므로 기존 async function을 호출하는 방식과 동일하게 Async programming을 할 수 있습니다.속도에는 영향이 크게 없지만 AsyncIO Project에서 같은 syntax를 사용하여 Selenium과 동일한 방식으로 크롤링 가능하다는 이점이 있습니다. arsenic은 Python 3.6 이상부터 사용가능합니다.3.6 미만 버전에서 설치하고 실행하면 3.6 버전에서 추가된 문법으로 인해 S..