2020년 4월 20일 월요일

어떻게 일하며 성장할 것인가 - 전영민 지음.

이 책은 2014년 선임 진급할 때 연구소장님께서 주셨던 책으로 지금도 가끔씩 들여다 보는 책이다. 지금 생각해보면 진부하면서도 인상적인 진급 선물이었다. 그 당시 잘나가는 인문학 서적도 아니고 자칫 반감을 살 수도 있는 자기개발서를 굳이 골라 후배들에게 선물해준 것이다. 몇마디 조언이나 커피 한잔 사주며 퉁(?)치셔도 될 일이었는데 말이다. 굳이.. 뭐, 덕분에 지금도 회사 생활 나름 잘 하고 있다. 2015년 이전의 회사 생활이 그립긴 하지만. 그 때가 힘들긴 했어도 회사 다니는 맛(?) 같은게 있었던 것 같다. 밤새고 샤워하는 와중에 해답이 보인다던가, 꿈속에서도 일한다던가..;;

이 책은 롯데 그룹에서 꽤 오래 재직하신 분께서 들려주는 회사 생활 가이드? 노하우? 뭐 그런 책이다. 꽤나 단정적이고 솔직하게 책을 쓰셨기 때문에 일정부분 반감이 생기긴 해도 도움이 되는 충고들이 많이 담겨있다. 아예 책이 마음에 안든다고 해도 건질 것은 있다. 적어도 윗 분들(?)이 요즘 아래 사람들을 어떻게 생각하고 있는지에 대해서 조금이나마 살펴볼 수 있는 그런 부분에서. 나쁘게 얘기하면 꼰대 마인드? 뭐 그런거.. 근데 나도 년차가 어느정도 쌓이다 보니 걍 수긍이 되버리는 대목들이 이젠 더 많다..

몇 대목 옮겨 적어보고 이 책은 놓아주기로.

'인사'에 대해.
인사는 확률게임인 것 같다. 도무지 속을 알 수 없는 사람을 다루는 일인데 완벽한 인사란 게 세상에 존재할 수 없다. .. 승진심사를 할 때 정해진 승진 티오에 따라 작업을 하다 보면 승진 서열부에 줄을 긋게 된다. 이름이 그 줄 위에 있으면 승진이고 그 밑은 탈락이다. 그러면 그 줄 바로 위에 있는 사람과 바로 밑에 있는 사람이 차이가 크게 나서 그렇게 운명이 갈린 걸까? 사실 두 사람이 뒤바뀌어도 누구 하나 느끼지 못할 정도의 차이일 뿐이다. 고등학교 때 반 석차 15등과 16등이 정말 차이가 있어서 그렇게 된 걸까? 그런 것과 유사한 것이다. ...
→ 여기서 저자의 팁은? 조직 내의 누가 보더라도 저 친구는 1등이다라는 느낌이 들 수 있도록 노력하라 이다. ㄷㄷ
명함에 집착하지 마라. 중요한 것은 명함에 적힌 것이 아니라 당신 자신의 역량이다.

'아이디어'에 대해.
창의성이라는 것은 타고나는 것이 아니다 더구나 만사를 삐딱하게 보는 시각에서 나오는 것도 아니다. ... 창의성이라는 것은 살아오면서 축적해온 지식과 경험이 집중적인 문제 해결의지와 맞부디쳐서 터지는 스파크일 뿐이다. ... 직장생활은 지겨운 밥벌이가 아니다. 일이 지겨운 이유는 당신이 맡은 일을 개선하거나 바꾸려 하지 않고 지난 달에 했던 그 방식으로 계속하니까 그런 것이다. 규정된 원칙에 따라 시키는 대로만 하니까 그게 지겨운 것이다 당신이 조금 더 고민해서 그 원칙을 바꾸려고 해보라 매일이 새로워질 것이다.
일반적인 사람들은 '경로 의존성'이라는 것에 지배를 당한다 자신들이 과거에 성공했던 방법이나 칭창받았던 행동을 강화하고 반복하려는 성향이 있다는 말이다.

'변화'에 대해.
변화는 작심만으로는 부족하다. 그런 나태와 게으름을 이겨내고 변화를 지속시키는 방법은 일상에서 변화의 플랫폼을 만드는 수밖에 없는 것 같다. 변화의 플랫폼은 행동의 방아쇠와 같은 것이다. 특정한 상황적인 계기에 도달하면 특정한 행동을 하겠다는 사전 계획이라는 뜻이다.
→ 예를 들면 이런 것. 3호선을 타다가 고속터미널 역이라는 안내가 나오면 무조건 내려서 9호선으로 갈아타게 되는 것. 월요일 아침에는 하늘이 무너져도 반드시 무엇을 하겠다는 결심이 목표를 지키는데 큰 힘이 되는 것이다.

