분류 전체보기
-
51% 공격(Attack)이란?블록체인 2018. 7. 17. 22:03
51% 공격(Attack)이란?51% 공격은 작업증명 (PoW) 알고리즘에서 나오는 용어입니다. 비트코인은 작업증명(PoW)을 사용해서 연산을 통해 일종의 문제를 가장 빨리 푼 노드에게 블록을 추가시킬수 있는 권한을 줍니다. 이때 나머지 노드들은 해당 블록이 유효한 거래인지 승인을 하게 됩니다. 절반 이상의 승인을 거치면 유효한 거래로 확인하고 블록을 블록체인에 연결, 모든 노드에게 전파하게 됩니다. 그런데 블록체인 전체 연산량의 50%이상을 보유한 채굴자는 압도적인 채굴량을 바탕으로 전체 네트워크를 마음대로 결정할 수 있게되며 51%공격을 감행할 수 있습니다. 예A: 비트코인 네트워크 전체 해시 파워 중 51% 이상을 가진 채굴자 및 거래자B: 일반 거래자A가 B에게 악의적인 생각을 가지고 BTC를 판..
-
엔디안(Endian)이란?공부 2018. 7. 15. 01:04
엔디안이란?엔디안(Endian)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 합니다. 엔디안은 보통 큰 단위가 앞에 나오는 빅 엔디안(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디안(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디안(Middle-endian)이라 부르기도 합니다. 사람이 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 오는 방식이 빅 엔디안입니다. 빅 엔디안리틀 엔디안0x123412 3434 120x1a3ecd1a 3e cdcd 3e 1a16진수는 2개가 1바이트이므로 묶어서 계산합니다.장단점빅 엔디안은..
-
[Django] ORM으로 Order by 에 null first, last 기능 구현언어/파이썬 & 장고 2018. 7. 14. 23:30
Postgresql에서는 order by 부분에 null값이 가장 먼저 나올지, 나중에 나올지 설정할 수 있습니다. order by의 예는 아래와 같습니다.SELECT name FROM test ORDER BY name DESC NULLS FIRST; 해당 쿼리는 name 컬럼에 null값인 행을 가장 앞으로 정렬하게되는 쿼리입니다. 아래는 위 쿼리를 Django ORM으로 똑같이 표현한 예입니다.from django.db.models import F Test.objects.order_by(F('name').desc(nulls_first=True))null값을 가장 뒤로 보내고 싶으면 nulls_first 부분을 nulls_last로 변경해주면 됩니다.
-
[Django] ORM으로 Aggregation 함수와 Group by 사용언어/파이썬 & 장고 2018. 7. 14. 23:29
쿼리에서 aggregation함수(count(), max(), first() 등등) 와 필요한 컬럼을 출력하는 방법은 아래와 같습니다.SELECT name AS changed_name, count(count) FROM test GROUP BY name; 위와 같은 쿼리는 아래와 같이 장고 ORM으로 표현할 수 있습니다.queryset = Test.objects.values('name').annotate( max_count=Count('count'), changed_name=F('name') ).values('max_count', 'changed_name') aggregation 함수를 사용하기 전, group by를 진행할 필드를 지정해 줍니다.queryset = Test.objects.values('n..
-
[Python] lambda, map언어/파이썬 & 장고 2018. 7. 12. 23:20
lambda, map, filter 같은 경우는 사실 가독성 부분에서 좋지 않다는 생각이 들어 지양하고 있었는데 장점이 있어서 정리해 봅니다.lambda(람다) 함수lambda (이후 '람다'라고 호칭)함수는 익명함수로 메모리를 절약하는 이점이 있습니다. 또한 가독성을 향상시킨다 라고도 나오지만 함수와 비교했을 때 가독성이 좋은건지는 잘 모르겠습니다. (개인적인 의견)일반적인 함수는 객체를 만들고, 재사용을 위해 함수 이름(메모리)를 할당을 합니다.# lambda 인수1, 인수2, ... : 인수를 이용한 표현식 sum = lambda a, b: a+b result = sum(3,4) print(result) # 7왜 사용할까?익명함수이기 때문에 한번 쓰이고 다음줄로 넘어가면 힙(heap) 메모리 영역에..
-
이진법, 16진법, 비트와바이트, 인코딩공부 2018. 7. 12. 22:43
정말정말 간단한건데 사용안할 줄 알고 대충알고 넘어갔다가 이번에 큰코를 다쳤.............16진법만 다시 정리할까 했는데 전체적인 내용을 다시 까먹지 않기 위해 비트와 관련된 알고 있는 내용까지 전부 정리합니다.이진법 (binary)컴퓨터는 이진법으로 이해를 합니다. 우리가 사용하는 수의 표현방법은 십진법입니다. 이진법에는 0 또는 1 만 존재합니다. 알다시피 십진법은 0~9까지 존재합니다.십진법 ↔ 이진법십진법에서 1은 이진법에서도 1입니다. 십진법에서 3은 이진법으로 표현하자면 11이 됩니다. 이를 다시 십진법으로 변경하자면 2^1 + 2^0 = 3 으로 성립이 됩니다. 자리 수가 n개인 이진법를 십진법로 계산하는 공식은 2^n-1 + 2^n-2 + ... + 2^1 + 2^0 이 됩니다. ..
-
작업증명 (Proof-of-Work : PoW) 알고리즘이란?블록체인 2018. 7. 11. 22:36
작업증명(Proof-of-Work) 방식의 합의 알고리즘은 비트코인에서 사용되는 합의 알고리즘으로써 어떤 트랜잭션이 발생했을 경우 해당 트랜잭션이 유효한 트랜잭션인지에 대한 합의 방법 및 새로운 블록이 진짜인지, 가짜인지에 대한 검증을 수행합니다. 작업 증명 방식(PoW)을 이해하기 위해서는 우선 마이닝 과정에 대한 개념정리가 필요합니다.마이닝(채굴)이란?마이닝(채굴)이란 임의의 nonce 값을 대입하여 블록 해시 결과 값을 생성하고, 생성된 결과 값이 제시된 Target 보다 작은 블록 해시를 찾는 과정입니다 (자세한 내용은 아래에서 설명). 해시함수의 특징때문에 어떤 nonce 값을 대입해야 제시된 Target 보다 작은 블록해시 정보를 찾을 수 있을지는 알 수 없습니다.즉 올바른 결과 값을 찾기 위..
-
머클트리(merkle tree)란?블록체인 2018. 7. 9. 23:46
머클트리란?머클트리(Merkle Tree) 혹은 '해시트리(Hash Tree)'라는 구조는 Ralph Merkle이라는 사람이 1979년에 만들어 낸 개념입니다. 다른 트리 알고리즘과는 다르게 머클트리의 목적은 빠른 검색이 아니라 데이터의 간편하고 확실한 인증을 위해 사용합니다. 머클트리의 최상위 부모노드(혹은 루트)는 머클루트라 부르며 블록체인의 원소역할을 수행하는 블록에서 저장된 트랜잭션들의 해시트리라 볼 수 있습니다.머클트리는 데이터의 간편하고 확실한 인증을 위해서 SHA-256 암호화 기술(해시함수)를 사용하고 있습니다. 자세한 내용은 아래 머클트리 그림과 같이 설명하겠습니다.SHA-256 암호화 (해시함수)란?SHA-256은 암호화 기술로서 복호화가 되지 않는 단방향 암호화 기술입니다. 암호화된..
-
블록체인 기술 정의블록체인 2018. 7. 8. 23:52
블록체인(Blockchain)블록체인은 최초의 블록(Genesis Block)부터 시작해서 바로 앞의 블록에 대한 링크를 가지고 있는 링크드 리스트인 자료구조입니다. 다시말해 블록과 블록을 체인으로 이어준 형태입니다. 블록체인에서 사용되는 블록은 일정 시간마다 생성이 됩니다. (비트코인의 경우 10분에 한 번씩 생성)즉 여러 건의 거래내역을 하나의 블록으로 묶어 기존에 생성된 블록에 체인처럼 계속적으로 연결한 구조를 의미합니다. 블록의 집합체인 블록체인은 여러 노드에 걸쳐 분산되어 저장 및 관리되며 모든 거래 정보를 포함하는 거대한 분산 장부 또는 공통장부(원장: Ledger)관리 기술이라 할 수 있습니다.블록(Block)블록이란 블록체인의 원소 개념으로 다수의 거래정보의 묶음을 의미합니다. 블록은 He..
-
퍼블릭 블록체인, 프라이빗(컨소시움) 블록체인 비교블록체인 2018. 7. 5. 22:51
블록체인의 종류블록체인은 크게 퍼블릭 블록체인, 프라이빗 블록체인, 컨소시움 블록체인 3가지로 분류할 수 있습니다.퍼블릭 블록체인(Public Blockchain): 비트코인, 이더리움과 같이 누구나 네트워크에 참여할 수 있는 블록체인프라이빗 블록체인(Private Blockchain): 하나의 기관에서 독자적으로 사용하는 블록체인컨소시움 블록체인(Consortium Blockchain): 여러 기관들이 컨소시움을 이뤄 구성하고 허가된 기관만 네트워크에 참여할 수 있는 블록체인. 현재 활발하게 거래되는 대다수의 블록체인은 퍼블릭 블록체인으로 블록체인 네트워크에 참여할 수 있고 트랜잭션 내역을 검증할 수 있습니다.퍼블릭 블록체인 VS 프라이빗(컨소시움) 블록체인 퍼블릭 블록체인프라이빗(컨소시움) 블록체인읽..