...+131+139
=593,407


이 시간에 달빛에 잠깬 게 아까워서 만듦

'1 내 > ㄷ 그림' 카테고리의 다른 글

우리가 난민이었다  (0) 2018.07.04
방송국 가시내 67  (0) 2017.09.30
방송국 가시내 66  (0) 2017.01.05
좃쭝똥 가시내 65  (0) 2016.07.17
지상파 가시내 64  (0) 2016.02.27
방송국 가시내 63  (0) 2016.01.18
Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

엊그제에 밤2시까지 삽질해 성공한 기념으로 아주 간략하게 작성. 질문 받습니다.
여기서 말하는 "닷홈"이란 한국식 LAMP 스택의 shared hosting이라고 보시면 됨.


사전 준비사항

  • 이 글은 모든 작업을 윈도우에서 한다고 가정한다. 리눅스/맥 쓰시는 분들은 훨씬 쉽게 할 수 있는 작업이니 필요한 명령줄은 알아서 연구하시길.
  • 최소한의 php 상식
  • php, composer (라라벨 인스톨러는 쓰지 않는다.)
  • Git 관리툴 (FTP로 수동배포하는 과정에서 버전을 관리하기 위한 용도. 잘 모르면 소스트리 쓰자.)
  • FTP 클라이언트 (닷홈에 수동배포하려는 용도. 잘 모르면 파일질라 쓰자.)
  • PHP 5.6.4 이상이 돌아가는 닷홈 계정 (닷홈에서 PHP 7.0을 굴리려면 무제한 호스팅을 받아야 한다. 여기서 도메인 구매하는 댓가로 FREE 티어를 쓸수있게 해놓았으니 참고하시길... 제길 이런글 쓴다고 레퍼럴 받는것도 아닌데)


tl;dr

이하의 서술은 닷홈 호스팅의 두 가지 문제를 극복하는 과정을 안내한다. composer와 artisan을 못 쓰는 문제, 요청 실행 담당 파일이 마음대로 지목되지 않는 문제. 이 두 가지가 별문제가 아니라고 생각된다면 더 읽지 않아도 됨.

로컬에서는 php artisan make:migration create_foo_table 같은 콘솔도 쓸 수 있고 composer install foo 같은 것도 얼마든지 실행할 수 있지만 닷홈의 대부분 호스팅 상품은 공식적으로 SSH 접속이나 컴포저 실행, 쉘스크립트 실행 등을 할 수 없다. 요즘처럼 모든 것이 패키징 체계로 되어 있는 웹앱 개발 환경에서 이는 치명적인 제약이다.

게다가 로컬의 라라벨과 프로덕션인 닷홈은 웹 요청 수행 방식이 다르다. 라라벨은 루트폴더의 server.php를 실행하는데, 닷홈은 별도의 .htaccess 설정이 없는 한은 걍 아무 생각 없이 각 계정에 대하여 /host/home숫자/계정명/html 디렉토리의 index.htm(l)이나 index.php만을 열고 보기 때문이다. 어떤 요청에 대해서 .htaccess가 특정 파일을 포인팅해 주지 않으면, 그 요청의 응답은 영원히 403404, 500 또는 310(Too many redirects)뿐일 것이다.

여기에 사소한 몇 가지 요점을 짚고 가려고 한다. 예컨대 라라벨 버전 문제인데, PHP 7.1이 아닌 PHP 7.0의 서버라면 라라벨 버전은 5.5까지만 쓸 수 있다. 이제부터 조금씩 살펴보자.


1. 상쾌하게 새 앱으로 시작하기 (단, 버전에 맞춰서)

이미 로컬에서 돌아가고 있는 라라벨 앱이 있다면 최악의 경우 그 앱을 다운그레이드해야 하는 상황이 올 수 있다. 그런데 라라벨에서 다운그레이드란 새 프로젝트를 낮은 버전으로 시작해 거기에 마이그레이션하는 것만을 뜻한다. 그렇게 따지면 아마도 이 스텝은 필수인 듯.

1-1. 라라벨을 올리고 싶은 닷홈 호스팅의 PHP 버전을 알아내고, 이 버전을 지원하는 최신 라라벨 버전이 뭔지 각 버전별 설치 문서에 가서 확인해 본다. 대리클릭을 해드리자면 PHP가 7.0일 땐 5.5까지, PHP가 5.6.4 이상일 땐 5.4까지.

1-2. 앱을 설치할 디렉토리로 가서 커맨드를 열고 라라벨 설치 명령을 실행한다. 예컨대 설치할 수 있는 라라벨 최고 버전이 5.5버전대라면 이렇게 입력한다. (자동으로 현시점 최신 버전인 5.5.28을 깔아준다.)

> composer create-project laravel/laravel 앱이름 "5.5.*" --prefer-dist

1-3. 컴포저 특유의 무반응이 잠시 이어지다가 한바탕 폭풍 설치가 끝나면 Git 관리툴을 열고 이 폴더를 기존 존재하는 저장소로서 생성해 커밋&푸시하고 버전 관리를 시작한다.
소스트리 기준으로 설명하자면: New Tab > Create > 지금 만든 폴더 선택 > 저장소 이름이나 나머지는 뭐 알아서 > 생성 > Yes > 작업공간 > 모두 스테이지에 올리기 > 커밋 > Push.

1-4. 설치된 디렉토리로 이동해 php artisan serve를 실행해본다. 별문제가 없어야 한다.

1-5. /public 폴더에 assets라는 이름으로 빈 폴더를 하나 만들고 거기에 css 폴더와 js 폴더를 때려넣어 둔다. 3번 스텝에서 해야 할 작업을 미리 해놓는 것.


2. 최초 버전 unzip 배치

이짓을 하는 이유는 /vendor 디렉토리에 너무 많은 폴더와 파일이 들어 있기 때문이다. 이걸 전부 FTP로 올리는 것은 바보짓이며, 번번이 이렇게 할 수도 없는 노릇이다. composer가 바로 이 문제를 해결한 툴이지만, 우리는 닷홈 서버를 빌려 쓰고 있어 컴포저를 쓸 수 없으니 일단 갓 구워진 라라벨 정도로만 올려보자. AWS 엘라스틱 빈스톡에서 영감을 얻음.

2-1. 라라벨이 설치된(=server.php 파일이 있는) 폴더의 내용 전체를 압축해 파일명.zip을 만들어둔다.

2-2. 다음 코드를 적당히 활용한 적당한이름.php 파일을 만들어둔다.

<? header("Content-Type: text/html; charset=UTF-8"); ?>

<a href="?unzip=true">Unzip 실행</a>

<?php
if ($_GET['unzip']) {
$zip = new ZipArchive;
if ($zip->open('파일명.zip') === TRUE) {
$zip->extractTo('./');
$zip->close();
echo '<br><br>배치 성공';
} else {
echo '<br><br>배치 실패';
}
} else {
phpinfo();
} ?>

대단히 스트레잇포워드한 코드인데 설명하자면 이렇다. 파일을 웹브라우저로 딱 보면 Unzip 실행이라 써진 링크 하나가 있고 그 밑에 이 서버의 php 정보가 줄줄이 달린다. 링크를 누르면 그 정보가 없어지고 배치가 성공했는지 실패했는지를 알려준다.

2-3. FTP 클라이언트로 닷홈 계정에 접속해 파일명.zip 압축파일과 적당한이름.php 파일을 같이 루트폴더에 올린다. (닷홈은 전형적으로 /html 폴더가 루트임)

2-4. http://닷홈계정주소/적당한이름.php 에 접속해본다. 설명한 대로 링크 하나와 php 설치정보가 떠야함.

2-5. 과감하게 Unzip 실행을 한다.

2-6. 배치 성공이라 떴는지, 그리고 실제로 FTP로 새로고침을 했을 때 로컬에 보이는 폴더와 파일들이 막 보이는지 확인한다.

2-7. 큰 산을 넘었다는 안도감을 가지도록 한다. (이후 필요할 경우 /vendor 폴더에 대해서만 이 꽁수를 써서 일괄 업로드할 수도 있을 것이다. extractTo() 함수는 덮어쓰기가 기본이므로 별문제 없을 것.)


3. public 폴더 바꿔치기

이 스텝은 왜 필요한가 하면 앞서 설명한 index.php를 루트에 띄워주기 위해 필요하다. 희한하게도 서양에서는 'public' 폴더가 닷홈 호스팅의 'html'에 해당한다고 한다. 요컨대 라라벨 앱 업로드 과정에서 그 public을 이 public으로 자연스럽게 덮어쓸 수 있으면 OK라는 것이다. 그래서 물정 모르는 서양 답변자들은 가끔 "퍼블릭폴더 위에 앱을 설치하면 그만인데 왜 우는소리를 해~" 같은 속터지는 소리를 한다. 하지만 닷홈은 그게 안 되니까 이짓을 하는 것. 결정적으로 도움이 된 것은 이 문서.

여기서는 라라벨을 닷홈 서버의 루트에 설치한다고 가정한다. 이 작업 자체는 닷홈 서버에서만 수행한다.

3-0. 잘 모르겠다면 다음 내용을 복사해 루트폴더에 .htaccess 파일로 저장하고 접속해 본다. 해결이 안 되면 다음 스텝으로 넘어간다. Thanks to 잘보고갑니다

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

3-1. 1-5를 아직 해놓지 않았다면 지금이라도 해놓고 닷홈서버에서도 동일하게 적용해 준다.

3-2. /public 폴더에 있는 '파일들'을 모두 복사해 그 위 폴더인 루트 폴더에 붙인다.

3-3. 라라벨 5.5 기준으로는 지금 붙여넣은 루트폴더의 index.php에 이런 라인들이 있을 것인데, 각각 알맞게 고친다.

require __DIR__.'/../vendor/autoload.php'; // 이렇게 생긴 라인은
require __DIR__.'/vendor/autoload.php'; // 이렇게 고칠것

$app = require_once __DIR__.'/../bootstrap/app.php'; // 이렇게 생긴 라인은
$app = require_once __DIR__.'/bootstrap/app.php'; // 이렇게 고칠것

한마디로, /public 폴더 기준으로 써져 있었던 로딩 파일들 주소를 루트폴더 기준으로 고친다.

3-4. 하나 더, 루트폴더에 있는 server.php를 고쳐준다.

# 고치기 전

if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
    return false;
}

require_once __DIR__.'/public/index.php';


# 고친 후

if ($uri !== '/' && file_exists(__DIR__.$uri)) {
    return false;
}

require_once __DIR__.'/index.php';

3-5. http://닷홈계정주소/home 에 접속해 본다. 뷰 파일을 건드린 적이 없는데도 css와 js 파일이 로딩되지 않아 와장창 깨지고 있을 것이다. 이 부분을 4단계에서 해결한다.


4. 환경 구분해주기

이제 거의 모두 해결됐고, 3단계에서 해결되지 않은 퍼블릭 애셋 경로 문제만 남는다. php 소스들 자체는 로컬에서나 닷홈에서나 같아야 하는데, 로컬에서는 asset() 함수에 'assets/css/app.css' 경로를 넘겨줘야 되는 반면 닷홈에서는 'public/assets/css/app.css'를 넘겨줘야 된다. 어쩌면 좋냐고? htaccess 쓸줄 모른다고? 걱정마시라. 이런 건 env로 아주 간단하게 조치하면 된다.

4-1. 로컬의 루트에 있는 .env 파일을 편집기로 열고 다음 설정을 아무데나 추가한다.

