...+15+0
=633,929


이제 비가 좀 덜 내리게 되었으므로 그제야 그들은 거길 가볼 생각이 났다. 간밤에 그들이 사람을 죽인 곳을. 숫자로 말하자면 일가족 총 세 명을, 행정적으로 말하자면 관악구 어딘가의 반지하에 세들어 사는 세 명을, 언론 보도를 인용하자면 '모 노동조합 지부장 모씨와 그의 언니인 발달장애인 모씨 그리고 그의 10대 딸 모씨'를 죽인 그곳을.

이동 중 그들이 보인 굳게 닫힌 입과 별다른 표정이 없는 그 얼굴은 언뜻 보면 최소한의 염치를 가진 일반인, 혹은 그 죽음에 대해 송구함을 표해야 할 입장인 정치인을 연상시키는 면이 있긴 했다. 하지만 그때 그들이 창문 밖을 바라보며 그렇게 근엄하게 생각했던 것이란 실은, 근데 관악구가 어디쯤이었지, 아 모르겠네 안 간지가 오래 돼서, 따위의 것이었다. 그들은 사람을 죽여 놓고도 그렇게나 태평했다. 아니지. 어떤 종류의 살인은, 제 몸과 제 정신을 완전한 거짓으로 둘러입고 사는 자만 할 수 있는 법이니까, 고쳐 말하건대, 그들은 그렇게 내내 태평할 생각으로 사람을 죽이기도 했다.

오와 윤은 거의 동시에 그 자리에 도착했다. 둘 다 같은 검은색 신사용 대형 우산을 직접 들고, 노란색 윗옷을 입고 현장으로 조심조심 다가갔다. 그 자리에 가까워올수록, 안 그래도 축축한 골목에 비가 다 마르지 않아 더욱 질척거리는 듯한 땅과 공기, 그 사이를 분주하게 오가며 현장을 보존하고 수습하기에 여념이 없는 일선 경찰과 공무원들, 그 모든 갑자기 낯설어진 주변을 걱정스럽게 구경 나온 주변 주민들, 그들이 뿜어내는 인열 등등에 대해서, 윤도 오도 거의 동시에 이맛살을 찌푸렸다. 반사적으로, 그 어떤 악의도 없이, 받은 메스꺼움을 그대로 뱉지 않고는 못 견디는 그들의 평소 습관대로.

서성이던 윤과 오는, 그 주변에서 상황을 설명하던 공무원에게 다가가서 가만히 경청하는 것으로, 그 심리적 알리바이 형성 작업에 착수했다. 그 설명은 이미 익히 알고 있는 내용들뿐이었다. 하지만 그걸 모른 체하는 건 어렵지 않았다. 기실 바로 그것, 모르는 체하기야말로 그들의 유일한 천부적 재능이었다. 그들이 그간 이런저런 직업을 전전하며 그 나이가 되도록 이렇달 굴곡 없이 출세가도를 타고 오를 수 있었던 것은 바로 그 재능을 십분 발휘하여 기득권층으로 편입한 덕분이다. 계획적인 살인범은 공모자를 반드시 필요로 한다. 그들은 다른 살인범들이 꼬드겨 세운 공모자였고, 이제 그들 자신도 경력 살인범이 될 참이었다. 차라리 그 자리는 자격 시험에 가까웠다. 할 수 있는 가장 탁월하게 모르는 체를 해야 했다.

오는 그래도 비슷한 걸 몇 번 해 본 입장이었지만, 윤은 이런 종류의 시험이 처음이었던지라, 아무래도 그렇게 속단했던 거 같다. 이거 너무 쉬운 거 같은데. 그냥 적당히 걱정해 주는 말이나 해 주고 혀나 좀 차 주고 명복이나 빌고 가면 되겠구만. 속단한 것은 속결 처리해야 직성이 풀리는 윤이었으므로 그는 그 주변에 나와 있던 다른 주민들에게 아주 자연스럽게 넌지시 혼잣말처럼 말을 걸어 물었다. 근데 여기 어떻게, 여기 계신 분들은 미리 대피가 안 됐나 모르겠네. "미리 대피한다는 게 가능한 줄 아느냐, 15분도 지나지 않아서 순식간에 모든 게 급변한다, 순식간에 땅이 꺼지면서 삽시간에 물이 불어나는 걸 모르느냐" 같은 말이 들려왔지만 윤은 전혀 듣지 않았다. 자기가 말했고 상대방이 반응했다. 그러면 대화는 성립한 것 아닌가. 더 들을 필요가 없었다. 오는 그걸 옆에서 바라보며 내심 걱정했다. 이러다가 우리가 범인인 걸 들키는 건 아닐까 하고.

