이더리움에서 트랜잭션이란?

Bosees·2022년 2월 20일
1

블록체인

목록 보기
1/2
post-thumbnail

intro

트랜잭션이란, 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하는 작업의 단위라고 한다. 역시나 컴퓨터공학의 세계. 말이 너무 어려운 거 아닌가??

예를 들어, 은행에 송금시스템을 활용해 이해를 돕자.

A가 B에게 돈 10,000원을 송금 하려고 한다. 내 계좌에 잔액이 있을 수도 있고 없을 수도 있고, 혹은 B에 계좌번호가 잘못되었을 수도 있다. 이때 송금이 잘 되었건 안되었건 이체한 금액만큼 빼는 일과 상대 계좌에 이체한 금액만큼 더하는 과정을 분리하면 안되고 한 스트림 안에서 연결되어야 요청과 응답이 확실하다는 결과를 얻을 수 있다. 만약 실패했다는 가정하에 프로세스가 분리된다면 전송은 실패했지만 내 계좌에서 돈이 빠져나갈 수 있는 상황이 올 수 도 있다. 한 번에 보장할 수 있는 최소 사이클을 "트랜잭션" 이라고 한다.

여담으로 은행에서 이러한 송금 시스템이 안전하다라고 보장할 수 있는 특징을 법적으로 갖추어야 하는데 이걸 줄여서
ACID라고 한다.

  • 원자성(Atomicity): 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.
  • 일관성(Consistency): 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
  • 독립성(Isolation): 각각의 트랜잭션은 서로 간섭이 없이 독립적이어야 하며 동시에 실행하는 트랜잭션으로 인한 문제를 피할 방법이 존재해야 한다. (순차적 실행).
  • 영속성(Durability): 트랜잭션이 성공적으로 완료되면 결과는 영구적으로 반영되어야 한다.

이더리움에서 트랜잭션이란?

이더리움 블록체인을 개발 하다 보면 "트랜잭션을 보낸다." 이런 말을 들어봤을 수 도 있다. 이 말은 위에 인트로에서 설명한 내용 이외에 가장 근본적인 단어를 하나 덫 부쳐야 한다. 그 말은 바로 "서명"이다. 블록체인에서 트랜잭션을 보낸다는 말은 서명한 트랜잭션을 기록한다고 표현할 수도 있다.

서명이란?

이더리움에 가장 근본적이고 핵심적인 키워드는 "증명"이다. 나를 증명할 수 있는가? 이 말에 모든 이더리움 블록체인의 핵심이 담겨 있다. 이더리움은 상대방을 구분할 수 있는 유일한 방법은 16진수로 표현된 지갑 주소 혹은 공개키를 32개의 텍스트로 인식된다. 서명하는 알고리즘 중 블록체인이 채택하고 있는 방법은 비대칭 키를 이용해 이 트랜잭션을 발생시킨 게 바로 나라는 걸 증명하는 방법이다. 쓰다 보니 말이 좀 어렵네….

많은 사람이 착각하고 있는 것 중에 하나가 바로 지갑이라는 단어이다. 지갑은 마치 블록체인 서비스에서 활용하는 고유의 기술처럼 이해하고 있다.

예를 들어, 나의 이름은 홍길동. 지갑을 생성하고 싶다고 가정한다. 어떻게 지갑을 생성할 수 있을까?
여기서 논점은 "어떻게"라는 물음이 지갑을 만드는 과정과는 아무런 연관이 없는 것이다. 왜냐하면 어떠한 걸로도 지갑을 만들 수 있으니까

홍길동이라는 이름 이 단 하나의 단어만으로도 지갑을 만들 수 있다. 이더리움에서 제공하는 keccak256()이라는 함수를 사용하여 타원곡선 알고리즘을 통해 비밀키와 공개키를 생성할 수 있다. 하지만 홍길동이란 단어는 매우 단순하다. 해커들이 레인보우 테이블을 이용하여 나의 지갑을 탈취하기 쉬우므로 매우 많은 단어를 순서와 개수로 조합해 만든다. 이걸 이모닉이라고 부른다.

서명이라는 말을 하기까지 매우 길어졌는데 이제 서명이라는 단어를 풀어볼 중요한 순간이다. 공개키와 비밀키를 생성하고, "안녕하세요"라는 문구를 담은 트랜잭션을 비밀키로 암호화 시키고 블록체인에 기록해 모든 노드가 이 "안녕하세요"라고 담겨있는 트랜잭션을 검증하기 시작한다. 검증은 어떻게 하는 것인가. 심플하다. 우리가 알 수 있는 유일한 정보는 공개키이다. 공개키를 활용하여 비밀키로 암호화되어있는 내용을 복호화 시키고 이게 이전 "안녕하세요"와 비교하여 동일하다고 판단이 되면 이로써 이 내용을 쓴 사람이라고 정당하다고 증명을 할 수 있다.

여기서 서명은 비밀키로 암호화시킨 순간이 서명을 했다고 이해하면 된다.

결론


트랜잭션이라는 말은 인트로에서 설명했던 내용과 같지만 이더리움에서 트랜잭션이란 인트로에서 설명한 내용을 포함하고 증명을 할 수 있는가? 이게 오늘 글을 쓰게 된 핵심적인 내용이다.

profile
블록체인 프론트엔드 개발자

0개의 댓글