'열정'에 대해.
열정을 불러올 수 있는 목표는 몇 가지 갖추어야 할 요건이 있다.
1. 정해진 시간
2. 목표의 구체성 - 시간이 되었을 때 목표의 달성 정도를 측정할 수 있어야 한다.
3. 목표의 난이도 - 최선을 다했을 때 달성이 가능할 정도로
4. 목표의 가슴 떨림
5. 목표에 도달하는 것에 대한 중간 목표 설정
보통의 인간이라면 작은 성공에 자신을 계속 노출시키는 것이 도움이 된다. 어디선가 읽은 내용에선 목표를 주변 사람에게 말로 알리는 것도 효과가 있다고 한다.

디플레이션 시대의 생존법(?)
2020년부터는 한국에서도 베이비붐 세대의 은퇴가 본격화된다 그들은 은퇴하면서 가지고 있는 부동산이나 투자자산을 처분해서 빚부터 갚으려 할 것이다. 그러면 그때부터 한국도 대규모 부채의 구조조정기에 들어갈 것으로 예상한다 그렇게 되면 추가로 부동산이나 주식 가격은 내려갈 수 있다.
해리 덴트는 우리가 앞으로 봉착하게 되는 디레버리징과 디플레이션 시대에 살아남을 수 잇는 방법을 두 가지 추천했다. 첫 번째는 절대 빚지지 말라는 것이다. 대부분의 자산 가치가 떨어지는 마당에 빚을 얻어서 무엇을 산다는 것은 바로 죽음으로 가는 길이다. ...
두 번째 생존방법은 지금 다니는 직장을 지키라는 것이다 이런 때일수록 가장 확실한 생존방법은 지금 자리를 지키는 것이다. ... 가능하면 절대 다른 곳을 쳐다보지 말고 지금 있는 곳에서 최선을 다해서 살아남아라.


2020년 4월 16일 목요일

[Python] 재시도 로직이 추가된 requests 모듈 사용 예제

파이썬엔 간단하게 HTTP 요청을 할 수 있게 해주는 requests 모듈이 있다. 렌더링을 위한 데이터 획득이 아니라면 굳이 브라우저를 이용할 필요가 없기 때문에 json 데이터 등을 가져오는게(API 호출) 목적이라면 requests 모듈을 이용하는 것이 보다 합리적이다. 여기서 한가지 주의할 점은 네트워크 환경이 불안정한 경우 일시적으로 요청 작업이 실패할 수 있다는 부분이다. 따라서 사용자는 요청 실패에 대한 로직 흐름까지 고려할 필요가 있다.

아주 단순하게 문제를 해결하자면 루프 구조 내에서 원하는 결과가 나올 때까지 응답을 계속하는 방법이 있을 수 있다.

# 방법 1
def get(url):
    try:
        return requests.get(url)
    except Exception:
        time.sleep(1)
        return get(url) # 재시도

# 방법 2
while True:
    response = get(url)
    if response.status_code != 500: # 500, server error
        break
    else:
        time.sleep(1)

방법 1의 문제점은 url 문자열이 잘못되어있을 경우 무한정 요청 작업을 수행한다는 것이고, 방법 2의 문제점은 다양한 네트워크 에러를 로직이 올바르게 처리해주지 못한다는 점이다.

제안되는 솔루션은 다음과 같다.

import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

