파이썬 커리큘럼

파이썬을 배울 때 뭘 어떻게 찾아봐야 하는가?

  1. 파이썬의 (간략한) 역사
    1. 다른 언어와 비교할 때 파이썬의 특징
  2. 파이썬 설치하는 방법.
    1. 파이썬2? 파이썬3?
    2. 공식 리포지토리
    3. 인텔 파이썬
    4. pip
    5. numpy, scipy 등 추가 패키지 찾기, 설치하기
    6. (옵션) 리눅스, 맥에서는?
  3. 커맨드라인 파이썬 실행방법
  4. 파이썬 개발용 IDE 선택하기 및 설정하기
    1. geany
    2. IDLE
    3. 그 외
  5. 기초 문법
    1. Hello, world!
    2. 파이썬에서 들여쓰기에 관하여
    3. 주석 달기
    4. 한글 사용
    5. 변수, 함수, 클래스에 이름을 지어주는 방법
    6. 변수
      1. 변수의 선언
      2. 변수의 사용법
      3. 변수에 값 집어넣기와 값 복사하기
      4. 변수의 종류(type)
        1. 타입 지정, 타입 변환
      5. 리스트, 딕셔너리, 튜플
        1. 리스트의 사용법
          1. 시작은 0부터
          2. 가운데만 골라내기
          3. -1번째 요소
          4. 리스트에 사용할 수 있는 연산자 +, *
          5. 리스트의 메소드
          6. range
        2. 딕셔너리의 사용법
          1. 딕셔너리의 메소드
        3. 튜플의 사용법
          1. a, b = c, d
          2. 튜플의 메소드
        4. in
      6. 문자열 사용법
        1. escape 문자열
        2. 제어문자
        3. 문자열의 메소드
      7. 숫자
        1. 실수와 정수의 차이 – 점(.)을 찍는가 찍지 않는가
        2. 복소수 사용법
        3. 사칙연산 +, -, *, –
        4. 지수연산 **
        5. 나머지연산 %
        6. 크기 비교
        7. +=, -=, *=, /=
        8. 타입이 다른 숫자들 사이의 연산
        9. 연산자 우선순위
    7. 조건문
      1. True, False
      2. if, else, elif
      3. 연산자 “==”
      4. not, and, or
    8. 반복문
      1. for
      2. while
      3. break
      4. continue
    9. 예외처리
      1. try
      2. except
      3. error객체
      4. finally
      5. pass
    10. 함수
      1. 함수의 선언
      2. 함수의 사용법
        1. 변수의 전달 arg, kwds
      3. return을 쓰자
    11. 파일 다루는 방법
      1. 파일 만들기, 열기, 닫기
      2. 읽기, 쓰기, 추가하기
      3. 텍스트 파일, 바이너리 파일
      4. 파일이름과 경로명 다루기
    12. eval
    13. lambda
    14. map
    15. reduce
    16. filter
    17. 클래스
      1. 클래스와 객체와 인스턴스
      2. 클래스의 선언
      3. 클래스의 사용법
        1. 초기화
        2. 멤버변수(프로퍼티)
        3. 멤버함수(메소드)
        4. 클래스의 상속
          1. 다중상속
          2. self, parent
        5. 다형성
        6. 멤버 은폐하기(encapsulation)
    18. 라이브러리 불러오기 “import”
      1. 일부만 불러오기 “from”
      2. 이름 바꾸기 “as”
    19. 연산자 오버로드
  6. GUI 프로그래밍 – wx
    1. GUI 디자인 툴
    2. 창 만들기
    3. 텍스트 칸
    4. 버튼
    5. 메뉴바
    6. 아이콘
    7. 이벤트 사용
    8. 마우스 클릭
  7. 정규표현식
  8. 멀티스레딩, 멀티프로세싱
    1. 스레드와 프로세스
    2. 해보기
    3. 메시지 큐
    4. 변수 전달
    5. 전역 잠금
    6. 동기화
    7. 멀티프로세싱에서 lambda
  9. numpy, scipy 사용법
  10. C언어 가져오기
    1. ctypes
    2. SWIG
  11. 하드웨어 제어하기
  12. 디버깅
  13. 파이썬 코드 최적화 기법
  14. 남에게 배포하기 “py2exe”

자유란

너무 급진적인 생각인지도 모르지만 단상을 하나 적어둔다.

사람은 다른 사람에게 자신의 사상을 강요할 권리는 일반적으로 없지만, 자신의 사상을 강요할 자유는 있다. 물론, 그렇게 강요받는 당사자 역시 자신의 사상을 바꾸지 않을 자유가 있고, 관철시킬 자유가 있으며, 자신에게 사상을 강요하는 자에게 거꾸로 본인의 사상을 강요할 자유 역시 갖고 있다. 인간은 평등하니까. 하지만 많은 사람들이 자기가 갖고 있는 자유는 생각하면서 남들이 갖고 있는 자유는 생각하지 못하는 것 같다.
이 상태를 생각하고나면 떠오르는게, 사람들이 만나서 서로 자기의 사상을 강요하면 서로 괴로우니까 자기 생각을 적당히 숨기고, 적당히 다듬어서, 서로 괴롭지 않은 상태를 유지하기 위한 사회적 규칙이 생각난다. 도덕, 예절, 윤리, 그런 것들이다.
이것들을 자신의 마음, 생각, 욕망, 사상에 솔직하지 않은 것이라 생각한다면, 그렇게 생각하는 것 또한 그 개인의 자유이다. 그리고 다시한번 말하지만, 그 생각을 그렇다고 다른 사람들에게 말하고 다니는 것도 전달하는 것도 강요하는 것도 그 개인의 자유이다. 하지만, 그러니까 다시 한번 말하지만, 보다못한 다른 사람이 그에게 닥치라고 말할 수 있다는 것 역시 자유에 포함된다는 걸 알고는 있었으면 좋겠다. 그런게 기분나쁘더라도 화내지 말라는 것은 아닌데, 최소한 자신의 자유와 모든 사람이 평등하다는 것을 알기라도 했으면 좋겠다.

의견을 관철하기

  • 잡설

자신의 의견을 관철시키는 것은 인생에 있어서, 어쩌면, 가장 중요한 일이라고 할 수 있다. 인생은 자기 자신의 선택과, 자기 자신에게 주어진 환경이라는 두가지 원인을 바탕으로 미래가 결정된다. 선택은 필연이고 환경은 우연이다. 자신의 선택과, 그를 바탕으로 한 노력은 큰 이득을 볼 수 없지만 꾸준히 결과를 쌓아갈 것이고, 우연히 주어진 환경과 운 좋게 다가온 기회는 큰 이득을 주겠지만 결과를 기대할 수 없다. 운이 없다면 살면서 단 한번도 기회가 오지 않을 수도 있기 때문이다. 노력하지 않으면 성공할 수 없겠지만, 성공하지 못했다고 노력하지 않은 것은 아니다.