윤은 내친김에 사건과 관련해서 자기가 할 수 있는 다른 말도 더 해 볼까 생각하고 있었는데 마침 "...대피하고 싶어도 수압 때문에 문이 안 열리게 되기 때문에 못 나간다" 하는 누군가의 고성이 끝나가고 있었어서, 그걸 요령 좋은 반말로 뚝 부러뜨리고, 거기에 제 말을 찔러넣었다. 아 문이 안 열려서? 아니, 어제 엄청났던 것이, 서초동에 우리 제가 사는 그 아파트가, 전체적으로는 좀 언덕에 있는 아파트인데도, 거기가 1층이 지금 물이 들어와가지고 침수될 정도니. 제가 퇴근하면서 보니까 벌써 다른 아파트들도 아래쪽에 있는 아파트들은 벌써 침수가 시작이 되더라고. 그러니 뭐. 제가 있는 아파트가 약간 언덕에 있잖아요. 그런데도 그 정도니. 그건 분명, 제깐에는 최선을 다해서, 보아하니 참 힘들어 보이던데 당신들도 참 힘들었을 거 같고 여기 사셨던 분도 참 힘드셨을 거 같다, 하는 소리를 한다고 한 셈이었다. 무식해 보이리만치 무모했을지언정 틀리지는 않은 연기였다. 어떤 비전문가가, 살인범이, 자기가 죽인 사람을, '힘들었겠다'고 공감해 줄 거라고 믿겠는가.

오는 이쯤이면 됐으니 적당히 다시 자리를 뜨고 싶었다. 적당한 곳에 숨어서 뉴스를 지켜보며 자기가 다시 나서도 되는 시점을 골라야 했으니까. 하지만 윤은, 자기의 범행 현장에 처음 와 본 살인자답게, 현장에 조금이라도 더 가까이 다시 가 보고 싶어하는 것 같았다. 어느샌가 그의 발걸음은 그 반지하로 이어지는 계단을 향하고 있었다. 주민들이 말렸다. "여기는 아직도 여전히 사비로 양수기 써서 물을 퍼올리고 있다. 지하에 6가구가 살고 있다. 당신을 들여보내도 좋은 상황이 전혀 아니다." 그제야 그는 마지못해 층계참을 좀 지난 애매한 위치에 엉거주춤 주저앉아서는, 뭐라도 한 마디 할 생각으로 그 계단 너머를 바라보았다. 그리고 거기서 그는, 보통 사람은, 아니 그 자리에서 그 사건의 범인이 아닌 이상에는 누구도 결코 느껴볼 일이 없는 대단히 특별한 감정에 휩싸였다. 아 그런가. 이게 여기가 이렇게 됐단 말이지. 그렇군. 여기가 지금 저 사람들 눈에는 이렇게 보이는군. 그런 거군. 그러면서, 그는 별 말 없이 그 자리에 잠시 쪼그려 앉아 있었다.

이 이상 현장에 다가갈 수는 없다는 공무원의 제지를 받으며 윤은 끌려나오다시피 그 계단을 벗어나 건물 밖으로 인도되었다. 사실 이제 용건은 더 없었지만, 아직 그들은 정말 보고 싶은 것을 보지 못한 상태였다. 특히 윤의 입장에서는, 그 세 사람이 실제로 죽어가던 그곳의 정취를 아직 제대로 느껴보지 못했기 때문에, 다소 무리를 하더라도 그 반지하방 안을 볼 방법이 있는지 찾고 싶었다. 아마 윤이 '창문으로 탈출 못하나?' 같은 멍청해 보이는 질문을 해서 유도를 받았던 것 같은데 아무튼 그렇게 오와 윤은 그 창문 앞으로까지 안내를 받았다. 그들의 얼굴이 그 창문 앞에 다다랐다. 그들은 눈을 크게 뜨고 그 어둠을 들여다보려고 했다. 들여다보여지는 저편 방향에서는 역광에 비친 그들의 몸뚱아리 그림자가 불쑥 나타났고, 그 속에서마저 그들의 퍼런 안광이 번뜩였을 것이다.

