[도서] 장병규의 스타트업 한국

http://image.yes24.com/momo/TopCate1745/MidCate004/174433744.jpg

항상 내 마음 속에 스타트업 창업에 대한 꿈이 있다. 아니, 다들 한번씩 자기 사업을 차려보는 꿈이 있을듯 싶다. 조직의 리더가 되어, 자신의 비전을 실현시킬 수 있는 일생의 기회이기 때문이다. 하지만 그렇게 꿈만 꾸거나 참담할 정도로 실패하고선 빚을 얻고 끝낸다. 물론 나만큼은 성공할 수 있다고 생각해보지만, 다들 그렇게 망상하면서 행복회로를 돌리다 망했다. 그리고, 무엇보다 내 역량과 성격을 생각해보면 실패할듯 싶고…뭐 그렇다. 정말 하고싶지만 실패가 두려워 물러나는 것이 스타트업이다.

그런 스타트업 업계에서 장병규 의장은 독보적인 입지를 가지고 있다. 카이스트 박사과정을 밟고선, 네오위즈를 시작으로 수많은 스타트업을 성공으로 이끌면서 대박신화를 이끌어왔다. 그 결실이 바로 블루홀 스튜디오의 PUBG, 우리가 아는 배틀그라운드이다. 그 덕에 문재인 정부의 대통령 직속 4차산업혁명위원회에 위원장 자리까지 맡게 되었다.

책에서는 스타트업에 대한 기초적인 지식부터 장병규 의장의 개인적인 경험들이 담겨져 있다. 특히 기존에 실리콘벨리에 맞춰져있던 스타트업 기본서에서 벗어나, 한국 스타트업의 생태계를 잘 그려낸 것이 특징이다. 그 중 가장 인상적인건 스타트업의 3가지 역설적인 진실을 논하는 부분이다.

먼저, 스타트업의 성공은 비정형적이다.
사람들은 스타트업의 성공 비법을 찾아나서지만, 정작 그런 성공 방정식은 존재하지 않는다. 그저 성공한 스타트업들의 성공 방식을 억지로 끼워맞추는 사후적인 해석일 뿐이다. 장병규 의장에 말을 빌리자면, 스타트업은 ‘저마다의 스토리에 따라서 성공한다.’ 그러니 각자의 비전을 가지고 알아서 살아남는게 중요하다.

그리고 스타트업의 평균은 실패다.
스타트업의 성패도 정규분포를 따르는데, 약 20% 정도만 그럭저럭 성공하고 1%만이 초대박을 누린다. 학교 등급으로 치면 3등급 안에 들어야 본전이고, 전교 1~3등해야 전설이 될 수 있다. 심지어 하위 10%는 심한 실패를 하는데, 연대보증으로 대표가 파산하거나 재기불능으로 빠지는 경우이다. 그러니, 평균이 실패라는 얘기가 나온다.
그렇다고 스타트업을 하지 말아야할 이유도 없다. 스타트업이 실패한다 해서 구성원의 인생이 실패하는 것은 아니기 때문이다. 스타트업은 그 특수성 때문에, 단기간 내에 자신의 역량을 집중하여 발휘할 수 있다. 정말 실패를 하더라도 배울 수 있는 환경인 것이다. 그러니 망하더라도 ‘적당히’ 실패하고선 배운 지식으로 재도전을 노리는 것도 나쁘지 않다.

마지막, 스타트업 창업자는 오늘을 살아야 한다.
스타트업은 다양한 일들을 맞닥뜨리게 되고, 대부분 기존의 지식으로는 해결할 수 없는 것들이다. 이 상황에서는 당장 눈앞의 문제를 해결하기 위해 몰입하는게 미래를 걱정하는 것보다 도움이 된다. 어짜피 새롭게 다가올 난관은 예측할 수 없기 때문이다. 대부분의 스타트업이 이런 길을 걸으면서, 창업 1~2년만에 사업계획 단계에서는 상상도 하지않은 일들을 한다고 한다. 그렇게 오늘을 살아가다보면 성과가 나온다는게 장병규 의장의 이야기이다.

스타트업이라면 당연할 것 같지만, 다시 생각해보면 굉장히 현실적인 조언들이다. 스타트업 창업자들이 하나씩 원대한 야망을 가지고 뛰어들 때, 기존의 성공 방식은 먹히지도 않고, 잘해봐야 본전이며, 하루하루 맞닥뜨린 일을 처리하다 시간을 보낼 자신의 모습을 상상하기는 힘들다. 그런 점에서 이 책은 스타트업을 시작하려는 이들에게 다시한번 고민의 기회를 주는 역할도 준다고 생각한다.

한국 사회가 저성장 시대에 접어들면서, 기업의 임직원들도 50대에 퇴직이 기본인  ‘평균이 실패’인 세상에 살게 되었다. 참 독특하면서도 당연하게 평생 직장에 집착하는 한국인 만큼, 공무원이 모두가 꿈꾸는 직장으로 급부상하게 되었다. 일부는 공직자로써 국가 정책결정에 뜻이 있겠지만, 대부분은 그저 평생 먹고 살 자리를 찾는 것이라 생각한다. 하지만, 그중에도 내면에는 위험을 감수하고 자신의 비전을 실현시키고자 하는 사람들이 있을 것이다. 그런 사람들에게 이 책이 첫걸음이자 스타트업 101이 되어줄 것이라 믿는다.

[오늘의 개발] Binance 자산 현황을 파이 차트로 만들기

최근에 내 자산이 어떻게, 얼마나, 어느 비중만큼 있는지 다시 확인하는 작업을 하고 있었다. 사실 지난 고등학교 3년동안 투자는 해놓고선, 정작 자산이 어떻게 변동되는지 살펴보지 않았었다. 체크카드로 긁을 때마다 날라오는 통장 잔고만 보고선, 충분하다 생각하면 넘어가는 경우가 대부분이였다.

이제서야 정신차리고 확인해보니, 암호화폐와 미국 증시는 대폭락장을 겪고 있었다. 세상은 변하는데 내 포트폴리오는 과거에 머물고 있었던 것이다. 당연히 리스크 헷지 같은 것이 될리가 없었고, 그대로 손실을 껴안고 있었다. 더 이상 이럴순 없다는 생각에, 주기적으로 자산 현황을 추적하는 일을 해야겠다는 생각이 들었다.

특히, 가장 시급한건 변동성이 큰 암호화폐였다. 대충 코딩을 해서라도, 내가 어떤 코인을 얼마나 가지고 있는지 시각화 해서 결과를 알아보고 싶었다.

 

Binance API로 데이터 가져오기

올해 봄 즈음, 나름 알고리즘 트레이딩에 관심이 많아 Binance API를 만지작거린 경험이 있다. 이동평균선 크로스와 볼린저 밴드를 이용한, 아주 단순한 알고리즘이었고, 당연히 수익은 내지 못했다. 그래도 잘 보관해놔서, 이번에 빠르게 꺼내다 쓸 수 있었다.

패키지 불러오기 및 설정
Binance API 데이터를 가져오기 위해 python-binance 패키지를 사용했다.패키지 설명서는 여기서 확인할 수 있다. 사실 RESTful API를 통해서 직접 POST해서 가져올 수도 있지만, 이미 좋은 패키지가 있는데 그럴 이유가 전혀 없었다. 아무튼, 필요한 패키지들을 불러오고선 기본적인 설정들을 해줬다.

from binance.client import Client
import warnings
warnings.filterwarnings("ignore")
from matplotlib import pyplot as plt


