지난 토요일 나의 첫 세미나를 다녀왔다.


앞서 말했다 싶이, 현재 회사에서 하는 업무와 블록체인은 1도 상관이 없고

앞으로 몇년간 블록체인과 관련된 사업은 하지 않을 것이지만,

내 앞으로의 일은 어떻게 될지 모르기에,, 또 개발자라면 관심을 가질만한

기술이지 않은가? 해서 세미나가 있는걸 알게되고 바로 신청하여 다녀오게 되었다.


다녀온 세미나 링크 : https://okky.kr/article/453991


*세미나의 취지


지금 꼭 배워두어야 할 블록체인 지식과 기술에 대해 개발자 관점에서 이야기하는 시간을 가지기 위해 열렸다고 한다.



1부 : 블록체인과 개발자


  • 블록체인?! : 블록체인에 대한 구조와 생태계에 대한 전반적인 이야기
: 블록체인이랑 블록형태로 연결되어 분산데이터베이스에 P2P 네트워크를 기반으로 데이터를 저장하는 기법

블록체인 생태계엔 사용자와 개발자, 인프라제공자가 있으며 그 중심에는
블록체인 기술(EX비트코인)이 있다.

  • 코인의 시대 : 블록체인에서 코인의 필요성과 현재의 코인 중심 블록체인 환경
: 수많은 비트코인이 탄생했고 탄생하고 있으며, 현재는 3세대 코인까지 포함하여 무수히 많은 코인이 있다.

그 중 2세대 코인(기술)인 이더리움의 특징은 기존 1세대 비트코인(기술) 같은 경우엔 데이터(노드)에 담기는 정보가 단순 거래 정보만 담을 수 있었으나,
이더리움은 거래정보 뿐만 아니라 그 노드안에 클래스 혹은 함수,메서드 등을 담을 수 있어 여러 종류의 데이터를 담을 수 있으니, 앞으로 발전 가능성이 더 크다고 판단된다.

코인과 토큰을 혼동하는 경우가 많으나 코인은 사용자가 비트코인 거래에 사용하는 실제 화폐단위이고 토큰은 개발자가 개발할 때 환경을 구성할 수 있는 부분이라, 화폐단위가 될 수 있지만 그게 아닌 단순 어플리케이션이 될 수도 있다.

  • 디앱(dApp)의 시대 : 새롭게 시작되는 블록체인 시대
: 블록체인 플랫폼기반으로 개발하는 어플리케이션을 일컫는다.
스마트 컨트랙트(전자계약)이 동반하여야 하고, 아직 이렇다고 할만한( 실제로 돈을 받고 수익구조를 낼 수 있는) 어플리케이션은 거의 없다고 한다.

  • 개발자가 준비해야 하는 것 : 어떤 블록체인을 활용할 것인가, 어떤 기술 요소들이 있는가
: 세대에 따라 혹은 플랫폼에 따라 어떤 환경이 기반이냐에 따라 어떤 부분을 개발하느냐에 따라 기반언어가 달라진다.
대표적으로는 R3기반에서는 kotlin과 Java
Hyperledger 기반에서는 Go와 파이썬
EEA 기반에서는 solidity가 있다.
해서 블록체인에 관심이 있는 개발자라면 집중분야(플랫폼)을 설정하여
그 분야에 맞는 언어를 공부하고 공부한걸 바탕으로 dApp을 만든다면
솔루션, 커뮤니티, 오픈소스 측면에서 가능성이 있는지 여부를 판단해야 한다.




2부 : 블록체인 인사이드

  • 신뢰란 무엇인가
: 하마님이 말씀하신 신뢰는 서로 필요한 가치를 교환(거래) 할 때의 기대와 믿음     
  • 신뢰비용이란 무엇인가
: 신뢰비용은 신뢰(믿음)으로 부터 생기는 비용 (기회비용과 비슷했다.)           비트코인에서 필요한 것은 신뢰가 아닌 암호학적 증명(cryptographic proof)        
  • 비잔틴 장군 문제