자신의 의견을 관철시키는 것은 성공하기 위해 해야 하는 가장 적극적인 방법 중 하나일 것이다. 나는 자연현상을 연구하면서 내가 생각하는 가설이 세상을 설명한다고 주장하며, 그 주장을 관철시키기 위해 증거를 찾아내야 한다. 그 증거를 찾아내기 위해 다양한 방법을 사용해야 하고, 그걸 왜 사용해야 하는지 역시 다른 사람들에게 관철시켜야 한다.

사람들은 자신의 의견을 관철시키기 위해 투쟁한다. 온갖 방법을 써서 외친다. 그것이 다른 사람의 맘에 들지 않을 수도 있고, 그것을 관철시키는 것을 방해하는 것이 다른 사람의 의견일 수도 있다. 어떤 사람들은 유사과학을 외칠 수도 있고, 누군가는 사기를 칠 수도 있다. 소수자 인권을 외칠 수도 있고, 돈이 최고라고 주장할 수도 있다.

그런 수많은 투쟁들 속에서 살아가다가, 어떤 사람은 힘이 없고, 어떤 사람은 소심하고, 어떤 사람은 자신이 없어서 패배할 수 있다. 아마 대부분의 시도와 노력은 실패로 돌아갈 것이다. 자신이 할 수 있는 선택이 포기하느냐 마느냐밖에 없는 상황에 처할 것이다. 포기할수도 없고 포기하지 않을수도 없는 절대적인 상황에 처할 것이다.

모든 것을 혼자 해야 할 것 같다는 생각이 들 것이다. 세상에 내던져진 입장에서 이 모든 인생을 나 혼자 해내야 하고, 아무도 나를 도와주지 않을 것이다. 도와달라고 말해도 아무도 도와주지 않을 수도 있다. 하지만 도와달라고 말하는 것 또한 시도이고 도전이다. 혼자서 해낼 수 없는 일이라는 생각이 들면 도와달라고 하고, 다른 사람이 도와달라는 말에 도와주는 사람도 있게 마련이다. 물론 도와주는 사람이 아무도 없을 수도 있다. 도와주겠다는 사람을 만나지 못할 수도 있다. 아무리 많은 사람들이 도와줘도 해내지 못할 수도 있다. 하지만 그래도 말해야 한다.

다른 사람한테 도와달라고 말해도 된다는 사실을 아무도 가르쳐주지 않을 수도 있다. 그런 사실을 알고 있더라도 사람들은 스스로 해내기를 좋아하고 자신이 해냈다는 걸 자랑하고 싶어한다. 하지만 꼭 하고 싶은 일이 있고, 반드시 해내야 하는 일이 있을 때, 누군가의 도움으로 해결할 수 있는 일이라면 도와달라고 부탁해야 한다.

반론이 있을 수 있다. 인맥을 이용해 청탁을 한다거나, 뇌물을 주면서 행정적인 처리를 부탁한다거나, 그런 부탁도 하라는 말이냐? 내 주장에서는 그런 것 역시 포함될 것이다. 수단과 방법을 가리지 않고 자신의 성공을 위해 그렇게 해야 할 수도 있다. 하지만, 불법적인 일에는 누군가 피해자가 있을 것이고, 그 피해자 역시 자신의 피해 구제를 위해서 적극적으로 노력할 것이다. 그런 피해자를 도와주는 사람 역시 있을 것이다.

싸우자. 해야 할 일이 있고, 해내야 할 일이 있으면 끝까지 싸우자. 이기지 못해도 싸워야 할 것이다. 사람들은 그렇게 도와달라고 말하고, 도와주고, 서로 도움을 주면서 살 것이다.

인공지능과 자아복제의 문제

간단한 생각이다. 앞으로 인공지능 기술이 발전하여, 어떤 개인의 행동패턴, 언어습관, 지식 등을 학습시키면 그 사람처럼 행동하는 어떤 프로그램을 만들 수 있을 것이다. 여기까지는 시간의 문제일 뿐 기술적 문제는 아니라고 생각한다. 그런데 문제는 그렇게 되었을 때 그 개인의 자아는 그렇게 인격이 복사된 프로그램을 자아로 인식할 수 있을 것인가. 일단은 불가능해 보이는데, 만약 뇌-기계 인터페이스가 보다 진보된 형태로 나타난다면 가능할 수도 있다.

이 문제에 대해서 공각기동대에서는 ‘고스트’라는 개념을 도입해서 해결하고 있지만, 과연 현실에서도 고스트라는 것이 실존할 수 있을지는 의문이다.

이렇게 해서 어떤 인격이 자동화된 프로그램으로 나타날 수 있게 되면, 본인이 죽더라도 그 주변의 사람들은 본인이 살아있을 때와 마찬가지로 그와 상호작용하면서 마치 그가 살아있는 것 처럼 느끼고 생각할 수 있을 것이다. 그렇다면 이 프로그램에는 인격을 부여해야 하는가 말아야 하는가.

만약 기술과 사회가 고도로 발달하여 위와 같은 인격적인 프로그램들만 다수로 남게 된 세상에서 인간은 어떤 형태로 남아있을 것인가.

블록체인의 미래

암호화폐가 화폐로써의 실질적 기능이 가능한가 아닌가는 블록체인에 분산저장되어 있는 거래내역을 정부 또는 법원이 믿는가 믿지 않는가에 달려 있다. 시스템으로써는, 그리고 알고리즘으로써는 블록체인의 무결성과 신뢰성이 확실하지만, 어쩄든 그걸 믿느냐 마느냐는 법원의 판단이니까. (그런점에서 미래의 법관과 공무원 꿈나무들 중에 코인판에 돈 좀 부어본 친구들이 많을 수록 블록체인과 암호화폐의 미래는 “어쨌든” 밝다. 그때까지 버틸 수 있느냐는 다른 문제지만.)

블록체인, 암호화폐, 플랫폼의 미래

(*이 글에서 주장하는 부분들은 기억에 근거하고 있으며, 누군가 근거를 제시하라고 하면 검색해서 찾아볼 수는 있습니다. 이 글이 학술논문은 아닌고로, 혹시 주장의 근거가 필요하신 분은 댓글로 요청하시면 찾아다 드리겠습니다.)

최근 비트코인을 비롯한 수많은 종류의 암호화폐가 등장하고 있고, 많은 사람들이 여기에 대량의 돈을 퍼부으면서 투자(또는 투기)를 하고 있다. 암호화폐는 그 기술적 배경으로 블록체인이라는 것을 두고 있다. 블록체인이란 간단히 말해서 거래 과정이 거래에 참여한 모든 참가자들에게 분산저장되는 구조이다. 기술적으로는 암호화 기술과 작업증명이라는 용어를 써서 설명하고 있지만, 쉽게 말해서 암호화폐를 갖고 있는 모든 참가자 각각이 거래 장부의 사본을 갖고 있는 것을 컴퓨터 기술을 이용해 구현했다고 보면 된다.

