Windows 10 - 화면 자동 밝기 해제 방법

|

화면 자동 밝기 해제 방법

Windows 10 노트북이나 타블렛에서 화면이 자동으로 밝아지거나 어두워지는 게 거슬리는 분들을 위한 방법입니다. 저도 갤럭시북에서 화면 밝기가 자동으로 변경되는 것이 거슬려서 화면 자동 밝기를 해제했습니다. 전력 공급이 원활한 데스크탑에서는 큰 문제가 발생하지 않더군요.


전원 관리 옵션 설정

먼저 Window 키를 눌러 빠른 실행창을 열고 ‘전원 관리 옵션’을 검색해서 실행합니다.

image

그런 다음 ‘고급 전원 관리 옵션 설정’을 눌러서 다음 화면을 실행합니다.

image

자동 밝기 기능을 배터리 사용할 때와 전원 사용할 때 모두 해제시켜주면 앞으로 쾌적하게 컴퓨터를 사용할 수 있습니다.

블록체인에서 PoW와 PoS

|

블록체인을 조금 공부해보면 바로 만날 수 있는 용어들입니다. 작업증명(PoW, Proof of Work)은 무엇이며, 지분증명(PoS, Proof of Stake)은 무엇일까요?

image -fullwidth


블록체인의 경제 모델

PoW, PoS 이런 용어들이 뭔지 알기전에 먼저 블록체인의 경제 모델을 이해해야 합니다. 여기서 말하는 경제 모델은 ‘왜 노드(Node)들이 자발적으로 블록체인에 뛰어들어 자신의 리소스를 사용해가며 합의 과정을 진행하는가?’ 입니다.

블록체인의 경제 모델은 ‘P2P의 경제 모델’과 일치합니다. 대부분의 노드들은 자신은 큰 수고를 하지 않고 이득만을 취하려고 하는게 기본입니다.


비트토렌트의 경제모델

대표적인 P2P 서비스인 비트토렌트(BitTorrent)의 경제 모델을 생각해봅시다. 비트토렌트는 다양한 파일들을 서버에서 제공해주는 것이 아닌, 피어(Peer)들간의 자발적인 공유를 이용해서 서로 주고받을 수 있게 하고 있습니다.

하지만, 대부분의 사람들은 자신의 파일을 업로드하는 것보다 원하는 파일을 다운로드하는 것에만 관심이 있습니다. 그러면 파일을 업로드하고 공유해주는 사람들은 과연 왜 그런 행동을 하는 것일까요? 그것도 자신의 트래픽을 소모해가면서까지…

그래서 비트토렌토에서는 자신이 업로드 대역을 제공하지 않는 프리라이더(Free Rider)에게는 대역폭을 제한하는 방법을 이용합니다. 즉, 자신이 뭔가를 원하면 자신도 뭔가를 내놓아야하는 강제성을 두고 있습니다.


비트코인의 경제모델

비트코인 및 다른 블록체인기반 가상화폐들은 각각의 경제모델을 갖고 있습니다. 비트코인의 경우 다음 블록을 생성하기 위한 해시(Hash)값을 찾는 작업을 수행해야 하며, 그것은 많은 컴퓨팅 파워를 필요로 합니다. 그래서 많은 노드들이 자발적으로 블록을 생성하는 작업에 참여할 수 있도록, 블록을 생성한 노드에게 보상을 주는 인센티브(Incentive) 모델을 채택하고 있습니다. 이러한 방법들이 대표적으로 PoW, PoS 같은 모델입니다.


작업증명(PoW, Proof of Work)