: 문제의 해결법을 이전 작업을 기반으로 이후 작업을 만드는 방법을 제시했다.        
  • 신뢰비용으로 노력(작업물)이 들어갔다.
: 최종 작업물이 이전 작업물의 노력 기반하에 만들어지기 때문에 속이기 어렵다.                                                                                                                  
  • 블록체인과 비트코인
: 블록체인 기법을 통해 
어떤 내용이 담겨지는가 : 단순거래(가치이동)
어떻게 만들어 지는가 : 막대한 리소스(노력) 투입
위 내용이면 비트코인 어떤내용과 어떻게가 바뀌면 다른것도 만들 수 있다.         
  • 비트코인에서 가치이동
: 철수는 50원이 있다. 영희 50원- > 철수.
일반적인 수학에선 영희 = -50원 , 철수 = 50+50 = 100원
비트코인에서는      영희 = -50원 , 철수 = 50 50
비트코인에선 가치를 나열해서 저장한다.( UTXO 풀에 저장 )                                     
  • 대칭키/공개키 암호화
:대칭키 (A가 B에게 메시지를 보낼 때)
나(A)의 메시지를 암호화 하기 위해선 나(A)의 대칭키를 사용하고 전달
나(A)의 메시지를 복호화 하기 위해선 나(A)의 대칭키를 사용한다.
문제점은 대칭키를 탈취당하면 보안이 취약해진다.

공개키 (A가 B에게 메시지를 보낼 때)
나(A)의 메시지를 암호화 하기 위해선 너(B)의 공개키를 사용하고 전달
나(A)의 메시지를 복호화 하기 위해선 너(B)의 개인키를 사용한다.
문제점은 누구나 나(A)라고 속이고 너(B)에게 메시지를 보낼 수 있다.

서명 (위의 문제점들이 있어 서명을 도입.)
나(A)의 메시지를 나(A)의 개인키로 서명
서명된 나(A)의 메시지를 너(B)의 공개키로 암호화 전달
너(B)의 개인키로 메시지를 복호화
나(A)의 공개키로 복호화된 메시지를 서명확인
문제점은 상대방의 공개키를 믿을 수 없다, 시간이 오래걸린다.

비트코인에서는 공개키 알고리즘으로 
ECDSA(Elliptic Curve Digital Signature Algorithm)를 사용한다.


  • 해시
: 입력값을 난수화시켜서 해시값을 출력해준다.
동일한 입력값일시 동일한 해시값을 출력해주는 것말고는
해시값을 입력값으로 복호화 하는 기술은 현재로선 무리다.

비트코인에서는 해시 알고리즘으로 SHA256을 사용한다.

  • 가쉽 네트워킹
: 분산 시스템중 하나이며, 소문이 퍼지는 모양새가 유기적으로 여러 사람과 동시에 연결됨을 본떠서 설명한 네트워킹 짜임새.
한 노드에 문제가 생겨도 다른 노드의 역할에는 지장을 주지 않기 위해서 고안됨

비트코인 네트워킹도 유기적으로 연결되어 있으며, 다음과 같은 특징을 갖는다.
1. 모든 노드는 동등한 지위(권한)을 갖는다.
2. 모든 노드는 거래와 블록을 검증하고 전파하는 기능을 갖는다(예외 있음)
3. 동등한 위치지만 역할은 달라질 수 있다.
4. 비트코인 네트워크는 지리적 영향을 받지 않는다.
5. 새롭게 참여하는 노드는 종자 노드로부터 접속정보를 가져온다.

2.번 항목의 노드는 풀노드 예외노드는 SPV(또는 라이트웨이트) 노드

  • 분산데이터베이스
: 데이터 집합체를 여러 물리적 위치에 저장하는 것,.
블록 데이터 따로, 메타 데이터 따로, UTXO 데이터 따로 저장한다.                  
  • 주소 만들기