그다음에는 가장 기본적으로 Client()에 API Key와 Secret 키를 입력해줘서 접근 권한을 얻도록 해줬다. 너무 빨리 타임아웃이 발생하지 않도록 넉넉히 100ms으로 잡아뒀다.

client = Client('Binance API Key', 'Binance Secret Key', {"verify": False, "timeout": 100})


비트코인 최근 가격 불러오기

이제부터 다양한 정보들을 직접 불러오는데, 가장 먼저 비트코인의 최신 가격을 불러왔다. 방법은 간단하게, 1분 단위 OHLCV Kline 과거 데이터 중에서 가장 최근 Close 가격을 가져오도록 해두었다. 즉, 가장 최근의 가격 정보를 쿼리하는 것이다.

BTCPrice = float(client.get_klines(symbol='BTCUSDT',
                            interval=client.KLINE_INTERVAL_1MINUTE,
                            limit=1,
                            requests_params={'timeout':100})[0][4])


참고로 OHLCV 정보가 list in list 형태로 제공되기 때문에, 적절히 리스트에서 골라 써야 한다.
[0]을 통해서 첫번째이자 유일한 값에 접근하고, [4]로 1분 봉 마감가격인 Close에 접근했다.

# get_klines 출력값
[[
1499040000000, # Open time
"0.01634790", # Open
"0.80000000", # High
"0.01575800", # Low
"0.01577100", # Close -> List[0][4]
"148976.11427815", # Volume
1499644799999, # Close time
"2434.19055334", # Quote asset volume
308, # Number of trades
"1756.87402397", # Taker buy base asset volume
"28.46694368", # Taker buy quote asset volume
"17928899.62484339" # Can be ignored
]]


Binance 자산 현황을 불러 데이터 전처리하기

그 다음에는 내 Binance 거래소 지갑에 있는 자산 현황을 불러온다. 간단하게 get_account()를 통해 내가 가지고 있는 코인들과 잔고 수량을 확인할 수 있다. 자산 현황 정보는 dict in list in dict 형태로 주기 때문에, 적절히 내가 보유한 코인들과 잔고 수량을 볼 수 있게 접근해줘야 한다.

AssetBalance = client.get_account()
#get_account 불러오기 샘플
{'makerCommission': 10,
'takerCommission': 10,
'buyerCommission': 0,
'sellerCommission': 0,
'canTrade': True,
'canWithdraw': True,
'canDeposit': True,
'updateTime': 1539110138808,
'balances': [{'asset': 'NEO', 'free': '0.00000000', 'locked': '0.00000000'}, {'asset': 'LTC', 'free': '0.00000000', 'locked': '0.00000000'}...]


간단하게는 Dict[‘balances’]로 먼저 접근하고선, for문으로 개별 딕셔너리를 조회하는 방법이 있다. 여기서 if절로 잔고 수량이 0 이상인 코인들만 거른 다음에 AvailableAsset이라는 리스트에 저장시켜줬다.

AvailableAsset = []
for Asset in AssetBalance['balances']:
    if float(Asset['free']) > 0:
        AvailableAsset.append(Asset)


그 다음에는 for문으로 AltPricePair라는 딕셔너리에 {코인명 : 코인 잔고 수량} 페어를 만들어 저장시켜준다. 이를 위해, PairName에 000BTC 형식으로 환율 거래쌍 이름을 만들어 검색했다. 여기서 문제는 BTCBTC나 USDTBTC와 같은 거래쌍은 없는지라, 그대로 돌리면 BTC 잔고를 검색하려다 ‘그런 거래쌍은 없다’라는 에러가 뿜어져 나온다. 이를 해결하기 위해서, try-except문을 이용해서 에러가 나타나면 바로 패스하도록 만들었다.

이렇게 거래쌍을 통해 OHLCV 값을 불러오면, 해당 코인의 비트코인 기준 가격이 나온다. 이걸 해당 코인 수량만큼 곱해주면, 잔고 금액이 비트코인 기준으로 얼마나 있는지 알 수 있다. 하지만 우리는 비트코인보다 미국 달러가 익숙하기 때문에, 이전에 BTCPrice에 불러온 비트코인 가격을 여기다 곱해주면 미국 달러 기준 잔고량으로 변환 가능하다. 이 값을 AltPricePair딕셔너리에 키-벨류 페어로 저장시켜주면 된다.

AltPricePair = {}
for Asset in AvailableAsset:
    PairName = Asset['asset'] + 'BTC'
    try:
        MinuteKlineRaw = client.get_klines(symbol=PairName,
                                           interval=client.KLINE_INTERVAL_1MINUTE,
                                           limit=1,
                                           requests_params={'timeout': 100})
        CurrentPrice = MinuteKlineRaw[0][4]
        AltPricePair[Asset['asset']] = float(CurrentPrice) * float(Asset['free']) * BTCPrice
    except:
        continue


이전에 BTCBTC나 USDTBTC와 같은 환율 거래쌍은 존재하지 않아 불러올 수 없다고 했다. 그렇다고 비트코인이나 미국 달러 자산 값을 빼고 알트코인들의 가치만 더할 수는 없다. 다행히도, get_asset_balance()라고 개별 코인에 대한 잔고 수량을 불러오는 함수가 있다. 비트코인은 잔고 수량을 불러서, 비트코인의 미국 달러 가격에 곱해줘서 잔고 금액을 MyBTCBalance에 저장한다. 미국 달러화는 당연히 잔고 수량이 잔고 금액과 동일하니, 그대로 사용해 MyUSDTBalance에 저장한다. 그리고 가장 중요한 알트코인의 가격, AltPricePair에 수많은 키-벨류 페어에서 values()를 통해 벨류 값들의 리스트를 구한다. 그리고선 바로 sum()으로 그 합들을 MyAltBalance에 저장한다.

마지막으로 MyBTCBalance, MyUSDTBalance, MyAltBalace 이 셋을 모두 더해주면, 내 Binance 자산의 총 합계를 미국 달러화 기준으로 볼 수 있다.

MyBTCBalance = BTCPrice * float(client.get_asset_balance('BTC')['free'])
MyUSDTBalance = float(client.get_asset_balance('USDT')['free'])
MyAltBalance = sum(AltPricePair.values())


먼저 AltPricePair에 있는 {코인명: 코인의 미국 달러 기준 잔고 금액} 딕셔너리 페어처럼, 비트코인과 미국 달러화도 똑같이 업데이트하여 저장해준다. 그러고선 혼동이 없도록, 이렇게 업데이트된 딕셔너리를 PricePair이라고 다시 이름 지어준다.

AltPricePair.update({'BTC' : MyBTCBalance})
AltPricePair.update({'USDT' : MyUSDTBalance})
PricePair = AltPricePair

 

 

Matplotlib으로 파이 차트 만들기

이제 데이터 전처리가 끝났으니, 자산의 코인별 비중을 시각화 시켜야한다.
PricePair 딕셔너리에 코인명을 담고 있는 키 부분을 keys()를 통해, PriceKey에 리스트 형태로 저장한다. 또한, 코인의 미국 달러 기준 잔고 금액이 담겨있는 벨류 부분은 PriceValue에 values()로 리스트 형태로 저장한다. 그러고선, 다시 PriceValue는 for문으로 소수점 2자리 이하 값으로 반올림을 시켜 이쁘게 만들어준다. 그럼 각각의 PriceKey와 PriceValue가 순서에 맞게 정갈한 리스트를 내놓는다.

PriceKey = PricePair.keys()
PriceValue = PricePair.values()
PriceValue = [round(elem, 2) for elem in PriceValue]
#PriceKey와 PriceValue 리스트
dict_keys(['BNB', 'GAS', 'BAT', 'XRP', 'XLM', 'BTC', 'USDT'])
[0.04, 0.0, 212.14, 219.99, 129.67, 165.62, 0.0]


마지막으로 Matplotlib의 pie()를 통해 플롯해주는데, 그냥 PriceValue만 넣으면 아무 것도 없는 밍밍한 파이 차트가 나온다. 여기에 퍼센테이지를 값과 실제 잔고 금액을 표시하고 싶었다. 퍼센테이지는 autopct에 적당히 설정해주면 되지만, 실제 잔고 금액은 어떻게 넣나 고민이 많았다. 결국 Stackoverflow에 한 함수를 끌어와서, 잘 모르지만 일단 쓰게 됬다.

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.2f}%  ({v:d})'.format(p=pct,v=val)
    return my_autopct