결론을 먼저 말하자면, 나는 여기에 컴퓨터와 인터넷이라는 것의 개념을 바꿀만한 혁신적인 요소가 담겨있다고 생각하며, 인터넷은 이제 개인의 정보교류를 위한 플랫폼을 넘어서서 거의 공기나 물과 같은 수준으로 인간에게 필수적인 요소가 될 것으로 본다.

암호화폐를 사용할 때의 금전적 보상, 이득, 그리고 그에 대한 가치 평가와는 별개로, 거래에 참여한 사람들에게 보상이 저절로 돌아가면서 중앙집중식 처리 체계가 가지는 단점을 극복할 수 있는 블록체인 기반 분산처리 기술이 미래에 등장할 여러 플랫폼 중에서 지배적 위치를 차지할 것은 분명해 보인다. 어떻게 그렇게 되는 것인가? 중앙집중식 처리 체계는 중앙의 메인 서버에서 이용자가 요구하는 모든 상호작용의 모든 세부 과정을 관리한다. 이 체계는 메인 서버를 관리하는 관리 주체를 얼마나 믿을 수 있느냐에 따라 그 신뢰성이 정해진다. 가령, 국가라든가 은행이 그 과정을 통제하는 업무는 국가나 은행이 망하지 않는 한 그 상호작용과 자료에 관한 기록을 믿을 수 있다. 그리고 이 체계는 법적인 구조 위에 얹어져 있는 상태이므로, 이 체계를 관리하는 관리자나 소속 직원들이 고의나 과실에 의해 손해를 끼치게 되더라도 그들이 처벌을 받고 피해에 대해 보상 받을 것이 법에 의해서 보장된다. (물론 딱 법에 의한 만큼만 보장된다.) 문제는 이보다 작은 규모의 주체가 관리하는 서버에 대해서는 그만큼 안정성과 신뢰성이 줄어든다는 점이다. 가령, 이제는 없어진 이메일 서비스들에 저장되어 있던 이메일은 미리 백업을 받아두지 않았다면 더이상 복구할 수 없다. 또는, 우리나라의 전자책 업체에서 구입한 책들은 DRM이 붙어서 특정한 프로그램에서만 볼 수 있도록 되어 있는데, 만약 해당 전자책 업체가 없어지거나, 서비스를 못하겠다고 한다면 우리는 더이상 그 전자책을 볼 수 없고, 아마 환불도 받을 수 없을 것이다. 이렇게 없어지는 경우가 아니라 하더라도, 해당 서버에 서비스 거부 공격(Denial of Service attack, DoS)이 들어가게 된다면 우리는 그 서비스를 사용할 수 없다. 그리고 어떤 경우, 믿을 수 있다고 생각한 정부 기관의 서버나 은행의 서버가 해킹될 수도 있고 우리는 이미 농협 사태에서 그런 상황을 마주한 적이 있다. 물론, 메인 서버에 저장되어 있는 정보가 어딘가에 백업되어 있다면 우리는 해킹을 당하더라도 백업본을 사용하여 서비스를 복구할 수 있다. 대부분의 경우 중앙 집중식 처리 체계의 백업본은 역시 메인 서버의 관리자가 적절한 방법을 사용하여 생성하여 잘 보관하고 있겠지만, 이 경우에도 관리자가 서버를 복구하고 서비스를 재개할 때 까지는 해당 자료나 서비스의 사용이 불가능해진다. 만약 이 백업본을 모든 사람이 갖고 있다면 어떻게 될까? 해커는 특정 서버 하나의 취약점을 공략하는 것 뿐만 아니라 해당 백업본을 가진 모든 사람을 동시에 공격해야 한다. 그리고 그렇게 하는 것이 하나만 공격하는 것 보다 훨씬 어렵다는 것은 당연한 일이다. 심지어 농협 해킹 사태때는 백업본까지 사라졌었다. 이런 상황에 대해, 블록체인 기술을 도입한 암호화폐는 괜찮은 해결책을 내놓는다. 모든 거래 참여자가 장부를 갖고 있고, 거래를 시도할 때 그 장부의 변조 여부를 네트워크 전체에 물어보는 것으로써 확인한다. 모든 거래 참여자가 각자 자신이 가진 장부를 똑같은 방식으로 변조할 이유는 전혀 없고, 누군가 자신의 이득을 위해 장부를 변조한다면 누군가는 반드시 손해를 보게 되므로 손해를 보기 싫어하는 대다수는 변조된 장부의 내용을 확인해 달라고 했을 때 협조할 이유가 없게 된다. 그리고 여기에 송금과 같은 화폐 거래를 하는 등의 기록 추가를 요청하면, 해당 내용이 네트워크 전체에 전달되어 거래가 성립한다. 즉, 모든 사람이 모든 사람의 거래를 투명하게 지켜보고 있음을 기술적으로 가능하게 만든 것이다. 이런 방식의 분산 처리는 이전에도 있어왔다. 예를 들어, 위키백과와 같은 참여형 백과사전의 경우 참여자가 자신의 지식을 표제어의 내용에 추가하고 보충하여 완성되고 있는데, 여기에는 일부 악의적인 이용자가 있다 하더라도 대다수의 참여자가 내용을 확인하고 다시 원래대로 고칠 것이므로 내용의 진실성과 신뢰성은 꽤 높게 유지될 것이라는 가정이 있다. 하지만 실제로는 인기가 없는 항목의 경우 악의적 이용자가 고친 내용이 틀린 내용으로 오랫동안 남아있는 등 단점이 드러나기도 하였다. 블록체인은 모든 참여자가 내용을 공유하므로 개인이 임의로 내용을 고칠 수 없어서 내용의 진실성과 신뢰성이 매우 높게 유지된다. 가령, 화물 운송의 경우에 운송이 필요한 물류와 운송에 필요한 수단을 모두 블록체인으로 유일하게 코드화하여 네트워크에 올리고 다닌다면, 운송되었다는 거래도 증명되고, 운송 과정에 필요한 기름값도 블록체인 기반의 암호화폐로 처리하여 적절히 정산되고, 과적이 되었는지 어쨌는지 체크할 수도 있다. (구체적인 기술이 어떻게 될지는 모르겠으나, 원론적으로 이런것들은 반드시 구현 가능하다.)

