반응형

OS: Ubuntu 16.04 server (amd64)

Python: 3.5.2

Flask-restful: 0.3.5


Flask-restful을 이용하면 하나의 클래스가 REST API 1개를 처리할 수 있도록 만들 수 있다. 처음에는 Quickstart 페이지에 있는 HelloWorld 예제 [1]를 따라하면서 API 여러 개를 만들면서 클래스도 여러 개 만들고, 각 클래스에서 argument 처리 등 점점 복잡한 작업을 추가하기 시작하면서 소스 파일이 1개뿐이면서 길이가 아주 많이 길어지는 상황이 되었다.


하나의 소스 파일이 너무 길면 보기도 불편하고, 무엇보다 여러 사람이 REST API를 조금씩 나눠서 병렬적으로 코딩하는 경우에는 하나의 파일에 동시에 수정이 발생하므로 협업 측면에서도 관리하기 어렵다. 따라서 여러 개의 파일로 나눠서 관리하는 것이 좋다. 사실 어떻게 나눠야 할 지 모르겠어서 고민하다가, 그냥 파이썬이 클래스를 다른 소스 파일에서 import해 오는 구조를 그대로 쓰기만 하면 되는 간단한 원리임을 알 수 있었다.


예를 들면, 아래와 같은 HelloWorld 예제를 main.py로 두고,


<main.py>

from flask import Flask

from flask_restful import Resource, Api


app = Flask(__name__)

api = Api(app)


class HelloWorld(Resource):

    def get(self):

        return {'hello': 'world'}


api.add_resource(HelloWorld, '/')


if __name__ == '__main__':

    app.run(debug=True)



여기서 main.py는 서버를 실행하는 시작 포인트로만 쓰고 실제 REST API 처리하는 부분을 분리한다면, 아래와 같이 할 수 있다.


<hello.py>

from flask_restful import Resource


class HelloWorld(Resource):

    def get(self):

        return {'hello': 'world'}



<main.py>

from flask import Flask

from flask_restful import Resource, Api

from hello import HelloWorld


app = Flask(__name__)

api = Api(app)


api.add_resource(HelloWorld, '/')


if __name__ == '__main__':

    app.run(debug=True)


이제 main.py 파일에서는 클래스를 import하고 API 정의만 나열해 주고, 실제 API 처리 파일은 hello.py에서 수정하는 구조가 되었다.



<참고자료>

[1] Flask-RESTful Quickstart, http://flask-restful.readthedocs.io/en/0.3.5/quickstart.html



반응형
블로그 이미지

Bryan_

,
반응형

멀티태스킹을 하는 사람을 쳐다보면 굉장히 바쁘게 쉴 새없이 움직이는 것처럼 보인다. 어떤 의미에서는 정말 '열일'하고 있는 것처럼 보이기도 한다. 실제로 열심히 무언가 하는 것은 맞지만, 생산성이나 결과물 측면에서는 열일했다고 보기 어려운 경우도 발생한다.

실제로 멀티태스킹이 생산성에 좋지 않다는 연구 결과도 찾아보면 많이 있고, 그냥 직접 멀티태스킹을 해 보면 어느 정도 체감할 수 있다. 하지만 문제는 이 사회가, 특히 대학원 환경이 나에게 멀티태스킹을 강요한다는 데 있다.


석사과정 때는 수업을 들으면서 동시에 연구실에서 공부하라고 주는 논문들을 읽고, 가끔 연구과제와 관련해서 지시하는 일들을 처리해야 한다. 만약 연구실에 과제가 여러 개 있다면 과제 개수에 비례해서 서로 호환되지 않는 일처리 개수가 늘어난다.


박사과정이 되면 수업으로부터 자유로워지지만, 일단 개인 연구가 마치 백그라운드 프로세스처럼 절대로 멈추지 않고 지속된다. (관련 분야 논문을 읽거나, 해야 할 실험을 하거나, 논문을 조금씩 고치거나) 그리고 다른 어떤 일이 오더라도 이 개인연구는 절대 놓아서는 안 된다. 물론 현실은 시궁창ㅠㅠ 개인연구가 다른 덜 중요하면서 대신 더 급한 일처리에 침범당할 때가 한두 번이 아니다.