: 원래주소에 개인키를 사용 ( 서명 )
서명된 주소에 공개키를 사용 ( 암호화 )
암호화된 주소에 해쉬 알고리즘(SHA256)를 사용 ( 해싱 )
해싱된 주소에 해쉬 알고리즘(RIPEMD160)을 사용 ( 한번 더 해싱 )
결과 : Public key hash (160bit) 완성 ( 암호화와 해싱처리가 된 주소 )

  • 머클트리
: 내(자기자신 노드)가 이 거래(A)에 포함되어 있는 거래인지 판단하기 위해
거래(A)의 모든 노드를 파악할 필요는 없다. (특정 몇몇 노드만 알면된다,)

  • 블룸필터
원소가 집합에 속하는지 여부를 검사하는데 사용되는 확률적 자료구조이다.

  • 스크립트
: 블록체인에서 '거래'란 기록물의 변경 ( UPDATE가 아닌 INSERT, DELETE )

새로운 거래가 생기면 (A가 B에게 100원을 주었다.)
1.A가 누군가에게 준다는 행동이 진짜인지 검증 (거래 구문 검증)
2.A가 B에게 100원을 주는게 진짜인지 검증
3.A가 100원을 가지고 있는지 검증 ( UTXO의 풀에 있는지 거래검증 )

  • 거래검증
: A가 100원을 가지고 있는지 검증하려면
UTXO풀에 A의 데이터들을 종합해서 100원이 넘으면 검증 완료

*UTXO는 가치의 합을 저장하는게아닌 가치의 나열을 저장하며
가치의 이동(거래)이 있으시엔 가지고 있는 가치 중 가장 큰 값부터
계산에 적용하는 알고리즘을 사용한다.
 
  • 거래확정
: 위 검증들을 절차적으로 검증한 후(스크립트를 통해) 이상이 없으면 그 거래는 블록형태로 기존에 있던 블록들 뒤에 연결된 뒤 다른 사용자들에게 전파된다.

  • 전체 조망
: 단순히 비트코인 만으로 현재 수익구조를 낼 수 있는 방법은 없고,
만약 비트코인의 가상화폐를 실제사회에서 사용하고 있는 화폐로 교환해주는 은행이 나타난다면 얘기가 달라질 수 있다.
제가 듣기로는 이더리움에서는 이더리움코인으로 밥을 주는 고양이를 키우는 앱을 개발하여 고양이와 고양이를 교배시 더 나은 유전자를 고양이가 나온다면 가치가 상승하는 개념이 있다고 들은적이 있다.


2부 발표자료 : https://okky.kr/article/457376

마치며

난해한 시간이였다,, 스스로 세미나에 참석하기전 블록체인과 비트코인에 관심이 생겨 조사한 개념들은 빙산의 일각이였다는걸 알았다. 블록체인 기술의 문외한에겐 꽤나 어렵고 생소한 개념이 많았으나 훌륭한 강연자님 덕분에 이해를 하는데 크나큰 도움이 되었다. 젤 크게 느낀건 세미나를 듣기전에도 생각했던 대로 분명 이 기술은
현재 상업적으로 돈을 벌만한 기술은 아니지만 분명 널리 쓰일날이 올꺼 같다는 생각에 확신을 얻었다. 앞으로 블록체인 기술을 공부하면서 어떤 플랫폼에서 어떤 언어를 기반으로 할지 정한 뒤 스크립트 소스를 통해 나만의 비트코인을 만드는 것부터 차근차근 실습할 예정이다. ( 예정은 자유니까,,,)

첫 경험이였고, 너무 좋았다 재밌었다.
후에 있을 2개의 세미나도 기대된다.




























블로그 이미지

춤과파티

,

서론 : 무시해도 무관..


우선 알고리즘 세미나 발표를 위해 알고리즘 구글링을 좀 해본 결과

주로 c/c++언어로 알고리즘을 설명한 글이 대다수였다.

현재 나는 java말고 다른 언어에 대한 지식이 없기 때문에 발표하기 전까지

c혹은 c++언어를 공부한 뒤 알고리즘을 공부하긴 촉박하여

내가 발표해야 할 주제에 대해 java언어로 이해하기 쉽게 정리해 나갈 예정이다.


본론 : 알고리즘에서 시간복잡도 란


