go를 사용하다 보면 문자열과 바이트 슬라이스를 상호 변환하여 사용해야 되는 경우가 자주 발생합니다. 특히 io.Writer 인터페이스의 Write 메서드가 인수로 바이트 슬라이스를 넘겨받기 때문에 더 그런 것 같습니다. 문자열을 바이트 슬라이스로 변환하거나 바이트 슬라이스를 문자열로 변환하는 방법은 여러 가지가 있습니다. 이번 게시물에서는 각 방법들을 살펴보고 벤치마킹을 통해 성능을 비교해 보겠습니다. 1. string -> []byte 변환 1.1 Type Conversion // 1. 타입 컨버젼을 사용하는 방법 func StringToBytesConversion(s string) []byte { return []byte(s) } 타입 컨버젼을 사용하는 방법은 문자열을 []byte()로 감싸주면 됩..
😪 잠자는 이발사 문제란? '잠자는 이발사 문제'는 운영체제의 프로세스 간 통신과 그들의 동기화 문제를 직관적으로 설명하기 위한 문제입니다. 잠자는 이발사 문제는 다음과 같이 정의됩니다. 이발사: 이발사는 고정된 개수의 대기석이 있는 바버샵으로 출근합니다. 대기 중인 손님이 있다면 손님을 이발 의자에 앉혀서 이발을 해 주고, 대기 중인 손님이 없다면 이발사는 낮잠을 잡니다. 손님: 손님은 이발을 받으러 바버샵에 갑니다. 이발사가 다른 손님을 이발하고 있다면 대기석으로 이동합니다. 대기석이 비어있으면 빈자리에 앉아서 기다리고, 그렇지 않다면 바버샵을 나갑니다. 이발을 받을 차례가 된 손님은 이발 의자로 이동하며 이발사가 자고 있다면 이발사를 깨웁니다. 문제: 이발사와 손님의 행동 시간이 확실하게 구분되어 ..
🍝 식사하는 철학자들 문제란? '식사하는 철학자들 문제'는 병렬 컴퓨터 시스템에서 발생하는 공유 자원 접근 문제를 직관적으로 설명하기 위한 문제입니다. 식사하는 철학자들 문제는 다음과 같이 정의됩니다. 철학자들: 다섯 명의 철학자가 동그란 식탁 주위에 둘러앉습니다. 포크: 각 철학자들 사이에 포크가 하나씩, 총 다섯 개의 포크가 식탁 위에 있습니다. 생각과 식사: 철학자들은 생각하는 시간과 식사하는 시간을 번갈아 가며 보냅니다. 생각 중에는 포크를 사용하지 않고, 식사 중에는 왼쪽과 오른쪽에 놓여 있는 두 개의 포크를 사용해야 합니다. 문제: 철학자가 식사를 하기 위해서는 자신의 왼쪽과 오른쪽에 있는 두 개의 포크가 필요하지만, 포크는 공유 자원이기 때문에 만약 모든 철학자가 동시에 식사를 시작하려고 하..
본 게시글에서는 저서 '밑바닥부터 시작하는 비트코인'의 Python으로 작성된 예제 코드를 Go로 컨버팅 하여 작성하였습니다. 📺 시리즈 2023.08.25 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 1장 유한체 2023.08.27 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 2장 타원곡선 2023.08.30 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 3장 타원곡선 암호 2023.09.02 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 4장 직렬화 2023.09.05 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 5장 트랜잭션 2023.09.11 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 6장 스크립트 20..
본 게시글에서는 저서 '밑바닥부터 시작하는 비트코인'의 Python으로 작성된 예제 코드를 Go로 컨버팅 하여 작성하였습니다. 📺 시리즈 2023.08.25 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 1장 유한체 2023.08.27 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 2장 타원곡선 2023.08.30 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 3장 타원곡선 암호 2023.09.02 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 4장 직렬화 2023.09.05 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 5장 트랜잭션 2023.09.11 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 6장 스크립트 20..
본 게시글에서는 저서 '밑바닥부터 시작하는 비트코인'의 Python으로 작성된 예제 코드를 Go로 컨버팅 하여 작성하였습니다. 📺 시리즈 2023.08.25 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 1장 유한체 2023.08.27 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 2장 타원곡선 2023.08.30 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 3장 타원곡선 암호 2023.09.02 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 4장 직렬화 2023.09.05 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 5장 트랜잭션 2023.09.11 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 6장 스크립트 🐱..
본 게시글에서는 저서 '밑바닥부터 시작하는 비트코인'의 Python으로 작성된 예제 코드를 Go로 컨버팅 하여 작성하였습니다. 📺 시리즈 2023.08.25 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 1장 유한체 2023.08.27 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 2장 타원곡선 2023.08.30 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 3장 타원곡선 암호 2023.09.02 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 4장 직렬화 2023.09.05 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 5장 트랜잭션 🐱👤 전체 코드 GitHub - piatoss3612/bitcoin-from-scratch: 밑바..
깃허브 프로필(README.md)이 이미 존재한다는 가정하게 글을 작성하였습니다. 📝 준비물 깃허브 프로필 (본인의 깃허브 닉네임과 동일한 이름의 저장소) 블로그 RSS Feed go v1.21.0 🐱👤 전체 코드 GitHub - piatoss3612/piatoss3612 Contribute to piatoss3612/piatoss3612 development by creating an account on GitHub. github.com 🔧 초기 설정 일단 본인의 깃허브 닉네임과 동일한 이름의 저장소를 git pull 또는 git clone 명령어를 사용하여 내려받습니다. 내려받은 디렉터리로 이동하여 초기 설정을 시작합니다. $ ls README.md 초기 상태는 아마 README.md 파일만 존재하..
본 게시글에서는 저서 '밑바닥부터 시작하는 비트코인'의 Python으로 작성된 예제 코드를 Go로 컨버팅 하여 작성하였습니다. 📺 시리즈 2023.08.25 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 1장 유한체 2023.08.27 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 2장 타원곡선 2023.08.30 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 3장 타원곡선 암호 2023.09.02 - [블록체인/비트코인] - 밑바닥부터 시작하는 비트코인 - 4장 직렬화 🐱👤 전체 코드 GitHub - piatoss3612/bitcoin-from-scratch: 밑바닥부터 시작하는 비트코인을 읽고 Go로 구현해보는 프로젝 밑바닥부터 시작하는 비트코인을 읽고 G..
블록체인은 P2P(Peer to Peer) 네트워크를 통해 관리되는 분산 데이터베이스의 한 종류입니다. 따라서 거래 정보가 담긴 장부를 중앙에 존재하는 단일 서버에 저장하는 대신, 네트워크로 연결된 여러 컴퓨터에 분산하여 저장하는 분산 원장이기도 합니다. 여기서 P2P, 분산 데이터베이스, 분산 원장 등 생소할 수 있는 키워드들이 등장했습니다. 블록체인은 이보다 많은 기술들의 집합체이기 때문에 블록체인을 이해하기 위해서 그 기반에 있는 기술들을 이해할 필요가 있습니다. 이번 글에서는 우선 분산 데이터베이스와 분산 원장에 대해 간단하게 다뤄보겠습니다. 분산 데이터베이스란? 저장소(또는 노드)들이 물리적으로 떨어져 있으나, 네트워크를 통해 연결되어 있어 하나의 DBMS(Database Management S..