여기서 암호화폐 자체보다 블록체인 기술에 관심을 둬야 하는 이유는 그 가능성 때문이다. 예를 들어, 암호화폐이자 플랫폼인 이더리움의 경우 튜링 완전인 코드를 올릴 수 있는 플랫폼이다. 이것은 우리가 지금까지 컴퓨터로 하는 모든 작업을 인터넷에서 돌릴 수 있다는 뜻이다. 즉, 인터넷 자체가 하나의 거대한 컴퓨터로써 기능할 수 있음을 뜻한다! 이게 얼마나 굉장한 것이냐 하면, 예를 들어 코드를 적절히 짠다면, 제약회사에서 신약후보군을 찾기 위해서 돌리는 슈퍼컴퓨터 계산 코드를 인터넷으로 올릴 수가 있다. 그리고 여기에 작업당 단가를 산정해서 올리면, 컴퓨터가 놀고 있는 사람들은 이 단가를 받아서 계산을 대신 수행 시켜줄 수 있다는 뜻이다. 그리고 이 과정 전체를 자동화시켜서, 자기 컴퓨터가 놀고 있을 때만 그렇게 수행하고, 자기가 컴퓨터를 쓰고 있을 때는 그렇게 하지 않도록 만들 수도 있다. 이게 왜 굉장한 일이냐면, 지금 전세계에서 인터넷에 연결된 컴퓨터들 중 대부분은 아무일도 하지 않고 전기만 낭비하는 열원이다. 이걸 다 돈으로 바꿀 수 있다는 뜻이다. 그것도, 앞서 예를 들었듯이 예를 들어 신약개발이라는 새로운 실체의 제작에 도움을 주면서 말이다. 비트코인의 경우, 컴퓨터는 열심히 계산을 돌리고 사람들은 그 계산 결과를 공유하면서 돈을 거래하지만 실제로 나타난 실체는 아무것도 없고 계산 결과 그 자체에 돈으로 바꿀 수 있는 수표조각이라는 것 이상의 의미를 부여하는 것은 불가능하다. 즉, 비트코인은 본질적으로 천원짜리를 이천원에 사느냐 오백원에 사느냐의 문제를 다루는 것에 불과하다는 뜻이다. 하지만 이것이 플랫폼이 되어서 인터넷에서 코드와 자료를 다룰 수 있게 되면 혁신적인 일들이 가능해진다. 전세계의 노는 컴퓨터를 갖고 있는 사람들은 놀게 두느니 뭐라도 계산을 시켜서 푼돈이라도(=전기요금이라도) 버는 것이 나을 것이고, 계산이 필요한 수요자들은 자신의 고민거리를 인터넷에 올려서 적절한 가격으로 결과를 뽑아낼 수 있다. 쉽게 말해서, 인터넷 전체를 아마존 웹 서비스(AWS)처럼 쓸 수 있게 된다는 뜻이다.

물론 현재도 인터넷 기반의 분산처리는 가능하다. 패러랠 컴퓨팅, 클라우드 컴퓨팅, 그리드 컴퓨팅과 같은 다양한 기술을 통해서 대량의 자료와 연산을 다수의 컴퓨터에 나눠서 처리할 수 있다. 하지만 그렇게 하기 위해서 별도의 프로그램이 필요하고, 만약 상호작용에 인증 보안이 요구된다면 그걸 담보하는 인증 코드와 루틴이 추가적으로 필요하다. 필요한 메모리와 네트워크 대역폭같은게 있으면 그에 따른 최적화도 해야 한다. 하지만 이더리움과 같은 플랫폼에서 제공하는 블록체인 위의 코드와 자료를 거래하는 시스템이라면 필요한 자료의 제공과 연산에 필요한 코드의 구현에만 집중하고 그 외의 부수적인 부분을 크게 신경쓰지 않아도 된다. 전세계의 컴퓨터가 여기에 연동되어서 동참한다면, 가령 비싼 현상금이 걸린 연산이 있으면 슈퍼컴퓨터는 같은 시간동안 더 빠르게 처리하여 더 많은 수익을 얻을 수 있고, 여기에 느린 컴퓨터라고 해도 일부 참여하여 수익을 나눠가질 수 있다. 수요와 공급이 저절로 촘촘하게 채워진다. 이 상황이 빠른 시일에 도래하지는 않겠지만, 기술이 극한까지 발달할 경우 모든 사람들에게 공기와 같은 수준으로 제공될 수도 있다.

인터넷 전체가 코드와 자료를 처리할 수 있다는 것이 어째서 그렇게 의미심장한가? 공각기동대(다른 선례가 있을지도 모르지만 내가 아는게 이것뿐이라)에 보면 “인형사”라는 프로그램이 등장한다. 이 프로그램은 인공지능인데, 누군가 개발해서 생성된 것이 아니라 정보의 바다속에서 저절로 생성되었다고 스스로 그렇게 주장하고 있다. 공각기동대 내부에서 인형사가 뭔짓을 했는지는 작품을 직접 감상하도록 하고, 그렇게 될 수 있는 인터넷 전체에 뿌려진 코드와 자료는 인형사라는 존재의 출현 가능성이 열린 것이라는 생각이 든다. 그 시작은 어쩌면 자발적이지 않을 수도 있겠지만, 만약 스스로 진화하는 코드를 인터넷에 누군가 흘려보낸다면, 이 코드는 진화에 진화를 거듭해서 “언젠가는” 강한 인공지능에 해당하는 성능을 갖게 될 수도 있다. 이 시나리오가 전혀 그럴듯해보이지 않을수도 있겠지만, 강한 인공지능이 인간에 준하는 급의 지능수준을 갖는 어떤 대화형 프로그램 체계라고 한다면, 지난 45억년동안 자연이 온갖 삽질을 반복한 끝에 적어도 하나의 그러한 사례인 인간이 만들어졌다. 그것도 이 지구에 수십억 개체씩이나 생성되어있다. 인터넷 전체의 처리용량은, 처리하는 코드와 자료들이 무질서해서 그렇지 계산하는 양을 놓고 보면 인간의 두뇌에서 시냅스들이 정보를 교환하는 양에 필적할 수도 있다. 지금 그렇지 않다 하더라도 미래의 언젠가는 반드시 그렇게 될 것이다. 인간은 계속해서 더 좋은 컴퓨터를 더 많이 사려고 할 테니까. 그렇다면 스스로 진화하는 코드가 등장해서 강한 인공지능을 보여주지 말란 법도 없다. (튜링 넘버링에 의하면 어떤 하나의 수는 하나의 프로그램인데, 충분히 큰 어떤 수는 그런 인공지능에 해당하는 프로그램이 될 수도 있다. 물론 이건 내 개인적인 추측이며 수학적으로 증명가능한지는 모른다.)

 

 

Just be conscious

Just be conscious / 林原めぐみ

作詞;MEGUMI
作曲;佐藤英敏 編曲:添田啓二

広がる思い彼方へ続く 펼쳐져 가는 추억의 저편으로 이어져
今思い出すソラの果て 지금 생각난 하늘 끝까지
選び生まれ落ちたこの地で 선택되어 태어나버린 이 세상에서
出会いと別れ 束の間に過ぎる 夢 만났다 헤어지는 순간동안 흘러가버린 꿈

響け 思いよ力の限り 울려라, 추억이여 힘 닿는데까지
届け 心の奥深く 닿아라, 마음 속 깊은 곳까지
走れ 後ろは振り向かないで 달려라, 뒤는 돌아보지 말고
時は プロローグを刻む 시간은 서문을 적어간다

抑圧の中塞ぎ止められて 억압받아서 막힌 것은
他人(ひと)を責めても変わらない 누굴 탓해도 변하지 않아
運とチャンスと偶然とタイミング 운, 찬스, 우연, 그리고 타이밍
心磨ぎ澄まし続ける 마음을 다잡고 느껴보는거야