이걸 autopct에 넣어주고선, 레전드를 설정해줬더니 투박하지만 제 역할은 하는 파이 차트를 결국 띄울 수 있었다.

Binance 자산의 코인별 비중 현황 파이 차트

 

전체코드

from binance.client import Client
import warnings
warnings.filterwarnings("ignore")
from matplotlib import pyplot as plt

client = Client('A94G89HZGqMF8niazexzsN7Vo8ygzVmvxAFbxtYH6IossrzIAtuPTgoj1k4iAXyq', 'wG18VxuQjGb8F33opQKJQX6EmWMuz0cwZPEh4aYTjxYmOF6NBNasUys5G6sEvOGa', {"verify": False, "timeout": 100})

BTCPrice = float(client.get_klines(symbol='BTCUSDT',
                            interval=client.KLINE_INTERVAL_1MINUTE,
                            limit=1,
                            requests_params={'timeout': 100})[0][4])

AssetBalance = client.get_account()
print(AssetBalance)

AvailableAsset = []
for Asset in AssetBalance['balances']:
    if float(Asset['free']) > 0:
        AvailableAsset.append(Asset)

AltPricePair = {}
for Asset in AvailableAsset:
    PairName = Asset['asset'] + 'BTC'
    try:
        MinuteKlineRaw = client.get_klines(symbol=PairName,
                                           interval=client.KLINE_INTERVAL_1MINUTE,
                                           limit=1,
                                           requests_params={'timeout': 100})
        CurrentPrice = MinuteKlineRaw[0][4]
        AltPricePair[Asset['asset']] = float(CurrentPrice) * float(Asset['free']) * BTCPrice
    except:
        continue



MyBTCBalance = BTCPrice * float(client.get_asset_balance('BTC')['free'])
MyUSDTBalance = float(client.get_asset_balance('USDT')['free'])
MyAltBalance = sum(AltPricePair.values())

AltPricePair.update({'BTC' : MyBTCBalance})
AltPricePair.update({'USDT' : MyUSDTBalance})

PricePair = AltPricePair

PriceKey = PricePair.keys()
PriceValue = PricePair.values()
PriceValue = [round(elem, 2) for elem in PriceValue]

print(PriceKey)
print(PriceValue)

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.2f}%  ({v:d})'.format(p=pct,v=val)
    return my_autopct

plt.pie(PriceValue, labels=PriceKey, autopct=make_autopct(PriceValue))
plt.legend(PriceKey)
plt.show()

print(MyAltBalance + MyUSDTBalance + MyBTCBalance)

 

 

배운점

먼저, 코딩도 당분간 두통 때문에 그만둬야겠다. 정말 모니터 앞에 오래 앉아있으면 심한 번아웃이 온다. 블루라이트 때문인가도 싶다. 파이썬의 문법 면에서 배운점은, 딕셔너리는 리스트처럼 + 만으로 합쳐지지 않는다는 것이다. 기존의 딕셔너리에 update()로 새 딕셔너리를 업데이트하여 더해줘야 한다.

마지막으로, 사실 나는 초보자로 데이터 과학을 접하면서 허탈하다는 생각이 종종 든다. 그렇게 데이터 수집과 전처리 과정을 거쳐 내놓은 결과물이 고작 차트와 같은 시각화 자료이다. 물론 데이터 과학에서 시각화는 일부분이고, 무엇보다 시각화된 자료에서 유의미한 상관관계를 찾아 사용자의 의사결정에 도움이 된다면 그 역할을 다한 셈이다. 하지만…개인적으로 짧은 프로젝트를 하면서 내가 데이터 과학이 정말 하고싶은지에 대해 다시 고민하게 된 것 같다.

[매매전략] 롯데케미칼

전에 롯데케미칼에 대해 조사해보고선, 투자를 결정했다.
이제 세부적인 투자전략을 짜야한다. 언제, 얼마나, 어떻게 매수하고 매도할 것인가에 대한 계획이다. 또한, 리스크가 찾아올때를 대비한 출구전략도 준비해두고자 한다.

 

매수전략

지금이 연말인 만큼, 타이밍을 잘 잡아서 매수하면 연말 배당을 받을 수 있다. 이 연말 배당을 받으려면 배당락이 걸리기 전에 주식을 보유해야 하는데, 12월 28일에 배당락이 걸린다. 즉, 12월 28일 전에만 주식을 홀딩하고 있으면 된다.

하지만, 여기서 조심해야 하는건 주식 입고일이다. 우리나라는 D+2 후에 주식이 계좌에 꽃히기 때문에, 실질적으로는 12월 26일에 매수해야 배당을 받을 수 있다는 결론이 난다. 그날 당일 내에 매수해야 하는만큼, 당일 호가창 상황을 봐서 최적의 가격에 매수하고자 한다. 시가 대비 +3% 정도의 프리미엄을 지불하는 것까지 감수하고 있다.

롯데케미칼에 대한 심리적인 확신이 있는 만큼, 전체 예수금의 40% 비중을 가져가고자 한다. 사실 비중은 순전히 심리적인 영향인지라, 딱히 논리적으로 설명할만한 근거가 없다. 차후에 포트폴리오 관리에 대한 더 깊은 이해가 생기면, 수리적인 방법으로 포트폴리오를 구성하는 방법을 배우고 싶다.

 

매도전략

롯데케미칼은 피터 린치의 기준에서 경기순환주, 저성장주, 대형우량주 영역에 위치해있다.

피터 린치가 분류한 기업의 유형

적당한 수익을 추구하고선 매도해야 안전하다는 의미이다. 그래서, 다음 중 하나의 이벤트가 발생하면 매도하고자 한다.

PBR(TTM) 1.2배 돌파
올해 3월, 52주 전고점인 475,000원 찍었을 때가 PBR이 약 1.2배였다. 이를 기점으로 해서, 가격이 상승하든 순자산이 줄어들든 PBR이 1.2배를 돌파하면 매도 신호로 받아들이고자 한다.

서부 텍사스유(WTI) 가격 60달러 돌파
지금 내가 롯데케미칼을 매수한건 유가 약세 수혜주이기 때문이다. 근본적으로 롯데케미칼은 납사나 LPG의 원료가 되는 원유 가격에 민감하다. 만약 특정 요인으로 인해 원유 가격이 상승한 이후, 가격대를 유지한다면 스프레드 축소로 다시 실적악화가 찾아올 수 밖에 없다. 따라서 60달러 돌파 후, 3개월 이상 유지 시 매도하고자 한다.

