전체 글

5%라도 남기자
Blockchain

EVM 아키텍쳐와 동작 과정

EVM 아키텍처와 동작 과정을 자세히 알아보고자 글을 작성합니다. 또한, 해당 글은 이더리움 Docs에서 소개하는 Ethereum EVM illustrated PPT의 내용을 참고 및 인용하여 작성되었습니다. 들어가기에 앞서 먼저 헤매지 않기 위해 선수 지식이 필요합니다.키워드 : Memory, Stack, Smart Contract, Merkle tree, etc... EVM은 왜 필요한가?비트코인은 UTXO 모델과 제한된 스크립팅 언어를 사용해 단순한 송금 조건만 검증할 수 있었기 때문에, 반복문이나 동적 메모리/상태 저장 같은 복잡한 로직을 온체인에서 실행할 수 없었습니다. 이로 인해 분산형 거래소나 DApp은 비트코인 네트워크 위에서 전적으로 운용될 수 없었고, 항상 외부 서버나 오프체인 로직에 ..

Blockchain

이더리움 계정 기반 상태(EOA, CA)

들어가기 앞서 해당 글의 내용과 사진들은 은 Ethrerum Docs에서 제공하는 Ethereum EVM illustrated PDF를 참고 및 인용하여 작성된 글임을 밝힙니다. 이더리움의 계정 기반이란?쉽게 표현하면 아래와 같은 사진들로 표현이 가능합니다. 각 고유한 주소(계정)마다 해당 계정의 상태를 매핑하고 있는 관계로써 존재합니다. 각 계정은 고유하기 때문에 객체가 될 수 있으며 Table처럼 표현할 수도 있습니다. 계정 상태에는 어떤 것이 들었는가?Account state에는 nonce, balance, storage hash, code hash 등이 존재합니다. 각 필드들은 아래와 같이 설명이 가능합니다.nonce : 트랜잭션을 처리할 때 또는 계약 생성시 사용하는 숫자입니다. 1씩 증가하는..

Blockchain

PBFT 합의는 왜 두 번의 절차를 거쳐야만 할까?

PBFT 합의 과정을 살펴보다가 왜 꼭 두 번의 합의를 거쳐야 하는지 의문이 들어 자료들을 찾아보게 되었다. PBFT란?PBFT란 악의적인 노드, 배신자 노드가 f개 존재할 때, 총 노드 개수가 3f + 1개 이상이면 해당 네트워크에서 이루어지는 합의는 신뢰할 수 있다는 것을 수학적으로 증명한 알고리즘이다. 아래와 같이 각 단계가 나뉜다. 1. request : Client는 상태 변환을 요청하는 Request Message m을 Leader (Primary Node)에 전송한다. - Leader(Primary Node) : 처음 상태변환 요청을 받은 노드, 그림에서는 1번 노드를 의미 2. Leader(Primary)가 요청을 받으면 먼저 Pre-prepare라는 절차를 시행한다.해당 요청에 대응하는..

Blockchain

Kurtosis, blockscout 알아보기

해당 글에서는 이더리움 테스트넷을 구성하기 위해 Kurtosis와, bloskcout의 개념을 알아본다. Kurtosis1. 무엇인가?Kurtosis란 분산 시스템에서 복잡한 로컬 개발 테스트 환경을 한 번에 띄우고 관리할 수 있도록 도와주는 오픈소스 프레임워크이다.ex) API 서버, 메시지 브로커, DB, 대시보드 등을 지원한다.2. 왜 사용할까?여러 컨테이너를 일일이 docker compose로 띄우려면 연결을 설정하는 일이 번거롭다.이러한 번거로움을 자동화하여 해결하며 실제 환경인 것처럼 재현이 가능하다.예를 들어 아래 처리 Kurtosis의 yml을 구성한다면 Geth를 Client로 하고 CL을 Lighthouse로 한 노드를 띄운다.여기서 중요한점은 포트포워딩을 안 했다는 것이다. Kurto..

Blockchain

타원곡선 개인키/공개키 생성 & Go-Ethereum 내부 코드 살펴보기