人は傷を知る度に 사람은 상처를 받을 때마다
強く優しくなれる 강하게, 부드럽게 변하지
涙のあとの真実 울고 난 후의 진실은,
かけがえない今を生きてる 끝이 없는 지금을 살아간다는 것

明日の自分を好きになりたいから 내일의 자신을 좋아하고 싶으니까
今日の自分をギュッと抱きしめる 오늘의 자신을 꼭 끌어안는거야
自分が主役の人生(ドラマ)ぐらいは 자신이 주인공인 드라마따위
楽しまなくちゃもったいないわ 재미없을 정도로 지루해
ハッピーエンドだけじゃ物足りない 해피엔딩만으로는 부족해
時には涙もエッセンスなの 때로는 눈물도 필요한 법
泣いて傷ついてそして立ち直って 울고 상처입고 그리고 다시 일어서며
演じてみせるわフィナーレまで 완수해 보일거야 끝까지

祈れ 言葉は姿を変える 기도해라, 약속은 현실로 변하고
進め 信じてこの道を 나아가라, 믿고 있는 이 길을
掴め 両手に今その夢を 가져라, 양손에 지금 그 꿈을
余計なプライド脱ぎ捨て 쓸데없는 자존심은 집어 치우고

同じ苦しみ繰り返してる 똑같은 고통을 반복해 간다는걸
気付くまでずっとラビリンス 알아챌 때까지 미로 안이겠지
抜け出す術(すべ)は必ずあると 빠져나갈 방법은 반드시 있다고
耳を澄まして見つけ出す 귀를 기울여서 찾아내는거야

人は孤独を知る度 사람은 고독을 느낄 때마다
ぬくもり捜し求め 따스함을 찾아다니지
傷を癒やして眠るの 상처를 치유하고 잠드는 거야
かけがえない未来(あす)に向かって 끝나지 않을 내일을 향해서

幸せのかたちそれぞれ違うのよ 행복의 모습은 각자 다른거야
他人の言葉に惑わされない 타인의 말에 휘둘리면 안돼
信じるものが私の現実 믿고 있는 것이 나의 현실
恩着せがましい偽善(あい)なんていらない 은혜를 배풀고 생색내는 위선(사랑)따위 필요 없어

せっかく今を生きているのだから 모처럼 지금을 살아가고 있는 것이니까
好きなこと楽しいことしなくちゃ 좋아하는 일 신나는 일 하지 않으면 안돼
次の人生(アンコール)なんて待っていられない 다음 삶 같은거 기대할 수 없으니까
精一杯の今に乾杯! 소중한 지금 이 순간에 건배하자!

明日の自分を好きになりたいから 내일의 자신이 좋아질 것 같으니까
今日の自分をギュッと抱きしめる 오늘의 자신을 꼭 끌어안는거야
自分が主役の人生(ドラマ)ぐらいは 자신이 주인공인 드라마 따위
楽しまなくちゃもったいないわ 재미 없을 정도로 지루해
ハッピーエンドだけじゃ物足りない 해피엔딩만으로는 부족해
時には涙もエッセンスなの 때로는 눈물도 필요한 법
泣いて傷ついてそして立ち直って 울고 상처입고 그리고 다시 일어서며
演じてみせるわフィナーレまで 완수해 보일거야 끝까지


음원은 유튜브에서 구할 수 없어서 포기했다. 이 곡은 슬레이어즈 RETURN의 엔딩곡으로, 하야시바라 메구미가 가사를 쓰고 노래도 했다. 나에게는 거의 복음성가급 찬송에 해당하는 노래로, 아마 수천번을 들었고 앞으로 수만번을 더 들으며 살 것 같다. 나의 인생관에 가장 큰 영향을 준 노래라고 해야 할 것이다. 인간은 현실에 맞서는 것인가 순응하는 것인가. 자기 인생에 타인의 영향은 얼마나 받아야 할까. 그리고, 결국 떠오르는 질문. “사람은 어떻게 살아갈 수 있는가?” 자신의 인생과 삶과 그 밖의 소중한 것들을 어떻게 하면 포기하지 않고 살아갈 수 있는가?

抑圧の中塞ぎ止められて 억압받아서 막힌 것은
他人(ひと)を責めても変わらない 누굴 탓해도 변하지 않아

자기 인생이 지금 이렇게 된 것에 대해서, 자기의 선택이 이끌었을 수도 있고, 어쩌면 다른 사람이 나를 이렇게 이끌었을 수도 있다. 운이 없는 경우 나는 다른 사람의 욕심에 피해를 입은 피해자일 수도 있다. 하지만 그렇게 된 과거 그 자체는 변하지 않는다. 타인을 탓하든, 자신을 탓하든 변하지 않는다. 유일하게 내가 바꿀 수 있는 것은 나 자신뿐이고, 나를 움직일 수 있는 것은 나 자신뿐이다. 아무리 무기력해도 일단 움직여야 한다.

せっかく今を生きているのだから 모처럼 지금을 살아가고 있는 것이니까
好きなこと楽しいことしなくちゃ 좋아하는 일 신나는 일 하지 않으면 안돼

“모처럼 살아가고 있는 것이니까, 좋아하는 일, 신나는 일 하도록 하자”는 주장.

ハッピーエンドだけじゃ物足りない 해피엔딩만으로는 부족해
時には涙もエッセンスなの 때로는 눈물도 필요한 법

인생은 “해피엔딩만으로는 부족하다”라는 의견.

同じ苦しみ繰り返してる 똑같은 고통을 반복해 간다는걸
気付くまでずっとラビリンス 알아챌 때까지 미로 안이겠지

고통속에서 힘들다는걸 알아챈다고 해서 힘들지 않은 것은 아니다. 그 상황을 받아들이는 것은 오롯이 자신의 몫이다.

抜け出す術(すべ)は必ずあると 빠져나갈 방법은 반드시 있다고
耳を澄まして見つけ出す 귀를 기울여서 찾아내는거야

그 미로 속에서 출구가 반드시 있다고 믿고 어떻게든 길을 찾아내는 것이다. 실제로 출구가 없다고 하더라도, 죽을 때까지 빠져나가겠다고 발버둥치는 것. 그것이 내가 바라는 내 삶의 모습이다.

幸せのかたちそれぞれ違うのよ 행복의 모습은 각자 다른거야
他人の言葉に惑わされない 타인의 말에 휘둘리면 안돼

자기 인생을 자신이 어떻게 받아들이는가는 오로지 자신만의 몫이다. 남에게 나의 의견과 철학을 강요하지 않는다. 나의 선택에 나의 철학을 관철시키고 흥하든 망하든 그 결과를 받아들이는 것이 인생이라고 생각한다.

ctypes 요약