스프레드 확장에도 불구, 수익성 개선이 뚜렷하지 않은 경우
롯데케미칼에게 우호적인 상황이 조성되어 스프레드가 확장되었어도, 판관비나 영업외손익으로 인해서 수익성이 개선되지 않을 가능성도 있다. 물론, 일시적으로 여길 수도 있지만, 장기적으로 유지된다면 경영에 문제가 있다고 판단할 수 밖에 없다. 다만, 이 부분은 실적 개선이 예상되는 2Q19부터 판단 가능할 듯 하다.

주가의 이유없는 급등
특정한 이벤트가 없이 주가가 급등하는건 매우 경계해야 한다. 특정 세력이 공모하여 끌어올리기를 주도하고, 여기에 개미들이 가세하여 버블을 키우는 경우가 있기 때문이다. 물론 롯데케미칼은 워낙 대형주라 가능성이 낮다고 하지만, 하루에 10% 이상 이틀 연속으로 급등하는 경우에는 위험한 매도 신호로 받아들이고자 한다.

 

Stop-loss

Stop-loss는 예상치 못한 이벤트가 발생했을 때, 손실을 최소화하는 대응 방안을 말한다. 롯데케미칼의 경우, 최초 매수가 대비 20% 이상 하락하면 손절매하고자 한다. 다만, 일시적인 이벤트로 인한 비이성적인 하락에 경우는 제외한다.

[오늘의 개발] 워드프레스 설정

워드프레스 설치과정이 개발인가 싶지만, HTML/CSS를 만지작거렸으니 개발이라 퉁치자. 어제 카페24에 워드프레스를 설치한 이후에, 오늘은 도메인 설정을 만져주고 홈페이지를 꾸미는 작업을 했다. 매일 개발이 그렇듯이, 오늘도 삽질 끝에 설정을 끝마쳤다.

워드프레스는 다른 가입형 블로그들과는 많이 다르다.
처음부터 워드프레스는 내 서버에 사이트를 직접 구축해서 돌리는지라, 자율성이 네이버 블로그나 티스토리 같은 서버와는 남다르다. 다른 블로그들은 주어진 환경에서 글만 끄적인다면, 워드프레스는 사용자가 A부터 Z까지 무엇이든 할 수 있다. 하지만, 다른 말로 얘기하자면 그만큼 관리도 힘들고 망칠 확률도 높다는 의미이다.

 

도메인 설정

도메인 주소 설정 오류
먼저, 나는 도메인 보안 프로토콜 설정에서 말아먹었다. 워드프레스를 설치하고나선 접속해보니, 대부분의 브라우저들에서 ‘인증받지 않은 사이트’라는 이름으로 접속 자체를 막아버렸다. 당연한 것이, 애초에 이 사이트는 https 프로토콜을 사용하지도 않은데다가 SSL 인증서도 없었다. 그래서 당연히 도메인 주소를 http://sejoonlim.com에서 https://sejoonlim.com으로 바꾸면 안전하게 연결되 보안 문제가 해결될 것이라 생각했다.

워드프레스 관리자 설정 페이지

그치만 그렇게 편하게 바뀔리가 없다. 도메인 주소명을 바꾸자마자, 406 에러를 띄면서 연결을 거부해버렸다. 내가 내 사이트에 접근권을 잃어버린 것이다. 너무 당황스러웠다. 결국 인터넷을 뒤진 끝에, ftp를 통해 phpMyAdmin을 설치해서 데이터베이스에 접근하는 방법을 알아냈다.

처음에는 php를 만져본 적이 없어서 걱정이 됬지만, GUI 형식으로 되어있어 편하게 설정할 수 있었다. 결국, 다시 http://sejoonlim.com을 통해서 관리자 페이지에 접속할 수 있게 되었다.

Cloudflare을 통한 https 접속 설정
하지만, 여전히 SSL 인증서가 없기 때문에 https 프로토콜을 통해 접속할 수는 없었다. SSL 인증서를 직접 발급받아서 등록하는 방법도 있지만, 비용이 들거나 까다로운 경우가 많아서 꺼려졌다. 그래서 Cloudflare의 CDN을 통해 접속하는 방법을 찾아냈다.

아직 CDN에 대해 잘 알지 못하지만, 내가 이해한 수준은 콘텐츠 서버와 클라이언트 사이에서 중계해주는 역할을 해준다고 알고있다. 즉, 내 사례에서는 CDN은 https로 접속한 클라이언트를 중계하여 http를 접속해, 그 결과를 다시 클라이언트에게 전달해주는 것이다.

CDN 서비스에 대한 이해는 부족했지만, 블로그에 글을 참고해서 사이트에 https를 성공적으로 설정할 수 있었다.

가입형 워드프레스의 도메인 리다이렉트 문제
https를 설정하고선 끝난줄 알았는데, 가끔 브라우저로 접속할 때마다 과거의 가입형 워드프레스로으로 리다이렉트 접속되는 문제가 있었다. 이미 도메인 네임서버를 설치형 워드프레스로 바꿔놓았던지라, 대체 어떻게 그런 일이 생겼는지 의문이 들었다.

다행히 가입형 워드프레스에 24시간 지원 서비스가 포함되어 있어서, 도메인 리다이렉트를 바로 제거할 수 있었다. 다만, 내가 성격이 너무 급해서…브라우저 캐시나 서버 적용시간을 무시한채로 계속 문제가 해결이 안된줄 알고 여기저기 건들이고 다녔다.

 

홈페이지 꾸미기

도메인 관련한 설정을 모두 마친 후에, 홈페이지에 내 프로필을 꾸미기 시작했다. 뭐, 꾸밀 것도 없지만, 나름 폰트나 반응형 CSS 설정을 해서 모바일에도 대응하도록 만들고 싶었다. 기존에는 모바일에서 사진과 문단 규격이 깨지는 현상이 생겨서 더더욱 안예뻤다.

그래도 CSS에 적응했던지라, 이런 설정은 쉽게 할줄 알았다. 근데 정작 워드프레스에서 CSS를 수정하려 하니 뭘 어떻게 해야될지 몰랐다. Style 태그를 삽입하고 CSS 스타일 파일도 건들여보기도 했다. 그렇게 몇시간동안 붙잡고 있다가, 결국 Elementor이라는 플러그인을 쓰니 한번에 해결됬다. 역시 직접 구현하기 힘들때는 툴을 쓰는게 훨씬 마음이 편하다.

 

배운점

처음이고 잘 모른다면, 함부로 설정을 건들지 말아야된다. 세상에는 좋은 가이드라인들이 차고 넘치니, 뭘 하기전에 검색부터 해보는게 답이다. 특히 Stackoverflow에는 없는 정보가 없다. 내가 고민하고 있는 문제는 과거에 누군가는 해결했었고, 그 답들이 대부분 Stackoverflow에 업로드 되어있다.

그리고, 잘 생각해보니 php를 포함한 서버 사이드 언어를 배우는 것도 나쁘지 않다. 대부분 html/css처럼 프론트엔드에 많이 관심을 가지는데, 결국 백엔드에 대한 이해가 있어야 자유자제로 구현이 가능한 것 같다. 물론 나는 Django 이외에 백엔드는 전혀 모르고, html/css도 초보 수준이다. 무엇이 됬든간에, 백엔드에 관한 이해는 크고 작은 일들에 관련해서 웹 서버를 구축하는데 도움이 많이 될 것 같다.