박사과정에게 연구과제는 조금 더 관리 측면에서 신경쓸 것이 많아진다. 교수님뿐만 아니라 재정을 지원해 주는 갑(정부 또는 회사), 때로는 과제의 규모가 좀 클 경우 과제 내의 다른 연구팀(다른 교수님들의 연구실, 참여기업 등)과 수시로 연락해서 일정을 조율하고 연구내용을 서로 맞추고, 진행상황을 검토하는 등의 일들을 해야 한다. 보통 1년 단위인데 연초에는 제안서를 쓰고 과제 제안 발표자료를 만드느라 바쁘고, 중간에는 정기적으로 회의를 소집해서 진행해야 하고, 가을 쯤에는 중간 진도점검 준비를 하느라 바쁘고, 연말에는 연차보고서와 연차평가 발표자료를 만드느라 바쁘고, 만약 뭔가 연구개발 결과물을 구현하기로 계획되어 있다면 프로그램 개발을 하느라 바쁘다. 이런 연구과제가 1개만 있으면 괜찮은데 2개 이상으로 늘어나면 그 때부터는 정신이 없어진다. 게다가 연구과제가 다루는 내용이 내 개인연구와 관련성이 낮다면 더 이상의 자세한 설명은 생략한다. =_=

여기에 후배이자 공동저자인 석사과정 학생들의 논문도 봐 주고, 가끔 연구내용을 가지고 특허 출원도 해야 하는 등 여러 가지 일들이 수시로 나에게 다가오는데 이것들을 잘 관리하지 않으면 '열심히 바쁘게 이것저것 하는 것 같지만 실상은 아무 것도 제대로 진행되지 않는' 최악의 상황이 지속되기도 한다.


최소한 연구 주제 1개에 대해서만 집중적으로 고민하고, 그 안에서 여러가지 다양한 일들이 발생하는 것은 문제가 되지 않는다. 이것은 싱글 태스크로 볼 수 있다. 그런 측면에서 연구과제를 단 1개만 제대로 집중해서 진행할 수만 있다면 그 연구과제는 꽤 좋은 성과를 낼 수도 있을 것 같다. 하지만 언제나 그렇듯이, 연구과제를 단 1개만 하고서 연구실 운영을 제약 없이 해낼 수 없기 때문에 필연적으로 멀티태스킹을 해야만 하는 상황이 발생한다.


직장생활을 본격적으로 하지는 않았지만, 여러 경로를 통해 확인해 본 직장에서의 생활도 멀티태스킹을 강요하기는 매한가지인 듯 하다. 결국 지금 멀티태스킹을 제대로 받아들이고 이것을 최대한 싱글 태스크처럼 잘 해내기 위한 전략이 필요하다. 말이 전략이지, 대부분의 사람들이 한번쯤 들어 보았을 만한 뻔한 방법을 쓰면 된다. 일을 중요도와 시급성 두 축을 기준으로 4등분해서 우선순위를 매기고 그에 맞추어 처리하면 된다. 이것을 알고 모르고의 차이가 아니라, 알고 있는 대로 일의 우선순위를 잘 매겨서 그대로 진행하는 "실천을 하고 못하고의 차이"일 뿐이다.


트렐로(trello)를 이용해서 내 앞에 주어진 수많은 일들을 분류하고 중요도와 시급성을 기준으로 우선순위를 매겨 보았다. 무엇을 먼저 해야 하는지는 명확히 보이기 시작했다. 하지만 그렇게 우선순위를 매긴 대로 하루하루 일처리를 성공적으로 해내기가 정말 쉽지가 않았다. 이렇게 task를 잘 정의해 놓았음에도 불구하고 갑자기 치고 들어오는 자잘한 일들은 여전히 많았고, 가끔 아기를 아내 대신 봐 준다거나, 몸이 아프다거나, 계획상의 일이 생각보다 너무 어려워서 그게 미뤄져서 줄줄이 다른 일도 못하는 등 변수가 산적해 있었다. 게다가 막상 무슨 일을 해야 할 지 뻔히 보이는데도 불구하고 몸이 말을 듣지 않아서 일에 집중을 못하고 시간만 허비하는 경우도 여전히 자주 있었다. 정말 이게 가장 속상하다. 나는 왜 이토록 의지박약인 것일까??