PoW는 어떠한 작업을 위해 리소스(ex. 컴퓨팅 파워 등)를 투입했다는 것을 증명하여 부정을 억제하는 방법을 말합니다. 즉, 참여를 위해서는 무조건 리소스를 투입해야 하기 때문에 스팸이나 DoS 공격(Denial of Service Attack, 서비스 방해 공격) 등을 하는 것도 부담이 될 수 밖에 없도록 하는 것입니다. PoW의 대표적인 예로 스팸메일을 방지하기 위해 메일의 헤더에 SHA-1 해시값의 처음 20비트가 0이 되는 랜덤값 스탬프를 탑재하는 방법이 있습니다. 메일 1통을 보내기 위해서 약 1초간의 작업이 필요하도록 하는 것입니다. 일반적으로 메일을 보낼 때는 1초는 아무런 문제가 되지 않을 수 있지만, 수백만 건을 한 번에 전송하는 스팸 메일을 보내는 것에는 큰 타격을 줄 수 있는 방법입니다.

비트코인은 PoW 방식을 채택하고 있습니다. 블록을 생성하기 위해서는 고유의 해시값이 필요한데 이 해시값은 특정 알고리즘이나 공식으로 발견할 수 있는 것이 아니라 무작위로 대입을 해서 찾아내야 하는 값입니다. 그리고 이 값의 검증에는 비용이 거의 들지 않도록 하여 해당 작업에 참여한 누구라도 검증은 쉽게 할 수 있도록 했습니다. 그래서 작업에 참여한 노드들 중에서 다음 블록의 해시값을 발견한 노드만 블록을 생성할 수 있도록 하였습니다.

만약 다음 블록 생성에 필요한 비용이 ‘0’에 가깝다면 누구든지 블록을 쉽게 만들 수 있고, 계속 블록을 이어나갈 수 있습니다. 비트코인의 특성상 블록을 생성한 사람이 동시에 나타나면 체인이 분기되어 여러 개가 만들어질 수 있고 그 중 가장 길이가 긴 체인을 선택하도록 되어 있습니다. 즉, 악의적인 노드들이 다수 참여하여 부정한 블록들을 계속해서 만들어가면 비트코인이 붕괴되는 현상까지 발생할 수도 있습니다. 그래서 이를 방지하기 위해서 비트코인에서는 다음 블록 생성에 필요한 비용을 무작위 해시값을 찾는 작업에 투입하도록 했고, 이 시간은 약 10분간 전체 노드의 컴퓨터를 열심히 돌려야 획득할 수 있도록 정했습니다. 즉, 악의적인 노드들이 비트코인 네트워크를 붕괴시키려고 해도 전체 리소스의 일정 수 이상, 51% 이상의 리소스를 투입하지 않고는 공격을 제대로 할 수 없도록 하고 있습니다.


PoW의 문제점

하지만, PoW에는 문제점들이 있습니다. 블록을 생성하기 위해서 아무 의미도 없는 해시값을 찾아내야 하고, 그 작업을 위해 불필요한 리소스들이 대거 투입되어 무의미한 에너지 소비가 증가하는 문제가 있습니다. 실제로 비트코인 마이닝(Mining) 작업을 해보면 전기세가 엄청나게 나오며, 전 세계적으로 보면 이러한 전기 소모는 엄청나다고 볼 수 있습니다.

또한 특정 연산 능력만이 강요되다보니, 연산 능력이 집약된 별도 칩들이 등장하게 되고 화폐 경제에서 ‘가진 자’와 ‘못 가진 자’로 나눠지는 문제가 발생하게 됩니다. 그리고 블록 생성의 보상을 다 같이 나눠갖기 위한 연맹인 마이닝 풀(Mining Pool)이 만들어가지고 이러한 세력 나눔은 더더욱 강화되어버렸습니다.

이러한 문제점들 때문에 다른 가상 화폐들에서는 새로운 형태의 PoW 알고리즘을 찾아내려고 노력을 하기도 하며, PoS 같은 보유 지분에 비례하여 증명이 가능한 방법을 채택하려고 노력하기도 합니다.


지분 증명(PoS, Proof of Stake)

PoS는 블록을 생성할 수 있는 확률을 각 노드가 갖고 있는 토큰의 지분에 비례하도록 하는 증명 방식입니다. 사실 PoS는 토큰의 지분을 투입하는 리소스라고 보면, PoW의 구체적인 하나의 종류라고 볼 수 있습니다. 실제로 PoS의 알고리즘 공식은 ‘다이제스트를 사용한 PoW’로 표현됩니다.