둘은 그 안을 들여다보면서 당장은 별다른 말을 하지 않았다. 그들은 그 안을 바라보기 바빴다. 겉으로야 티가 안 났을지 모르지만 속으로 그들은 더할 나위 없는 은밀한 흥분을 감추며 그들이 살인을 자행한 곳의 진짜 광경을, 그것도 낮밤을 바꾼 시간대에, 어떤 고소, 고발, 탄핵소추, 주민소환, 용의선상 조사 취조도 받지 않는 자유인의 입장에서 바라보고 있었다. 그들은 그런 순간 정도에만 진실로 감각하고 경탄할 수 있었다. 자기가 안전하고 정당하며 우월하고 결백한 존재라는 것을. 자기는 저 자리에서 죽어나간 사람도 아니고, 저런 어둡고 지저분하고 쿰쿰한 곳과 관계 있는 사람도 아니고, 저곳에서 죽을 만한 사람을 죽여 줬을 뿐이라는 것을.

한동안 그런 비정상적인 감각에 도취돼 있다가 누가 먼저랄 것 없이 정신이 들었다. 아마도 그들이 우산을 받쳐들고 쪼그려앉아 그 안을 들여다보느라 다리가 저려 와서 그랬을 것이다. 이제는 정말로 이 현장을 뜨자는 뜻에서, 서로 간단한 눈빛만 주고받은 그들은 마지막으로 그 창문 앞에서 시바이를 하기 시작했다. 정말로 이건 남 일이라는 듯이, 내 일이 아니라는 듯이,  잘은 모르겠지만 참 안됐고 그러니 이건 절대로 내가 죽인 건 아니라는 듯이.

야 이거 참, 왜 대피를 못 했을까. 그러니까요. 왜 대피를 못 했을까요. 햐 참 진짜 이거 반지하가 문제야. 여기는 지대가 낮으니까 이게 다 직격탄 맞잖아. 서울시가 반지하가 너무 많아요. 이거 다 이제 금지시키든가 해야지 이게 무슨 일이야 그래. 우리는 저기 그런 거 없나? 강수량 측정해서 국민들 알려주는 앱 같은 거 없어? 그런 거 좀 만들라고 해봐.

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

기도  (0) 2017.05.09
너에게 지옥을 보여줄게  (0) 2014.12.31
책가방의 초코파이  (0) 2014.09.29
외주(?)작업들  (0) 2013.08.20
김의기  (0) 2013.07.17
Posted by 엽토군

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

이런 시사평론(?)을 쓴 적이 있다.

 

자살률이 '갑자기' 늘어난 이유 하나

언제부턴가 우리 주변에서 이상스러울 정도로 누가 자살했다는 소식을 자주 듣는다. 연예인은 고사하고 심지어 주변인의 주변인조차 자살하기 일쑤다. 옛날엔 그나마 '자살사이트'가 사회문제

blog.yuptogun.com

벌써 14년 지난 글인데 아직도 네이버에서 '자살률 원인' 따위를 검색해 자살률 증가의 원인을 알아내려고 하시는 분들 덕분에 간간이 조회가 되는 모양이다. 다시 읽어 보니 고등학생 특유의 좁은 시야와 어휘력 부족이 절실하게 느껴져서, 안 되겠다 싶어 개정 보론을 적어볼까 한다. 그때 정말 하고 싶었던 말이 뭐였는지 요약 정리를 좀 해서.

-

이 글을 쓰던 시절 내게 관찰됐던 것은 '자살'이라는 엄청난 사건이 보편화되려는 흐름이었다. 돌이켜 생각해 보면, 정확히는, 그건 '표면화'였는지도 모른다. 삼국 시대부터 "IMF"에 이르기까지 과연 극단적 선택을 했던 가장과 집안이 정말로 그 수가 그렇게 적었을까. 하지만 어느 시점까지만 해도 그런 죽음은 항상 놀랄 만한 일이고 비상한 사건이었으며 아무튼 끔찍한 비극으로 간주됐다. 그러던 것이 새천년 이후로, 굳이 따지자면 뉴스를 접하거나 뉴스거리를 접하는 경로가 TV며 신문 외에도 더 생겨나기 시작하던 시기쯤부터, 자살이란 것이 더 다양한 계층에서, 더 많은 종류의 (그리고 더 허망한) 이유로, 우리가 알던 것보다 더 자주 발생하는 사건임이 두루 체감되기 시작했던 것 같다. 이 이상은 객관적 증빙 자료가 없으니 각설하고…