살다보면 파이썬에서 C언어로 만들어진 DLL파일을 써야 할 일이 있을 수도 있다. 적어도 난 그랬다. 그래서 그걸 하기 위해 많은 해법들을 찾아보았지만, SWIG라든가, 그런것들은 나에게 도움이 되지 않았다. 그래서 ctypes를 공부했다.

일단 사용하기 위해서는 import ctypes로 불러와야 한다. 그러면 ctypes가 메모리에 적재된다.

다음 순서는 내가 사용할 DLL파일을 알려주는 것이다.

myDLL = ctypes.WinDLL(‘myDLLfile’)

위와 같이 쓰면 된다. 이 때, 이걸 사용하고 있는 파이썬 프로그램 파일(.py)의 경로에는 myDLLfile.dll 파일이 존재해야 한다. 이렇게 하면 이제 파이썬은 내가 무슨 라이브러리를 가져다 쓰고싶은건지 알게 되었다.

그 다음, DLL파일이랑 같이 주어진 헤더 파일(.h)을 살펴보고서, DLL파일에 있는 여러 함수 중 뭘 가져다 쓸 것인지 정해야 한다.

사실 헤더파일의 내용을 파이썬의 내용으로 번역하는 것과 별다른게 없는데, C언어 헤더파일에 정의된 내용은 함수의 이름, 함수가 받을 변수의 수와 형, 함수가 되돌려줄 변수의 형이 있다.

mypythonfunc= myDLL[‘MY_C_FUNC’]

위와 같은 한 줄을 적어 줘서, DLL파일의 라이브러리 중 어떤 함수를 쓰고 싶은지 적어주고, 그 함수를 내가 어떤 이름으로 쓸건지 알려주면 된다. 하지만 이것만으로는 저 함수의 모든 것을 알려준 것이 아니다.
mypythonfunc.argtypes = (ctypes.c_int,ctypes.c_double)

위와 같이 argtypes를 지정해 주는데, 이것은 이 함수가 변수로써 어떤 형식을 받을 건지 알려주는 변수이다. 근데 내가잘못 사용한건지는 모르겠지만, 변수의 수가 1개일 때는 에러가 나서 지정해주지 않았다. 지정해주지 않더라도 헤더 파일에 정의된 형으로 잘 넘어가기만 한다면 에러는 나지 않는다.

imct_initialize.restype = ctypes.c_int

restype은 함수가 되돌려주는 값의 형, 즉 반환형이다.

이렇게 하고 나면, 이제 mypythonfunc(a, b)를 가져다 쓰기만 하면 된다.

하지만, 문제가 있다. C언어에는 포인터라는 녀석이 있는데, 함수가 포인터를 통해서 자료를 주고받는 경우에는 restype을 아무리 써봐야 어쩔 수 없다. 포인터를 선언해줘야 한다.

이런 경우 argtypes에는 ctypes.c_void_p를 쓰거나, ctypes.POINTER(ctypes.c_int)를쓴다. ctypes.POINTER의 안쪽에 들어가는 변수는 실제 포인터 선언에 사용한 변수의 형을 써주면 된다.

이렇게 하고서, 만약 다음과 같이 써져 있다고 해 보자.

mypythonfunc.argtypes = (ctypes.POINTER(ctypes.c_int),ctypes.c_double)

그럼 mypythonfunc(a, b)처럼 사용할 때 a에는 포인터 변수를 넣어줘야 한다. 하지만 파이썬에는 포인터라는 개념이 없다. 그래서 만들어 줘야 한다.

일단 포인터 형이 ctypes.c_int니까 x=ctypes.c_int(0) 처럼 선언한다. 0은 초기값이다. 그런 다음 mypythonfunc(ctypes.byref(a), b) 처럼 사용하면된다. byref는 ctypes에서 “참조형 변수”로 값을 전달하는 함수이다. 이렇게 한 후 함수를 실행시키면 a의 값이 함수의 실행 결과에 따라 바뀌어 있음을 알 수 있다.

예를 들어 ctypes.c_int(4)를 4와 비교하고 싶다고 해 보자. 이걸 ctypes.c_int(4) == 4 이렇게 비교를 하자고 하면 False가 뜰 것이다. ctypes.c_int(4).value 로 그 내부의 값을 불러와야 한다. 만약 m = ctypes.c_int(4)로 선언되어 있었다면 m.value를 써줘야 파이썬에서 사용하는 값이 빠져나온다.

배열을 통째로 넘길 때는 어떻게 해야 할까?

mypythonfunc.argtypes = (ctypes.c_void_p, ctypes.c_double)

배열은 argtypes에 들어가는 경우 ctypes.c_void_p로 형을 지정해 주면 된다. 그리고 파이썬의 배열을 넣어주면 되는데, 파이썬의 배열이 C의 배열과 같을리가 없다. 그래서 이렇게 해줘야 한다

myarray = ctypes.c_int * 8

이렇게 하면 myarray는 int를 8개 가지는 type이 된다. 여기서 중요한건 myarray는 변수가 아니라 types이라는 것이다. 그 다음 함수에 값을 넣을 때는

mya = myarray(0,1,2,3,4,5,6,7) 처럼 변수를 하나 새로 만들어서

mypythonfunc(mya, b) 처럼 함수를 불러와야 한다. 이 경우에는 byref를 쓰지 않아도 참조형으로 변수가 넘어가기 때문에 mya는 함수의 실행 결과에 따라 바뀌게 된다. 만약 그 결과로 나온 mya를 다시 파이썬에서 사용하는 배열로 고치고 싶다면 list(mya)를 써서 파이썬의 배열로 바꿔줄 수 있다.

https://docs.python.org/3.6/library/ctypes.html

https://docs.python.org/2/library/ctypes.html

위의 참고문헌을 잘 읽어보고 사용하도록하자.

The final countdown

노래: Europe
We’re leaving together,
But still it’s farewell
And maybe we’ll come back
To earth, who can tell?
I guess there is no one to blame
We’re leaving ground (leaving ground)
Will things ever be the same again?
It’s the final countdown
The final countdown
Oh
We’re heading for Venus (Venus)
And still we stand tall
‘Cause maybe they’ve seen us (seen us)
And welcome us all, yeah
With so many light years to go
And things to be found (to be found)
I’m sure that we’ll all miss her so
It’s the final countdown
The final countdown
The final countdown
The final countdown
Oh
The final countdown, oh
It’s the final count down
The final countdown
The final countdown
The final countdown
Oh
It’s the final count down
We’re leaving together
The final count down
We’ll all miss her so
It’s the final countdown
It’s the final countdown
Oh
It’s the final countdown, yeah

2차 한국전쟁은 일어날 수 있을까?

최근 북한이 계속 도발을 하고 있어서 한반도의 위기감이 점점 고조되고 있다. 하지만 내 생각에 2차 한국전쟁은 일어날 것 같지 않다. 그 이유는 다음과 같다.