개인키개인키는 무작위로 생성한 256bit 길이의 숫자로 구성된다.단 타원곡선의 위수인 1.158 * 2⁷⁷ 보다 작아야 한다. 대략 이 값은 2²⁵⁶보다 약간 작은 값이다.위수란 해당 타원곡선의 정의된 유한체에서 타원곡선의 위의 점의 개수를 의미한다.쉽게 말해 타원곡선 위의 모든 점의 개수이다. 벼락을 13번 연속으로 맞을 확률개인키를 생성하는 과정에서 다른 사용자와 내 개인키가 중복될 수도 있지 않을까 생각해 볼 수 있다. 하지만 2²⁵⁶은 정말 어마어마한 숫자다. 이를 10진수로 표현하면 약 10⁷⁷정도 된다.예를 들어보자면 벼락에 맞을 확률은 8.2 ×10⁻⁷이다. (미국 NOAA 기준). 하지만 개인키가 중복 생성될 확률은 8.64 ×10⁻⁷⁸이다.즉, 길을 걸어 다니다 연속으로 벼락을 13번 ..

스프링

[Spring] 좋아요 동시성 이슈 비관적 락부터 캐싱 & 비동기 처리까지

들어가기에 앞서해당 글은 좋아요 기능의 동시성 문제를 비관적 락에서 부터 캐싱, 비동기를 추가해 해결한 과정을 담고 있다.직접 성능 테스를 통해 어떤 병목지점 때문에 성능 저하가 생기는지 확인하였으며,기존 비관적락 -> 캐싱 + 비동기로 약 200배 성능개선 효과를 확인하였고 검증 했다.문제에 들어가기 전 설명어떤 문제가 있었는지 설명하기 전에 연관관계를 봐보자위와 같이 좋아요를 누르면 좋아요 테이블에 [글 ID, 회원 ID]가 FK이자 복합키로 들어가게 된다.테스트는 1번글에 회원 1,000명이 좋아요를 동시다발적으로 누른다고 가정했다. 상식적으로는 당연히 1번 글의 좋아요 개수가 1,000개가 되고 좋아요 테이블도 1,000개의 칼럼이 생성될 것이다.문제 상황참고로 해당 표의 단계는 위의 코드와 동일..

CS/데이터베이스

[DB] RDS Aurora가 아닌 MySQL Engine 읽기 전용 부하 분산

들어가기에 앞서이전부터 관심 있던 부하 분산이라는 주제로 RDS 읽기 전용 복제본을 생성해 트래픽을 분산시키는 작업을 진행했다. 하지만 RDS Aurora가 아니라 MySQL Engine을 이미 선택해 마이그레이션 하기에는 비용 걱정과 운영 걱정이 이만저만이 아니기 때문에.. 애플리케이션 단에서 스케쥴링을 하는 방법을 찾았다.먼저 아키텍쳐는 아래 그림과 같이 설계했다. 여기서 마스터 RDS를 1개 더 추가하여 구성할 수 있지만, 그렇게 하려면 단일 DB 인스턴스가 아닌 다중 AZ DB 인스턴스로 구성해야 한다. (*다중 AZ DB란 쉽게 고가용성을 위해 예비 DB 인스턴스를 자동 구성해 주며, fail-over기능도 제공한다.)다중 AZ DB 인스턴스로 구성한다면 직접 fail-over를 구현하지 않아도..

CS/운영체제

[운영체제] Docker는 MacOS, Windows 어디서 더 빠른가?

들어가기에 앞서해당 글은 OS Study 도중 생겼던 의구심을 해결하고자 자료를 수집하고 해석한 글이다.1. Mac OS에서 Windwos Docker Image를 띄울 수 있을까?먼저 Docker 즉, Container란 무엇인가 알아볼 필요가 있다. 실행 중인 컴퓨터의  커널에 라이브러리, 실행파일을 격리하고, 이 공간 내에 독립된 프로세스 및 네트워크를 실행시키는 기술과 이를 위한 소프트웨어 구성 일체를 이야기한다. 같은 버전 커널에서 동일한 동작을 보장한다. (출처 : 나무위키) 가상머신(VM)과 가장 큰 차이는 자원 사용 방식에 있다.컨테이너는 Hpyervizor와 Guest OS를 포함하지 않는다. 즉, 컨테이너에는 OS가 포함되지 않는다.우리가 사용하는 OS는 상당한 리소스(컴퓨터 자원)가 ..

Sleeg
5% 남기기