아무튼 자 그러면 어쩌다가 자살을 선택하는 이들이 이렇게나 보편적으로 많아졌을까? 그건 다시 말해서 '왜 자살률이 늘었을까?'라는 질문일 텐데 이 질문은 사실 잘못됐다. 옳은 질문은 이것이다. "자살이 일반인의 보편적인 '선택지'란 말인가?" 생각해 보면 새삼 소름끼치게 이상한 일이다. 어째서 하나뿐인 목숨을 버리는 것이 '옵션'일 수 있는가? 그래서 오랜 세월 자살은 자연스러운 금기였고 애초에 물망에 올라갈 수 있는 선택지가 아니었다. 아무리 시궁창 같은 상황일지라도 살아서 뭔가를 해야지, 그냥 죽어버린다는 건 너무나 이상하고 잘못된, 생각할 수 없는 어떤 것이었고, 그래서 보통 오답으로 간주됐다. 원래 글에서 장광설을 늘어놓으며 서술하려고 했던 "지금껏 우리가 지녀 왔던 통념"은 바로 이걸 가리킨다.

그렇다면 질문은 바뀐다. 어떻게 자살이 하나의 '옵션'이 되었는가? 내 생각에, 딱 이 맥락에만 한정해서 보면, 여기에서 '자살'이란 '살아서 이걸 한다', '살아서 저걸 한다' 운운하는 기존 선택지들에 대한 "위 보기 중 정답 없음"이라는 새로운 선택지라고 봄이 타당하다. "죽는다"를 의미하는 게 아니라, "안 산다"를 의미하는 것이다. 14년 전의 고딩이 당연히도 몰랐던 바 전세계에 심각하다고 소문난 우리나라의 '노인 자살률'은, 오직 이 논리로서만 설명이 된다. 산업 사회의 부속품으로서만 가치를 인정받으며 줄곧 착취당하다가 하루아침에 정년이랍시고 퇴직금 몇 억과 함께 세상에 던져진 뒤 대책 없이 십몇 년을 여기저기 전전하고 나면, 그때 선택 가능한 보기는 '살아서 창업한다'도 아니고 '살아서 은퇴를 즐긴다'도 아니고 '자식들에게 얹혀 산다'도 아니다. 오직 '위 보기 중 정답 없음'만이 유일한 선택이 된다.

여기서 질문을 한 번만 더 덮어써 보자. 요컨대 '살아서 ~를 한다' 하는 선택들이 주어져 있음에도 '그 보기들 중 정답 없음'을 선택하는 이들이 많아진 것처럼 보인다는 건데, 그것 하나가 나머지 선택들을 압도하게 된 것은 웬일일까? 여기서 원문이 "편한 삶에의 추구"라고 잘못 묘사한 사태가 문제가 된다. 그 사태는 정확히 어떤 사태인가? '정상적인 삶의 첨예화'다. 확실히 어느 시점부터인가 '남부럽지 않은' 삶이 생각보다 어려운 (객관적으로는 더 어려운) 목표가 됐다. 그건 분명 중산층이 붕괴한 IMF 이후였고, 이때부터는 암만 열심히 산들 정상 가족의 불안 없는 생활에 도달하기가 점점 쉽지 않아졌다. 그래서 그런 이들의 그런 삶은 불필요한 각광과 조명을 받았다. "최근 편하게 사는 사람이 갑자기 우대받기 시작했다"고 쓴 것은, 이 간단한 생각을 뒤집어 입은 꼴이었던 셈이다.

요컨대 중산층의 도산 이후 '정상적인 삶'에 도달할 가능성이 희박해지면서, '삶 자체'를 계속 선택할 지구력이 바닥난 이들이 탈락하게 됐고, 그 상황이 모종의 제반 변화에 의해 최근 들어 더 분명하게 가시화되었으며, 그게 2000년대 이후 자살률이 급증한 것처럼 보이는 이유라는 게 내 생각이다. 사실 여기까지는 14년 전이나 지금이나 크게 생각이 변한 것은 없고, 다만 14년 전의 나는 이걸 이렇게 간단히 말하질 못해서 중언부언을 늘어놨으며, 그나마 대책 내지 제언 부분에서는 불일치를 보인다. 14년 전의 나는 사회 풍토를 탓하고 있다. (과연 대입 논술 앞에서 끙끙 앓던 인간답다.) 지금의 내게 물어본다면 차라리 나는 법률과 제도를 탓하겠다. '그래도 한 몇 년만 더 살아볼까? 그래도 안 되면 그만둘 때 그만두더라도' 하는 생각이 들게 하는 지원금, 할당제, 재교육 프로그램, 정책 토론회, 교육과정 개편, 조세율 조정, 보증, 보험, 시행령, 개정안, 전문 인력과 전담 기구를 내놓으라고 말이다. 왜 흔히들 농담으로마저 그러지 않는가. 힘든 사람에겐 격려를 해줄 생각 말고 그저 곁에 있어 주면서 고기를 먹이고 돈을 주라고.

