일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바
- Overloading
- Python
- HP
- ListView
- 코틀린
- js
- golang
- Array
- var
- node.js
- Kotlin
- 노트북
- 자바스크립트
- 노트북 추천
- adapter
- go
- as?
- javascript
- 싱글 스레드
- 안드로이드
- 배열
- Android
- 오버로딩
- 함수
- 연산자
- 패널 교체
- 파이썬
- 리스트 뷰
- Java
- Today
- Total
목록전체 글 (98)
Bbaktaeho
개요특정 블록체인 데이터를 인덱싱하기 위해 재단에서 제공하는 오픈소스 인덱서를 사용 중이었다. 인덱서는 Rust로 구현되어 있으며 PostgreSQL에 데이터를 인덱싱한다.인덱서는 프로세싱 기준마다 서로 다른 프로세서로 분리되며 서로 의존 없이 배포가 가능하다.모든 프로세서를 구동했을 때 약 70개의 테이블에 데이터를 적재하고 있었고 테이블은 모두 단일 테이블이었다.점점 증가하는 블록체인의 데이터 때문에 테이블은 매우 무거워졌으며 row 개수도 100억 개가 넘는 테이블도 존재했다. PostgreSQL의 특징 중 VACUUM 이라는 중요한 특징이 있다.보통 자동으로 해당 작업을 진행하면서 데이터베이스 팽창을 막고 쿼리 계획에 이점을 제공한다.하지만 테이블이 커지면서 VACUUM 자체의 성능도 나빠지기 시..
들어가며 현재 Go 언어에서 range에 관련해서 새로운 변화가 생기고 있습니다. 새로운 Go 버전에서 변화된 range를 받아들이기 전에 기존 range에 대해서 자세히 파악할 필요가 있어 이번 기회에 정리하려고 합니다. 이 글은 Go 100가지 실수 패턴과 솔루션 도서를 참고해서 작성되었으며 자세한 내용은 도서를 확인해 주세요. range Go 언어에서 반복하는 로직을 작성하기 위해서 for 키워드만 존재합니다. 보통은 range 키워드와 같이 사용하게 되는데 range가 값을 대입하는 과정을 모르고 사용하다가 실수가 발생하곤 합니다. 어떤 실수들이 존재하는지 예시를 통해 확인해보겠습니다. 개념 range는 index나 종료 조건을 다룰 필요가 없어서 반복하는 로직을 작성하는데 편리합니다. 또한 ra..
들어가며 방대한 양의 데이터가 생성되면서 기존의 데이터베이스들의 데이터를 쪼개서 저장하게 되었습니다. 여기서 기존 데이터베이스들은 관계형 데이터베이스를 의미하며 이들은 태생적으로 분산 처리에 어려움이 있었습니다. 이로 인해 새로운 NoSQL이라는 DBMS들이 개발되었고 많은 기업들에서 도입하기 시작되었다고 하네요. NoSQL 중에서 서비스의 주축 데이터베이스로 가장 많이 선택되는 게 DocumentDB입니다. 가장 사용량이 많은 MongoDB를 중심으로 공식 문서를 통해 DocumentDB를 알아보도록 하겠습니다. Document database (Document-oriented database) 도큐먼트 데이터베이스는 도큐먼트 지향 데이터베이스로 불리기도 합니다. 도큐먼트 데이터베이스는 스키마가 없는 ..
들어가며 최근 데이터베이스의 여러 종류를 찾아보다가 시계열(time series) 데이터베이스를 처음 접하게 되었습니다. 가장 대표적인 데이터베이스로 influxDB가 있었는데요, 전체 데이터베이스에선 29위이지만 시계열 부분에선 1위입니다. 생소한 데이터베이스라 내가 앞으로 적용시킬 수 있는 부분이 있는지 조사해보도록 하겠습니다. 시계열 데이터베이스 (TSDB) 위키백과에서 시계열 데이터베이스는 하나 이상의 시간과 하나 이상의 값 쌍을 통해 시계열을 저장하고 서비스하는데 최적화된 데이터베이스라고 합니다. 여기서 시계열은 일정 시간 간격으로 배치된 데이터들의 수열을 뜻합니다. 시계열 데이터베이스는 시간이 지남에 따라 만들어진 데이터들로 구성되므로 시간 경과에 따른 변화를 추적하는데 용이하며 분석에 특화되..
2022-11-10: 채널도 내부에서 mutex 이용 들어가며 동시성 프로그래밍을 할 때 독립적인 로직이 아니라면 예기치 못한 오작동을 맛볼 수 있습니다. 심하면 에러를 추적하기도 어려운데요. 특히 여러 고루틴을 수행 후 결과를 slice로 가져올 때 바로 문제에 직면할 수 있었습니다. 이번 글에서 여러 고루틴에서 로직이 수행된 후 slice에 안전하게 append 하는 법을 알아보겠습니다. 단순하게 작성한 코드 단순하게 slice를 선언하고 고루틴에 slice를 append 하도록 코드를 짜 보면 어떨까요? func main() { size := 10 arr := make([]int, 0, size) var w sync.WaitGroup w.Add(size) for i := 0; i < size; i+..
들어가며 Ethereum 네트워크에 배포된 컨트랙트로 트랜잭션을 전송할 때 트랜잭션이 실패하는 경우가 있습니다. 일반적인 Gas, Nonce의 문제가 아닌 컨트랙트에서 작성된 코드(require, error, revert 등)에서 에러가 발생할 수 있는데요. 이때 error에 대한 이유를 코드에 작성하게 되는데 이를 Revert reason이라고 합니다. 이번 글에서 컨트랙트로 전송한 실패한 트랜잭션이 어떤 이유로 실패했는지 알아보겠습니다. 테스트용 컨트랙트 여러 에러를 작성한 컨트랙트를 구현해서 테스트하겠습니다. // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; contract RevertContract { error MyError(address se..
[2022-12-26] infura에서 batch call의 method 목록을 모두 요청 횟수로 카운트되게 수정되었습니다. 또한 batch call의 카운트까지 포함되어 method list + 1 로 카운트됩니다. 들어가며 Ethereum 클라이언트 앱을 개발하다 보면 INFURA를 많이 이용하게 됩니다. INFURA는 하루 10만 건의 요청을 무료로 제공해주며 유료로 사용할 땐 더 많은 요청 횟수를 제공받습니다. 개발할 때 요청 횟수도 신경 쓸 수밖에 없는데요. JSON-RPC 표준에서 한 번의 요청으로 여러 method를 처리할 수가 있습니다. INFURA 또는 RPC Node는 단 한 번의 네트워크 I/O가 발생하게 되어 매우 유용한 기능입니다. 유료 요금제를 사용한다면 요금도 줄일 수도 있구요..
들어가기 전에 Web 서비스에서 Database는 데이터 저장소뿐만 아니라 서비스 성능에도 중요한 부분입니다. DML 쿼리 작성, Table 용량 및 Index등의 여러 요소가 있지만 이번 글에서 다룰 내용은 Connection입니다. Connection을 Go 언어의 MYSQL Driver에서 어떻게 다루는지 살펴보고 Go언어에서 대표 ORM인 GORM에서 어떻게 Connection Pool을 관리하는지 알아보겠습니다. Connection 먼저 Connection이란, Application과 Database Server와 상호 작용을 위한 연결을 유지하기 위해 생성되는 구조(객체)입니다. Database Server와 연결을 맺고 끊음을 반복함으로써 Connection을 관리하지만, 일련의 맺고 끊음의..