[종목분석] 2018.12.22 롯데케미칼

HTS에서 저평가 종목 스크리닝 만나게 된 종목인데, 한눈에 꽃히는 감에 분석까지 해보게 됬다. 역시 롯데사랑 넘치는 나답게, 이번에도 롯데 계열사 종목이다. 롯데칠성, 롯데쇼핑, 호텔롯데, 롯데정밀화학…투자만큼은 롯데와 연이 끊이질 않는 것 같다.

 

기본정보

롯데케미칼은 석유화학 회사로, 석유를 가공해서 나오는 납사와 LPG를 통해 다양한 화학원료를 제조하는 기업이다. 다시말해, 이 기업이 생산하는 제품으로 플라스틱 병과 필름같은 생활용품들이 만들어진다. 매출액 기준으로 LG화학을 이어 국내 2위이자 세계 22위로, 글로벌 기업답게 전세계에 해외지사와 제조기반을 두고 있다.

롯데케미칼 해외사업장

 

지금 사야하는 이유

실적악화 이슈 선반영
이번 실적악화는 이미 선반영 되어있다는 두가지 증거가 있다.
첫째, 현재 PBR(TTM)은 약 0.64배로, 과거 2014년의 적자 수준과 비슷하다.
시장이 현재 주가를 이만큼 끌어내렸다는건, 올해 4분기에 적자를 이미 예상하고 주가에 선반영했다는 것이다. 즉, 이번 실적발표에서 적자전환이 발표되더라도 추가 하락여력은 적을 것이다.

롯데케미칼 PBR(TTM) 밴드

둘째, 여수 NCC와 울산 아로마틱 설비의 정기보수 이벤트이다.
이번 실적이 악화된데는 정기보수 이벤트도 있었다. 각각 400억원, 250억원 규모의 정기보수였다하는데, 일시적인 비용인만큼 장기적인 수익성에는 영향이 없을거라 예상된다.

향후 원재료 안정 가능성
석유화학 회사들은 원재료인 납사와 LPG 가격에 민감하다. 원재료 가격이 스프레드 수익을 결정하기 때문이다. 지금까지 고가 납사가격이 문제였지만, 최근에 원유 가격 급락 덕분에 납사 가격도 저렴해졌다.

서부 텍사스유 가격 차트
납사 가격 차트

실제 반영시차를 고려했을때, 내년 1-2분기에 실질적인 영업이익에 이러한 원재료 가격 하락이 반영될 듯하다.

그리고, 장기적인 관점에서 납사 가격은 하락세를 유지할 것으로 보인다. 정유사들이 IMO2020 환경규제에 따라서 선박용 저유황 제품 설비를 만들면서, 납사의 출하량은 더욱 많아진다. 즉, 2020년에는 납사 공급 과잉으로 원재료 가격 하락 피날레를 기대해볼만 하다.

 

지금 사지 말아야 할 이유

현재 유가가 급락한 이유는 사우디발 증산 정책, 이란 원유 수출 제제 제외국 선정, 미국산 원유 공급 등이 있다. 특히 OPEC이 1년만에 최대 생산규모로 증산 중에 있고, 미국 또한 원유 생산량을 늘리고 있다. 모두 OPEC을 상대로 미국이 압력을 가해, 저유가 기조를 유지하고 있는 형편이다.

그러나, 지금의 고점 대비 30% 수준의 유가 급락은 과도한 감이 있다. 이정도의 낙폭이라면 OPEC 가입국들이 감산 합의에 돌입할 수도 있다는 의미이다. 참고로, 이미 사우디 정부는 하루 50만 배럴 감산을 결정하였다고 한다.

만약 50달러 대의 저유가 기조가 깨지고 유가가 상승하다면, 그로인해 스프레드 수익이 줄어든다면, 롯데케미칼의 수익성 개선이 둔화되어 투자매력이 적을 것으로 보인다.

 

결론

롯데케미칼은 석유화학 회사로써, 원재료 가격에 따른 스프레드 수익에 민감하다. 그러한 점을 감안했을때, 현재는 실적악화 선반영에 원재료 가격도 하락 국면이라 벨류에이션 매력 있다. 그러나, 향후 원유 가격 상승 리스크가 덮치면 수익성 개선 희박할 듯 하다. 이러한 위험과 가능성을 종합적으로 고려해서 투자에 참고하고자 한다.

[오늘의 개발] DART 재무제표 공시를 통한 국내 증시 데이터 시각화

데이터 과학에 관심을 가지면서, 증권 데이터를 분석해 직접 퀀트 투자를 해보는 것이 꿈이었다. 특히 문병로 교수나 권용진 퀀트의 책을 보면서, 데이터에 기반해 논리정연한 투자를 하는 모습이 나와 대비되어보였다. 그렇게 계속 꿈에만 그리다가, 파이썬 데이터 분석 패키지에 적응하면서 국내 증권 데이터를 분석해 투자에 적용해보기로 마음을 먹었다.

이를 위해선 다음 세가지 과정을 거쳐야만 했다.
1. 증권 데이터 수집
2. 데이터 전처리 및 계산
3. 데이터 시각화를 통한 투자 참고자료 생성

미리 말해두자면, 나는 데이터 전처리 이후에 각종 투자지표를 계산하기 위해 ‘일자별 시가총액’이나 ‘기간별 발행주식수’ 데이터를 얻지 못해서 실패했다. 이 글은 내가 실패를 깨달기 전까지 진행했던 것들을 정리해둔 프로젝트 기록이다.

 

증권 데이터 수집 

문제점
일단, 국내에서 개인이 증권 데이터를 수집할 수 있는 곳은 한정되어 있다. 대표적으로 금융감독원 DART, 네이버 증권, FnGuide 정도가 데이터를 얻을 수 있는 장소의 전부이다. 그런만큼 문제점들도 많은데, 그중에 2가지 정도를 나열해보고자 한다.

첫째, 일반 투자자를 위한 증권 데이터 부족
투자를 하다보면 과거의 증권 데이터가 필요할 때가 있다. 특히 가격차트로 알 수 없는 재무 데이터의 경우엔 더욱 그렇다. 그럴때면 네이버 증권이나 HTS에서 기본으로 제공하는 FnGuide부터 되고, 실제로 많은 개발자들이 이 부분을 크롤링해서 쓴다.

FnGuide 재무분석 정보

근데, 잘 살펴보면 FnGuide 재무정보에 한계가 보인다. 대표적으로 데이터의 해상도, 분기/연도별 재무 데이터 기간이 각각 1년과 5년에 한정되어 있다. 정말 가볍게 알아보기엔 좋지만, 데이터 분석에 크롤링해 사용하기에는 정보량이 부족하다.

둘째, 금융감독원 DART 오픈 API의 기능 부족
그래서 정확한 장기간의 재무정보를 얻기 위해서는 DART에 분기/연도별 재무제표에서 정보를 얻어야한다. DART는 개발자들을 위해서 오픈 API를 제공하고 있지만, 여기에 또 다른 문제가 있다. API의 기능이 보고서 검색에 한정되어 있다. 즉, 특정 회사의 재무제표를 검색할 수는 있지만 그 재무제표의 수많은 계정항목 당 값들을 알 수가 없다. 사실, 알아낼 방법은 있다. 재무제표의 개별 URL을 따서, 재무상태표와 손익계산서의 표를 크롤링으로 긁어오는 방법이다. 여러 개발 블로그들에서 소개하고 있는 방식들이다. 하지만, 매 종목마다 크롤링하는 방식은 비효율적이기도 하고, 데이터에 오류가 발생할 가능성도 적지 않다.