ASSETS_DIR=assets

4-2. 소스코드 내 필요한 모든 곳에서 다음과 같은 찾아바꾸기를 실시한다. 4-1에서 저장한 변수를 불러오도록 하는 것.

// 바꾸기 전
{{ asset('assets/css/app.css') }}

// 바꾼 후
{{ asset(env('ASSETS_DIR').'/css/app.css') }}

4-3. 로컬의 .env 파일 내용 전체를 복사한 다음, 닷홈서버의 루트에 .env 파일을 새로 만들고, 그 파일의 내용을 방금 복사한 내용으로 덮어쓴 다음에, 이 부분을 고친다.

ASSETS_DIR=public/assets

4-4. 이것으로 우리는 마침내 로컬에서 돌아가는 여러분의 앱이 닷홈에서 그 모습 그대로 똑같이 돌아가는 것을 보게 되었다. 앞으로 애셋을 불러와야 할 일이 있을 때는 아묻따 env('ASSETS_DIR') 하나로 오케이.


5. 부록: 버전을 관리해서 필요한 파일만 추가 FTP 배치하기

아주 간단히 설명하고 지나간다.

5-1. Git 클라이언트를 열어 마지막으로 푸쉬해 놓은 로컬 커밋 지점이 어디인지, 정말 그 지점이 현재 닷홈 서버상으로도 최신이 맞는지 확인한다.

5-2. 로컬에서 아무 생각 없이 하고 싶은 작업을 완료한다.

5-3. Git 클라이언트 작업 공간에서 지금 어느어느 파일이 바뀐 건지 확인한다. composer install로 패키지를 깔았다면 git에는 잡히지 않으니 주의.

5-4. Git을 통해 파악한 변동 있는 파일들만 골라서 수동으로 FTP로 닷홈에 덮어쓴 다음 실제 접속해 봐서 잘 적용됐는지 확인한다. 이론상 로컬과 완전히 똑같아야 한다.
새로 패키지를 설치한 경우 composer.json 자체는 잡히니까 역시 닷홈에 올려 덮어써 주고, /vendor 디렉토리에서 새로 생긴 디렉토리를 통째로 올린다.
잘 모르겠으면 2번스텝에서 만들어 놓은 코드를 활용해 /vendor 디렉토리를 압축한 파일을 올리고 그파일을 /vendor 디렉토리에 덮어쓰는 코드를 실행시켜도 된다.

5-5. 문제가 없으면 지금 변동 내역을 모두 스테이지에 올리고 커밋&푸시해서 다음에 작업을 시작할 기준점으로 삼는다. 문제가 있으면 과감히 직전 버전으로 롤백한다.


6. 부록: 아티즌 콘솔 써서 마이그레이션 하기

닷홈서버의 DB에 이미 잔존하는 테이블을 활용하는 거라면 걍 DB 덤프받아 로컬에 복붙해 시딩하고 php artisan make:model Foo 돌려 모델 만들고 그걸 배포하면 그만이지만, 없던 테이블을 만든다면 라라벨의 컨벤션에 맞게 정식으로 스키마를 만들어 마이그레이션하는 과정을 거쳐야 한다.

6-1. 일단 로컬에서 마이그레이션 직전까지 해놓는다. php artisan make:migration create_foo_table을 실행해 파일 자동 생성을 시키고, 생성된 파일의 up() 메소드와 down() 메소드를 적당히 매뉴얼 봐 가면서 채운다.

6-2. /routes/web.php 파일의 맨 끝에 아티즌 콘솔 명령을 실행하는 라인을 하나 넣는다.

Route::get('/artisan_console', function(){
Artisan::call('migrate');
});

6-3. 로컬에서 localhost:8000/artisan_console 에 접속해 up() 메소드가 계획대로 잘 돌아갔는지 확인하고, 확인되었으면 닷홈서버의 /database/migrations 디렉토리에 생성된 마이그레이션 파일을 올린 다음 /routes/web.php에 로컬과 같은 수정내역을 적용해, 마찬가지로 접속 실행한다. 닷홈DB에 migrations 테이블이 자동으로 만들어지게 되는데, 없으면... 걍 하나 만들면 됨.


후기

  1. 쓸데없이 길어졌네요. 제가 읽고 싶었던 문서를 제가 쓰다 보니 그렇게 되었던듯
  2. 아무튼 .htaccess는 웬만하면 건드리는 것이 아닙니다. 혹시 RewriteBase, RewriteCond, RewriteRule 같은것 붙잡고 씨름하고 계시다면 머리를 비우고 새로 다시 처음부터 생각해 보시길.
  3. 도움이 되려나 모르겠네요.


Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 잘보고갑니다
    2018.04.17 21:35 신고
    댓글 주소 수정/삭제 댓글
    /html/.htaccess

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
    </IfModule>

    얘는 어떨까요?
    • 2018.04.18 11:48 신고
      댓글 주소 수정/삭제
      ㅎㅎ 이렇게간단한 방법도 있군요!!
      PHPSlim에서는 되는것 방금확인했는데 라라벨에서는 어떨지 모르겠네요 (아마 될듯)

이 글은 수시로 업데이트하는 기술 공부 블로그 포스팅입니다. 이런거 공유하면 확실히 낚여줄 내주변 지인이 최소 1명 있긴 한데... 그에게는 이글이 대윾잼+대환장 띠용글로 보일것이지만 알고도 굳이 씁니다. 목표는 1년뒤 나역시 이걸 보며 대윾잼+대환장을 느끼는것


0. 서론

머 아무튼 2017년도 다 저물어가는 마당에 호주 워홀 마치고 돌아와서 취직은 해야겠고 마땅히 벌어놓은 것이라고는 각종 기획의 잔꾀와 워드프레스/코드이그나이터[각주:1]로 좀 굴러본 것뿐인지라… 최소한의 최신 기술과 개념을 익혀놓지 않으면 안 되겠다는 약간의 절박함이 생겨, 귀국 후 크리스마스 이브에 과감하게 세팅하고 시작한 것이 yuptogun.com 프로젝트.

지금까지 걍 구상만 했던 각종 웹앱들을 *.yuptogun.com 형태의 서브도메인 아래에서 각기 구현해서 돌리고, 개중 잘 팔리는 게 생기면 별도 도메인으로 독립시켜서 운영하고, 그러면서 호스팅업체 서버 스택 아래에서 할 수 있는 최대한의 신기술&신개념을 막 도입해 써보는 운동장으로 쓸 계획.[각주:2]


1. 스택: shared LAMP stack hosting + Codeigniter + uncompiled (in-browser) React

A. 서버 스펙. 일단 주어진 서버 환경을 서술하자면... 전형적인 한국 PHP 웹호스팅 스택. 리눅스에 아파치와 MySQL을 깔고 PHP를 상시 켜놓으며 가상 할당 공간에 실행&전송할 파일을 올리는 방식이다. 월 5천 원을 더 내면 SSH 접속을 시켜준다고 하지만 지금은 그마저도 하고 있지 않아서 그야말로 20세기 FTP 홈페이지 스타일. 쉘접속이고 서버설정이고 그딴거ㅇ벗다.

AWS도 있고 다른 옵션도 많은데 굳이 이걸 선택한 이유는 딱 두가지.

  • 비용: 닷홈의 혜자급 상품으로, 도메인값만 닷홈에 내면 디스크 1G와 트래픽 무제한 이용이 무료로 가능하다. 써보다가 트래픽이 증가하면 상위 상품으로 올릴수있음. (물론 하위 상품으로 다운그레이드는 안된다)
  • 시장 친숙성: 서비스 자체를 서비스하는 IT 기업을 제외하면 나의 '클라이언트'가 될 사람들은 보통 shared web hosting 환경에서 뭔가를 하려고 한다.[각주:3] 따라서 임대형 쉐어 웹호스팅 환경이라는 (프로그래머에게는) 꽤 열악한 스택을 선택하기로 함.

B. 프레임워크. PHP라는 서버 언어가 주어진 상황에서 제일 최신 프레임웍을 써볼라치면 아무래도 라라벨이나 심포니 같은 걸 해야겠지? 아니면 좀 힙하게 Slim? 사실 호주에 있을 때 이것저것 건드려 봤는데 결국은 그간 해왔던 코드이그나이터를 골랐다.

  • 가볍다. PSL-7을 준수하는 프레임워크들은 FTP로 배치하는 것이 사실상 불가능하다. 파일이 보통 많아야 말이지. 로컬에서 작업한 걸 통째로 zip으로 묶어 그걸 올리고 unzip을 (쉘로 하건 php코드로 하건) 실행하는 게 그나마 the best practice so far더라.[각주:4]
  • 버전 관리를 할 것이 없다. Ion Auth나 TCPDF 말고는 딱히 더 갖다 쓸 서드파티 라이브러리도 없고, 대부분의 요소들은 어차피 사용자단에서 돌아가야 하는 파일들인지라 그냥 CDN에서 퍼와도 되겠다고 판단했다.
  • Slim은 라우팅까지 성공했고 라라벨은 배치하는 것까지 성공했으나[각주:5] 지금은 백엔드 로직보다는 프론트엔드의 react 공부에 집중하고 싶어서 경험이 있는 Codeigniter를 채택. 보아하니 아직은 코드이그나이터가 php 실무 바닥에서는 현역인 듯도 하고.
  • 뭐 말이 Codeigniter지 가급적 API 생성기로만 사용하고, 각종 라이브러리나 유틸리티는 서버에서 돌아가는 게 효율적일 때(세션관리 등)만 쓸 예정. 애초에 서버란 JSON만 송수신해주면 되는거니까.

C. 뷰처리. 여기서부터 모험이 시작된다. views/template/react.php 파일을 만들고 여기에서 reactjs cdn이라고 검색해서 나오는 파일 두 개와 babel cdn이라고 검색해서 나오는 파일 하나를 불러오게 시켜놨다.

  • 사실 React 생태계가 추구하는 방식대로 하자면 절대 이렇게 해서는 안 된다. 특히 Babel은 내가 짠 text/babel 스크립트 파일을 서버에서 미리 컴파일하는 데 쓰여야 하지, 브라우저에서 낑낑거리면서 실행할 물건이 아니다.
  • 그치만 뭐 일단은 콘솔에 인포 메시지 하나 뜨는 거랑 깜박임 문제[각주:6] 말고는 기능상 별 문제를 모르겠어서 그냥 넘어가고 있는중.


2. 기본 흐름: CI는 json과 뷰파일 목록만 구성하고 나머지는 React가 한다

메인페이지를 만들면서 결정한 설계는 다음과 같음.

  1. 기본 라우팅에 따라 컨트롤러가 실행된다.
  2. 컨트롤러는 다음 세 가지를 주로 실행한다.
    • 로딩될 뷰파일을 결정한다.
    • 뷰파일에서 사용할 데이터를 만든다. SEO용 메타태그, 현재 로그인한 회원 정보 등
    • 뷰파일에서 json으로 출력할 배열을 만든다. 필요한 DB 테이블 쿼리 결과를 json_encode()로 뽑아 $this->data['table'] 형태로 넘긴다.
  3. 메인뷰는 다음 세 가지를 실행한다.
    • 컨트롤러가 넘긴 데이터를 가지고 html 마크업을 뿌린다. 메타태그, 로그인했을 경우와 아닐경우에 따른 html 마크업 등등
    • 컨트롤러에게서 물려받은 json을 스크립트 태그로 html 출력 맨끝에 뿌린다.
      <script>var theData = <?= $data; ?>;</script>
    • 그리고 assets들(React 라이브러리, 메인 js, 각종 CSS 등등)을 불러온다.
  4. 그러면 이제 뷰가 불러온 메인 js 파일은 브라우저 안에서 다음과 같이 작동한다.
    • 메인뷰가 서버 응답으로서 돌려주는 DB 데이터 json을 props/state로 참조한다.
    • 이 props/state와 자기 안에서 const로 규정돼 있는 정적 정보들(e.g. 쿼리결과 없을시 뿌릴 문자열들 등)을 이용해, 엽토군이 정의한 대로 열심히 컴포넌트 클래스들을 렌더링한다.
