전체 글
[블록체인] Ethereum 채굴과 송금
채굴 이더리움에서 채굴보상은 coinbase 계정으로 들어가게 되며 coinbase 계정을 따로 지정해주지 않을 시 0번째 계정이 coinbase 계정으로 지정됩니다. miner.start(스레드의 수)를 명령어로 두고 실행을 하게 되면 채굴을 하게 됩니다. miner.stop()은 채굴을 멈춥니다. miner.start(1)로 하여 하나의 스레드로 채굴을 해보겠습니다. 우선 geth console을 실행합니다. geth --rpc --rpcport "8485" --rpccorsdomain "*" --datadir . --port "30303" --nodiscover --maxpeers 0 --rpcapi "eth,net,web3" --networkid 8585 --nousb console 2>> ~/e..
[블록체인] Ethereum Geth 설치
이번 포스팅에서는 Ethereum Geth를 설치해보겠습니다. 제가 개발한 환경은 Ubuntu 18.04 LTS, Windows Terminal입니다. 다운로드 방법은 여기를 참고해주세요. 리눅스 계정 생성 리눅스 계정을 먼저 만들어보겠습니다. sudo adduser ethereum sudo usermod -aG sudo ethereum su - ethereum Geth 설치 Geth의 설치는 간단합니다. 깃허브에서 소스코드를 다운로드 후 go-ethereum 경로에 들어가서 make geth 명령어만 실행해주면 됩니다. 하지만 make 명령어를 사용하여 geth를 컴파일 하기 전에 1.13 버전 이후의 Go, C 컴파일러가 필요합니다. 이 부분이 어렵기 때문에 특정 버전의 ppa를 다운로드 받아서 진행..
[블록체인] Bitcoin 트랜잭션 전송과 확인
이번 포스팅은 이전 글에 이어 비트코인 송금을 통해 트랜잭션을 일으키고 확인해보겠습니다. luna 노드의 address에서 pine 노드의 address에 25 비트코인을 송금해보도록 하자. 비트코인 송금을 위해서는 luna 노드는 address를 만들고 채굴을 통해 비트코인을 채워야 한다. pine 노드도 비트코인을 송금받기 위한 address가 필요하므로 luna, pine 모두 address를 하나씩 만들어보자. # luna 노드의 address 생성 bitcoin@DESKTOP-82KRV15:~/bitcoin/node3$ bitcoin-cli -rpcuser=luna -rpcpassword=luna -rpcport=1111 getnewaddress # 생성된 luna 노드의 address bcrt..
[블록체인] Bitcoin P2P Network 구성하기
이전 글에 이어 하나의 로컬 컴퓨터에서 3개의 regtest 네트워크를 실행한 이후 각각의 네트워크를 P2P 방식으로 연결해보겠습니다. 노드를 띄우기 위해서는 여러 설정값들이 필요한데 주로 쓰이는 설정값에 대해 먼저 알아보겠습니다. 노드 설정값 풀 인덱스 노드를 위한 설정값 alternotify 스크립트나 명령어를 실행시켜 이메일 등을 통해 긴급 정보를 보내는 명령어이다. datadir 설정값 없이 bitcoind -regtest를 실행하였을 때 기본적으로 이 위치는 .bitcoin이 된다. 이 경로에 regtest 폴더가 생성되게 되며 각 노드가 모든 블록체인 데이터를 저장하는 공간이 이곳이다. 이번 실습에서는 datadir에 각각 node1, 2, 3의 경로를 담아서 각 노드마다 블록체인 데이터를 저..
[블록체인] Bitcoin 지갑과 주소
이번 포스팅은 비트코인 지갑과 주소에 대해 알아보겠습니다. tree 명령어로 .bitcoin 디렉토리의 구조를 살펴본다. tree가 설치되어 있지 않다면 sudo apt install tree 명령어로 설치하면 된다. /.bitcoin/regtest/wallets/wallet.dat 파일이 털리면 개인키가 털리므로 조심해야 한다. 지갑 정보 조회 bitcoin-cli -regtest getwalletinfo 해당 지갑은 regtest 네트워크를 생성할 때 만들어진 default wallet이다. walletname이 ""인 부분은 bitcoind를 실행할 때 지갑 목록을 bitcoin.conf나 설정값을 주어서 추가할 수 있다. hdseedid 부분은 HDseed에 해시(Hash 160)를 적용한 것이다..
[블록체인] Bitcoin Core 실행과 Genesis Block
비트코인 네트워크는 메인넷, 테스트넷, 로컬 테스트넷(regtest)으로 나뉜다. 메인넷은 실제 비트코인을 주고 받는 네트워크이다. 테스트넷은 주로 개발자들이 블록체인 관련 개발을 하고 테스트를 할 때 사용하는 네트워크이다. 비트코인에 가치가 없으며 채굴의 난이도가 낮다는 특징이 있다. 로컬 테스트넷(regtest)은 개인 로컬 컴퓨터에서 노드를 생성하여 여러가지 테스트를 해볼 수 있는 네트워크이다. 이번 포스팅에서는 레그테스트(regtest) 모드를 이용하여 제네시스 블록을 생성하는 과정부터 새로운 참여자가 추가되는 것까지 테스트하고자 한다. regtest 네트워크 생성 레그테스트 모드를 사용하는 방법은 아래와 같다. # 먼저 bitcoin 디렉토리로 이동해야 한다. bitcoind -regtest 위..
[블록체인] Bitcoin Core 설치
Microsoft store에서 아래 파일 2개 설치 1. Ubuntu 18.04 LTS 2. Windows Terminal Windows Terminal에서 우분투 실행하여 아래 명령어 수행하여 계정 생성 1. sudo adduser [계정명] 2. sudo usermod -aG sudo [계정명] -> 새로 만든 계정에 관리자 권한을 부여한다. 3. su - [계정명] -> 새로 만든 계정으로 로그인 bitcoin core 설치 전 기본적인 셋팅 진행 1. sudo apt-get update 2. sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils python3 3. sudo apt-get..
[Jackson] 민감한 데이터를 JsonProperty를 통해 serialize, deserialize 하는 방법
안녕하세요. 이번 포스팅은 클라이언트가 정보를 조회했을 때 모든 데이터를 보여주는 것이 아닌 Jackson 라이브러리를 사용해서 필요한 데이터만 보여주는 방법에 대해 소개하겠습니다. 아래의 User 클래스가 있다고 가정하겠습니다. @Data // lombok public class User { private int id; private String userId; private String password; } 클라이언트가 어떤 회원에 대한 정보를 조회하기 위해 GET 요청을 했을 때 아무런 조치를 하지 않는다면 id, userId, password를 모두 조회할 수 있게 됩니다. password는 중요한 정보이기 때문에 보여주면 문제가 발생합니다. 스프링부트에서는 Jackson 라이브러리를 기본적으로 갖..
[스프링] MultipartFile 인터페이스를 활용한 다중 파일 업로드
과거엔 HttpServletRequest 인터페이스를 상속받은 MultipartHttpServletRequest 인터페이스를 활용하여 파일을 업로드 할 수 있었습니다. MultipartHttpServletRequest를 사용해서 파일 업로드를 구현할 수 있지만 스프링이 제공해주는 MultipartFile 인터페이스를 활용함으로써 더욱 쉽게 파일을 단일, 다중으로 업로드를 할 수 있습니다. 공통적으로 사용하는 HTML은 아래와 같습니다. 타임리프를 사용했습니다. 상품 등록 폼 상품 입력 상품명 파일 파일2 파일을 2개 보낼 수 있습니다. type은 file로 해야 MultipartFile이 인식을 할 수 있으며 각각의 파일을 구분지어야 하므로 name은 file, file2로 달라야 합니다. input 옵..
[리눅스] logrotate를 사용하여 날짜별 tomcat 로그 관리하기
스프링 웹 애플리케이션을 운영하는 경우에는 톰캣을 직접 설치(외장 톰캣)하고 catalina.sh을 커스터마이징함으로써 날짜별로 로그를 관리할 수 있습니다. 하지만 스프링부트 웹 애플리케이션을 운영하는 경우에는 내장 톰캣 방식이라 catalina.sh을 커스터마이징 하기가 힘듭니다. 스프링 부트는 백그라운드로 배포할 때 명령어를 아래와 같이 사용합니다. nohup java -jar demo-0.0.1-SNAPSHOT.jar & nohup 명령어를 사용해서 배포를 할 때 로그가 저장되는 경로 및 로그 파일명을 지정하지 않으면 현재 위치에서 아래처럼 nohup.out으로 저장이 됩니다. 로그가 저장되는 경로 및 로그 파일명을 지정하려면 아래처럼 하면 됩니다. (단, 로그 파일을 저장하려는 경로는 존재한 상태..