PoS는 기존의 PoW 방식이 갖고 있는 문제점들을 어느 정도 해결합니다.

  • 에너지 소비는 무시할 수 있을 정도로 낮습니다.
  • 리소스 집약이 어렵습니다.

하지만, PoS도 단점들은 갖고 있습니다.


PoS의 단점

PoS는 지분이 많을 수록 더 유리해지는 방식이므로, 각 노드들이 토큰을 수집하기만 하고 사용하지 않으려는 경향이 나타날 수 있습니다. 그래서 사용하지 않는 오래된 토큰에 대해서는 지분 평가를 떨어뜨리는 ‘Proof of Stake Velocity’라는 방식이 제안되고 있습니다.

또한 필요한 리소스 투입 코스트가 너무 저렴하여 ‘아무 것도 수행하지 않는 문제(Nothing at Stake)’가 발생할 수 있습니다. 이 문제는, 어떠한 이유 때문에 체인이 분기된 경우 사태를 수습해야 하는데, 체인이 분기되면 각 노드들은 양쪽 체인 모두에서 같은 양의 지분을 갖고 있게 됩니다. 즉, 양쪽에서 연산을 진행할 수 있기 때문에 굳이 사태를 수습할 이유가 없습니다. 또한 거꾸로 양쪽 체인 모두에게 베팅이 가능하기 때문에 체인 분기를 고의로 노리고 계속 시도할 수 있다는 단점도 있습니다.

그리고 블록체인의 첫 번째 블록에 해당하는 제네시스 블록 시점에서 지분이 100%에 달하기 때문에 시스템을 개시한 사람은 몇 번이고 전체 블록을 다시 만들어낼 수 있다는 치명적인 문제가 있습니다. 그 외의 각 노드들도 지분만 갖고 있으면 그 시점부터 다시 시작하는 것이 가능하기 때문에 PoS만으로는 위변조를 막을 수 없는 단점이 있습니다. 블록을 생성하는 코스트가 너무 낮기 때문에 이전 블록들로 거슬러 올라가서 현재까지의 모든 체인을 위변조할 수 있는 가능성이 존재합니다.


하이브리드 모델

PoW와 PoS가 각각의 특징, 장단점이 있기 때문에 최근에는 하이브리드 방식으로 시도하는 곳도 생겨났습니다. 하지만, PoW와 PoS를 한 네트워크에서 동시에 수행하는 것에는 어려움이 많고 안정성 문제도 많이 발생해서, 동시에 수행한다기 보다는 초반에 PoW로 많은 화폐들을 채굴해놓고, 어느 정도 시점이 흐른 후에 PoS로 전환하는 하이브리드 방식을 많이 고려하고 있습니다.

Runtime Permission

|

Permission

안드로이드에서 App이 단말의 특정 기능을 이용하려면 권한을 가져야 합니다. 특정 기능은 예로 들어 다음과 같은 기능들이 있습니다.

  • 파일 읽고 쓰기
  • 네트워크 사용, 인터넷 접속
  • 카메라 사용
  • 문자 메세지, 주소록 읽기 등

기존에는 AndroidManifest.xml 파일에 개발자가 사용하려는 권한을 등록하게 되어 있었고, Google Play 등의 마켓에서 해당 App을 설치할 때 사용자가 권한 확인을 하도록 했습니다. 그리고 사용자가 원하지 않는 권한이 있을 경우, 그 App을 아예 이용할 수 없도록 했었습니다.

하지만, 6.0 M(마시멜로우) 버전부터는 권한 획득 방법이 바뀌었습니다. App이 실행할 때 사용자에게 권한을 요청하도록 되었으며, 사용자가 특정 권한을 원하지 않을 경우 해당 기능만 빼고 동작할 수 있도록 되었습니다. (물론, App 개발자가 사용자가 권한을 허가하지 않았을 때의 동작도 구현해놓아야 합니다.)