셋째, 유료 기업정보 제공 서비스의 폭리와 부실함
다 포기하고, 유료 증권 데이터를 구매해서 쓸 생각도 해봤다. 그래서 국내에 KOSCOM, 세종 데이터, 아이투자, FnGuide…모두 찾아봤지만 가격은 한달에 10만원에 가까운데도 불구하고, 기본적인 RESTful API조차 지원하지 않는 모습에 어이가 없었다. 참고로 해외에 IED, SimFin, EODHistoricalData와 같은 회사들은 무료 또는 20달러 선에서 미국 내 상장사의 10년치 펀더멘탈 정보를 제공한다. 이정도 되면 국내 기업정보 제공 업체들의 폭리와 서비스 부실 밖에 탓할 수가 없다.결론적으로, 어떠한 방법을 써서라도 API이나 크롤링으로는 증권 데이터를 받아올 수 없게되었다. 진심으로 이때부터 집에 블룸버그 단말기 한대 두고선, 증권 데이터를 무제한으로 끌어다 쓰는 꿈을 가지게 됬다.해결방안
다행히도, 금융감독원에서 얼마 전부터 CSV형식으로 국내 상장사들의 재무제표를 분기별로 업로드 해두었다. 수많은 개발 블로그들이 DART API를 통해 크롤링하는 방식을 선택한걸 보아, 이 파일이 존재하는지 조차 잘 안알려진 것 같다. 2015년 4분기의 정보부터 제공되어있지만, 기업의 분기별 재무상태표/손익계산서/현금흐름표가 모두 담겨있다. 잘 가공하면 충분히 사용할만한 데이터이다.

 

데이터 전처리 및 계산

데이터 전처리
데이터 수집이 해결된 만큼, raw data를 분석에 사용할 수 있도록 전처리 과정을 거쳐야한다. 여기서 나는 raw data인 CSV 파일을 개별 상장사의 분기별 재무제표들로 구성된 sqlite 파일로 전환하는 것을 목표로 했다. 분명 이렇게 하면 이해가 안될것 같아 설명을 더해본다.

금융감독원에서 업로드한 CSV 파일에는 국내 모든 상장사의 해당 분기의 개별 보고서의 데이터가 모두 들어있다. 다시 말해, ‘2015년_4분기_재무상태표.csv’ 파일에는 국내 모든 상장사들의 2015년 4분기 재무상태표의 데이터가 모조리 담겨있다는 뜻이다. 직접 샘플 데이터를 다운받으면 이해하기 쉬울 것이다.

금융감독원이 제공한 CSV 형식의 재무제표 파일

내가 원하는 것은 하나의 기업 sqlite 파일 아래에 수많은 분기별 개별 보고서 테이블이 있는 것이다. 일례로 ‘AK홀딩스.sqlite’ 아래 ‘AK홀딩스_2015_4Q_BS’, ‘AK홀딩스_2015_4Q_BS_Con’, ‘AK홀딩스_2015_4Q_IS’…으로 이어지는 수많은 테이블들을 만드는 것이다.

데이터 전처리 과정 이후에 개별 기업 Sqlite 파일의 모습

여기서부터 Python을 통해 CSV 파일을 import 해서 개별 기업의 리포트들을 sqlite의 테이블에 저장하는 과정을 진행했다. 사실 소스코드를 공개해 단계별로 소개하고 싶지만, 전혀 주석 정리가 되어있지 않은 스파게티 코드라 소개할 가치조차 없다.

그래도 대략 알고리즘을 설명하자면, CSV 파일을 읽어들여 파일명에 따라 회사명, 분기, 보고서 종류, 연결재무제표 여부를 판독한다. 그리고 읽어들인 CSV 파일을 데이터프레임 형태로 변환한다. 이후에 한 회사명의 sqlite 파일을 생성하고, 그 아래에 분기별 개별 재무제표 데이터프레임을 테이블 형태로 모두 저장한다.

이렇게 말하니 무슨 말인지 잘 이해가 안될 것이다. 나도 지금 코드를 살펴보니 이해가 안된다. 그런데 어째 작동을 한다(…)

그렇게 약 50시간을 갈아넣은 끝에, 모든 상장사들의 2015년 4분기 ~ 2018년 3분기의 재무제표를 데이터베이스화 시키는데 성공했다. 그 파일은 여기서 다운받을 수 있다.

데이터 계산

이제 데이터 전처리가 마무리된 만큼, 기존의 재무정보를 기반으로 새로운 투자지표들의 값을 구하려 했다. 이를 위해서 Alpha Vantage에서 주식 가격을 가져와 데이터프레임으로 리턴하는 함수도 개발하였다. 투자지표를 계산한 후에, 기존 주식 가격 데이터프레임에 합쳐서 PER이나 PBR의 일자별 변동 추이를 살펴보고자 했다.

여기서 내 전체 프로젝트를 무너지게 한 큰 문제점을 깨달게 되었다. 바로 당시 일자의 상장 주식수나 시가총액을 둘다 모른다는 점이었다. PER이나 PBR과 같은 지표들은 주당 000을 따지기 때문에, 상장주식수를 아는 것이 무척이나 중요하다. 그래야 Earning이 됬든 Book이 됬든 간에 상장주식수로 쪼개서 값을 구할 수 있다.

하지만, 우리나라 증권 API나 사이트 어디에도 상장주식수의 변동을 시계열 데이터로 일목요연하게 다룬 곳은 없었다. 하다못해 일자별 시가총액 데이터만 있었어도 계산(일별 시가총액 / 일별 종가 = 일별 상장주식수)이 가능했겠지만, 그런 곳은 없었다.

결국 여기서 내 전체 프로젝트가 멈추게 되었다. 약 70시간 동안 잠을 줄여가며 개발을 했지만, 허무한 문제에서 포기할 수 밖에 없었다. 그래도 무슨 감정이었는지, 프로젝트를 날렸는데도 화가 나기보다는 담담했다.

 

배운점

먼저, Pandas 데이터프레임 사용법이 엄청 늘었다. 하루에도 수십번 StackOverflow에서 데이터프레임 관련 자료들을 찾아본 것 같다. 그래서인지 이제는 데이터프레임 자료 검색이나 인덱스 리스팅과 같은 사소한 부분에서 막히지는 않는 듯 하다. 그리고 알고리즘, 특히 조건문 처리를 더 효율적으로 짤 수 있게된 것 같다. 예상치 못한 결과인데, 워낙 조건문이나 예외처리를 많이 하다보니 자연스래 늘었다. 마지막으로 Sqlite를 접하다보니, SQL 쿼리문에 대해서도 배우게 되었다. 나중에 Django ORM 쿼리에 꽤 잘 써먹을 수 있을 듯하다.

그리고 개인적으로 배운 것이라면, 노력만 한다고 일이 잘 될리가 없다. 아무리 철저하게 계획해도 설계 미스로 훅가는건 한순간이다. 그저 과정에서 많은 것들을 배워간다는 자세로 마음을 비우면서, 현재 하고 있는 일들이 잘되기를 바라는게 정신건강에 이로운 것 같다.

[투자전략] 역대 투자전략과 반성

내가 증권 투자를 시작한지 한 6년 정도가 지났다. 그동안 다양한 투자전략을 통해 투자를 해왔는데, 그 이름들은 다음과 같다.

 

역대 투자전략