전쟁은 1.전쟁을 일으키지 않고 얻을 수 있는 이득보다 2.전쟁을 일으켜서 승리했을 때 얻을 수 있는 이득이 3.전쟁을 일으켜서 잃을 것들을 감안하더라도 확실히 클 때 일어날 수 있다. 여기에 4. 전쟁에서 이길 수 있다는 확신이 있어야만 실제로 발생한다. 물론 역사적으로 세계적으로 1,2,3,4에 대한 검토 없이 그냥 일어난 전쟁도 많았지만, 2차 세계대전 이후로 일어나는 전쟁들은 대체로 위의 1,2,3,4를 한번쯤은 생각한 후에 일어난다.

북한에서 전쟁을 일으킬 수 있으려면 일단 4.전쟁에서 이길 수 있다는 확신이 들어야 하는데, 아무리 봐도 북한 정권이 생각이 있으면 그런 판단을 할 것 같지 않다.

전쟁에서 이기기 위해서는 다양한 요소들을 고려해야 한다. 군사의 규모가 충분해야 하고, 그 군인들이 충분히 잘 훈련되어 있어야 하며, 적진에서 작전을 수행하면서 필요한 물자들을 보급할 수 있는 생산력과 수송력이 뒷받침되어야 한다. 여기에 추가로 고려해야 하는 수많은 요건들이 있지만 가장 중요한 것이 이정도라고 하겠다. 만약 이 중에서 하나라도 부족하면 전쟁에서 승리하기를 기대하기 어렵다.

군사의 규모를 비교해 보자. 군사의 규모 자체는 남북한이 비슷하다. 하지만 실제 전쟁이 벌어진다면 여기에 미국과 일본의 참전이 기정사실이기 때문에 남한이 군사력에서 밀릴 것 같지 않다. 반대로 북한의 동맹이나 우방이라 할 수 있는 중국이나 러시아는 2차 한국전쟁이 벌어졌다고 해도 참전이 기정사실이라고 보기 어렵다. 잘해야 북한군의 전쟁과 전투를 방해하지 않는 수준의 소극적 지원에 그칠 것이다. 내가 이렇게 생각하는 이유는 이미 냉전이 끝난 상황이고, 중국과 러시아가 한국전쟁에 참전하려면 앞에서 적었던 1,2,3,4에 대해서 또한 자기네 나름대로의 계산을 해야 하는데 북한이 여기에 중국과 러시아에 확신을 줄 수 있을 것 같지 않다. 가령, 북한이 전쟁에 승리해서 남한을 점령했다고 치자. 남한의 생산력을 그대로 재활용해서 중국과 러시아에게 경제적 이익을 줄 수 있을까? 공장은 전쟁하느라 다 파괴되어 있을 거고, 파괴되지 않았더라도 북한의 통제 경제 체제에서 도달할 수 있는 생산력은 현재 남한이 보여주는 생산력에 매우 못 미칠 것이다. 중국은 지금 외교, 경제적 분야에서 남한과 사이가 안좋긴 하지만, 아무리 그렇다 해도 북한이 남한을 점령했을 때 얻을 경제적 이익이 그리 크지 않다. 또한, 중국이 참전한다면 미국과 중국이 정면대결하게 되고, 그것은 결국 세계대전급으로 전쟁이 확대될 가능성을 의미하는데, 한반도에 국한된 전쟁이라면 모를까 중국은 세계대전을 치르고 싶은 생각이 전혀 없을 것이다. 세계대전으로 전쟁이 확대되면 NATO는 반드시 참전할 것이고, NATO와 엮인 유럽연합도 직접이든 간접이든 미국편을 들 가능성이 높다. 이렇게 되면 승리를 장담하기도 어렵고, 중국이 얻을 수 있는 이익에 비해 전쟁을 치르면서 입을 손해가 더 클 가능성이 높다. 차라리 현재 상태를 유지하면서 미국에 물건을 팔고 경제적 이득을 취하는 것이 전쟁보다 훨씬 쉽고 이익이다. 러시아도 마찬가지인데, 러시아가 물론 엄청 거대한 국가이고 군사력 역시 미국에 비해 뒤떨어지지 않지만, 그렇다고 해서 전쟁을 치르고 싶을리가 없다. 전쟁이란 어디까지나 결국 군인의 싸움이고, 군인은 모두 국민이다. 그리고 그 어떤 국민도 죽고싶어하지 않는다. 2차 세계대전때의 나치당이나 일본군 수뇌부 정도로 미친 놈들이 아니고서는 말이다. 러시아 정부가 그렇게까지 미쳐있을까? 그럴리 없다. 분명히 손익계산을 펼칠 것이고, 세계 제1의 경제, 군사 대국인 미국이 참전하는 이상 엄청난 손해는 확정적이고 그에 비해 승리는 확정적이지 않다. 이런 이유로 북한의 우방인 중국과 러시아는 북한이 한국전쟁을 일으키더라도 참전하지 않을 것으로 본다. 그 외에 북한과 친하게 지내는 국가들이 있지만, 너무 멀리 떨어져 있어서 파병을 하더라도 그들의 군대가 전쟁 상황인 한반도에 도달할 수 없다.

군인들의 훈련 상태를 보자. 이쪽은 더 한심하다. 북한군은 물자 부족으로 실탄 훈련을 거의 하지 못한다. 많이 잡아봐야 수만명 규모로 볼 수 있는 특수부대가 실탄 훈련을 해봤겠지만, 알다시피 대한민국 국군은 현역 장병 전부는 물론이고 예비군까지 1년에 수십발씩 실탄 훈련을 한다. 물론 특수부대 수만명은 승승장구할 수도 있겠지만, 전쟁은 그렇게 해서는 승리할 수 없다. 그 수만명이 한 지역을 오랫동안 점령하고 있을 수도 없고, 일반 보병 부대가 결국 점령을 유지해야 하는데 그걸 유지할 일반 부대의 훈련 상태를 비교하자면 비교하는게 모욕일 정도로 국군이 우수하다. 심지어 아직 현재 전세계 어딘가에서 실전에 투입되고 있는 미군은 빼고 생각하는 중이다.

북한군이 남침하면 보급은 어떻게 해야 할까? 물론 북한군이 남침으로 내려오면 마트같은거 다 털고 주유소 다 털어서 보급할 수도 있을 것이다. 하지만 그럼 국군은 바보인가? 당연히 마트는 털어도 국군이 먼저 털 것이고 만약 국군이 패퇴하는 경우에는 북한군이 사용하지 못하도록 확실하게 파괴해서 없앤 후에 후퇴할 것이다. 결국 북한군은 북한 현지에서 남한으로 자체적으로 보급을 해야 하는데, 알다시피 북한의 연료 사정과 식량 사정은 개판이다. 이걸로 보급을 해봐야 국군의 병참, 보급을 따라갈 수가 없다. 남한과 북한은 경제력, 생산력 차이가 이미 어마어마하게 벌어져 있고, 만약 북한이 “전쟁”을 준비한다면 핵무기가 아니라 일단 자체적인 생산력을 강화해서 보급이나 어떻게든 할 수 있게라도 해야 할 것이다. 우리가 북한의 식량 사정이 어떤지 뻔히 아는 상황에서 국군에 대한 보급이 딸릴 거라고 생각하는건 진짜 모욕이다. 물론 국군에 어떤 정신나간 간부가 있어서 보급을 빼돌리는 상황이 벌어질 수도 있겠지만, 그런게 가능했던 건 1950년에나 그랬지 지금은 그럴 수 없다. 또, 그렇게 해서 일부의 보급이 빼돌려진다 하더라도 북한에 비해서는 충분히 보급이 이뤄질 것이라 본다.