예제

다음 예제는 외부 저장소에 파일을 쓸 수 있는 권한을 요청하는 예제입니다.

  static final int PERMISSION_REQUEST_CODE = 100;

  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      if (checkSelfPermission(permission.WRITE_EXTERNAL_STORAGE)
          != PackageManager.PERMISSION_GRANTED) {
        String[] permissions = new String[]{permission.WRITE_EXTERNAL_STORAGE};
        requestPermissions(permissions, PERMISSION_REQUEST_CODE);
      }
  }

  @Override
  public void onRequestPermissionsResult(int requestCode, String permissions[],
      int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
      case PERMISSION_REQUEST_CODE:
        if (grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
          Toast.makeText(getApplicationContext(), "Permission 완료", Toast.LENGTH_SHORT).show();
        } else {
          Toast.makeText(getApplicationContext(), "Permission 실패", Toast.LENGTH_SHORT).show();
        }
        break;
    }
  }

작업 관련 명령어들

|

최근에 []구글 클라우드 플랫폼(GCP, Google Cloud Platform)](https://console.cloud.google.com/)을 이용해서 폴로닉스(Poloniex) 비트코인 랜딩봇을 돌려보고 있습니다. 그런데, 구글 클라우드 플랫폼에 SSH 터미널로 접속해서 랜딩봇을 실행한 후 터미널을 빠져나오면 해당 프로그램이 항상 종료가 되어서 다음 명령어들을 찾아보고 공부해보게 되었습니다.


프로그램 실행

터미널에서 랜딩봇을 실행하는 명령어는 다음과 같습니다. (다음 번에 터미널에서 복사해서 붙여넣기 편하게 하기 위해서 적어봅니다.)

python lendingbot.py


또는 데몬형태의 백그라운드로 돌릴 수도 있습니다.

python lendingbot.py &


그리고 해당 프로세스가 잘 돌아가는지 확인하는 것은 다음 명령어를 이용해서 확인할 수 있습니다.

ps -efc | grep python


또한 실행중인 프로그램을 잠깐 멈추는 방법은 Ctrl + Z 키를 누르면 됩니다. 프로그램은 ‘Stopped’ 상태가 됩니다.

Job control commands in Linux

  • jobs : 작업 리스트를 출력합니다.
  • bg [job id] : 해당 id의 작업을 백그라운드로 보냅니다. '&'를 이용해서 프로그램을 실행한 거랑 동일한 효과입니다. 백그라운드로 보내면서 프로그램은 'Running' 상태가 됩니다.
  • fg [job id] : 해당 id의 작업을 포어그라운드로 가져옵니다.
  • kill [job id] : 해당 id의 작업을 정리합니다.
  • disown [job id] : 해당 id의 작업의 소유권을 지워버립니다. 원래는 해당 작업의 소유권을 터미널이 갖게 되는데 이 명령어를 이용하면 해당 소유권이 지워지고 터미널을 로그아웃해도 프로그램은 계속 동작하게 됩니다. disown 뒤 작업 id가 오류를 내기도 하는데, 그런 경우는 disown 만 단독으로 사용할 수도 있습니다.
  • nohup [명령어] : 터미널에서 종료를 해도 명령어 부분이 계속 실행되도록 하는 명령어 ex) nohup python lendingbot.py &

블록체인과 사이드체인

|

블록체인 또는 비트코인을 공부하다보면 컬러드 코인(Coloredcoin), 메타코인(Metacoin), 멀티시그(Multi-Sig) 등의 용어들이 등장합니다. 그러면서 사이드체인(Sidechain)이라는 용어도 등장하게 될텐데, 사이드체인이란 무엇을 말하는 것인지 포스팅해보도록 하겠습니다.

image -fullwidth


사이드체인이란