가치투자 전략
처음 증권투자를 시작하며, 아버지가 제게 강조했던 투자 전략이다. 그러다보니, 자연스럽게 첫 거래 종목도 PBR과 PER 값이 낮으면서 철강업계 대장주인 POSCO(005490)으로 흘러가게 됬다. 사실 PER 10 미만과 PBR 1 미만, 이 두 스크리닝 조건은 가치투자자라면 한번쯤 써봤을 듯 싶은 조건들이다.

가치투자는 좋은 회사의 주식을 매입하면 시간은 내편이라는 피터 린치의 말을 깨달게 해준 전략이다. 물론 호흡을 길게 잡고 오래 기다려야 한다. ‘기다림의 미학’라고 하지만…증권 계좌에 마이너스 쳐다보고 있는게 미학일리가 없다. 그저 적절한 수익이 나오기까지, 기업의 가치를 믿고 마음을 다잡고선 기다리는 전략일 뿐이다.

급등주 포착 전략
그래서 결국은 그 기다림을 못 참고, 개미들이 그토록 원하는 ‘급등주 포착’에 뛰어들었다. 개미들이 많이 뛰어든다는건, 그만큼 온갖 찌라시들과 사기꾼들이 넘쳐난다는 말과 같다. 별에별 ‘투자자문사’들이 ‘인공지능 알고리즘’으로 급등주 포착을 돕는다며 개미들을 모집한다. 물론 그런 능력을 가진 분들이 왜 진작에 월가에서 퀀트로 일을 안하시는지는 알길이 없다. 개미를 사랑하는 마음들이 너무 강하신가 보다.

구글 ‘급등주 포착 투자자문사’ 검색 결과

아무튼, 나는 시중에 떠돌아 다니는 급등주 포착 전략 중에 ‘저시총 저거래량’을 선택했다. 시가총액과 거래량이 모두 낮은 종목을 매집해두고, 세력이 들어와 거래량이 터지며 상승할 때까지 기다리는 전략이다.

그렇게 선정한 종목이 흥아해운(003280)이다. 당시 흥아해운의 시가총액은 2000억원 미만에 종종 거래량이 터지며 급등하는 모습을 보여주는 종목이었다. 한창 해운업계가 몰락세를 걷고있던 시점이었지만, 차트의 모습에 홀려 최대한 매집해두었다가 얼마 안가 익절하였다.

여기서 끝냈다면 다행이지만, 급등주의 짜릿함을 잊을 수 없었다. 차트 개형만 보고선 ‘이쁘다’ 싶으면 닥치고 뛰어들었다. 그렇게 매매한 종목만 수십개 되는 것 같다.

결국 증권사 수수료만 챙겨주고 참담하게 실패한 채로, 끝내 다른 쪽으로 눈을 다시 돌렸다.

포스트 가치투자 전략
다른 전략들을 물색하다가, 다시 가치투자의 영역으로 돌아왔다. 그치만, 이번에는 재무제표를 정확하게 이해하고선 투자를 진행하기로 결정했다. 이 사실을 깨달았을때, 기업의 기본적인 상태조차 제대로 모르고선 투자를 해왔던 내가 바보같았다. 그래서 고등학교 1학년 때부터 FnGuide에 뜨는 재무정보들 중 재무제표의 계정항목들을 검색 해보면서, 하나 하나씩 그 의미들을 파악해 나가기 시작했다.

FnGuide 재무분석 정보

특히, 내가 트레이더가 아닌 투자자로써 기업의 여정을 함께한다는 마음을 가지게 되었다. 그렇게 롯데칠성(005300)에 확신을 가지고 투자하게 되었다. 투자 종목 선정 과정은 기회가 되면 쓰겠지만, 일단 재무제표상의 장부가치에 비해 주식의 가격이 너무 쌌다. 그리고 잘 생각해보면, 매번 칠성 사이다, 처음처럼, 칸타타에 길들여진 사람들의 입맛은 어디 안간다. 항상 사람들은 익숙한 것에 끌린다. 이런건 재무제표에 안나오지만, 일상을 살아가다보면 알 수 있는 소비경험이다.

아무튼, 롯데칠성으로 대박을 치지는 못했지만 ‘투자자’로써의 소소한 재미를 보게 해주었다. 정기 주주총회 의결권 행사, 배당금 수령, 분기별 재무제표 점검 등…내가 투자한 기업에 소수점 8자리 아래 지분만큼 경영에 참여하는 것은 행복한 일이다. 마치 현실에서 경영 타이쿤 게임을 하는 느낌이랄까. 그래서 나는 아직도 가치투자 방식을 따르려고 노력한다.

 

반성

사실 내 투자전략들을 늘어놓았지만, 코인에 빠진 이후에는 눈길을 제대로 못줬다. 정말 2017년 말에는 매일매일이 새롭고 짜릿했다. 그러다 한순간에 모든게 무너지면서 후회만 남게 되었다. 지금은 흙탕물처럼 변한 코인시장에서 언제 탈출할지 고민만 계속 하면서, 가치투자의 중요성을 다시 느낀다.

BTC/USDT 차트
지금이라도 가치투자의 원칙을 지키면서 투자하고 싶다. 그렇게 재미있지는 않지만, 확신을 가지고 투자할 수 있는 능력을 쥐어준다. 참고로, 투자에 대한 확신은 기대 수익보다 중요하다. 결국 돈 많이 버는 것보다, 믿음을 가지고 마음 편하게 사는게 더 중요하기 때문이다.
그래도 솔직해지자면, 내년에는 좋은 기업을 만나 돈 많이 벌기를 바래본다.

[도서] 새로운 디지털 시대

http://cfile30.uf.tistory.com/image/020E86415175212F0F209A

언제 한번은 이 책을 다른 교실에 두고 온 적이 있었다. 책을 찾으러 갔더니 여자애가 책 내용을 조금 봤다며 했던 말이 ‘되게 심오한 책이다’라는 말이였다. 나쁜 의미가 아니라면, 심오한 내용이 맞긴하다.

일단 책에 대해 소개하자면, 전직 구글 대표이사인 에릭 슈미츠(Eric Schmidts)가 우리의 미래에 대한 예측을 담아둔 미래지향적인 책이다. 참고로 이사람, 우리가 매일 접하는 구글을 성공으로 이끌면서 현재의 디지털 시대를 설계한 사람이다. 공동저자인 제러드 코언 또한 국무부에서 라이스와 클린턴의 정책보좌를 맡은 인물이다.

책에서는 과거 사례를 통해 에릭 슈미츠와 제러드 코언의 디지털 시대에 관한 통찰력을 보여주고 있다. 아프가니스탄 감옥에서의 휴대폰 사용 실태에서 아랍 민주화 혁명까지, 본인들이 관찰하였던 사건들에서 디지털 기술들의 역할을 설명하고 있다. 그리고 이를 통해 미래에 디지털 기술이 활용되는 시나리오를 제시하고 있다.

새로운 디지털 시대의 시나리오는 전혀 낙관적이지 않다. 정부, 테러리스트, 시민단체, 기업 등 다양한 이해관계 속에서 디지털 기술의 우위를 점하고자하는 이들의 모습이 먼저 비춰진다. 새로운 디지털 환경에서의 기회가 곧 권력으로 이어질 것이기 때문이다. 결국 이권이 충돌하는 곳에서 갈등이 빚어지게 된다. 이러한 갈등의 양상은 시민감시, 사이버 테러리즘, 편향적 마케팅, 시민단체 역선택, 기업의 수익독점 등 다양한 형태로 나타난다.