이와 같은 이유로 북한군의 남침을 가정하는 경우, 국군의 승리는 얼마나 군인과 민간인의 손실을 줄이느냐의 문제일 뿐 승리 자체는 기정사실이라고 본다.

북한이 전쟁을 하고 싶으면 위와 같은 조건들을 일단 개선한 후에 4번 항목 “이길 수 있다는 확신”이 들어야 한다. 만약 북한 정권이 그런 개선 없이 이길 수 있다는 확신이 들었다면, 틀린 확신에 의해 일어난 전쟁이므로 정말 우리 국군이 질래야 질 수가 없다.

핵무기의 상황은 어떠할까? 최악의 상황을 가정해서, SLBM이나 ICBM의 개발이 완료되고, 여기에 탑재 가능한 수소폭탄이 실전배치가 되었다고 해 보자. 이걸 어디에 쓸 수 있을까? 북한이 이걸 미국 본토에 쏜다고 해 보자. 잘해야 20발 정도 있을텐데, 미국 본토에 20발 쏴봐야 그 넓은 나라에서 큰 피해는 입지 않는다. 대도시에 쏴서 민간인을 수백만명씩 많이 죽여봐야 미군 군사력은 그대로 남아있을 것이고, 그렇다고 미군 군사기지에 쏘자니 그건 너무 좁은 영역이라 맞추기도 어려울 뿐만 아니라 맞춘다 하더라도 20곳이 넘는 미군 군사 기지를 전부 없애는 것은 불가능하다. 또한, ICBM이나 SLBM은 날아오는데 시간이 걸리므로 그 모든 미사일이 전부 성공한다는 보장도 없다. 그리고 이런 미사일들이 미국 본토를 향하고 있다는 것이 확인된 순간 미국은 그보다 “확실하게 더 많은” 핵무기를 고민하지 않고 북한 본토에 쏠 것이다. 김정은이 어디 숨어있을지는 모르겠지만, 아마 죽을 것이다. 이런 이유로 미국에 쏘는건 미친 짓이다. 같은 이유로 일본에 쏘는 것도 미친짓이다.

남한에 쏜다면 어떨까? THAAD가 배치되면 요격할 수 있을지도 모른다. 하지만 많은 전문가들이 지적했듯이 핵무기를 남한에 쏘는건 낭비중의 낭비다. 한반도는 핵무기를 쏘기엔 너무 좁다. 사람은 많이 죽일 수 있겠지만, 그걸로 끝일 뿐 북한의 멸망은 기정사실이다. 한반도에 핵무기를 쏘는 것이 확인된 순간, 미국이 역시 핵 보복을 가할 것이고, 최소한 평양은 그날부로 지도에서 사라질 것이기 때문이다.

이런 이유로 핵무기는 결국 자신들의 손에 들고서 다른 나라들을 협박해서 돈을 뜯어내기 위한 “대화 수단”이지 그걸 실제로 사용할 것이라는 생각은 하기 어렵다. 또한, 핵무기를 들고 있어도 “전쟁에서의 승리”는 확신할 수가 없다. 위에서 말했듯이 재래식 전력이 너무 빈약해서 전쟁을 수행할 수 없기 때문이다. 이게 성공하려면 남한이 엄청나게 외교를 잘못해서 미국, 일본, 유럽과 동맹과 모든 교류가 끊어질 정도의 최악의 상황이어야만 한다. 그리고 알다시피 남한은 그럴 정도의 지도자가 대통령이 되면 그자를 탄핵시켜버릴 국민이 있다.

그렇다면 전쟁을 일으켜서 얻을 수 있는 이득이 전쟁에 소모되는 자원과 전쟁으로 입을 손해보다 확실하게 더 클 것인가? 최악의 경우에 대한 가정에 가정을 더해서 북한군의 남침이 성공했다 치자. 즉, 한반도가 적화 무력 통일이 되었다고 가정해 보자. 일단 북한 주민의 수가 2천만명인데 남한 국민의 수가 5천만명이다. 북한에는 변변한 기반시설이 없고 남한측은 전쟁으로 다 파괴된 상태다. 갑자기 7천만명으로 늘어난 “국민”중에서 5천만명이 “불순분자”다. 이걸 더 적은 2천만명의 충성심으로 통제하는 것은 매우 어려운 일이고, 알다시피 북한 주민들이 정권에 대한 충성심이 그다지 높지 않다. 즉, 공포정치와 선군정치로 간신히 틀어막고 있던 북한의 불순분자들이 순식간에 몇배로 늘어난다는 뜻이다. 게다가, 북한은 이 상태에서 점령군 입장이므로 남한에 있던 기존의 군대 병력이나 경찰력을 이용할 수 없다. 점령 이후 적어도 몇년간은 게릴라식으로 저항군이 남아있을 것이니 이들은 전부 어디 수용소로 보내든가 처형해야 할 것이다. 그럼 이번엔 5천만명의 민간인에 대한 치안 유지가 문제다. 북한이 전쟁 후 발전을 하려면 일단은 민간에 대한 치안이 확보가 되어야 하는데, 이것은 불가능한 일이다. 즉, 북한은 승전 후에도 경제성장같은걸 할 수가 없다. 물론 남한 민간인 5천만명을 노예로 삼아서 뭔가를 해볼 수도 있겠지만, 방금 말했듯이 통제 자체가 불가능한데 노예로 쓸 수 있을리가 없다. 우리가 바보도 아니고…

심지어, 이런 경우 중국이나 러시아가 “그제서야” 생색내기로 군대를 보내서 전후 복구와 치안 유지를 도와주고, 그에 대한 보상을 요구할 수도 있다. 그럼 북한은 거절할 수 없다. 북한이 남한을 차지해서 얻을 수 있는 이익은 절대 독점할 수 없고, 소화시킬 수도 없다.

나는 이와 같은 이유로 2차 한국전쟁은 일어나기 어려운 상황이라고 생각한다. 물론 이런 생각을 한다고 해서 국가 안보에 방심하고 있으면 안된다. 위에 작성한 것들은 전부 우리 국민 모두가 국가 안보 정신이 충실하고, 국군이 전시에 대비해서 훈련을 게을리하지 않는다는 전제를 바닥에 깔고 있기 때문이다. 물론 사실 가장 위험한 고리는 김정은이 그렇게까지 멍청한 인간은 아니라고 하는 전제이긴 한데, 이건 내가 걔랑 대화를 해볼 수가 없으니 가정으로 남을 수 밖에 없는 부분이다.

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