내가 하려는 그 일에 동기부여가 충분하지 못해서 일이 하기 싫거나, 갑자기 하던 일이 도무지 해결책이 떠오르지 않아서 어렵거나 해서 동기를 상실했을 때, 나는 높은 확률로 페이스북에 들어가거나 네이버 뉴스를 보면서 1시간 넘게 허비한다는 사실을 알 수 있었다. 알았으면 고쳐야지. 그런데 참 생각처럼 고쳐지지 않는다. 자, 이제는 뼈를 깎는 노력이 필요한 시점이다. 주어지는 모든 일이 마냥 재미있지 않다. 동기를 부여하는 것도 한계가 있다. 심지어 자기최면 수준으로 생각을 고쳐야 될 때도 있다. 그렇게까지 나 자신을 왜곡해야 하는 것일까 하는 생각이 들기도 한다.


애초에 내 성향이 그다지 낙천적이지는 않아서, 문제가 발생했을 때 나 스스로를 향해 비난의 화살을 쏠 때가 자주 있다. 이 습관 역시 좋지 않으므로 고쳐야 하는데, 이것도 노력 부족인가? 닭이 먼저인지 달걀이 먼저인지의 문제가 되고 만다. 하지만 어쨌든 이 쳇바퀴를 탈출해야 한다는 목적에는 변함이 없다.


내가 조금 더 자존감이 높아지고, 좀더 집행력이 좋아지고, 좀더 미래를 위해 현재의 어려움을 참아낼 수 있는 인내심과 집중력이 더해진다면 지금보다 상황이 나았겠지? 그러면 그렇게 되도록 노력하자. 이것이 나의 기도제목이다. 일 잘하는 사람 그 자체를 목표로 한다면 그것은 우상이 되겠지만, 적어도 그렇게 되고 나서야 무엇이든 내 앞에 언젠가 주어지는 사명(calling)을 감당할 수 있을 것 아닌가? 아니, 멀리 볼 것도 없이 지금 당장 내 삶의 작은 부분에서도 말씀대로 살고 사랑을 실천하기 위해서라도 내가 지금 멀티태스킹의 늪에서 쓸데없이 세월을 낭비하고 있어서는 안 된다. 뭐, 박사학위를 포기하고 지금 당장 연구실을 뛰쳐나와 다른 일을 시작하면 상황이 나아질 수는 있겠지만, 박사학위를 아직까지는 포기할 생각이 없으므로 결국 멀티태스킹을 최대한 생산적으로 관리하는 수밖에 없다.


힘내자, 노력하자. 싸우고 참아내고 이겨내고 극복하자. 제발.



반응형
블로그 이미지

Bryan_

,
반응형

느리고 빠른 것이 중요할 수는 있지만 최우선 순위가 되지는 않는다. 아쉽지만 나는 일에 있어서 빠르지는 않다. 그렇다고 학부 졸업하던 당시의 아주 느린 수준은 벗어났지만, 조금 더 빠르면 좋겠다는 2%(사실은 체감하기로 12%쯤) 부족한 현실에 시달린다. 이것이 바로 이상과 현실의 괴리.


제한된 체력과 함께, 나 스스로 절대로 인정하지 않지만 30대가 주는 이상한 피곤함이 기회비용을 가중시킨다. 나는 시간이 결코 많지 않다. 하지만 내가 무엇 하나 정리하고 알아내는 데에는 신선이 바둑돌 한 수 놓듯이 세월을 허비한다. 그렇게 습득한 지식과 기술이 어디 도망가지는 않지만, 이렇게 선택과 집중을 하고 빨리 실적을 만들어 내야 하는 시기에 왜 나는 더 빠를 수 없는 것인가? 한탄스럽다.


내가 완벽주의를 조금이라도 더 버려야 하고,

우선순위에 맞춰서 일처리를 하기 위해서 일을 계획하고 새로 정리하는 시간을 아까워하지 말아야 하고,

장기적으로 바라봐야 할 일을 불나방처럼 하루 밤만에 불태워서 해보겠다고 덤벼들지 말아야 하고,

혹여나 동기부여를 상실해서 이토록 일이 안되는가 싶어서 인생의 근본적인 동기도 재점검 하고,

그외 다수 등등...


이미 나는 뭘 어떻게 해야 하는지 사실 어느 정도 알고는 있다.

