미리 읽어주시는 분들께 감사하며 잘못된 지식이 있을 경우 마음 편하게 피드백주시면 감사하겠습니다.
현재 게시글에 대한 깃허브는 아래에 주소를 기입하도록 하겠습니다.
https://github.com/schedutron/SnakeCoin
블록 내부 구조
class Block:
def __init__(self, index, timestamp, data, previous_hash):
self.index = index
self.timestamp = timestamp
self.data = data
self.previous_hash = previous_hash
self.hash = self.hash_block()
def __str__(self):
return 'Block #{}'.format(self.index)
def hash_block(self):
sha = hasher.sha256()
seq = (str(x) for x in (
self.index, self.timestamp, self.data, self.previous_hash))
sha.update(''.join(seq).encode('utf-8'))
return sha.hexdigest()
index : 현재 블록의 위치 (첫 블록 0)
timestamp : 블록이 생성된 시간
data : 블록체인에 포함하고자 하는 데이터
previous_hash = 이전 블록의 해쉬
hash : sha256으로 index + timestamp + data + previous_hash들을 암호화함
함수 분석
* 현재 저는 깃허브에 올라와있는 코드들을 한 곳으로 모아놨으므로 깃허브와 함수 이름 혹은 코드가 다를 수 있습니다.
def make_genesis_block():
"""Make the first block in a block-chain."""
block = Block(index=0,
timestamp=datetime.now(),
data="Genesis Block",
previous_hash="0")
return block
make_genesis_block()
위의 함수는 코드를 보시면 아시겠지만 index를 0으로 설정하여 현재 시간과 데이터는 Genesis Block 이라는 문장과 이전 해쉬가 없기때문에 0으로 설정되어 블록이 생성되는 것을 볼 수 있습니다.
첫번째 블록을 만드는 함수라는 것을 알 수 있습니다.
def next_block(last_block, data=''):
"""Return next block in a block chain."""
idx = last_block.index + 1
block = Block(index=idx,
timestamp=datetime.now(),
data='{}{}'.format(data, idx),
previous_hash=last_block.hash)
return block
next_block(last_block, data='')
인자는 2개로 하나는 이전 블록을 넘겨받으며, 새로 추가할 데이터를 받는 것을 볼 수 있습니다.
idx 는 이전 블록의 인덱스 +1 을 한 값으로 설정된 뒤에 인덱스를 넣으며 새로운 블럭이 생성되는 것을 볼 수 있습니다.
그렇습니다.
이전 블럭을 받아 새로운 블럭을 만드는 함수라는 것을 알 수 있었습니다.
채굴 알고리즘
처음에 블록체인을 공부하다 채굴이라는 개념을 잡기가 많이 어려웠습니다.
멘토님에게 질문을 드렸는데
새로운 블럭을 생성하는 것이 채굴이라는 것을 알게 되었다.
그렇다 이 코드에서 채굴 알고리즘은 있지 않다.
이쯤에서 채굴이 무엇인지 Araboza.
채굴
* 채굴 필요성
- 공급자 역할
- 수요공급법칙
* 작업 증명 : (Proof of Work)
- 작업 증명은 새로운 블록을 블록체인에 추가하는 ‘작업’을 증명한다는 것이라고 한다.
그렇다면 현재보다 채굴의 난이도를 올리는 방법은 무엇이 있을까?
뭐 딜레이를 줘서 간단하게 난이도를 올리는 방법과 암호화 알고리즘들을 사용하여 브루트포싱 기법으로 때려맞춰서 난이도를 올리는 방법들이 있다고 합니다!
내가 우연히 탔던 버스가 경유를 하지 않고 직통버스여서 너무나 일찍 도착해서 천안캠퍼스를 구경을 했었다.
먼저 적기 전에 교통편을 미리 추천할 겸 적어봐야겠다.
천안 터미널에서 내려서 아래쪽으로 천천히 걸어오면 버스 정류장이 있는데
거기서 100번대의 버스들을 타면 공주대에 도착할 수 있다 ex) 120, 100, 110, 140, 112
와타시는 버스를 많이 타본적이 없어서 너무나 불편했다...
특히나 벨을 언제 눌러야되는지 몰라서 눈치보느라 힘들었다...
그렇게 나는 면접시간에 비해 2~3시간이나 일찍 도착해서 면접 정리도 할 겸
버스 내리면 바로 대학교 입구 들어가는 곳 쪽에 편의점이 있어서 편의점에서 탄산수 하나랑 볼펜을 사서 자기소개서 뽑은거를 정리를 했다.
딱히 무엇을 외우면서 하는 면접이 아니였고 매우 편한 마음으로 본 면접이라 크게 긴장도 안된 상태라 10분 정도 보다가 노트북을 꺼내서 서버 정리를 했다.
그러다가 알바생 아조씨가 말을 걸어오셔서 대화를 가볍게 나누었다.
알고보니 그 아조씨도 서산에서 일을 한적이 있다고 했다.
이렇게 여러 사람과 말을 해서 더 긴장이 없어진 것 같기도 했다.
그렇게 미리 한번 면접장을 갔더니 미리 입장은 안되니 내려가서 대기하거나 대학교 둘러보라고 해서
둘러보다가 날씨가 쌀쌀하고 분명 대학교 안이니 카페가 있음을 나는 굳세게 믿었고 찾다가 10관? 2층에 카페가 있다는 것을 발견하였다!!! (두두두ㅜ우두둥1!!)
카페에 들어가니 조용하고 사람도 별로 없었다.
게다가 가격이 존나 매우 착함...후;;;
반할뻔했다.
아메리카노 2500원 개꿀;;;
아메리카노 하나 시켜서 노트북하려고 했는데
와이파이 사용하려면 대학교 학생이여야된다...
존나 너무했음 ㅂㄷㅂㄷㅂㄷㅂㄷ
그래서 노트북 안에 있는 바이너리 문제 풀고 지루한 시간을 보내고 면접장에 가서 수험표를 받고 대기장에서 대기를 했었다.
대기실에는 앞에 대학 재학중인 형들이 계셨는데.
지루한 걸 아시는 건지 말도 붙여주시려고 노력했는데
왜인지 모르겠지만 대기실에 있던 사람들은 다 긴장하고 무언가를 달달 외우는 분위기라 대화할 수는 없었다... (아니 원래 할 수 있는데 분위기가 ㅇㅇ;
그렇게 대기를 하는데
처음에는 들어가면 10분 ~ 15분 걸리더니 점점 빨리 끝나갔다.
아무래도 교수님들도 사람이다보니 애들도 다 달달 외워서가서 재미가 없으셨나보다.
그래서 점점 뒤에는 빨리빨리 나오고 빨리빨리 빠졌다.
그렇게 나는 마지막 순번이였고 마지막에 기다리는 김에 앞에 있는 대학생 형이랑 이야기를 나누었다.
※ Q는 필자이며, A가 그 대학 다니고 있는 대학생형이다.
그리고 필자가 면접을 본지 오래되서 정확한 대화는 기억은 안나고 알맹이만 적을테니
실제로는 저런 말투로 대화를 안하고 매우 너그럽고 친구와 대화하는 분위기였음.
Q. 몇학년이세요?
A. 3학년이다~
Q. 아 그러면 졸업작품 준비하세요?
A. 우리 대학교는 졸업작품 그런거 딱히 없고 하고 싶으면 하고 안하고 싶으면 안하는데
하면 좋지만 작년부터 이런거 없애버린다는 교수님이 있었는데
츤데레처럼 계속 하고 계신다는 식으로 대답해주셨음.
Q. 대학교 1학년때는 무엇을 배워요?
A. 1학년때는 C,C++ 이나 수학을 많이 하고 2학년때부터는 다 전공과목들인데
여기서 게임에서 2차 직업 고르듯이 소프트와 컴공이 있다.
그에 따라 배우는게 약간 다르지만 비슷비슷하다.
이후에 대학생 형이랑 여러 언어와 컴퓨터 지식 관련된 이야기를 했습니다.
그 뒤에 대기하면서 그 형과 이야기 하다가 면접에 들어갔습니다.
교수님들은 2분과 입학사정관님 1분 계셨었습니다.
3대 1 면접이였습니다.
처음에는 긴장을 풀어주시기 위해서 사적인 이야기들을 가볍게 물어보셨습니다.
(확실히 들어가기 전에는 긴장을 안했지만 들어가려니 화이트아웃? 같은 느낌으로 벙~ 했습니다 ㅋㅋㅋㅋㅋ)
※ Q는 면접관님들이며, A가 필자이다.
그리고 면접을 본지 시간이 좀 지나 몇가지의 질문들이 빠질 수도 있음을 미리 알아주었으면 하며,
말투가 딱딱하게 적을 수도 있지만 실제로는 너그럽게 잘 봐주셨다.
Q. 여기에 어떻게 왔나요?
A. 고속버스타고 왔습니다.
Q. 여기 천안 캠퍼스는 처음 와보는가?
A. 아 몇일 전에 공주 캠퍼스를 가본 적이 있습니다.
하지만 천안 캠퍼스는 처음 와봅니다.
Q. 공주 캠퍼스는 무슨 일로?
A. 충남 인재 장학생 캠프가 공주 캠퍼스에 열려서 장학생 캠프를 참여하기 위해 갔었습니다.
Q. 천안 캠퍼스 처음 올때 어땟는가? 공주캠퍼스와는 많이 비교될텐데
A. 아 좀 허허벌판인 것 같습니다 (웃음) < 이때 미친듯;
Q. 아 그래서 맘에 안드나?
A. 아 아뇨 딱히 대학에 공부와 컴퓨터에 관심 있는 친구를 만나서 많은 경험을 하고 싶어서 왔지 놀러온게 아닙니다.
( 그리고 이제 학생의 긴장감을 풀어주기위해 이런 질문을 했다고 말해주고 본론으로 들어갔습니다. )
Q. 이 과에 지원한 동기는 무엇인가?
A. 저는 초등학생때부터 컴퓨터에 관심이 많아 프로그래밍 언어를 접해 공부를 하였고 중학생때도 계속 공부해서 고등학교를 컴퓨터 고등학교로 진학하려고 했으나,
부모님은 제가 컴퓨터 앞에만 있으시니 게임만 하는 줄 아시고 제가 정말 진지하게 공부하는 것으로 보이지 않으셨기에 타지로 가는 것을 반대하여 컴퓨터 고등학교가 아닌 인근 공업고등학교에 들어가 화학 공부를 해오면서 현재까지도 컴퓨터를 공부해오며 여러 대회들 본선도 참여하고 부모님께서 제가 정말 좋아하는 것을 인식시켜드리며 지원하게 되었습니다.
Q. 본인은 친구와 다투면 어떻게 하는가?
A. 저는 보통 친구와 다투면 먼저 그 자리를 떠난 뒤에 화가 가라앉은 후 "내가 ★★때매 화가 났었다" 라고
조용조용하게 말하기 때문에 크게 다투는 일은 없었습니다.
Q. 그래도 다투는 일이 있다면 어떻게 했는가?
A. 보통 사과를 하고 다시 친하게 지냈습니다.
Q. 파이썬은 왜 시작했는가?
A. 그때엔 파이썬이 새로 나와 인터프리터 기반의 스크립트 언어이고 매우 편리하다는 이야기를 듣고 공부하게 되었습니다.
많은 모듈들도 있었기에 재미있는 프로젝트들도 해보았었습니다.
Q. 그럼 본인이 프로그래밍 언어들로 프로젝트 했던 것들이 무엇이 있는가?
A. 파이썬으로 한 프로젝트는 영상과 영상을 대조하여 같은 영상인지 판독하는 프로그램을 만들었으며
C#으로는 소켓으로 채팅 프로그램을 만든 적이 있습니다.
Q. 머신러닝? IOT? 비슷한거 물어보셨던 것 같음 ㅇㅇ
A. 제 자기소개서에 나와있듯이 머신러닝은 기계가 데이터를 통해 스스로 학습해가는 것인데
저는 이러한 점에 흥미를 느껴 머신러닝을 공부하며 텐서플로우로 기계가 숫자를 인식하는 것을 해본 적이 있습니다.
MNIST로 softmax 함수로 학습을 시켜 경사하강법으로 이 모델이 제대로 학습이 되어있는지 0에 가까운 숫자가 나오는 것을 보고 신기했었습니다.
그리고 IOT는 정말 사용자들에게 편리하다고 생각합니다.
냉장고로 집에서 매장까지 가서 구매를 할 필요 없이 집에서 바로 시킬 수 있다는 장점이 잇지만 IOT는 보안에 많이 취약하기 때문에
보안계에 블루오션이라고 생각합니다.
그 뒤는 좀 사생활적인 이야기가 나옴 ~
Q. 여기까지 면접 질문은 끝이고 마지막으로 준비해온 것이나 할말이 있는가?
A. 제가 알기로는 해킹 동아리가 없는 걸로 아는데 1학년도 들어가서 동아리를 개설할 수 있는가?
Q. 물론이다.
A. 수고하셨슴다
이렇게 면접이 끝이 났고 하고 싶은 말들은 다 하고 왔던 것 같아서 기분이 좋았다.
아무래도 내 학교는 똥통고등학교기에 6개중 4개가 광탈당하는 시점이라 공주대학교 합격이 떳을때도 빨간글씨길래 떨어진 줄 알았다.
사실 지금 생각해도 내가 이렇게 면접 기회를 받아도 되는 걸까 라는 생각을 잠도 못자며 생각한 적도 있었다.
정말 너무 힘들었다.
그래도 이렇게 말할 수 있는 기회를 줘서 너무 속 시원하고 현재는 발표를 기다리고 있다.
12월 16일
이번 주 금요일.
아, 그리고 공주대에 아는 형이 있어서 점심도 사주시고 카페에서 커피도 사주셨었다.
붙으면 형이 사주신 집에서 똑같이 사드리고 커피도 사드려야지.
안붙으면 뭐 나중에 뵈러 가야지!
[+] 23:13 2016-12-15
[+] 01:38 2018-10-25
이번 18학번 분들이 많이 검색해주신 것 같아서 내년 19학번 분들에게 도움이 될 수 있게 더 적기로 결정하였습니다.