def requests_retry_session(
    retries=3,
    backoff_factor=0.3,
    status_forcelist=(500, 502, 504),
    session=None,
):
    session = session or requests.Session()
    retry = Retry(
        total=retries,
        read=retries,
        connect=retries,
        backoff_factor=backoff_factor,
        status_forcelist=status_forcelist,
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount('http://', adapter)
    session.mount('https://', adapter)
    return session

사용은 아래와 같이 한다. session 객체 전달은 선택 사양으로, 사용자가 session 객체를 따로 인자로 넘겨주지 않으면 requests_retry_session() 함수 내부에서 session 객체를 새로 생성하는 것을 위 코드에서 볼 수 있다. 그리고 status_forcelist엔 요청 실패로 간주할 응답 코드를 넣어줄 수 있다.


# 단순 get
response = requests_retry_session().get(url)

# 단순 get, timeout이 있는 경우.
response = requests_retry_session().get(url, timeout=5)

# 헤더 정보가 필요한 경우
s = requests.Session()
s.auth = ('user', 'pass')
s.headers.update({'x-test': 'true'})

response = requests_retry_session(session=s).get(url)

Retry 모듈과 HTTPAdapter 모듈을 이용해 요청을 할 때 재시도 정보를 포함시키는 것이다. backoff 팩터는 retries 값과 연계해 요청과 요청 사이에 쉬어줄 시간을 정해주게 된다.

쉬어줄 시간에 대한 로직은 다음과 같다.
슬립 = backoff factor * 2^(재시도 횟수 - 1)

따라서 위 함수의 기본 값으로 지정된 3과 0.3을 그대로 쓰는 경우
• 1회 재시도 sleep : 0초 (0.3 * 0)
• 2회 재시도 sleep : 0.6초 (0.3 * 2)
• 3회 재시도 sleep : 1.2초 (0.3 * 4)
값을 갖게 된다.

따라서 3회 요청에 실패하는 경우 사용자는 최대 1.8초 + @(통신 비용)을 기다리게 되는 셈이다.
위 함수는 당연히 post() 호출 시에도 유효하다.

출처: https://www.peterbe.com/plog/best-practice-with-retries-with-requests

아래는 유사 한글 포스팅 참고.
https://knight76.tistory.com/entry/python-%EC%9B%B9-%EC%9A%94%EC%B2%AD-%EC%98%88%EC%8B%9C-requests-HTTPAdapter-Retry

2020년 4월 8일 수요일

모두 제자리 - 도미니크 로로

'심플하게 산다'로 대 히트를 쳤던 도미니크 로로의 또 다른 책으로, 짧은 글들을 모아 엮어 낸 책이다. 다른 책 심플하게 산다나 다시 쓰는 내 인생의 리스트에 나온 글귀와 비슷한 부분이 많아서 읽는데 좀 지루했는데 한번 붙잡은 책은 끝까지 읽는 편이라 어쨌든 끝까지 읽긴 했다. 밀리의 서재를 통해 읽었는데 구매해서 읽었다면 조금 후회했을 만한 책.

글쓴이는 오랫동안 일본에 거주하며 선불교와 동양 철학에 큰 영향을 받았다고 한다. 그래서인지 책 곳곳에 일본 문학에서 가져온 글귀나 일본인의 생활 방식에 감탄하는 구문들이 있다. 웹 서비스를 통해 읽은 책이라 '소장'할 순 없으니 개인적으로 기억에 남는 문장을 옮겨 적어 보기로 한다.

대도시에서 한 평의 가격이 얼마인지 계산하면 요즘 시대에 공간을 갖는다는 것이 얼마나 큰 사치에 속하는지 알게 된다.
• 많이 갖지 않으면 공간도 벌 수 있다.
• 소유하고 저장하고 계속 갖고 있을지 아니면 버릴지 결정하는 것은 삶의 질을 높이는 일이기도 하다.
• 좁은 공간에 사는 사람은 깔끔하게 정리할 수밖에 없다. 공간이 귀하다는 것을 알기에 편하게 살기 위해 좁은 공간을 잘 활용한다.
• 쓸모 있을까 생각했을 때 머뭇거린다면 별로 필요하지 않은 물건이다. 필요한 물건이라면 생각조차 할 필요가 없기 때문이다.
목표를 이루려면 단계를 세분화해야 한다. 너무나 당연하다 보니 많은 사람들이 그러한 점을 잊거나 과대평가한다.
• 정리에서, 추억의 물건은 맨 마지막에 다뤄야 한다. 이러한 물건은 감정이 깃들어 있어서 분류, 정리하기가 가장 힘들다.
• 조금 깊이 생각해 보면 미학은 일치를 추구하려는 본능일 뿐이다.
• 평범한 것들이 유지하고 원칙을 따르며 이대로 좋다는 확신으로 가득할 때 일상의 평범한 옷을 입고 있어도 위대해진다.
• 너무 완벽하게 질서 정연하면 서정적인 면이 없다.
• 몸은 훌륭한 도구다. 경험을 통해 습관을 들이기 때문이다.
• 일본 속담에서는 작은 것을 하찮게 여기는 사람은 절대 큰일을 할 수 없다는 말이 있다.
• 정리를 하면 물질의 영향력에서 자유로워져서 건강하고 자연스럽게 살 수 있으며 가볍게 살 수 있다.

뭐 이런 책이다.
꼭 필요한 물건만 소유하면서 삶에 집중하자는 책. 확실히 주변에 불필요한 물건이 많으면 물건에 일상이 눌리는 느낌이 들곤 한다. 가족이 생기고 식구가 늘다보니 한번 읽을 책을 계속 갖고 있기에도 어딘가 부담이 가는 요즘이다.

밀리의 서재를 1년 결재해서 책을 읽고 있는데, 쨍한 컴퓨터 디스플레이나 모바일 디스플레이로 읽어야 해서 눈이 좀 아프긴 한데 꽤나 만족스럽다. 원하는 시간, 원하는 장소에서 내가 원하는 형태로 책을 읽을 수 있으니 말이다. 아쉬운 건 내가 꼭 읽고 싶은 책은 정작 서비스 목록에 없다는 점. 그리고 '종이 냄새'가 나지 않으니 책을 읽을 때의 만족감이 좀 덜하다.

아, 배우 박정민이 쓴 전설의 책(?) 쓸만한 인간도 여기서 읽을 수 있었다. 마포구청 도서관에선 예약이 밀려 있어서 도저히 읽을 수가 없었는데 밀리의 서재에 딱 있길래 반갑게 읽었다. 책이 막 좋진 않다. 연예인 등 유명인이 쓴 신변잡기 책 중에서 조금 나은 정도다. 그래도 뭐 나는 배우 박정민을 좋아하니까 이만하면 되었다.