Pangyoalto

Pangyoalto

[논문 리뷰] ColBERT, ColBERTv2
Paper

[논문 리뷰] ColBERT, ColBERTv2

[요약] ‌1. IR의 랭킹 방법은 BM25가 널리 쓰이고 있지만 2016년부터 Neural Network를 사용한 랭킹 방법들이 등장하기 시작했다. 2. Neural IR은 대체로 높은 MRR을 보여주었지만 계산이 비싸다는 단점이 있었다. 특히 BERT는 월등한 MRR을 보이지만 서비스에 적용하기에 너무 느리다. 3. ColBERT는 BERT보다 약간 모자란 MRR을 보이지만 훨씬 빠른 성능을 보여주었다. 4. ColBERTv2는
17 min read
[Blockchain 입문] 개발자를 위한 Why Blockchain
Blockchain

[Blockchain 입문] 개발자를 위한 Why Blockchain

[요약] * 비트코인은 인터넷 결제 시스템에서 처음으로 중앙 주체를 성공적으로 없앤 시스템이다. * 비트코인은 분산 DB의 일종으로 볼 수 있다. 일반적인 분산 DB와 다른 점은 Permissionless 하여 어느 노드든 이 시스템에 참여할 수 있다는 점이다. * 이더리움은 월드 컴퓨터를 표방한다. 화폐 결제 시스템이 목표인 비트코인과 다르다. * 이더리움의 등장으로 web3가 본격적으로 논의되기 시작했다. Web3는
32 min read
[Blockchain] 가버넌스 토큰에 밸류에이션을 할 수 있을까?
Blockchain

[Blockchain] 가버넌스 토큰에 밸류에이션을 할 수 있을까?