알고리즘:어떤 문제를 풀거나 목적을 이루거나 결과물을 도출하기 까지의 일련의 과정

ex문제) 1->n까지 합을 구하시오. (n을 포함한다.)

나의 알고리즘 과정) 

int sumResult = 0;

for(int i=0; i<n; i++) { sumResult += i+1;}  

System.out.println(sumResult);


시간복잡도:위 과정에서 수행시간이 얼마나 걸리는지

ex) 위의 for문이 반복되는 횟수는 n번 이므로 걸리는 시간을 n시간이라고 한다.


n시간이라고 하면 사람들이 뭔지 모르므로 시간복잡도에 대한 표기법이 따로 있다.


Big-O 표기법 : 알고리즘의 전체 단계를 대수 항으로 변환 한 다음 문제의 전체적인 복잡성에 큰 영향을 미치지 않는 하위 상수 및 계수를 제외하는 방법인데,,,


정의만 봤을 땐 무슨말인지 알아먹기 힘드므로 예시를 들자면


algorithm -> Big-O

8            -> O(1)

2000       -> O(1)

3n           -> O(n)

7n^2       -> O(n^2)


요론식이다. 쉽게 말해서 알고리즘 풀이에서 가장 큰 영향을 미치는 n의 단위이다.


위 예시는 O(1) = 상수시간, O(n) = 직선적시간, O(n^2) = 2차 시간

이라고 표현하는데 그 외에도

O(log n) = 로그시간, O(C^n) = 지수시간 등등 이 있다.


내가 앞으로 알고리즘 문제를 풀면서 명칭까지는 쓰지 않을 예정이고, 

다만 알고리즘 문제를 해결하는데 있어서 이문제는 O(n^3)의 수행시간이 걸릴 문제다 혹은 O(n)만큼의 수행시간이 걸리겠다. 라는 수행시간에 대한 개념을 잡고

문제를 풀어나가기 시작하는게 좋은 개발자로 가는 길이라고 한다.


문제라는 것은 정답이나 최선의 답의 관점에서 접근하는 것보다, 상황에 더 맞는 답인지 아닌지의 관점에서 접근해야 합니다.


쉽게 말해 답을 맞추는 것만이 중요한게 아니라고 한다... 이만!









블로그 이미지

춤과파티

,

아마 내가 첫번째로 참석하게 될 it세미나의 참가신청을 마쳤다.


일정 : 2018년 4월 14일 토요일 오후 2시


장소 : 개발자 공간, eBrain Space

  서울시 강남구 봉은사로 303 TGL 경복빌딩 502호


홈페이지 : https://okky.kr/article/453991


참가비 : 40000원



요즘 자주 활동하고 있는 okky : 개발자 커뮤니티에서 진행하는

"개발자, 블록체인과 마주하다" 세미나를 알게 되었다.

블록체인을 주제로 앞으로 개발자들이 블록체인을 어떻게 활용할 것인가

개발자가 준비해야 할 것은 무엇인가 에 대해서 구성되어 있는 세미나이다.


신입 개발자 입장에서는 하는거나 잘하지 신기술이라고 볼 수 있는 블록체인을

알아서 어따 쓰려고 그러냐 할 수 있지만, 요즘 비트코인(전자화폐)에 관심이 없는

사람을 찾기가 더 힘들 정도로 비트코인은 큰 화제에 올랐었고, 이에 나도 개인적인

호기심에 도대체 블록체인이 뭐고 비트코인이 뭘까? 찾아본적도 있었다.


해서 내가 현재 개발하고 있는 기술은 아니지만 it업계에서 앞으로 더 빈번하게

사용될 기술이라고 생각하고 있으며, 내가 담고있는 업종의 미래를 생각해서

공부하기엔 더 없이 좋은 세미나라고 생각이 들어 한치 망설임 없이 참가신청 하였다.



'세미나 > 세미나 등록' 카테고리의 다른 글

2018 SPRING CAPM at 쿠팡  (0) 2018.04.04
블로그 이미지

춤과파티

,