하지만, 기대할만한 구석도 있다. 현실세계에서 입지가 좁은 이들에게 가상세계의 연결성은 새로운 기회를 제공할 것이다. 아랍 민주화 혁명 당시, 트위터를 비롯한 SNS 서비스들이 연결성의 위력을 증명해보였다. 앞으로는 현실세계에서 박해받는 민주화 및 인권 운동가들이 대표적인 연결성의 수혜자들이 될 것이다.

다가오는 ‘새로운 디지털 시대’가 장미빛 미래를 약속하지 않는다는 것 만큼은 확실히 느껴졌다. 오히려, 강화되는 이권 충돌과 갈등 속에 누가 우위를 점하는가가 관건이란 생각이 각인되었다. 저 기회를 잡기위해 무엇을 어떻게 해야되는가에 대한 물음이 남는다.

[영화] 스노든(Snowden, 2016)

https://t1.daumcdn.net/thumb/R1280x0/?fname=http://t1.daumcdn.net/brunch/service/user/1lcG/image/CDlcJKKujW9xbzeeF3o9TdwADts.jpg

영화 <스노든>은 미국 국가안보국(NSA)의 부당한 정보수집을 폭로한 에드워드 스노든의 전기 영화다. 스노든이 미국, 일본, 하와이, 홍콩에서의 활동들과 그 이면에 숨겨진 사랑과 도덕적 딜레마를 보여준다. 그리고, 그가 폭로에 이르기까지 행했던 다양한 정보수집 활동들의 위법성 또한 드러내고 있다.

여기서 우리는 규제되지 않은 권력의 위험성을 알 수 있다. 국가안보국을 향한 미약한 규제는 그들이 음지에서 국가 권력의 칼을 휘두르게 만들었다. XKeyscope와 같은 초법적 감청 프로그램들은 간단한 사후 승인만을 필요로 했고, 이 것은 해외정보감시법원(FISC)의 거수기 역할로써 합법화 되었다. 이를 통해 국가 권력은 광범위한 시민 감시를 통해 시민들의 자유를 침해하면서도 합법화 할 수 있었다.

어떤 사람들은 본인의 무결을 주장하며 광범위한 시민감시를 옹호할 수도 있다. 하지만, 개개인에게는 합법적이지만 숨기고자 하는 사생활이 모두 존재한다. 그냥 가볍게 생각해봐도, 본인이 옷 갈아입는 영상을 누군가가 지켜보는 것은 누구도 원치 않는다. 이건 불법이라서가 아니라, 그저 하나의 인격체로써 불쾌하기 때문이다. 그러니, 국가 권력이 개개인의 합법적인 사생활을 파해쳐 몰래 보고있는 것은 ‘국가 안보 수호’가 아니라 ‘스토킹’이다.

더하여, 국가기관들은 종종 ‘더 큰 공익’을 위해 개개인의 작은 사생활 희생하는 거래를 하는 것 뿐이라고 얘기한다. 하지만, 우리는 이러한 사생활 침해를 대가로 국가 안보를 보장받는다는 거래에 관해 통지받은 바가 없다. 거래 상대방에 대한 통지도 없이 자의적으로 해석한 것이다. 국가 안보를 보호하고 싶었다면, 일련의 거래에 관해 시민들에게 법안 상정나 개정시에 매스컴에 통지하였어야 했다. 이를 통해 적절한 견제를 통해 조율을 과정을 거쳤어야만 한다.

얼마전, 우리나라의 ‘테러방지법’이 국가정보원의 초법적 정보수집 활동을 용인하는 것인가에 대해 법안 발의 과정에서 문제가 제기된 바가 있었다. 그러나 시민들의 견제과정을 거쳐 일부개정이 이루워져 발의가 되었다. 이는 서로 간의 통지와 조율과정이 있었음을 의미하고, 국가정보원 또한 합법적이고 정당한 국가 권력 행사가 가능해졌음을 의미한다. 물론, 아직까지도 미세한 국론 분열은 남아있다.

이 영화는 한 사람의 폭로 행위를 넘어, 우리에게 어떠한 가치가 중요한지를 일깨워준다. 결국은 사람이 잘 살고자 하는 것이 목적이다. 안보가 위협당해선 안되지만, 그렇다고 자유가 위협당해선 안된다. 중요한 것은 그 중간점을 찾아나가는 행위이다. 그런 점에서 스노든의 폭로는 안보에 과도하게 쏠린 불균형을 깨트리고자 했던 일격이 아니었을까 싶다.

[영화] 파운더(The Founder, 2017)

 

the founder poster에 대한 이미지 검색결과

“If I saw a competitor drowning, I’d shove a hose down his throat.”
“내가 만일 경쟁자가 익사하는걸 본다면, 난 그의 목에 호스를 꽃을꺼야.”

사실, 영화를 본지 한달이 된 시점이라 기억이 흐릿하다. 그저 영화를 보며 느낀걸 두서없이 써봐야겠다. 차라리 이런 영화평이 쓰기에도 편하고 솔직한 편이다.

영화 <파운더>는 20세기 사회에서의 성공담을 담았다. 성공담은 ‘역경을 이겨내 승리를 쟁취한 사람’의 이야기를 담는데, <파운더> 역시 동일하다. 끝없는 야망으로 결국 원하는 것을 얻은 창업가의 이야기를 담았다. 진부할수도 있는 전개이지만, 사실 20세기에는 잘 먹혔던 성공방식이다.

McDonald Co. 창립자 레이 크록(Ray Kroc)는 제어할 수 없는 야망으로 모든 것을 집어삼킨다. 맥도날드 형제의 가게, 주택 담보 대출 자금, 부동산 제공권, 브랜드 로열티, 밀크 쉐이크 파우더  등 본인의 야망에 관한 것이라면 모든지 집어 삼킨다. 집어삼킨 것들을 토대로 그는 그의 사업을 키우고 야망을 다시금 더욱 키워나간다. 기업으로선 최상의 선순환구조이다.

하지만, 이면에서는 타인의 행복, 가정의 평안, 신의성실성, 전통적인 가치관 또한 집어 삼켜버린다. 야망을 향해 달려가는 과정에서 장애가 되는 것들은 모두 희생되는 것이다. 개인으로선 최악의 악순환구조이다.

크록은 전자를 선택했다. 본인의 야망을 위해 개인으로서의 자신을 희생한 것이다. 그리고 그에 상응하는 책임을 부담했다. 본인의 선택이니 비판할 수는 없다.

솔직히, 나라도 전자를 선택한다. 기업을 창립해 본인의 ‘공화국’을 경영한다는 것은 매력적인 일이다. 그것이 타인에게 권력을 행사할 수준이라면 더더욱 말이다. 자본의 힘을 행사하는 것은 그만큼 정복감 있는 일이다. 하지만, 동시에 개인으로서의 나를 희생할 수 있을지는 의문이다. 개인으로서의 행복이 성취되지 않는다면, 치열한 경쟁 끝에는 아무 것도 남지 않을 것이다. 야망과 개인의 행복 사이에 적절한 조율이 필요하다는 생각이 들었다.

야망만을 향해 달려온 크록의 개인적 감정 또한 영화 말미에서 여실히 드러난다. 재혼한 아내, 과장된 성공신화, 만들어진 인맥, 배낀 연설문들 위에 그가 존재한다. 본인도 그러한 자신의 모습을 남모르게 체념하며 영화는 끝난다.