[요약] 1. 가버넌스 토큰은 소유권을 가진다는 점에서 web2의 주식과 유사한 성격을 가지고 있다 2. 주식의 경우 대량 매수를 통해 회사의 경영에 깊게 관여할 수 있다. PEF는 이를 통해 회사 자산을 매각하여 배당을 늘리거나 경영을 도와 회사 가치를 키우는 등 여러 전략을 구사한 바 있다. 3. Defi 프로젝트의 경우 시가총액이 자본(
38 min read
[Go] Interface 구현과  Reflection Package
Go

[Go] Interface 구현과 Reflection Package

[요약] * Go의 interface는 내부적으로 한 쌍의 word로 구성된다. 하나는 itable을, 하나는 data를 가리킨다. * Go의 컴파일러는 concrete 타입과 interface 타입마다 메소드 리스트를 작성한다. 런타임 때 이 둘을 조합하여 itable을 생성한다. * Golang의 reflect 패키지는 interface 타입 객체로부터 concrete 타입 및 값을 다룰 수 있도록 도와준다.   * Interface와 reflect 패키지를 활용하면 인자의 타입과 상관
7 min read
[K8s & Github Action] self-hosted-runner를 k8s로 구성해보자
k8s

[K8s & Github Action] self-hosted-runner를 k8s로 구성해보자

[요약] k8s 클러스터 구성 1. k8s 클러스터 구성시 공식 문서에 나와있는 kubeadm 쓰지 말자. 훨씬 편리한 프로젝트들 많이 있다(k0s, k3s). Github Action 1. Github Action은 runner로 자신의 서버를 쓸 수 있는 self-hosted runner를 지원한다. 2. ARC를 사용하면 k8s에 self-hosted runner를 비교적 쉽게 구성할 수 있다. 3. 그러나 ARC는 self-hosted
13 min read
[LLVM & Clang] LLVM 최적화, 어디까지 아시나요?(LTO, PGO, BOLT)
Compiler

[LLVM & Clang] LLVM 최적화, 어디까지 아시나요?(LTO, PGO, BOLT)

[요약] 1. Clang은 LLVM 기반 C/C++/Objective C 오픈소스 컴파일러다. Clang을 사용하면 LLVM의 최적화 기법을 적용하여 프로그램 성능 향상을 이끌어낼 수 있다. 2. C/C++ 외 다른 언어도 맞는 프론트엔드를 사용하면 LLVM을 사용할 수 있다. 3. LTO는 컴파일시 link 단계에서 적용되는 최적화이다. 함수를 사용하는 파일들이 나눠지거나 언어가 달라도 최적화를
27 min read
[RTK Query] useQuery 리렌더링 문제 해결기 - useLazyQuery 사용
Frontend

[RTK Query] useQuery 리렌더링 문제 해결기 - useLazyQuery 사용

[요약] 1. RTK Query의 useQuery는 호출이 되는 시점에 데이터를 fetch한다. 그리고 그 과정에서 컴포넌트의 렌더링이 여러 번 발생할 수 있다. 2. 이로 인해 개발자가 예상하지 못한 시점에 컴포넌트가 렌더링되며 사이드 이펙트가 생길 수 있다. 3. RTK Query의 useLazyQuery를 사용하면 데이터 fetch 시점을 조절할 수 있어 사이드 이펙트를 줄일 수 있다.
8 min read
[도서 리뷰] 인피니트 게임
Book

[도서 리뷰] 인피니트 게임

[요약] 이번 요약은 이 책에서 기억하고 싶은 구절들로 대체하겠다. * 비즈니스라는 무한게임에서 대의명분은 제품이나 서비스보다 더 중요하다. * 제품을 그 무엇보다도 중요하게 여기는 현상은 IT 기업에서 흔히 일어난다. 그렇게 되면 엔지니어나 제품 개발자가 아닌 직원들은 상대적 박탈감을 느끼며 실제로 차별받기도 하는 문제가 발생한다. * 유한게임식 리더는 "좋은 일을 하려면 돈을 벌어야 한다"라고
21 min read
[오픈소스 contribution 도전기] IBC Query
Blockchain

[오픈소스 contribution 도전기] IBC Query

[요약] 디사이퍼, a41에서 팀을 꾸려 오픈 소스 컨트리뷰션을 진행했고, 머지가 되는 성과를 얻었다(22.06 ~ 22.12) 1. 코스모스 IBC는 현재 체인 간 쿼리하는 기능이 없다. 2. 디사이퍼에서 이를 구현하여 contribution을 하려는 팀이 구성되었다. 3. 아키텍처를 설계하였고, 체인 모듈과 릴레이어를 구현하는 소규모 팀으로 다시 나누어졌다. 4. 체인 모듈은 구현 완료하였으나
11 min read
[Ethereum] 상하이 업그레이드에서 무엇이 바뀔까?
Blockchain

[Ethereum] 상하이 업그레이드에서 무엇이 바뀔까?

[요약] 0. 상하이 업그레이드는 23년 3월 예정되어 있다 1. 머지 이전 업그레이드와 다르게 Execution 클라이언트와 Consensus 클라이언트 업그레이드가 동시에 이루어진다 2. 상하이 업그레이드에서 중요한 변경 두 가지는 EVM Object Format(EOF)과 비콘 체인 출금이다. 3. EOF는 EVM에 대한 변경으로 새로운 스마트 컨트랙트 포맷을 정의한다. 4. 비콘 체인 출금은 execution
13 min read
[Go] pprof를 사용해 profiling을 해보자(부제: 당신은 서버 이상 원인을 어떻게 찾으시나요?)
Go

[Go] pprof를 사용해 profiling을 해보자(부제: 당신은 서버 이상 원인을 어떻게 찾으시나요?)

[요약] 1. pprof는 go 어플리케이션을 profiling 해주는 도구이다. 2. go는 go tool에서 pprof를 기본적으로 지원해주기 때문에 쉽게 pprof를 이용할 수 있다. 3. graphviz를 통해 분석을 시각화해서 볼 수 있다. 4. cpu, 메모리, trace 등을 원하는 타겟, 기간에 설정해서 볼 수 있어 이상 원인 파악에 용이하다. pprof란? GitHub - google/pprof:
9 min read
[MEV-Boost] Censorship... wat do?
Blockchain

[MEV-Boost] Censorship... wat do?

이 글은 Jon Charbonneau의 Censorship... wat do? 를 요약 및 저의 생각 및 설명을 일부 추가한 글입니다. [요약] 1. MEV-Boost는 밸리데이터의 탈중앙화를 위해 플래시 봇이 만들었다. 2. 그러나 MEV-Boost는 릴레이어/빌더의 중앙화 문제를 낳았고, 이는 검열 저항성을 해치게 되었다. 3. MEV-Boost에서 검열은 약한 검열이기 때문에 시간이 지나면 검열 대상 트랜잭션도
20 min read
[SSL/TLS] 인증서가 보장해주는 신뢰는 어디까지인가
Web

[SSL/TLS] 인증서가 보장해주는 신뢰는 어디까지인가

[요약] 1. 인증서를 발급받은 서버는 Chain of trust를 통해 Root CA의 신뢰를 상속받을 수 있다. 그러나 인증서 종류에 따라 해당 서버를 신뢰할 수 있는 범위는 제한이 된다. 2. Self signed certificate는 자신이 CA가 되는 것이기 때문에 상속 받을 신뢰가 없다는 문제점이 있다. Self signed certificate는 클라이언트와 서버가 서로 알고 있을
10 min read
[Cosmwasm] Cosmwasm은 처음이지?(2) -  배포 및 실행하기
Blockchain

[Cosmwasm] Cosmwasm은 처음이지?(2) - 배포 및 실행하기

Cosmwasm은 처음이지?(1) - 구성요소 알아보기 와 이어지는 글입니다. [요약] * juno 테스트 네트워크 사용을 위해 juno 클라이언트 설치 및 Public RPC 설정을 진행한다. * rust optimzer를 통해 컴파일된 wasm 바이트 코드의 용량을 줄인다. * 컴파일된 바이트 코드를 배포해보고 init 트랜잭션을 보내본다. [목차] 1. juno 테스트 네트워크 사용 준비 2. cw20 배포 Juno
10 min read
[Cosmwasm] Cosmwasm은 처음이지?(1) -  구성요소 알아보기
Blockchain

[Cosmwasm] Cosmwasm은 처음이지?(1) - 구성요소 알아보기

개발 경험이 있으나 Rust에 익숙하지 않은 사람들을 대상으로 작성된 글입니다. [요약] * 보통 Cosmwasm 스마트 컨트랙트는 contract 모듈, msg 모듈, state 모듈로 이루어져 있다. * contract 모듈이 스마트 컨트랙트의 핵심 로직을 담당하며 나머지 두 모듈은 contract 모듈을 보조하는 역할이다. * contract 모듈은 무조건 instantiate(), execute(), query() 함수를 정의해야 하며 이 세 함수는 entry_
11 min read
[Linux] Slab 메모리 줄이기
Linux

[Linux] Slab 메모리 줄이기

[요약] 1. Slab은 커널 캐시이다. 2. Slab은 SReclaimable과 SUnreclaim으로 나뉜다. 현재 사용하냐, 안하냐 차이다. 3. drop cache를 하면 SReclaimable이 줄어든다. 4. shrink slab을 할 경우 SUnreclaim이 줄어든다. 단, docs에서 shrink slab은 실행 중인 어플리케이션에 영향을 미칠 수 있다고 나와있다. 5. 하지만 SUnreclaim은 커널이 kmalloc 후 release가 안된 것이라 프로세스를 죽인다고
8 min read
[Go] kv 파일 스토리지를 골라보자! (부제: LSM Tree와 B Tree)
Go

[Go] kv 파일 스토리지를 골라보자! (부제: LSM Tree와 B Tree)

[요약] 1. kv storage는 LSM tree로 구현된 것과 B tree로 구현된 것으로 나뉜다 2. LSM tree는 쓰기가 빠르고 B tree는 읽기가 빠르다 3. Go의 KV 파일 스토리지 구현체는 badger, pebble, bbolt가 있다 4. badger와 pebble은 동일 db에 read 프로세스와 write 프로세스가 접근하면 에러가 발생한다. bbolt는 행이 걸린다 이 글에서는 Key-Value
8 min read
[Go] Map 사용시 Read도 RLock을 해야하는 이유
Go

[Go] Map 사용시 Read도 RLock을 해야하는 이유

[요약] * Map에 여러 프로세스가 접근할 때 다른 key에 대해 write을 하더라도 리밸런스로 서로 영향을 미칠 수 있다. * Read시 다른 Key에 write을 하는 프로세스에 영향을 받을 수 있으니 key별로 lock을 걸지 말고 전체 Map에 대해 RLock, WLock을 걸어야 한다. 멀티 프로세스 혹은 여러 고루틴을 이용해 병렬 프로그래밍을 할 때 가장 골치가
5 min read