하지만 마음과 육신의 괴리는 그다지 좁혀지지 않는 것 같다.

시기적절하게 다가오는 주변 환경의 변수들은 말할 것도 없다.

생각대로 몸이 바로 움직여만 준다면 이런 고민도 필요없을 것이다.


결국 아침에 좀더 자겠다는 귀차니즘을 이겨내기 위해 허벅지를 찌르고 참아내며 일어나는 노력,

피곤해서 더 못하겠다는 생각이 들 때 정신을 환기시키고 하던 일을 끝내고야 말겠다는 노력,

논문을 읽다가 잘 모르겠어서 다음에 읽어야겠다는 생각이 들 때 오기로 이해하고 말겠다고 이를 악무는 노력,

잠깐 다른 일로 인해 집중력이 흐트러졌을 때 쉬려는 마음을 누르고 다시 일에 복귀하는 노력,

결국 이렇게 스스로 뼈를 깎는 노력이 있지 않고는 지금의 지지부진한 상황이 쉽게 해결되지 않을 것이다.


프로페셔널(professional)은 날씨가 좋을 때를 기다리지 않고, 바람이 불어도 비가 와도 눈이 와도 정확하게 목표에 적중시키는 최고의 양궁 선수와 같은 사람이다. 이미 나는 날씨가 좋아지기를 더이상 기다릴 수도 없는 상황이고, 예전에 진작에 연습이 되어 있었으면 좋았겠지만 이제서라도 하던 연습을 빨리 끝내고 프로페셔널이 빨리 되는 길 말고는 다른 길이 없다.


제발 나는 내 연구와 맡은 일들을 지금보다 더 잘 하고 싶다.

크든지 작든지 방해에 휘둘리지 않고 싶다.

정신 차리자.



반응형
블로그 이미지

Bryan_

,
반응형

간단하고 기계적인 일은 직접 하지 않고 가능하면 석사과정에게 시키는 것이 박사과정이 가져야 할 능력일까?

위와 같은 이상한 질문이 나오게 된 배경은 이렇다.


  • 내가 관리해야 할 연구과제 수가 여럿 있고, 각 과제마다 중요하면서 오래 걸리는 일과 덜 중요하지만 빨리 처리할 일들이 있다.
  • 중요도/긴급함과 전혀 상관 없이, 그동안 내가 가장 잘 이해하고 있는 내용이기 때문에 누군가에게 시키려면 시킬 대상에게 개념과 도구, 각종 용어에 대한 설명을 제대로 해 주고 나서야 시킬 수 있는 일들이 꽤 많이 있다.
  • 결국 누군가에게 일을 시키기 위해서 자료를 전달하고 설명을 해야 하는 노력 + 후배가 일처리하는 데 걸리는 시간보다 내가 그냥 직접 처리하는 것이 더 빠르다고 판단되면, 나는 그냥 내가 일처리를 하고 만다.
  • 지도교수님이 보시기에는 박사과정 고년차가 되어 자기 연구에 집중해야 되는데 과제의 소소한 작업을 처리하느라 바쁜 것처럼 보이기 때문에 석사과정들에게 일을 좀 잘 시켜 보라고 말씀하신다.


사실 일차적으로는 교수님의 의견에 충분히 동의하고, 그만큼 내가 context change 없이 개인연구에 더 집중할 수 있게 되니까 일을 잘 시키는 것의 중요성과 필요성을 알고 있다. 그리고 내가 제 때에 적절한 일들을 석사과정들에게 시키지 않으면, 그들이 제 때에 적당한 일들을 배우지 못하기 때문에 나중에 연차가 올라가서는 오히려 그 연차에 걸맞는 능력을 발휘하지 못하는 불상사도 생길 수 있다.


그러나 인생이 생각하는 것처럼 쉽게 처리가 되지는 않고, 항상 플랜 B가 필요한 경우가 더 많다. 정작 급하게 일을 시키고 싶을 때 생각처럼 빠르고 간단하게 업무를 지시할 수 없는 경우가 허다하다. 예를 들면 내가 시키려는 일에 대해서 후배가 배경 지식이 부족해서 추가적인 공부가 필요한 경우가 되겠다. 사실 이것은 후배들을 문제삼는 것이 아니라 결국 나를 향한 지적이다. 왜냐하면 평소에 그 후배가 나와 연구 진행 상황에 대한 동기화가 충분히 이루어지지 못해서 커뮤니케이션 문제가 발생하고 있다는 반증이기 때문이다.