-

마지막으로 이 주제 자체에 대해서만 조금 감상적으로 되어 보자면... 그간 무슨 일이 일어난 건지 모르겠다. "비정규직 철폐 투쟁 결사 투쟁"이라는 구호는 노무현 때 끝날 줄 알았던 것이 아직도 쿠팡이니 배민이니 하는 곳을 기준으로 '현재 진행형'이고, 서민들이 "정선카지노"에서조차 희망을 찾지 못해 "바다이야기"로 몰리던 줄거리는 스케일만 "떡상"한 채 주식과 '잡코인'을 통해 고스란히 재현되고 있다. 여전히 부동산은 위세가 등등하고 강남은 불패이며, "남들 다 사는 만큼 살고 싶다"는 사람들은 정작 이미 통계상으로는 남들 다 사는 만큼 살고 있음에도 불구하고 절대 그 위치에서 행복하지 못하고 있다. 모든 걸 자본의 뜻에 맡겨놓으면 자연히 그려지는 어떤 2차원 포물선의 정점을 향해 가는구나 하고 덤덤하게 받아들여지다가도, 아니 근데 진짜 어떻게 사람 사는 세상이 이럴 수가 있어 이 씨팔, 하고 소스라치게 놀라고 만다. "자살마렵다"는 최근의 유행어를 생각할 때와 비슷한 느낌으로.

Posted by 엽토군

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

Yet Is Our God by Anointing Ministry

Translated by Eojin K.



# Verse 1

Yet is our God still the mighty One 그러나 우리 하나님은
Praise Him for His strength, Hallelujah 전능하시니 할렐루야
And my soul shall be well 거센 폭풍에도
Even in most raging storm 내 영혼 안전하리
I'm in the LORD 주 안에서

Yet is our God still the faithful One 여전히 우리 하나님은
Praise His trustfulness, Hallelujah 신실하시니 할렐루야
And no promise from Him 어떤 상황에도
Will cease away no matter how 그 약속을 이루시리
It's for the LORD 주 안에서

# Chorus

Praise Him, praise Him 찬양 찬양
All praises and songs unto our LORD 주 찬양하라 노래하라
Shall sound the earth, shall fill the sky 온 세상에 주를 향한
To show how worthy is our God 찬양이 가득하도록

Proclaim, proclaim 존귀 존귀
All honors and thanks unto our LORD 오 주의 이름 선포하라
Shall lit the world and all around 온 세상에 주의 빛난
To show the glory of our God 영광이 가득하도록

# Verse 2

Yet is our God still the rightous One 그러나 우리 하나님은
Praise for His justice, Hallelujah 의로우시니 할렐루야
And the truth shall prevail 어떤 거짓에도
Over the shadows and fakes 진리는 굳건하리
It's by the LORD 주 안에서

Yet is our God still whom shall He be 여전히 우리 하나님은
Praise for He's alive, Hallelujah 살아계시니 할렐루야
And His words will be there 세상 다 변해도
When everything is falling down 주 말씀은 영원하리
It will be there 영원하리


Posted by 엽토군

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

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

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

방송국 가시내 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 파일로 저장하고 접속해 본다. 이것만 했는데 해결이 됐다면 (즉, 사이트가 뜬다면) 사실 이후의 3-x단계 및 4-x단계는 안 해도 된다. 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. 다음 명령어 실행하여 싹 zip으로 묶는다.

git archive --format=zip master -o ../foobar.zip

5-4. 2번 스텝에서 만들어 놓은 코드를 활용해 묶어놓은 zip을 루트에 싹 올려 덮어씌운다. 끝.


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명 있긴 한데... 그에게는 이글이 대윾잼+대환장 띠용글로 보일것이지만 알고도 굳이 씁니다. 목표는 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
방송국 가시내 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. 5. 9. 19:43

기도


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

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

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


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

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

범인은 현장에 돌아온다  (2) 2022.08.12
너에게 지옥을 보여줄게  (0) 2014.12.31
책가방의 초코파이  (0) 2014.09.29
외주(?)작업들  (0) 2013.08.20
김의기  (0) 2013.07.17
Posted by 엽토군

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


카테고리

분류 전체보기 (796)
0 주니어 PHP 개발자 (6)
1 내 (326)
2 다른 이들의 (252)
3 늘어놓은 (37)
4 생각을 놓은 (70)
5 외치는 (74)
9 도저히 분류못함 (30)

달력

«   2022/12   »
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 31