사이드체인이란 서로 다른 블록체인들 위에 존재하는 자산들(Assets, 쉽게 말해서 코인들)을 쉽게 거래할 수 있도록 하는 기술입니다. 예를 들면 비트코인의 자산과 이더리움의 자산을 서로 거래할 수 있다는 말입니다. 현재 수많은 블록체인 기반의 암호화폐들이 등장하고 있는데, 상당수의 화폐들은 사이드체인 기반으로 구현되어 있습니다. 왜 사이드체인을 이용할까요?

쉽게 생각해보면 비트코인이나 이더리움이나 각각의 화폐들은 장단점이 있고, 누군가 자기 입맛에 맞도록 수정하는게 어렵습니다. 그렇다고 새로운 화폐를 만들려고 하니, 아무래도 제일 문제가 되는 건 해당 화폐의 블록체인을 돌리고 있는 노드수입니다. 새로운 화폐이다보니 노드 수가 얼마 안되고 이는 ‘51퍼센트 공격’이나 다양한 공격에 쉽게 노출이 되는 문제가 발생하게 됩니다. 그래서 신규 화폐들은 사이드체인을 이용해서 기존에 많이 퍼져있는 비트코인이나 이더리움의 리소스를 활용하고 그 위에 자신의 입맛에 맞는 화폐를 구축하는 방법을 많이 사용합니다.


비트코인의 단점들

가장 대표적인 블록체인기반 가상 화폐는 비트코인입니다. 가장 먼저 나와서 많은 점유율을 갖고 있지만, 그만큼 가장 오래된 기술로 구현되어 있습니다. 대표적인 비트코인의 단점들은 다음과 같습니다.


성능

비트코인은 느립니다. 마이닝 속도가 약 10분 정도라서 느린 것도 있지만, 블럭 사이즈 한계(현재 1MB로 맞춰져 있습니다.)도 있고 다양한 문제점들이 있어서 속도 문제가 많이 발생합니다. 심한 경우 송금을 했을 때 몇 주씩 걸리는 경우도 있을 정도입니다.

비트코인만 거래 가능

당연하겠지만 비트코인 블록체인 상에서는 비트코인 거래만 가능합니다. 각 업체들의 입맛에 맞는 다른 코인들의 거래는 불가능합니다. 예를 들어 익명성이 보장된 코인을 만들거나 하는 것도 불가능합니다.

다양한 서비스로의 확장 불가능(스마트 컨트랙트 미지원)

비트코인은 화폐 거래에만 목적으로 만들어졌기 때문에, 블록체인 기반의 다른 서비스로의 확장은 많이 어렵습니다. 블록체인 기반의 대표적인 서비스인 ‘스마트 컨트랙트(Smart Contract)’나 탈중앙화 어플리케이션(DApp, Decentralized Application)은 비트코인 위에서는 거의 불가능합니다.


사이드체인의 원리

그러면 과연 어떤 방식으로 다른 블록체인에서 비트코인을 거래할 수 있다는 것일까요?

담보물을 맡기고 돈을 빌리는 것을 생각하면 됩니다. 비트코인 소유자가 다른 블록체인 위에서 거래를 하고자 할 때, 기존 비트코인을 ‘동결(Freeze)’시킵니다. 그리고 이 비트코인에 해당하는 ‘대체물(Counterpart)’을 만들어 교환하게 됩니다. 이렇게 만들어진 대체물은 사이드체인 위에서 얼마든지 입맛에 맞게 사용되어질 수 있고, 나중에 비트코인으로 다시 교환해갈 수 있습니다.


사이드체인의 시사점

사이드체인을 이용하여 서로 다른 블록체인간 거래를 할 수 있다는 점은 시사점이 큽니다. 다양한 장단점이 있는 수많은 블록체인들이 서로 긴밀하게 거래가 되고, 한 군데서 관리까지 가능한 형태가 될 수 있습니다.

비트코인이 갖고 있는 약점인 속도나 확장성, 익명성(장점이자 약점인) 등은 사이드체인을 통해 또 다른 블록체인 위에서 극복이 가능합니다.

또한, 새로 만들어지는 블록체인은 사이드체인을 이용해서 비트코인의 해시파워 기반의 보안성이나 무결성을 획득할 수 있습니다.