장황하게 적었지만 코드를 보면 아주 간단한 이야기다. 해당 페이지의 응답결과는 예컨대 위쪽에 <script src="app.js">가 있고, 중간에 <div id="wrapper"></div> 같은 텅 빈 요소가 하나 있으며 그 밑으로 조금 내려가서 보면 아주 장황하게 긴 json을 data 변수에 할당한 script가 한두 개 있는 식이다. 그리고 app.js는 data.table.forEach((record) => {어쩌고저쩌고}) 형태의 라인을 가진다.
어떤 assets을 불러올 것인지를 뷰에서 결정할 것인가 컨트롤러에서 결정할 것인가는 지금은 좀 가닥 안잡혀서 일단 죄다 뷰에서 결정중. 아마 컨트롤러에 다 때려넣는게 더 말은 맞겠지(극단적으로 말해서 뷰파일은 그냥 div#app 하나만 덜렁 갖고있어도 될지도 모른다).


3. 깨달은 것들: React

React를 막무가내로 공식문서 봐가면서 공부하고 적용해 현재까지 깨달은 것들은 다음과 같다.
  • 만약 당신이 MVC 구조에 익숙하고, 새로운 라이브러리의 문법을 배우는 데 큰 문제가 없으며, 지금 당장은 리액트를 가지고 화면에 DB자료를 뿌리는 정도로 충분하다면, 다른 것보다 Thinking in React를 따라가는 것이 가장 좋고 가장 빠르다. 당신이 알아야 할 것은 거의 대부분 나와 있으며, props와 state 개념을 실전으로 바로 알 수 있다. 장황하게 createClass가 어쩌고저쩌고 하는 설명도 생략돼 있어, 필요한 기초에 집중할 수 있다.
  • state는 최상위 컴포넌트에서 통제되어야 한다. 글로 읽을 땐 영 뭔말인지 몰랐는데 실전을 해 보니까 간신히 이해가 되더라.
    예컨대 이런 상황이 있다고 생각해 보자.
#wrapper가 #sidebar와 #content의 2개 요소를 가지고 있고, #sidebar 밑의 a[data-tab=x]를 누르면 #content 밑의 #x가 보여야 함

jQuery라면 구현 자체는 아주 간단하다. .data('tab')으로 x값 얻어와서 $('#content')를 통제할 때 그 값을 넘기면 된다. 하지만 이 구현이 일으키는 변화는 필연적인 것이 전혀 아니며 오히려 아주 우연하고 작위적이다.
이 상황을 React는 이렇게 해결한다.

#wrapper는 #sidebar 밑의 a에 대해서도 책임이 있고, #content 밑의 div들에 대해서도 책임이 있다. 따라서 #wrapper의 this.state.tab을 정의해 주고, #content는 항상 이 state에 대응하는 div를 보여주도록 한 다음, #sidebar 밑의 a가 눌릴 때는 #wrapper의 this.state.tab이 적절히 업데이트되도록 한다. 그러면, #content 밑의 div는 즉시 자동으로 그 state에 반응("react")한다!

이렇게 써놓고 보니 왜 다들 그렇게 열광하는지 알것도 같음. 데이터가 어디로 흐르는지 볼 수 있고 훨씬 더 논리적이다. (단 그만큼 프론트엔드가 초반에 머리 싸매고 시작을 해야 하는 것. 어느 객체가 최상위인가? 정말 모두 한 개의 파일/스크립트 안에 넣어야 할까?)

  • 문자열을 직접 인젝션하는 코딩은 잘 안 된다. 예컨대 html 마크업을 구성하는 문자열은 이스케이프되어 문자그대로 브라우저에 뿌려진다. 정 그걸 띄우고 싶다면 악명높은 dangerouslysetinnerhtml을 쓰든지 차라리 리액트 html 오브젝트로 넣어버리라는 것이 공식 조언이다.
    또 남들은 다 된다고 하는데 나만 안 되는 것이 뭐나면… 문자열을 전달받아 그 문자열과 일치하는 이름의 컴포넌트 렌더링하기. 흔히 알려진 React.createElement(ChildName, null) 용법이 작동을 안 한다.[각주:7]
  • render () 메소드 내에서 const로 만드는 빈 배열은 길이가 0이 아니라 1이다. 이유는 모르겠다. 그래서 forEach push로 필터링을 할 때 결론적으로 이런 식의 이상한 판별식을 쓰고 있다. 이게 아닌데... 분명 더 옳은 방법이 있는데...
if (filteredArray[0].props.name != '') { /* do the stuff */ }
  • PHP가 세션/쿠키를 만드는 과정/방법론 때문에 사용자 인증이 생각보다 번거롭다. Ion Auth를 쓰고 있는데, 최종적으로는 기껏 깔아놓은 react router를 못쓰고 결국 자기 자신에게 로그인폼을 POST 제출해서 로그인 처리하고 리디렉션 시키는 몹시 전통적인 짓을 하고 있다.
    • 원래 계획은 ajax 폼으로 그 자리에서 즉각 로그인을 시키는 것이었다. 로그인 자체는 성공했는데, 문제는 자동로그인("keep logged in") 기능. 자동로그인이 도무지 먹지를 않는다. 왜 그런가 하고 모든 소스를 다 뜯어본 결과… "자동로그인"은 일반적으로 이런 로직으로 동작한다는 것을 알았다.
    1. 사용자가 POST 요청으로 로그인을 시도한다.
    2. PHP는 ID, 해싱된 패스워드, 자동로그인 여부를 받아 로그인(유저정보 매칭)을 시도한다.
    3. 로그인이 성공하면 PHP는 지금 로그인한 세션 고유값을 DB에 저장한다.
    4. 그리고 즉시 HTTP 응답 헤더에 이 세션 고유값이 포함된 쿠키를 쓰라는 요청을 보내는 리디렉션을 실행한다.
    5. 이때 PHP가 별다른 출력을 내지 않아야 비로소 이 쿠키가 써진다.[각주:8]
    6. 리디렉션된 HTTP 응답에서부터 쿠키와 세션은 유효해진다.
    7. 그래서 그 다음부터 (리액트 라우터가 아닌) PHP가 HTTP 요청을 받으면 우선 서버단에서 쿠키와 세션을 확인해 로그인 여부를 체크하고 그제서야 그 결과를 반환해 이용할 수 있게 한다. 여기서 자동로그인 구현 완료.
    • 여기서 5번 스텝이 문제되는 것이었다. ajax 요청은 필연적으로 출력을 낳고, 따라서 자동로그인 로직의 5번에서 멈춘다.[각주:9]
    • 그러면 ajax 요청 콜백에서 적당히 쿠키를 만들면 되는것 아니냐? 싶을 텐데 그러면 7번 스텝이 걸림. 요컨대 자동로그인을 체크하고 로그인해서[각주:10] → 사용자 정보를 가져온 뷰를 → F5로 새로고침하면[각주:11] → 거짓말처럼 로그아웃당함.[각주:12]
    • 서버단이 JS로만 구현되었거나 자동로그인 로직이 좀 달랐다면[각주:13] ajax 콜백의 쿠키 작성만으로도 충분히 자동로그인을 할 수 있었을까 하는 미련이 남지만... 그건 먼 훗날 많은 이치를 깨닫고 나서 다시 보기로. 지금은 우선 로그인을 시켰다는 데 의의를 두면서, u/(.*) 라우팅과 컨트롤러의 u() 통제와 users.js 최적화로 타협한다.[각주:14]

99. 해야될것들

  1. Redux 배워서 써먹기
    • "최상위 컴포넌트에 스테이트 때려박는게 너무 귀찮아서 온갖 방법으로 그걸 회피하는데요 그래서 state management 라이브러리를 씁니다...!"
    • 아직은 귀찮거나 헤비하지 않지만 넘나 당연하게 react의 짝패로 쓰이는 모양이니 싫어도 적용해야할듯.
  2. webpack 배워서 써먹(으면서 필요한 의존성 버전관리하)기
    • "근데 리액트 사용의 정석은 php 파일에서 로드하는거는 아니에요 webpack으로 빌드해서 index.html 및 js / assets 뭉치를 만들고 걔를 static hosting"[각주:15]
    • 지금 당장은 이런 스텝들이 필요할듯
      • React, Babel을 npm으로 받아서 로컬 트리에 넣어놓기
      • 지금 있는 메인 js를 번들 가능하게 조정하기
      • 컨트롤러 $dev 변수에 따라서 지금식으로 다 로드하느냐 bundle-*.js만 불러오느냐를 스위칭할 수 있게. (이건 순 내 편의를 위한 편법. 충격적이게도 지금은 메인 js 고칠때마다 서버에 업로드하고 새로고침을 해서 테스트를 본다고 한다...)
    • 뭐 일단 해놓으면 앞으로는 npm update 한번씩만 돌리면 되겠지
      • 잘은 몰라도 나중되면 지금 뷰파일이 로딩중인 fontAwesome, pureCSS 등등도 죄다 이걸로 관리하게될듯


  1. 그리고 대략 다섯 달 동안이지만 충격과 공포의 해피CGI 솔루션(...)을 경험해봤다. PHP 5.2 이하에서 실행해 달라고 요구하는 솔루션을 들어보신 적이 있는지? 한국에서는 무려 이새끼가 아직도 현역이다. 팩트TV가 이회사 물건으로 돌아가고 있다. [본문으로]
  2. 어차피 만들려는 웹앱들의 본질이 TODO를 크게 벗어나지 않기 때문에 가능한 짓이다. [본문으로]
  3. 보통은 애초에 "서버언어" 개념 자체를 안 갖고 계시니. [본문으로]
  4. 예전의 다른 웹호스팅에 라라벨 올리면서 찾은 방법. 다시 하기는 싫다. [본문으로]
  5. 일단 로컬 구조 그대로 올린다 → 루트의 index.php가 public/index.php 를 require하도록 고친다 → public/index.php 가 ../bootstrap/autoload.php 와 ../bootstrap/app.php 를 require하도록 한다. 이렇게 하면 FTP만 되는 호스팅 환경에서도 일단 라라벨을 굴릴 수는 있음. [본문으로]
  6. 인브라우저 컴파일 중일 때는 아무것도 안 뜨다가 잠시 후에야 가상DOM이 그려지는 문제. 리액트 사용상의 대표적인 대환장 포인트 중 하나라고. [본문으로]
  7. 선배왈 스위치문 써서 컴포넌트 리턴하는 거 말고는 답이 없다고. 안그래도 나도지금 그렇게 하는중이다. 글쎄 이게 아닌데... [본문으로]
  8. 내가 이해한 바로는, 쿠키 생성 코드가 포함된 코드 라인들의 최종 목적이 '뭔가를 출력하는 것'이어서는 안 된다는 느낌이다. 예컨대 redirect()는 괜찮지만 return $resultjson은 안 된다. [본문으로]
  9. 별짓을 다해 확인해 본 결과, 세션도 만들어지고 쿠키 요청도 들어가지만 실제 쿠키 생성부터가 안된다는 것으로 판명. CORS도 확인하고 별짓을 다해봤는데 그게 문제가 아니라 결국 setcookie() 함수의 결함이랄까 설계 때문에 안된다. [본문으로]
  10. 여기선 클라이언트(브라우저)가 단지 쿠키만을 작성한다. [본문으로]
  11. 여기선 서버가 존재하지 않는 로그인정보 세션을 체크하려고 시도한다. [본문으로]
  12. 매치해 볼 세션이 없으므로 자명한 결과. [본문으로]
  13. 대충 찾아보니 JWT(JSON 웹토큰)과 로컬스토리지 사용이 JS 환경에서는 가장 통념으로 사용되는 듯하다. [본문으로]
  14. 그리고 (서버와 리액트가 라우팅을 놓고 싸우는 탓에) 꽤 속도가 느려졌으며 여전히 두세 시간 뒤면 세션이 풀려버린다. 왜죠... [본문으로]
  15. 느닷없이 그런 말을 들어도 지금은 잘모르겠는 부분이지만 여튼 이바닥 선배가 그렇다고 하니 그런줄 알자. [본문으로]
Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

평소처럼 월요일 저녁 키친핸드 근무 치면서 손으로는 분무질하고 머리로는 딴생각 이것저것 하다가 대강 정리한 것. 내일 멜번컵 공휴일 저녁근무도 있는데 이 시간 되도록 안자고 일안하고 뭐하는거람


우리는 사상 처음으로, 자기들이 노는 놀이의 규칙을 만들어본 적이 없는 세대를 마주하고 있는지도 모르겠다.

애초에 놀이란 그 행동 자체를 목적으로 하는 행동을 일컫는다. 그러므로 그 규칙을 정하는 것이야말로 놀이의 핵심이고 가치이다. 소꿉놀이는 누가 아버지, 누가 어머니, 누가 자식이 되고 각자 무엇을 하는지를 정하고서야 비로소 시작되고, 땅따먹기는 땅에 네모 금을 긋고 돌을 줍는 데서 시작하고, 하다못해 "데덴찌"를 해도 무슨 구호를 외칠 것인지를 주체적으로 정하지 않으면 안 되는 것이다.

바로 이것, 어린 시절에 스스로 놀이의 규칙을 정하고 그 규칙대로 놀이를 하다가 집에 가는 경험이야말로 유사 이래 인류가 대대로 전수하며 역사를 앞으로 추동한 힘의 한 갈래라고 볼 수 있을 것이다. 새로운 뭔가가 고안되고 발견되고 발명될 때마다, 인류는 그에 대한 규칙을 수립하고 그 규칙대로 과감하게 시도해 볼 필요가 있었으며, 실제로도 그렇게 해 왔기 때문이다. <호모 루덴스>가 말하고 있는 것이 바로 이 개념이다.


그런데 실천적이고 현실적인 차원에서, 지금 이 나라의 아동과 청소년들은 무슨 놀이를 하고 있는가? 어쩌면 지금 그들은 성인 사회가 가공 및 규격화해 유통하는 몇 가지 특정한 형태의 오락과 제한된 종류의 쾌락만을 수용하고 있는 것은 아닌가?

이를테면, 어렸을 적 전쟁놀이를 하며 느끼던 재미들 중 '롤플레잉'이나 '타격감' 등의 특정 측면만을 어른이 되어 선택적으로 부각해 일정한 목적을 일방적으로 제시하는 온라인 게임으로 체계화해 제공하면, 그들의 아랫세대는 "내가 딜러를 하니 네가 탱커를 하니 이번에 누가 승격을 하니" 하면서 PC방에 옹기종기 모여 주어진 목적에 따라 놀고 있는 것이 아닌가 말이다.

비디오 게임이 아동 청소년에게 유익하지 않을 수도 있는 이유를 딱 하나 꼽으라면 바로 이 부분, 놀이의 본질로서 규칙을 수립하고 준수하는 주체의 의식과 경험을 대체 혹 희석한다는 점에 있을 것이다. 분명 그들은 "놀이"를 즐기며 재미를 느끼고 있는 듯하지만, 과연 그것은 ― 인류가 지금까지는 그렇게 했던 바 ― 세계를 놀이하며 새 세계를 소화해내는 세대로의 성장의 바탕일까, 아니면 그저 '놀고 있는' 것일까?

그러나 나는 여기서 오직 비디오 게임에게 아동 청소년을 책임지라고 비난하고 싶지는 않다. 그렇게 따지면 유튜브도, 페이스북도, TV도, 누구도 아주 무고하지는 않기 때문이다. 모든 종류의 즐길거리, 볼거리, 요깃거리가 다소나마 '놀이하는 주체'를 특정 재미에 길들이고 있는 한 말이다. 요컨대, 사회 전체가 운동장(playground)의 문을 닫고 각종 돈 내고 들어가는 "놀이문화공간"만을 장르별로 즐비하게 열어놓은 형국인데, 나는 이 시국을 비판하고 싶은 것이다.


돈 내고 즐기는 놀이들의 공통점은, 목적을 특정하게 제시하고, 그 대신 그 목적을 달성했을 때의 특정한 쾌감을 보장한다는 것이다. 가장 극적인 사례가 '방탈출' 게임방이다. 내 돈 내고 방에 갇히는 놀이라니 뭐 이딴 게 다 있는가? 그러나 방탈출 게임방 자체는 아주 흥미진진한 경험인데, "암호/열쇠를 알아내기 어려운 공간에서 단서와 지혜를 모아 탈출하자!"라는 목적 아래 해당 공간이 치밀하게 구성돼 있기 때문에 그러하다. 심지어, 각 방별로 테마를 갖춰서.

방탈출 게임방과 가장 대조해서 살펴볼 수 있는 놀이로서, 우리 어렸을 때 다같이 집에 가다가 한 번씩은 해 봤을 놀이를 떠올려 보고자 한다. "땅 밟으면 죽음"을 선언하는 순간부터, "땅"이라고 생각되는 곳을 안 밟으려고 보도 블록에 오르거나, 땅에 발을 최대한 짧게 디디려고 깡총거리거나 해 본 적이 있지 않은가? 이때 놀이는 결국 어디까지가 땅이냐, 왜 땅을 밟으면 죽느냐, 어떻게 하면 땅 밟아도 안 죽느냐, 죽으면 부활 못 하느냐 등을 정하다가 다들 집에 도착하는 것으로 끝난다.

외국에도 "땅바닥이 용암이야!"라는 비슷한 게임이 있을 정도로 이 경험은 아주 범세계적이다. 왜 그럴까? 실로 원초적인 놀이이기 때문이다. 아무것도 정해지지 않았으므로, 뭔가를 정해서 잘 해내거나 잘 우기면 이길 수 있고, 그래서 아주 유쾌하고 무해하며, 훗날의 기약이 있는 것이다. 암호도 열쇠도 못 찾으면 담당자가 올 때까지 제한시간 내내 꼼짝없이 기다려야 하는 방탈출이란 "놀이"와는, 근본이 다르다고 할 것이다.

규칙을 정할 수 있고, 대충 그냥 해 보면 되고, 잘 안 되면 우겨 볼 수 있고, '죽어도' 조만간 다시 할 수 있다는 점. 우연히도, 이런 측면들은 사람이 살아봄직한 문명 사회의 안전그물에 그대로 적용된다. 아니, 사실 이는 우연하지 않다. 선진 사회일수록, 어차피 인간사라는 것은 어마어마하게 큰 한바탕 역할놀이일 뿐 그밖의 별볼일은 크게 없다는 사실을 순순히 인정하는 경향이 있다. 다만, 그 진실을 충실히 구체화하는 제도와 예의와 사고방식을 지속시킴으로써, 새로운 놀잇감이 등장할 때 새로운 놀이를 시작하려는 움직임을 막지 않고 적극 장려해 사회 전체를 하나의 운동장으로 열어줄 따름이다.


그렇다면 지금 우리는 어떤가? 아무리 좋게 생각해 보아도, 일단 지금 우리 세대의 놀이란 갈수록 누군가가 주는 규칙과 목적을 가장 '끝판왕'으로 달성하는 것이 그 본질이 되어 가고 있다. '똥망겜'조차도 '혜자이벤트'가 뜨면 적금을 깨든 밤을 새우든 해서 보스를 깨야 직성이 풀리고, 드립 대회가 열린 것 같은 댓글창에서는 너도나도 최고 공감의 리액션을 한줄 넣어 '페북스타'가 되어 보려고 애를 쓴다. "마비노기"처럼 게임 속 세상 중에도 목적이 오픈된 곳이 있던 한때의 놀이 행태와는 정서부터가 다르다.

그래도 이 세대는 1990년대 어느 한때인가에는 각 동네의 정글짐을 손에서 쇠 냄새 날 때까지 헤집고 다녔던 적은 있다. 그 이후 세대는? 2000년대의 한때를 PC방 컵라면과 "서든어택"으로 보낸 세대는, 없던 룰을 만들거나, 룰의 구멍을 찾고 그걸 헤집거나 메우거나 하며, 작으나마 자기들만의 세상을 구축해 본 경험이 있기는 한가? 우리는 그 여지를, 그런 놀잇감을, "운동장"을 제대로 주었는가?

그나마 가장 희망적으로 관측되는 것은 '마인크래프트'다. 현존하는 메이저 게임 중 거의 유일한 완전 오픈 월드 게임인 이 세계에서, 지금 아동청소년 세대는 '마인크래프트 캐릭터 역할놀이 유튜브 콘텐츠'라는 놀이를 찾아냈다. 이걸 자생적으로, 나름의 규칙과 방법과 문법을 찾아서 나온 놀이라고 덮어놓고 긍정하기에는, 어딘가 석연치 않은 점이 너무 많다. 당장 이 놀이의 본령, 그 진짜 재미 포인트가 무엇일까만 해도 그렇다. 게임 세상을 빌렸을 뿐인 '역할놀이'일까, 아니면 별수없이 주어진 제반 여건 하에 어른들의 세계에서 자기 존재감을 겨루는 '유튜브 크리에이터 놀이'인 것일까.

뭔 짓을 하든 "좋아요, 구독, 공유, 댓글"을 많이 벌수록 더 크게 이긴다, 바로 이것이 유튜브 크리에이터 놀이의 핵심인데, 이것은 필연적으로 유튜브 영상을 만들기 위해 참여하는 경험들로부터 각자를 소외 내지 완전히 분리하게 된다. 주유소 직원 노인더러 "100원어치만 넣어 달라"라고 요구하고 이를 영상으로 올리는 인면몰수의 "꿀잼컨텐츠"는 그렇게 가능했던 것이다. 요컨대, 놀이의 목적과 체계가 놀이 주체에게서 유래하거나 주체에 귀속되지 않을 때 그 게임은 성립은커녕 걷잡을 수 없이 파행할 여지가 크며, 지금 청소년들의 "놀이"가 바로 그런 파국의 위험을 안고 있지 않느냐 추측된다는 것이다.


여기서의 파국이란 놀이 자체에 한하는 얘기가 아니다. 언젠가 "지면에 붕 떠서 살아본 적밖에 없는 세대"의 장래에 대해 조잡하게 쓸 때도 생각한 것인데 ― 이 세대는 자기가 놀이의 규칙을 만들 수 있다는 사실을, 언젠가 때가 되면 싫어도 어떤 규칙을 다함께 제정하고 따라야 한다는 진실을 마주했을 때 집단 패닉에 빠질 수도 있겠다는 생각이다. 예컨대 일본에서 (초고령화가 저지하고 있는) 헤이세이 세대의 사회 등장을 생각해 보면 그렇다. 이들이 정치를 해본 경험이 있는가? '블랙기업'을 고발하고 죄 주고 쓴맛을 보여준 적이 있는가? 고작해야 <아이돌 사변>을 있는 힘껏 비웃는 데서 그쳤지 않은가? 기성 정치인들이 우경화에 가깝게 뭔가를 밀어붙이는 것에도, 어쩌면 어느 정도는 그런 차원의 문제 의식이 있지는 않을까? (물론 그렇다고 우경화를 옹호하지는 못하겠다.)

그런데, 이 나라라고 사정이 썩 다르지는 않아 보인다. 이 나라 어린이 젊은이들도, 작은 정치, 작은 제도, 작은 판결, 작은 사회 역할 수행을 익숙하게 여러 번에 걸쳐서 해 본 경험이 없지 않은가 말이다. 지금까지 '놀이터에서의 놀이'를 통해 쌓을 수 있었던 이 경험들이, 동네 놀이터가 완전히 개점휴업 중인 지금, 쌓이기는커녕 맛봐진 적도 없지 싶다. 자연히 이 세대에서 완전히 소멸한 공유 의식들이 있다. '못해도 된다', '져도 된다', '죽어도 된다', '까짓거 다시 하면 된다', '싫으면 그냥 안 해도 된다' 같은 것들이 그것이다.

이 세대는 반드시 잘 해야만 하는 게임을 하고, 지거나 죽으면 안 되는 파티에만 속해 보았으며, 한 번 잘못하면 다시는 돌이킬 수 없는 고입이니 대입이니 하는 갬블을 당연히 받아들이는 세대다. 심지어 싫으면 안 해도 된다는 것조차도 어디서 느끼고 배운 적이 없으니, 못 견딜 만큼 뭔가가 싫어지면 무슨 수를 내거나 그냥 관두지 못한다. 대신, 열심히 궁리한 끝에, 그토록 요구받던 목표치 점수를 받아낸 다음 그 시험지에 "이제 됐어?" 한 줄 갈기고 여보란 듯이 몸을 던지고 만다.

관점이 너무 극단적이라고? 정말 극단적인 전망을 제시해 드릴까? 이들은 사회에 나와서, 그동안 그들이 부조리하다고 생각했던 모든 패악과 구습을, 고치는 게 아니라, 완전히 수용한 상태로 고착할 것이다. 그들의 삶은 하나하나가 거대한 의무가 될 것이며, 왜 사는지 도저히 알 수 없는 삶 투성이일 것이다. 절대 다수가 가라는 회사 가서 하라는 일 하고 받으라는 대출 받아 갚으라는 빚을 갚는 인생으로 점철할 것이며, 이게 뭔가 싶어지는 이들은 점점 더 많은 수가 '인간증발'을 할 것이다. 핵심은… 누구도 중간에 그렇게 선언할 수 있다고 배운 적이 없으므로, 더는 "씨발! 존나 재미없어! 이딴 거 그만하고 이제 딴 거 하고 놀면 안 돼?!"라고 중간에 외치지 않을 것이다. 대신 계속하여, 잔잔히, 숨막히게, 그들이 보고 자란 교실 같은 세상을 이어갈 것이다.


사실은 문득, 요즘 게임이라는 건 다 최종 목표가 있고 다르게 놀 수가 없구나, 싶었던 데서 시작한 생각이다. 그럼 요즘 게임 말고는 별다른 놀이를 해 본 적이 없는 사람들은 나중에 어떻게 되는 걸까, 를 계속 생각하니, 종국에는 좀 깜깜한 세상을 그려보게 된다. 그럴 수밖에. 행동 목적이 어딘가에서 내려와 주어지는 한 그런 세상에 무슨 가망이 있을 리가 없다.

무슨 결론을 지어서 어디에 마침표를 찍어야 할지 모르겠다. 차라리 지금이라도 나머지 세대가 다 들고일어나서 떼로 위선이나 좀 떨어 주면 어떨는지. "못 해도 돼! 져도 돼! 이긴다고 뭐 별거 없어! 쟤가 반칙 쓴다 싶으면 반칙 쓴다고 말을 해! 규칙이 없으면 니가 제안해도 돼! 하다가 잘 안 되면 좀 쉬고 깍두기로 들어와서 시작할 수 있어! 힘들거나 싫으면 그만해도 돼! 너 재밌겠다 싶은 걸 너 하고 싶은 방식으로 실컷 하다가 질리면 집에 돌아가도 좋아!" 음. 써놓고 보니 2017년 한국의 맥락에서 이보다 더 위선적인 꼰대소리가 있을까 싶긴 하다.



추기1: 다 써놓고나서 사전을 찾아보니 영단어에서는 play와 game의 의미가 다르다. play가 일반적 의미의 놀이를 뜻한다면, game은 놀이 중에서도 특히 특정한 목적을 두고 겨루는 놀이만을 한정해 뜻한다. 그렇다면 위의 기나긴 잡설은 결국 이렇게 요약된다. "game이 아닌 play를 해본 적이 없는 세대가 오고 있는 것은 아닌가."

추기2: 어딘가에 공유가 된 걸 보고 피드백들을 (셀프로) 받고 보니... 아닌게아니라 이 요지에서 세대론을 들먹일 이유가 전혀 없었지 싶다. 한동안 20대란 뭔가 청년이란 뭔가 하는 걸 생각하고 살다 보니 그 버릇이 남아서 공연히 불필요한 논지가 들어갔다. 일단은 수긍해 둔다. 내가 여기서 말하고 싶었던 넓은 의미로서의 놀이 ― 자주적으로 각자의 역할과 행동 요령과 규범을 수립하고 다양한 안전 장치와 제도와 문화 아래 이를 수행하는 체계 ― 를 점점 못하고 있는 것은 우리 사는 세상 전체이지 특정 세대가 (특히 더) 그렇다는 말에는 별 근거가 없달까 핵심 주제가 못된다. 이제 글 전체를 수정해야 하는데 그건좀 미루고 싶구먼 ㅠ

Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

자세히 보면 또 꽤 빻았다

ㅋㅋ 남의나라 주립도서관에서 작업함
앞으로 매주 토요일에는 도서관에 올거같으니 업데이트를 좀더 기대해 보셔도 좋을듯합니다... 안되면... 뭐...



'1 내 > ㄷ 그림' 카테고리의 다른 글

우리가 난민이었다  (0) 2018.07.04
방송국 가시내 67  (0) 2017.09.30
방송국 가시내 66  (0) 2017.01.05
좃쭝똥 가시내 65  (0) 2016.07.17
지상파 가시내 64  (0) 2016.02.27
방송국 가시내 63  (0) 2016.01.18
Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

어떻게 해도 무식이 탄로날 처지이므로 최대한 짧게 쓴다.


그래 (시스젠더 헤테로) 남성들이여, "메갈"의 등장 이후 기분이 어떠신가들? 이런 부문에서 자기반성을 하지 않아도 좋았던 대다수 여러분은 아마도 그들을 (여러분이 득 보고 계신 모순덩어리 세상의 모순덩어리 규범에 입각해) 양껏 비판하고 계실 것으로 생각된다. "성평등도 정도껏이지 거 되게 쿵쾅거리네!"라고, 지금껏 여러분이 '신녀성'과 '이대녀'에게 변함 없이 정력적으로 그래 오셨듯이. 이 글은 그런 분들에게 드리는 것이 아니다. 그저 다만 앞으로도 그렇게 세계의 절반을 제2의 성 정도로 오도하며 착실히 도태(淘汰)되어 주시기를 부탁드리는 바다.

그런데 우리 중 그렇지 않은 일부는 조금 당혹스럽다고 느끼고 있을지도 모르겠다. 한마디로, "다 알겠고, 그럼 날더러 어쩌라는 거야?"인 것이다. 역사와 문화에 절절히 흐르는 여성혐오, 지금도 이어지는 여성과 성소수자에의 억압, 성평등의 필요, 다 이해하겠고 납득하겠다 이거다. 이 글은 여기서 시작하는 문제를 다룬다. 그럼 이제 그 여성혐오와 성차별의 기득권에 있는, 소위 "평범한 남자"들은 이 모순에 대해 무슨 행동으로 갚으면 된단 말인가? 할 수 있는 일이 있기는 있단 말인가?

한 가지 있다. 가부장제(patriarchy, 부권제[각주:1])를 용맹히 때려부수면 된다.


가장 좁은 의미에서의 가부장제는 각 집안 어른 중 남자 어른을 우선으로 모시자는 제도이나, 가장 넓은 의미에서의 가부장제란 기실 온 천지에 가득한 인류 사회 대부분의 작동 원리 그 자체이다. 왜 그렇게 되는고 하면, 적어도 우리가 지금까지 알고 있는 아버지의 역할이며 부성(fatherhood)에 있어서는, 그 핵심 구성 가치가 이 세상 전체의 가치에 얼추 비슷하게 연동하여 작동하고 있기 때문이다.

아버지는 우선 없던 것을 만들어내는[生] 역할이 기대되는 자다. <시경>에서는 이를 "아버지 날 낳으시고[生]"로 요약하여 가르친다. 확실히 내 아버지가 없던 정자를 생산해 내 어머니에게 착상시키지 않았던들 나는 나지 않았을 것이니, 없던 것을 만들어내는 아버지의 역할이란 숭고한 것이다. 동서를 막론하고 이 원리는 모두에게 발견되었으며, 그리하여 인류는 이것을 생산(生産)과 성장, 혁신과 창업을 떠받드는 단 한 가지 형식의 경제로 조직하여 유지하고 추앙하였다.

또한 아버지는 똑바르고 딱딱하고 힘차게 오래오래 버티며 곧추서 있을 것이 요구되는 자다. 아버지 노릇에 사용되는 부위가 하필 그렇게 생긴 까닭이다. 이것은 모든 (적어도 절반 정도의) 인류의 무의식에서는 더없이 목전에 선명한 하나의 이상적 목표로 주어져 왔다. 그리하여 마침내 존 스타인벡이 <분노의 포도>에서 '십여 개의 철제 페니스가 땅을 쉼없이 강간'하는 장면을 그렸을 때, 우리는 인류가 추진해 온 단 한 가지의 산업 발전 양상이 얼마나 가부장적이었던가를 낯뜨겁게 목도하는 것이다. 얼마나 우리가 직선적이고 직접적이며 목적 지향적으로 강력하고 부단하게 정력적이기만 해 왔는지에 대해서 말이다.

이뿐 아니라 아버지란 어떤 정상적 표준과 규격을 제시하고 이를 준수하기(시키기) 위해 규율과 방침과 제재를 해야 하는 자다. 만들어낸 걸 기를 땐 기르더라도 만드는 단계에서만큼은 멀쩡한 것을 만들어 놓아야 기르는[鞠] 자(<시경>에 따르면 기른다 함은 이미 낳아진 것을 관리하는 것이며 그 역할은 어머니다)에게 아버지로서의 소임을 다했노라고 강변할 것이 아닌가? 그리하여 가부장적 정치는 필연적으로 권위와 규범의 정치이며, 모든 비정상적 상황과 비표준적 존재를 '쉬쉬하고' 덮어놓는 정치, 처리가 불가능한 규격 바깥의 잘못 낳은 존재에 대한 배제, 말소, 부정, 무화(無化)의 정치이곤 했다.

무슨 말인지 알겠는가? 경제가, 산업이, 정치가, 요컨대 기반 문화 전체가 순 다 아버지 입장이었고 언제나 가부장제적이었으며... 에라이... 좆 같았다는 말이다!


말이 나왔으니 잠시 좆같다는 한국 비속어의 의미를 좀 새겨보자. 나쁜 의미에서 남성기 같다는 것은 무슨 뜻인가? 그것은 아무데서나 저 혼자 멋대로 발기하고, 죽어도 자기는 지금 당장 용두질을 해야겠다고 우기며, 한바탕 '싸튀'만 할 수 있다면 뭐든 그저 다 좋게 여기고, 그러므로 낳는 짓 외의 어떤 뒷일에도 아무 관심을 갖지 않는 것이다. 설명해 놓고 보니 정말로 좆같은데, 그런데 과연 우리가 몸담은 가부장제적 체제나 문화나 사회 중 이런 행태가 발견되지 않는 곳이 그 얼마나 되는가? 실로 없다시피하지 않은가?

바로 이것이 여성혐오에 진력이 난 페미니스트들이 매일 증언하고 있는 세상의 실체이다. 정치인(CEO)이 아무 공약(프로젝트)이나 막 싸질러놓고 뒷수습을 하지 않아도 좋은 것은, 그가 몸담은 부성적 정치(산업)의 세계에서 뒷수습은 공약(프로젝트)을 낳는 일보다 중요하지 않기 때문이다. 데이트 폭력이 남성에 의해 여성에게 가해지는 것은 연인 사이라는 지극한 개인사에서조차 일련의 규율과 정상적 상태를 규정하는 것이 가부장제적 세계에서 지당하기 때문이다. 가장 좁은 의미에서 가부장제의 지배층인 "한남 앱충"의 생리와 모든 꼴불견에 대하여는? 더 설명할 필요가 없을 것이다.

물론 가부장제는 '가족을 지키는 아버지'의 역할상을 제시해 기초 사회를 유지해 온 순기능을 해 온 체제라는 점이 있다. 또한 없던 것을 생산해내야 하는 시대에 가부장제란 필연적으로 호출되는 사고 체계이기도 하다. 그러나 문제는 지금 우리가 무슨 시대에 살고 있느냐인데, 과연 지금 우리가 뭔가 완전히 새롭고 전에 없던 무엇인가가 없어서, 혹은 더 강력하고 완벽한 내치와 외치가 부족해서 이 사달이 나 있는가? 그렇지 않다. 이미 근본적 의미에서 임계치에 임박해 있는 인류에게, 뭘 더 낳는 것만을 목적하는 라이프스타일은 실제적 해결을 주지 못한다. 낳는 건 낳을 만큼 낳았고 이제는 그걸 잘 기를 때가 온 것인데, 오직 가부장제의 수혜자들만이 그 방법을 못 배워 혼란에 빠져 있을 따름이다.

시대가 페미니즘을 호출하는 이유, 그리고 내가 가부장제를 분쇄해야 한다고 우기는 이유가 여기에서 온다.


페미니즘의 역할은 불 보듯이 자명하다. 가부장제의 폐해에 대응할 수 있는, 혹은 아예 그걸 대체할 수 있는 다양하고 억압되지 않은 발상과 방식을 제안하고 관철해 실현시키는 것이다. 가부장제의 반대는 가모장제가 아니며 그럴 수밖에 없다. 그렇다면 무엇이 가부장제 바깥에 있을까? 적어도 남자들이 발기차게 들고일어나서 왈가왈부 토론하고 몇 가지 완벽한 방침과 규범을 정해 밀어붙일 만한 것은 아닐 터이다. 그렇다. 페미니즘에게 턴을 넘기는 것이 최선이다. 그리고 페미니즘이 이 닳아빠진 질서를 무너뜨리기 편하도록 반드시 병행되어야 하는 작업이 있는데, 이제 좆 까는 짓은 그만하자고 나서서 부정하는 것이다.

가부장제는 여성에게도 폭력적이고 기타 성별에게도 폭력적이지만 남성에게도 폭력적이다. 특히 그 남성이 정상적이고 규범에 맞으며 사회가 바라는 요건과 이상(理想)에 부합하(려고 하)면 할수록 그렇다. 다른 이유가 아니라 규격과 정상, 표준을 추구하는 과정은 필연적으로 공허하고 맹목적이면서 불가능하기 때문이며, 그러므로 필시 '그렇게 살지 않아도 되는' 모든 존재에 대한 질투와 증오를 수반하기 때문이다. '한남 앱충'들과 '군무새'들이 '권리만 요구하고 의무를 지지 않는 여성들'에게 쏟는 그 분노, 그들의 처량한 처지, 그들이 원하는 것들을 곰곰이 생각해 보시라.

자 이제 여기서 이 글을 여기까지 읽고 있는 소수파의 양식 있는 남성 여러분을 다시 불러 보는 바다. 왜 그렇게 살아야 하는가? 이 불가능한 추구, 이제 아무도 원치 않는 생산적이고 가부장제적인 역할에의 눈먼 복무, 그 "수고와 희생과 손해"를 보상받기 위해 애쓰는 고생과 그 과정에서 세상에 끼치는 해악에, 당신이 동참할 이유가 어디 있는가? 그게 무슨 남자다운 것이라도 되는가? 당신마저 그렇게 살 필요는 없지 않은가 말이다! 좆 까라지!


정리하자면 이렇다. 남성으로서 페미니즘을 실천하는 첫 단계는, 당사자 남성으로서의 가부장제에 대한 탈권위와 전복이며, 여기서 말하는 가부장제란 결코 집안에서 "공처가"가 되는 것 따위가 아니다. 엄밀히 말해서는, 생각할 수 있는 모든 사회 영역에서의 가부장제적 질서와 방식과 행태와 악습을 고발하고, 그 체계의 기득권으로서 그 모순을 순순히 시인하며, 적극적으로 혁파해 나갈 것이 요구된다. 맹목적 성장에의 거부, 목적 지향성으로부터의 탈피, 정상성에 대한 권위적 강압 문화의 극복 등이 이에 해당할 것이다.

구체적 행동 요강은 더욱 세분화될 것이고 장차로는 더 다양한 거시-미시 사회에서 더 예리한 정치적, 경제적, 문화적 행동들이 더 많이 요구될 테지만, 어쨌든 지금부터의 인류 발전의 한 축에 합류하는 데 있어 특히 (도태되고 싶지 않은) 남성들이 더욱 명심해야 하는 요점은 한 가지로 분명하게 모인다. 여자는 적이 아니다. 성소수자도 적이 아니다. 가부장제가 적(敵)이다. 그 장벽이 일단 무너지고 나면, 세상은 독일 통일 전후처럼이나 바뀌어 있을 것이다. 전면적으로, 훨씬 더 낫게, 도대체 그전까지는 답답해서 어떻게 살았는가 의아할 정도로.


그리고... 에휴 결국 무식이 탄로나고 말았다. 많은 질책과 비웃음 바랍니다. 끝.

  1. 여기서는 부득이 학술적으로 옳은 표현인 '부권제'보다는 좀더 친숙하고 전개에 편리한 기존 표현인 가부장제를 사용한다. 죄송 [본문으로]
Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

기도

2017.05.09 19:43

기도


동굴에 벽화를 새기는 마음으로
담벼락에 오늘 사진을 덧댄다
사냥터 같은 세상에서도
냉수 한 모금의 기쁨은 있었으므로

주여
만일 계시어든
이 하룻밤 우리 다리가
조금은 덜 아프게 해 줍소서

모닥불 앞에서 주술을 외던
제사장 대신
춤을 추는
희벍은 스크린을 쥐고 잔다


9/5/2017, one day before "melbourners" and the new president

'1 내 > ㄴ 문학' 카테고리의 다른 글

기도  (0) 2017.05.09
너에게 지옥을 보여줄게  (0) 2014.12.31
책가방의 초코파이  (0) 2014.09.29
외주(?)작업들  (0) 2013.08.20
김의기  (0) 2013.07.17
지구방위고등학교 팬시나리오 2화 v1.0  (6) 2012.04.07
Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

이 게시물은 다음 칼럼에 대한 공개서한의 형식을 취합니다. 참고해 주세요: [임마누엘 칼럼] 한국에는 기술보다 과학적 사고가 필요


임마누엘 페스트라이쉬 교수님께.

교수님의 글 잘 읽었습니다. 지구의 날을 맞아 응용과학의 겉면만을 피상적으로 즉각적으로 감각적으로 소비하는 행태를 버리고 우리 모두 좀더 합리적이고 과학적인 사고력을 기르자는 취지의 기고를 해 주신 것에 감사드립니다. 많은 부분 동감했습니다. 특히 매체들이 어떻게 사람들에게서 사고력을 사용할 기회를 앗아가는지, 우리가 얼마나 “기술적인 성취에 대한 경외감”으로만 가득차 있으면서 정작 “스마트폰이나, 정부나 경제가 어떻게 작동하는지”에는 관심이 없는지 지적하신 대목이 마음에 듭니다.

그런데 후반부에 제안해 주신 내용들에서는 고개를 갸웃하게 됩니다. “의무적으로 복잡한 텍스트를 읽고 분석하게 하는 교육 관련 법”이 그렇고, “‘주의 지속 시간’”이라는 개념이 그렇고 “젊은이들의 스마트폰 사용 시간을 제한하는 조치”가 특히 그렇습니다. 감히 말씀드리건대 교수님께서 개탄하신 현 상황을 고치는 방법이 이러한 외부적이고 개별적인 조치들일 수는 없다고 생각합니다. 왜냐고요? 이런 “적극적인 개입”을 하지 못할 이유가 어디에 있느냐고요? 간단합니다. 우리는 그런 조치들을 해 봤기 때문입니다.

대략 2년쯤 전에 ‘스마트 보안관’이라는 앱이 소개되었습니다. 한국방송통신위원회가 오랜 시간 막대한 예산을 들여 개발하고 설치를 강권한 애플리케이션이지요. 목적은 명백했습니다. 청소년 스마트폰 중독 완화와 부적절한 정보로부터의 청소년 보호. 기능도 계획상으로는 훌륭했습니다. 이제 적어도 청소년들은 비디오 게임을 줄이고 “정책이나 경제에 대한 글”을 조금이라도 더 읽을 것으로 기대되었습니다. 결과는 무엇이었을까요? 스마트 보안관이라는 검색어의 연관키워드는 ‘뚫기’가 되었고 애어른 할 것 없이 모두가 이것을 눈 가리고 아웅이라고 비난했습니다. 결국 사업은 순식간에 백지화되고 맙니다.

의무적으로 어려운 글을 읽도록 장려하는 문해력 향상 프로그램은 어떨까요? 글쎄요, 교수님의 글을 소개한 중앙일보 페이스북에 달린 댓글에 따르면 “이렇게 또 수능 비문학 지문이 어려워집니다…ㅠㅠ” 그리고 교수님이 제안하신 교육 관련 법의 한국적 결과에 대해 이 댓글보다 정확하게 내다보는 분석은 달리 더 나오기 어렵습니다. 지금까지 정말로 그래 왔기 때문입니다. (이상하게도 우리는 언제나 기성세대에게 책임이 있는 허물과 폐습을, 다가오는 신세대가 해결해 줄 것으로 기대해 왔습니다. 나쁜 것은 어른이지만 앞으로 잘해야 하는 것은 학생들이었죠. 이는 거의 미신적 전통이라 할 만한 불합리입니다만, 이 이야기는 논의의 범주를 벗어나니 여기까지만 하겠습니다.)

이제 제 요지가 무엇인지 말씀드리겠습니다. 저는 한국인들이 게으르거나, “세상에 대한 관심이 없”거나 인내력이 없다거나 해서 과학적 사고를 하지 않는 것이 아니라고 생각합니다. 실상은 오히려 그 반대지요. 한국인들은 지나치게 부지런하고, 세상은 그들의 관심을 지나치게 요구하며, 그래서 그들은 만사에 초인적 인내력을 발휘하고 있습니다. 바로 이 이유로 우리는 많은 정신적 자질 중 과학적 사고를 포기하게 된 것입니다. 사고력의 ‘trade-off’가 일어난 것이죠.

기왕 경제 용어를 썼으니 조금 더 알은체를 해 보겠습니다. 비용과 효용 모델을 도입해서 들여다보면 더욱 명확해지는데, 한국인들에게 있어 과학적 사고를 관철할 때 얻는 효용은 비용에 비해 턱없이 모자랍니다. 혹시 “설명충”이라는 인칭명사를 들어 보셨습니까? 아무도 물어보지 않은 것을 구태여 답하고, 합리적이고 체계적인 사고에 참고할 수도 있을 사실관계를 굳이 전재(轉載)해 오는 봉사자들에게는 이 불명예스러운 호칭이 따라붙곤 했습니다. 열심히 검색하고 책 찾아서 뭔가를 써 올리는 비용에 비해 돌아오는 효용이 절망적이니 무슨 일이 일어났겠습니까? 한때 자신의 자존감을 ‘스피드왜건’으로 내세우던 설명 봉사자들은, 순식간에 온라인 세계에서 자취를 감춰 버렸습니다.

미디어의 행태도 그렇습니다. 교수님께서는 미디어가 사안에 대해 일어나야 할 반응과 감정을 그들이 미리 정해 놓고 거기에 모든 걸 끼워맞춘다고 하셨지요. 타당한 묘사라고 생각합니다. 그런데 그것이 과연 시청률이며 접속자 수 따위의 얼마 안 되고 일회적인 수치 때문에 휘둘리는 바보스러운 작태라고 생각하십니까? 안타깝게도 그렇지 않습니다. 진실은 이것입니다: 한국에서 대부분의 사안은 이미 알려져 있고 이해 가능하며 단지 정도의 차이가 있을 뿐인, 대단히 지겹고 반복적인 구태의연함의 범주에 들어 있습니다. 구태의연한 것을 각개 사안별로 가설 세워 검증하고 꼼꼼히 복기하는 것은 과연 비용 대비 효용을 얼마나 보상하는 일일까요? 한국인들은 그런 일에 머리를 낭비할 여력이 없는 것입니다.

오해하지 말아 주세요. “그러므로 우리는 앞으로도 바보스럽게 모든 것을 정해진 틀에 끼워맞춘 다음 편도체가 시키는 대로 반응하겠다”라고 선언하고 있는 것이 아닙니다. 저는 다만 지금 우리가 실제로는 어떻게 살고 있는가를 차갑고 차분하게 다시 서술하고 있을 뿐입니다. 그런데 그 실제 삶이 어떤가 하면, 바보스럽고 구시대적이며 더 깊게 생각하고 싶지 않은 것들이 한가득 꽉꽉 들어차 있는 삶이라는 점이 문제가 됩니다. 교수님의 조국에서 주로 나오던 정치 경제 이슈가 무엇이었는지 저는 모릅니다만 적어도 제가 지난 20여년간 보아 온 이 나라에서 정치 이슈의 절대 다수는 “제발 뇌물 받지 마라”였고 경제 이슈의 대부분은 “제발 돈벌이로 사람 죽이지 마라”였습니다. 단언하건대 이 두 가지로 요약 가능합니다. 이제 교수님께서 말씀해 주십시오: 여기에 과학적 사고가 필요합니까, 아니면 개인적 양심과 사회적 법치 질서가 더 긴요합니까?

심지어 정치와 경제를 벗어난 생활 전반의 영역에서도 마찬가지입니다. 우리는 고속성장 산업화 시대의 생활 양식이 아직도 먹히는 줄 알고, 혹은 그 다음 단계의 사회에 대한 각오가 총체적으로 미흡해 있어서, 아무튼 여러 이유로 ‘지금껏 살아온 대로’ 꾸역꾸역 살고 있을 뿐입니다. 더 이상의 성장은 불가능하지만 각자의 사업체는 지금껏 해온 대로 성장해야 하며, 그래서 우리 각자는 추가 근무와 더 적은 행복으로 스스로를 몰아넣고, 이 근본적 불행 양산 체계를 해체하지 못하기 때문에 아쉬운 대로 부동산으로, 주식으로, 한강 다리로, 스마트폰으로 도피를 하고 있습니다. 이 상황에서 순수하게 과학적이고 학술적인 사고력은 터무니없이 값비싼 것입니다. 아카데미 수강료, 순수문학이나 기초학술 분야의 책, 문사철 전공수업 등은 그 돈을 내고 내 것으로 만들기엔 어디 가서 쓸 데가 도무지 없는 것입니다.

제 개인적으로는 이 모든 것이 “인문학의 위기”, “기초과학 홀대” 운운의 지엽적인 몇몇 용어로 묶여서 이 사회 전체의 병폐와 별 관련 없다는 식으로 분리시키는 행태조차도 불만족스럽습니다. 요약하자면 이렇습니다. 우리는 과학적 사고력이 없는 게 아니라, 과학적 사고력을 사용함으로써 치러야 하는 비용 때문에 그걸 사용하지 않는 겁니다. 설명충 소리나 들을 게 뻔한데 팩트체크는 왜 하며, 아무나 한 명 지목해서 화내고 넘어가면 그만인 뉴스를 무슨 유난으로 진지하게 들여다보고, 피곤해 죽겠는데 어떻게 주말에 책을 펴겠습니까?

우리는 그런 비용을 치를 필요가 없을 때, 오히려 열심히 사고하는 것이 어떤 식으로든 상황을 좀더 낫게 만들어준다는 확신이 설 때는 언제 그랬냐는 듯 모두가 과학자가 되고 판검사가 되고 ‘네티즌 수사대’가 되는 사람들입니다. 황우석 사태 때 그러했고 미국산 쇠고기 수입 반대 시위 때 그러했고 각종 게이트가 터졌을 때 그랬습니다. 그 사안들은 조금 덜 지겨웠고, 약간의 새로운 설명이 상당히 많은 도움을 주었으며 이 지겹디지겨운 사회가 조금은 변할지도 모른다는 느낌을 주는 것들이었기 때문이죠. 이제 제 요지가 분명해졌으리라 믿습니다. 이 모든 행태는 철저하게 경제학적인 것입니다. 과학적으로 합리적이지는 않았을지 몰라도 경제학적으로는 언제나 합리적이었다는 뜻이죠.

친애하는 교수님께, 이 모든 의견에 찬동하여 달라고 요구하지는 않겠습니다. 다만 이 사안이, 이 병폐가, 이 추한 사회가 교수님의 기고문 속 전제들처럼 단순하고 한심스럽고 직렬적이지만은 않다는 것을 이해해 주셨으면 좋겠습니다. 어쩌면 과학적 사고는 뇌만 있으면 되는 것이 아니라, 냉철한 뇌에 더하여 과학적 사고가 가능한 ‘토양’까지 필요로 하는 것인지도 모릅니다. 예컨대 모든 국민이 적어도 일주일에 하루 반나절 정도는 아주 딴생각을 하고 살아도 좋다는 보장이라든가, 정부 혹 기업체가 성장과 결과 위주의 방침에서 벗어나 좀 다른 걸 목표하기 시작한다든가 하는 것 말이죠. 그렇게 과학적 사고력에 대한 비용이 할인되고 효용이 오르면, 한국인들은 얼마든지 과학적 사고력을 구입하고 유통할 준비가 돼 있는 사람들입니다. 바로 이 점이 저를 가장 슬프게 하며, 저로 하여금 교수님의 기고문을 온전히 받아들일 수 없게 합니다.

부족한 졸필 읽어 주셔서 감사합니다.

김어진

Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 사샤나즈
    2017.04.24 22:26 신고
    댓글 주소 수정/삭제 댓글
    안녕하세요, 내용과 크게 관계는 없는 말이지만, application은 강세가 a 쪽에 오기 때문에 발음이 '어'가 아닌 '애'가 되어 애플리케이션이 됩니다..!
    • 2017.04.25 21:59 신고
      댓글 주소 수정/삭제
      안녕하세요, 말씀해 주신 transcription의 건 확인하였고 적극 수용하며 반영하겠습니다..!

0.

이 글은 다음 팀블로그 게시물에 대한 첨언 내지 주제 넘은 오지랖이다.
[아무키 대잔치-트럼프①] 정치는 도덕이 아니다. 선악도 아니다. (이찬우의 엔터 더 보이드 @ 팀 블로그 아무키)


1.

물어보니, 이 글의 필자는 사람들이 안희정을 지나치게 싫어하는 상황이 견디기 어렵다고 했다. 트럼프(의 지지자)를 극렬하게 싫어하고 꺼리는 장면 역시 낯설다고 했다. 그래서 쓴 글이라는 취지다. 이해 못 하는 바 아니다.

"그러면 차라리 제목을 '안희정이 뭘 그렇게 잘못했습니까?' 같은 걸로 저돌적으로 뽑고 전개에서 '미국 같은 극단적 사회로 나가고 싶은 거냐, 토론 좀 하자' 하는 쪽으로 가면 어떠니" 했는데, 말만 알겠다 하고 그만이었다.

그리고 ppss에 이 글이 팔리자마자 가차 없이 달려온 베댓 두 개가 이런 류의 논지의 구멍을 완벽하게 가리켜 주어서 달리 더 붙일 말이 없다. "전제가 틀렸습니다. 우린 지금 진보와 보수의 싸움이 아니라 상식과 몰상식의 싸움을 하고 있는 거에요." "누가 보면 우리가 배제해서 일베 생긴 줄 알겠네."


2.

전제 얘기가 나온 김에 몇 개 전제를 정돈하고 지나가자. 한국의 진보-보수는 형식적으로 지나치게 경도되고 내용적으로 비표준적인 것이 사실이다. 냉철하게 분석하면 '자유주의 정당'이 되는 민주당과 '자유주의+사회민주주의 언론' 정도로 분류 가능한 한겨레가 각각 "대중 진보정당"과 "빨갱이 신문"으로 불리고 있고, 사실상 민족주의적 세미파시즘에 가까운 것이 "애국보수"로 참칭되고 있으며, 중간적 진보라 부를 만한 플레이어는 별로 없고, 있느니 저 왼쪽 내지 아래쪽(어딘지 모르겠다는 점에서 사용하는 비유)으로 가고 있는 극소수 좌파가 있다. 자세한 건 김규항 선생께 여쭤보자.

아무튼, 그런가 하면, 누구의 워딩에서 시작되었는지 알 수 없으나 흥미롭게도 적절하게, '상식'과 '비상식'의 이념 대립이 존재한다. 아마도 이것은 현실정치의 층위가 아니라 정치학, 정치철학의 차원일 것인데, 한국에서는 이 상부구조가 하부구조에 대단히 영향을 끼치는 감이 있다. 쉽게 말하자면, "사람이 죽었는데 어떻게 저런 말(생각)을 할 수가 있나", "사람이 저러고도 부끄럽지가 않을까", "자기 친족이 당해도 저럴까"로 대표되는 상식의 진영이 있고, 그것조차 알지 못하는 파렴치의 진영이 있어 그들을 상식 진영에서는 몰상식, 비상식이라 부른다.

여기서 이 글의 진짜 핵심 문제 그리고 원본글에 대한 나의 오지랖의 핵심 논제를 꺼내 본다. 자기를 상식의 편이라 부르는 사람들은 있는데, 자기를 비상식의 편이라 말하는 사람은 없다. 어떻게 이게 가능하지? 이건 좀 이상하지 않은가?


3.

힐러리 진영이라고 쉽게 부르자면, 그들이 트럼프 진영을 대차게 까고 조롱하며 승리를 확신할 수 있었던 것은 그들이 스스로를 상식의 편으로 두었기 때문이다. 설마 사람이 이걸 모르려고? 아니 어떻게 "자박꼼"(내게 전권이 있다면 그의 막말 'grab by one's pussy'는 이렇게 번역시킬 것이다)을 입으로 내뱉을 수가 있지? 국경에 장벽이라니 저 사람 미쳤어?

그런데 그게 정말 그야말로 몰상식이었다면, 그걸 듣는 이들, 그걸 말하는 이들, 그걸 말하는 이를 지지하는 이들이 사람으로써 과연 얼굴을 들고 눈을 뜨고 그걸 기억이나 하려고 했을까? 정말 몰상식한 일은 그렇게까지 화제가 되지 않는데 말이다―깊은 밤 지하철이나 버스 좌석에 앉은 채로 구토하는 사람에 대해 우리가 그렇게 하지 않듯이. 하지만 트럼프는 주목되었고 논의되었으며 심지어 누군가에게는 환영을 받았다. 이 현상의 성립 자체를 이상하다고 생각해본 적은 혹시 없는가?

이게 어떻게 가능했을까? 간단하다. 트럼프가 누군가에게는 몹시도 상식이었다는 점이다. 그게 진보든 보수든 파시즘이든 뭐든 그건 정말 아무래도 좋고, 상식이었다는 점이 중요하다. 그들은 리버럴에게 공격받아서 더욱더 트럼프의 세계로 몰두한 것이 아니다. 자기의 상식을 몰상식으로 공격받다 못해 비빌 언덕을 찾다 보니, 자기가 상식으로 받아들일 수 있는 한계선에서 가장 강력한 무엇을 찾은 것뿐이다. 아무 내용도 없는 구호 "다시 위대한 미국을"이란 바로 단 하나 이 심정을 성문화한 것이다.
윗글에서 인용해 온 뉴욕타임즈조차도 이 층위까지는 다루지 않았지만(적절한 처사였다, 이런 뇌피셜 잡소리보다는 물증이 있으니), 나는 이 차원이 더 맞다고 생각한다. 사람들이 뭐 트럼프나 힐러리를 공약 하나 발언 하나 논란 하나 일일이 팩트 체크해 가면서 지지하고 반대할 턱이 있나? 하물며 실질 문맹률 얘기가 나오는 이 나라에서는 더군다나.

그래서, 나는 윗글이 그런 차원을 좀더 말해주기를 바랬다. 이건 좌우 진보 보수의 문제가 아니라 서로 다른 상식 클러스터(다발)의 조우(encounter)고 충돌이라는 점을 말이다. 어떤 상식 다발은 주목되고 논의되고 발언권을 얻을 기회를 못 얻었고(원글에서는 그걸 "배제"라고 불렀다), 그러니 일베도 탄생하고 뭐도 탄생하고 하는 것이다. 그런데 이걸 한국에서 엄청나게 모호하고 틀리게 사용되고 있는 '진보', '보수'의 워딩에 넣어 버리니, 페이스북 댓글 두 개와 맞다이를 뜨는 초라한 행색이 됐다.


4.

자 그러면 상식 다발이라는 말까지 나왔으니 여기서부터는 내 패를 꺼내야겠지. 그러면 지금 유효하게 작동하는 정치철학 및 사회이념 대립각은 구체적으로 무엇 대 무엇으로 갈라서고 있는가? 제목에 쓴 이상한 단어들을 여기서 드디어 꺼낸다. '논리적 이득'이라는 상식의 세계와 '인간적 숭고'라는 상식의 세계가, 일단 이 나라에서는, 지독하게 부딪혀 피 튀기는 중이다.

논리적 이득이라는 가치 체계란 무엇인가? 그것은 우선 우리에게 냉철하고 논리적인 사람이 될 것을 요구한다. 그런 사람이라면 응당 논리적 계산을 통해 가장 공리주의적으로 선한 선택을 이해하고 동의할 수 있어야 한다. 그걸 해내는 것이야말로 가장 잘 배운 인간의 덕목이다. 그리고 여기서 한 걸음 더 나가 인간이 뭔가를 누리고 즐거워할 수 있다면, 그 논리와 계산과 선택의 과정에서 '개이득'을 보는 것이다.

인간적 숭고라는 가치 체계는 무엇인가? 그것은 무엇보다 우리에게 사람다운 사람이기를 요구한다. 그런 사람이라면 응당 인본 도덕과 사회의 정의를 이해하고 깨우쳐 모든 선택과 행동에서 적용할 수 있어야 한다. 그걸 해내는 것이야말로 가장 떳떳한 인간의 덕목이다. 그리고 여기서 한 걸음 더 나가 인간이 뭔가를 누리고 즐거워할 수 있다면, 바로 그 떳떳함, 쪽팔리지 않음, 요컨대 숭고하고 멋진 삶 자체인 것이다.

무기질적으로 병치해 놓고 보니 뭐 둘 다 뭐 아주 이상하거나 괴랄하지는 않지 않나? 하지만 우습게도, 이게 한국 정치경제 이념의 대립각의 기반이 되는 순간부터는 이런 가치 체계가 서로에게 정말 괴이하고 끔찍하게 보인다. 한쪽은 다른 쪽이 "보상금 받았으면 조용히 계시고 순수한 유가족 아니면 빠져라" 운운하는 벌레로 보이고, 한쪽은 다른 쪽이 빨갱이 선전선동에 놀아나서 '우덜식 ~주의'에 빠져 사람 쥐어패는 참교육이나 시전하는 "씹선비"로 보이는 것이다.


5.

사실 사람이 좌뇌가 있는가 하면 우뇌도 있어서, 이 둘 중 한 쪽 가치체계만을 이해하고 살아가기란 쉽지도 않으며 올바르지도 않다. 그리고 뻔하나마 굳이 언급하자면, 딱 이 두 가지 상식 다발만이 성립 가능한 것은 아니다. 더 많은 상식의 연쇄들이 상호 연관하며 가치체계를 구성할 수 있을 것이며, 그런 가치체계가 더 다채롭게 구성될수록 다원화된 사회라고 볼 수 있다고 나는 믿는다.

그래서 우리는 기본적으로 어느 정도 개이득을 찾으며 논리적 실속을 찾으면서도, 어느 정도는 졸렬한 소인배가 되지 않으려 애쓰기도 한다. 거칠게 사례를 들자면, 일베 유저들 중에 어디 후원금 내거나 무슨 활동을 착실하게 하는 사람도 많고, 오유인들 중에도 악덕 알바생이나 "꽃뱀"(!!!)에게 당할 뻔해 혼났다는 사람도 꽤 있잖나. 평범한 사회적 존재들은 다들 으레 그렇게 유기적이고 총체적인 상식의 세계를 구성하고 거기 맞춰서 살아간다. 자기의 상식이 세상의 상식과 좀더 많이 겹치기를 바라면서.

그런데, 모두가 점점 익명화되어가는 요즈음에 특히 더 두드러지는 바, 더 많은 사람들이 몇몇 특정한 상식적 발상들만을 지나치게 선택하여 기능적이고 불완전한 인격을 형성한 채 전적으로 횡행할 수 있게 되었다는 점이 문제가 된다. 자 이 타이밍에 내가 혹시 여러분께 예를 들어 Social Justice Warrior나 "넷페미"에 대해 어떻게들 생각하시냐고 물으면 어떨까? 무슨 말을 하고 싶은지 이해했다면, 답하지 않아도 좋다.


6.

나는 사람들이 자기의 상식 다발의 명세를 좀 스스로 알았으면 좋겠다. 아 나는 무엇은 옳다고 믿고 무엇은 안 된다고 믿는구나. 아 내가 지지하는 것은 전체 사회에서 어느 정도 지지를 받는구나. 아 이러이러한 생각은 입 밖에 꺼내면 안 되는 거구나. 그리고 이걸 가능하게 하는 것 중 하나가 바로 몇몇 선진 사회가 수 세대에 걸쳐 끈질기게 훈련시킨 토론이라는 것이다.

하지만 윗글에서도 잘 말했듯이 우리에게도 그게 필요한데, 우리에겐 그게 없다. 그걸 가질 시간과 차비와 여유와 사고력이 없다. 우리가 가진 것은 '좌표'뿐이다. 내가 원하기만 하면 LTE의 속도로 욘나게 달려와 나의 불쾌한 인지부조화를 해소해 줄 준비가 돼 있는 선택적 정보들만이 온 사방에 가득 둘러쳐져 있을 따름이다. 여기서 가장 유약하고 우스운 것은 평화 협정 제안이다. "당신의 생각을 상식의 한 축으로 이해하려고 노력하겠어요!"라는 시그널, 그것처럼 모두에게 코웃음을 살 만한 행태는 없을 듯하다.

나는 여기서 멸망의 유황불 냄새를 맡고 있다. 다음 토론이란 영영 없을 수도 있겠다는 생각, 애초에 사람들이 뭐에 대해 뭘 생각하는 누가 나와 어떻게 토론해야 되는지조차 몰라서 온라인에서 하던 행태 그대로를 오프라인에 옮겨 놓으리라는 예상, 모두의 상식이 모두의 그럴싸한 논리로 정당화될 수 있기에 오히려 더더욱 모두가 모두의 비상식에 찔리고 다쳐 으르렁거리는 광경, 뭐 그런 것들만이 머릿속에 가득하다.

그래서, 원글의 술에 물 탄 듯한 결문 주장이 그토록 싱겁다. 민주주의를 다시 시작할 때라고? 난 지금 한 집안이 갈라져서 서로 맞서는 남북전쟁 같은 꼴을 보고 있는데 말이다.

Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

예전부터 농담으로 써먹던 레파토리. 이 나라 돈은 다 어디로 갔느냐? 크게 3군데, 부동산에 묶여 있고 주식에 묶여 있고 4대강에 쏟아져 있다.
이 소릴 하면 너도 나도 그저 잘 웃었다. 굉장히 과장한 일반론이거든.

근데 최순실 스캔들 이후로는 이게 죄다 실상인 것으로 드러나 버려서, 이 소릴 생각할 적마다 다만 아찔하다.

Posted by 엽토군

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절


카테고리

분류 전체보기 (782)
0 현재 호주워홀 (6)
1 내 (325)
2 다른 이들의 (251)
3 늘어놓은 (34)
4 생각을 놓은 (69)
5 외치는 (69)
9 도저히 분류못함 (27)

달력

«   2018/11   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
Statistics Graph