일을 시킬 때, 뭘 어떻게 시켜도 알아듣지 못하고 진행을 못할 정도로 실제로 능력이 부족한 경우는 사실 그렇게 많지 않다. 대부분은 시키는 사람의 입장에서 목표를 정확하게 제시하고 일을 자세한 task item들로 나눠서 어떤 도구를 쓰고 어디를 참고하라는 정도의 내용을 알려 주면 꽤 완성도 있게 일을 처리해 준다. 하지만 문제는 그렇게 일을 시키기 위해서 이메일을 쓰거나, 문서에 work item을 나열하기 시작하면 그걸 시키는 당사자가 이해할 수 있을 정도로 쓰는 데에만 꽤나 오래 걸릴 때가 있다. 그 시간에 차라리 내가 일을 시작하거나 프로그램을 돌리면 진작 끝냈을 지도 모른다. 그럼에도 불구하고 내가 이 학생에게 일을 시켜야 하는 이유가 있다면, 지금 이렇게 가르쳐 둬야 나중에 비슷한 업무를 더 적은 노력으로 시킬 수 있기 때문일 것이다.

구체적이고 정확한 목표가 설정된 업무를 효율적으로 시키려면 결국 평소에 미리 노력해서 후배와 일부러 토의를 하고, 지도교수와 토의한 결과나 과제 회의에서 결정된 사항을 그때 그때 갱신시키는 수밖에 없다. 적당히 바쁘지 않을 때 미리미리 후배를 성장시켜 놓아야 한다는 의미일 수도 있겠다. (이쯤 되면 내가 박사학위도 없으면서 지도교수 노릇을 하는 것인가 하는 의문도 든다.)


나는 여전히 일단 무슨 일이든지 내 선에서 내가 알아서 처리하려는 경향이 있다. 내가 일이 넘쳐서 누군가에게 일을 시켜야 할 때가 되면 대부분 내가 시키려는 일의 디테일을 모르기 때문에 누구에게 맡겨야 좋을 지 고민이 될 때도 많다. 어떤 일들은 오히려 지나치게 간단해서 시키는 노력은 별로 들지 않지만, 그로 인해 시간이 더 걸려서 일이 전체적으로 밀리는 경우도 있다.


나 혼자 능력을 키우는 것과, 어떤 단체 속에서 단체를 함께 성장시키는 것은 매우 다르다는 것을 느낀다. 나 혼자 능력을 키우는 것은 전적으로 내 시간관리와 내 책임으로 다 귀결되는 데 반해, 단체가 함께 성장하려면 치밀한 조직관리 skill이 필요하다.


적어도 나는 나중에 어느 회사나 연구소를 가든지 중간관리자 이상의 위치에 갔을 때 실무자의 실무적인 이슈를 이해할 수 있는 사람이 되고 싶

다. 적어도 그 실무자가 하려는 일을 내 선에서 내 능력으로 해결해 나갈 수 있는 상황에서 그 실무자와 토의를 해서 가장 최선의 결정을 내릴 수 있는 사람이 되고 싶다. 어쩌면 나는 이러한 욕심이 과도해서, 후배들에게 너무 일을 나눠주지 않고 나 혼자서만 능력을 키우려는 이기주의에 잡혀 있지는 않는지 반성해 본다.



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu Server 16.04.2 (amd64)


우분투 서버 16.04를 설치하고 나면 기본으로 python3가 같이 설치되어 있는데, 쉘에서 python과 pip (파이썬 패키지 설치 도구)는 작동하지 않고 python3, pip3만 작동한다.


Bash 쉘을 쓸 경우, alias로 등록하는 것이 가장 간단하다.

~/.bash_aliases 파일을 만들고, 아래 내용을 작성한다.


alias python=python3

alias pip=pip3

alias sudo='sudo '


위와 같이 작성하여 저장하고 bash shell에 다시 로그인하면 된다.

마지막에 sudo를 추가하는 이유는 저게 없이 sudo pip install ... 명령을 치면 pip를 alias로 인식하지 못하기 때문이다.



반응형
블로그 이미지

Bryan_

,