최면 투자 규칙

마지막 업데이트: 2022년 6월 14일 | 0개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기
버젼 제어 (version control)는 종종 디버깅 동안 이전 특정 상태로 소프트웨어를 다시 원복하는데 사용된다. 그리고 버그와 연관된 코드 최근 변경을 사항을 탐색하는데도 사용된다. 특히, 대부분의 버젼 제어 시스템은 blame 명령어가 있어서 특정한 코드 라인에 누가 마지막에 변경을 했는지도 확인할 수 있다.

최면 투자 규칙

방어적 프로그래밍 (Defensive Programming)

앞선 학습에서 프로그래밍의 기본적인 도구를 소개했다. 변수와 리스트, 파일 입력출력(I/O), 루프, 조건문, 그리고 함수. 아직 수행하지 않은 것은 프로그램이 정답을 얻었는지를 어떻게 보여주고 프로그램을 변경하고 수정하면서 여전히 정답을 얻고있는지를 보여주는 것이다.

이를 달성하기 위해서, 다음이 필요하다.

  • 자신의 연산을 확인하는 프로그램을 작성한다.
  • 널리 사용되는 함수에 대한 테스트를 작성하고 수행한다.
  • “정답”이라는 것이 실제로 무엇을 의미하는지 알고 있어야 한다.

좋은 소식은 이런 것들을 수행하는 것은 프로그래밍의 속도를 늦추지 않고 가속화한다. 실제 목공에서 나무를 자르기 전에 주의깊게 측정해서 절약되는 시간이 측정하는데 걸리는 시간보다 훨씬 크다.

  • 가정 설정문(assertion)이 무엇인지 설명한다.
  • 프로그램의 상태를 올바르게 확인하는 가정 설정문(assertion)을 프로그램에 추가한다.
  • 함수에 전제조건과 사후조건 가정 설정문(assertion)에 올바르게 추가한다.
  • 테스트 주도 개발(test-driven development)가 무엇인지 설명하고, 새로운 함수를 생성할 때 사용한다.
  • 왜 변수를 초기화하는데 임의의 상수보다 실제 데이터를 사용하는지 설명한다.
  • 체계적으로 오류를 포함하는 코드를 디버그한다.

가정 설정문 (Assertions)

프로그램에서 정답을 얻는 첫번째 단계는 실수는 일어난다고 가정하고 이에 대비하여 방지하는 것이다. 이것을 방어적 프로그래밍(defensive programming)이라고 부르고, 가장 일반적인 방식은 코드에 가정 설정문(assertions)을 추가해서 실행시에 점검한다. 가정 설정문은 단순하게 프로그램의 특정 지점에서 항상 참이어야 하는 문장이다. 파이썬이 가정 설정문을 만나게 될 때, 가정 설정문의 조건을 확인한다. 만약 참이면, 파이썬은 아무것도 하지 않는다. 하지만 거짓이면, 파이썬은 즉시 프로그램을 정지시키고 마련된 오류 메시지를 출력한다. 예를 들어, 루프가 양수가 아닌 값을 마주치자 마자 바로 이 코드 부분이 정지한다.

파이어 폭스 웹브라우져 같은 프로그램은 가정 설정문(assertion)으로 가득차 있다. 코드의 10-20%는 다른 80-90%의 코드가 올바르게 동작하는지 확인하기 위해서 존재한다. 대체로 가정 설정문은 다음 3개 범주안에 들어간다.

  • 올바르게 동작하기 위해서 함수의 시작점에서 참이여 되는 것은 사전 조건(precondition)이다.
  • 함수가 끝날 때 참을 보증하는 것이 사후 조건(postcondition)이다.
  • 부분 코드 내부 특정한 지점에서 항상 참이어야 하는 것이 불변식(invariant)이다.

예를 들어, 4개의 좌표 (x0, y0, x1, y1) 로 구성된 튜플을 사용하여 직사각형을 표현한다고 가정하자. 연산을 수행하기 위해서, 정사각형을 정규화해서 원점과 가장 긴 축을 따라 1.0 단위를 가진다. 함수가 정규화를 하지만 입력값이 올바른 형식인지 결과가 의미가 있는지 점검한다.

주석을 제외한 2, 4, 5번 행의 사전 조건은 잘못된 입력을 잡아낸다.

사후 조건은 계산 결과가 올바르지 않을 때 신호를 줌으로써 버그를 잡도록 도와준다. 예를 들어, 너비보다 더 큰 직사각형을 정규화한다면 모든 것이 OK 처럼 보인다.

하지만, 높이보다 더 넓은 정사각형을 정규화한다면 사전 선언문이 자동으로 실행된다.

작성한 함수를 다시 읽게되면, 10번째 행이 dx 가 dy 로 나누어지기 보다 dy 가 dx 로 나누어져야 한다. (Ctrl+M 그리고 L을 타이핑해서 행번호를 화면에 출력할 수 있다.) 만약 함수의 끝에 가정 설정문을 생략한다면, 유효한 답변으로 올바른 모양을 가진 무언가를 생성하고 반환해야할 것이지만 하지는 그렇게 하지는 않는다. 버그를 탐지하고 디버깅하는 것은 거의 항상 가정 설정문을 작성하는 것보다 장기적으로 더 많은 시간이 걸린다.

하지만 가정 설정문이 오류를 잡아내는 것만 하는 것은 아니고 사람들로 하여금 프로그램을 이해하는데 도움도 준다. 각각의 가정 설정문은 프로그램을 읽는 사람에게 코드가 동작하는 것과 프로그램을 이해하는 것이 매칭되는지 확인할 수 있는 기회의 장을 제공하기도 한다.

대부분의 좋은 프로그래머는 코드에 가정 설정문을 추가할 때 두가지 규칙을 따른다. 하나는 “미리 실패하고, 자주 실패하라(fail early, fail often)”는 것이다. 오류가 발생하는 시간과 장소와 인지하는 시점과 거리가 크면 클수록, 오류를 디버그하기가 더욱 어렵다. 그래서 좋은 코드는 가능한 이른 시점에 오류와 실수를 잡아낸다.

두번째 규칙은 “버그를 가정 설정문과 테스트로 변환하라(turn bugs into assertions or tests)”는 것이다. 만약 코드 일부분에 실수를 하게된다면, 근처에서 다른 실수를 하거나 다음번에 코드를 변경할 때 동일한 혹은 관련된 실수를 저지를 가능성이 높다. 여러분이 회귀(regressed)가 되지 않도록 (즉, 이전 문제를 다시 발생하지 않도록) 가정 설정문을 작성하는 것은 장기적으로 엄청난 시간을 절약할 수 있고 미래의 자신을 포함하여 까다로운 코드를 읽는 사람에게 경고를 주는데도 도움이 된다.

도전 과제

리스트 숫자의 평균을 계산하는 함수 average 를 작성한다고 가정하자. 사전 조건과 사후 조건으로 함수 average 에 대해 무엇을 작성할까요? 여러분이 작성한 것과 주위 동료의 것과 비교하세요. 여러분의 테스트를 통과했으나 동료의 테스트는 통과하지 못한 혹은 반대 경우의 함수를 생각할 수 있나요?

코드에 사전 설정문이 확인하는 것이 무엇인지 일상적인 말로 설명하세요. 그리고, 각각에 대해서 사전 설정문이 실패하게 되는 입력값의 예를 주세요.

~python def running(values): assert len(values) > 0 result = [values[0]] for v in values[1:]: assert result[-1] >= 0 result.append(result[-1] + v) assert result[-1] >= result[0] return result ~

테스트 주도 개발 (Test-Driven Development)

가정 설정문은 프로그램의 특정한 지점에서 무엇인가 참인지 확인하는데 도움이 된다. 다음 단계는 코드 일부분의 전반적인 동작을 확인하는 것이다. 즉, 특정한 입력값이 주어졌을 때, 올바른 출력값을 만들어 내는지 확인한다. 예를 들어, 두개 혹은 그 이상의 시계열이 중첩되는지 발견할 필요가 있다고 가정하자. 각 시계열의 범위는 숫자 짝으로 표현되고 시작과 끝을 표현하는 시간 간격이 있다. 출력값은 모든 시간을 포함하는 가장 큰 범위다.

대부분의 초보 프로그래머는 상기 문제를 다음과 같이 푼다.

  1. range_overlap 함수를 작성한다.
  2. 두개 혹은 3개의 입력값에 대해서 함수를 인터랙티브하게 호출한다.
  3. 만약 함수가 잘못된 대답을 준다면, 함수의 잘못된 것을 고치고 다시 테스트를 시행한다.

명확하게 이 방식은 동작하지만 더 좋은 방식이 있다. (수천명의 과학자가 지금 이와 같이 작업을 하고 있다.)

  1. 각 테스트에 대해서 짧은 함수를 작성한다.
  2. 상기 테스트를 통한 range_overlap 함수를 작성한다.
  3. 만약 함수 range_overlap 가 잘못된 대답을 준다면, 함수의 잘못된 것을 고치고 다시 테스트를 시행한다.

함수를 작성하기 전에 테스트를 작성하는 것을 테스트 주도 개발(test-driven development) (TDD)라고 한다. TDD 지지하시는 분들은 이 방식이 더 빠르게 더 좋은 코드를 만들어낸다고 믿고 있다. 왜냐 하면,

  1. 만약 테스트 대상 코드를 작성한 후에 테스트를 작성하게 된다면, 확증 편향(confirmation bias)에 빠지기 쉽다. 즉, 무의식적으로 오류를 발견하기봐 작성한 코드가 옳다는 것을 증명하기 위한 테스트를 작성한다.
  2. 테스트를 작성하는 것은 프로그래머가 함수가 실질적으로 무엇을 수행해야 하는지에 대해 파악하는데 도움을 준다.

range_overlap 에 대한 3개의 테스트 함수가 있다.

오류는 사실 안심을 준다. 아직 range_overlap 을 작성하지는 않아서 만약 테스트가 통과된다면, 누군가 함수를 작성했고, 우연히 여러분이 함수를 사용한다는 표시다.

테스트를 작성하는 것에 대한 보너스로 암묵적으로 입력과 출력이 무엇인지 정의한다는 것이다. 쌍으로 구성된 여러 리스트를 입력받아 하나의 리스트로 출력하는 것이다.

하지만 중요한 것이 빠졌다. 범위가 전혀 중첩되지 않는 경우에 대해서 어떠한 테스트도 준비하지 않았다.

상기 경우에 range_overlap 은 무엇을 해야할까? 오류 메시지 실패로 종료, 중첩되지 않는다는 신호로 (0.0, 0.0) 같은 값을 출력, 혹은 다른 어떤 것을 수행. 함수를 실제로 구현할 때 여러 경우의 수 중에서 하나를 작성한다. 이슈가 있다는 것을 알아차리기 이전에 감정적으로 무언가 작성하는데 투자를 일으키기 전에 먼저 테스트를 작성하는 것은 무엇이 가장 최선이지 파악하는데 도움을 준다.

다음 사례의 경우는 어떻게 처리할까?

끝점을 맞대고 있는 두 부분은 중첩된 것인가 아닌가? 수학자는 대체로 “예 맞습니다”라고 하지만, 공학자는 대체로 “아닙니다”라고 말한다. 최선의 답은 “프로그램의 나머지 부분에서 무엇이든지 가장 유용한 것이 될 것이다”. 하지만, 다시 한번 range_overlap 의 실제 구현은 무언가 수행하는 것이고, 구현이 무엇이든지 관계없이 전혀 중첩되는 것이 없을 때 수행되는 것과 일관성이 있어야 한다.

시계열 차트에서 X축으로 함수는 반환하는 범위를 사용하려고 계획하고 있기 때문에, 다음과 같이 결정한다.

  1. 모든 중첩은 0 이 아닌 너비를 가져야 한다.
  2. 중첩되는 것이 없을 때, 특수값 None 을 반환한다.

None 은 파이썬에 내장되어져 있고, “여기에 아무것도 없어요(nothing here)”를 의미한다. 다른 언어는 종종 상응하는 값으로 null 혹은 nil 이라고 한다. 상기 결정 사항을 가지고, 마지막 두 테스트 작성을 마칠 수 있다.

다시, 함수를 작성하지 않아서 오류가 생겼다. 하지만 이제 함수를 작성할 준비가 되었다.

(잠시 시간을 가지고 왜 lowest 에 max 를 사용하고, highest 에 min 을 사용하는지 생각해보자. 테스트를 다시 실행하고자 하지만, 3개의 다른 셀에 여기저기 분산되어 있다 테스트를 좀더 쉽게 실행하도록 함수에 테스트 케이스를 모두 모아 놓자.

하나의 함수 호출로 range_overlap 을 이제는 테스트할 수 있다.

None 을 만들어내야 하는 첫번째 테스트는 실패해서, 작성한 함수에 뭔가 잘못된 것을 알게된다. 알지 못하는 것은 다른 4개의 테스트가 통과되었는지 실패했는지다. 왜냐하면 파이썬은 첫번째 오류를 탐지하지마자 프로그램을 정지한다. 여전히 약간의 정보가 없는 것보다는 낫다. 만약 그 입력값으로 함수의 최면 투자 규칙 동작을 추적하면 초기값을 입력값에 관계없이 lowest 를 0.0 highest 를 1.0 으로 각각 초기 설정함을 알게된다. 이것은 또 다른 중요한 프로그래밍 규칙(“항상 데이터로 초기화하라(always initialize from data)”)을 위반하게 된다. 함수 range_overlap 을 고치는 것은 연습으로 남겨둔다.

도전 과제

  1. range_overlap 을 고치시오. 변경을 한 후에 test_range_overlap 을 다시 실행하세요.

디버깅 (Debugging)

테스팅을 통해서 문제를 발견하게 되면, 다음 단계는 문제를 고치는 것이다. 많은 초보자는 올바른 답을 만드는 것처럼 보일 때까지 대체로 랜덤(random)하게 변경을 해서 문제를 해결한다. 하지만 이러한 접근법은 매우 비효율적이고 결과는 대체로 테스팅하고 있는 경우에 대해서만 적합하다. 프로그래머가 좀더 경험이 많을수록, 좀더 체계적으로 디버그한다. 대부분의 경험있는 프로그래머는 다음에 설명된 규칙과 변형을 따른다.

프로그램이 수행하게 되어 있는 것을 이해한다.

무언가를 디버깅하는 첫번째 단계는 프로그램이 수행하게 되어 있는 것을 이해(know what it’s supposed to do)하는 것이다. “작성한 프로그램이 동작을 하지 않는다”는 충분하지 않다. 문제를 진단하고 고치기 위해서는 올바른 결과와 잘못된 결과를 구별할 필요가 있다. 만약 실패한 케이스에 대해서 테스트 케이스를 작성한다면 - 즉 이것을 입력으로 가정 설정한다면, 함수는 저것을 결과로 산출한다 - 그러면 디버깅을 시작할 준비가 되었다. 만약 이렇게 할수 없다면, 무엇인가 고칠 때 어떻게 고칠지에 대해서 파악할 필요가 있다.

하지만, 과학적 소프트웨어에 대해서 테스트 케이스를 작성하는 것은 상용 응용프로그램에 대한 테스트 케이스를 작성하는 것보다 종종 더 힘들다. 왜냐하면, 만약 과학적 소프트웨어 코드의 결과가 무엇이 되어야 하는지 알고 있다면, 소프트웨어를 실행하지 않아도 된다. 그래서 결과를 작성하고 다음 프로그램으로 옮겨간다. 실무에서 과학자들은 다음을 수행하는 경향이 있다.

단순화된 데이터로 테스트한다. 실제 데이터섹에 통계분석을 수행하기 전에, 하나의 레코드에 대해서, 두개의 동일한 레코드에 대해서, 두개의 레코드인데 한 단계가 차이가 나는, 혹은 최면 투자 규칙 수작업으로 정답을 계산할 수 있는 레코드에 한해서 통계를 계산한다.

단순화된 케이스를 테스트한다. 만약 프로그램이 매우 빨리 회전하는 작은 방울의 과냉각된 헬륨에 자기장 소용돌이를 모의실험하려고 한다면, 첫번째 테스트는 회전하지 않는 작은 방울 헬륨이여야 하고, 어떤 외부 전자기장에 영향을 받지 말아야 한다. 마찬가지로, 만약 어떤 종에 대한 기후변화의 효과를 살펴보려고 한다면, 첫번째 테스트는 온도, 습도, 그리고 다른 요소를 상수로 고정하여야 한다.

절대적인(oracle) 것과 최면 투자 규칙 비교한다. 테스트 오라클(test oracle)은 새로운 프로그램의 결과와 비교할 수 있는 무엇이다. 즉, 실험 데이터, 결과를 신뢰할 수 있는 이전 프로그램, 혹은 심지어 전문가도 될 수 있다. 만약 테스트 오라클이 있다면, 특별한 케이스에 대해서 출력 결과를 저장해서 프로그램을 다시 실행하지 않고 원하는만큼 자주 새로운 결과값과 비교한다.

보전 법칙을 확인하라. 질량, 에너지, 그리고 기타 양적 정보는 물리 시스템에서 보존된다. 프로그램에서도 또한 보존되어야 최면 투자 규칙 한다. 마찬가지로, 만약 환자 데이터를 분석한다면, 레코드 숫자는 같은 수가 유지되거나 다음 분석으로 옮겨가게 되면 줄어든다. (왜냐하면 결측값을 가진 레코드나 아웃라이어를 버려버리기 때문이다.) 만약, 파이프라인을 따라서 옮겨가다가 갑자기 “새로운” 환자가 값자기 나타난다면, 아마도 무언가 잘못되고 있다는 신호다.

시각화하라. 데이터 분석자는 종종 간단한 시각화를 사용하여 수행하고 있는 과학과 코드의 정합성에 대해서 점검한다. (파이썬 학습의 도입 학습과 마찬가지로). 하지만, 이 방법은 디버깅에 대해서 최후의 수단이 되어야 한다. 왜냐하면, 자동적으로 두개의 시각화 결과를 비교하는 것은 매우 어렵다.

매번 실패하게 만들기 (Make It Fail Every Time)

실패할 때만 무언가 디버그할 수 있다. 그래서 두번째 단계는 항상 매번 실패하게 만드는 테스트 케이스를 찾는 것이다. “매번(every time)”이 중요한데, 이유는 간헐적인 문제를 디버깅하는 것보다 더 좌절을 주는 것이 없기 때문이다. 만약 한번의 실패를 만들기 위해서 12번 함수를 호출해야 한다면, 실패가 실제로 일어났을 때로 스크롤하여 실패를 찾는 것이 확률적으로 높다.

이것과 관련해서, 코드가 “연결되어 있는지(plugged-in)” 확인하는 것이 중요하다. 즉, 실제로 우리가 생각하기에 문제인 것을 다룬다. 모든 프로그래머는 버그를 쫓아서 몇시간을 보내는데 단지 잘못된 데이터나 잘못된 환경설정 매개변수에 코드를 호출하거나 완전히 잘못된 소프트웨어 버젼을 사용한 것을 깨단기 위해서다. 이와 같은 실수는 특히 피곤할 때, 좌절했을 때, 마감시한에 임박했들 때 발생할 듯 하다. 이런 이유로 밤 늦게 혹은 밤새도록 코딩을 하는 것은 거의 가치없어서 지양해야된다.

빨리 실패하게 만들기 (Make It Fail Fast)

만약 버그가 표면에 나오는데 20분 걸린다면, 한시간에 3회 실험을 할 수 있다. 이것이 더 많은 시간에 더 적은 데이터를 갖는다는 것을 의미하지 말아야 한다. 프로그램이 실패하기를 기다리면서 다른 것에 의해서 산만하게 더 될 듯하다. 이것은 프로그래머가 문제에 사용하는 시간의 집중도가 떨어진다는 것을 의미한다. 그러므로 빨리 실패하게 만드는 것(Make 최면 투자 규칙 It Fail Fast)이 매우 중요하다.

프로그램을 시간내에 빨리 실패하게 만드는 것 뿐만 아니라 공간적인 측면에서 프로그램을 빨리 실패하게 만들고 싶다. 즉, 가능하면 적은 코드 지역에 실패를 국지화하고자 한다.

원인과 결과 사이의 간격이 작으면 작을수록, 연결점을 발견하기는 더욱 쉽다. 그래서 많은 프로그래머는 버그를 찾기 위해서 분리 정복 전략(divide and conquer strategy)를 사용한다. 만약 함수의 출력이 잘못된다면, 중간에 있는 것이 OK 인지 점검하고 나서 앞쪽 혹은 뒤쪽에 점검하고 이를 반복한다.

N개는 N 2/2 다른 방식으로 상호작용한다. 그래서 테스트 부분으로 실행되지 않는 모든 코드 라인은 특별히 걱정할 필요가 없는 것 이상을 의미한다.

이유를 가지고 한번에 하나씩 변경하라.

임의의 코드 덩어리를 교체하는 것은 좋은 일을 하지 못할 것 같다. (결국, 처음에 잘못되면, 아마도 두번째 세번째도 잘못될 것이다.) 그래서 좋은 프로그래머는 이유를 가지고 한번에 하나씩 변경(change one thing at a time, for a reason)한다. 좋은 프로그래머는 좀더 정보를 수집(루프의 순서를 변경한다면 버그가 여전히 남아있을까?)하거나 고친 부분을 테스트(처리하기 전에 데이터를 정렬함으로써 버그를 없앨 수 있을까?)한다.

아무리 작을더라도 매번 변경을 할때마다, 즉시 테스트를 다시 돌려야한다. 왜냐하면 한번에 변경한 것이 더 많으면 많을수록, 무엇이 무엇에 (N 2 상호작용) 대해서 책임이 있는지 알아내기가 더더욱 힘들다.

그리고 모든 테스트를 다시 실행하게 된다면, 코드를 수정한 절반이상은 버그를 생성 혹은 재생성하게된다. 그래서 모든 테스트를 다시 실행을 통해서 회귀(regressed)했는지 즉, 이전 문제를 다시 발생하게 했는지도 알 수 있다.

작업한 것을 기록하라.

훌륭한 과학자는 작업한 것을 기록한다. 그래서 작업한 것을 다시 재생성할 수 있고 동일한 실험을 반복하거나, 결과가 신통지 못한 것을 다시 실행하는데 시간을 낭비하지 않는다. 마찬가지로, 디버깅도 작업한 것을 기록(keep track of what we’ve done)하고 어떻게 잘 동작했는지도 기록할 때 가장 잘 된다. 만약 여러분이 다음과 같은 질문을 한다면, 왼쪽에서 오른쪽으로 코드 라인 홀수가 시스템 충돌을 일으켰는지? 오른쪽에서 왼쪽이 충돌을 일으켰는지? 코드라인 짝수를 사용하다가 발생했는지?,
컴퓨터에서 잠시 떨어져서, 숨을 깊이 들이 마시고, 좀더 체계적으로 일을 시작해야하는 시간이다.

시간이 흘러 도움을 요청할 때 기록은 특히 유용하다. 명확하게 했던 것을 설명할 때 사람들은 좀더 귀를 기울여 듣는다. 그리고 사람들이 필요로 하는 유용한 정보를 좀더 잘 전달할 수 있다.

버젼 제어 (version control) 재방문

버젼 제어 (version control)는 종종 디버깅 동안 이전 특정 상태로 소프트웨어를 다시 원복하는데 사용된다. 그리고 버그와 연관된 코드 최근 변경을 사항을 탐색하는데도 사용된다. 특히, 대부분의 버젼 제어 시스템은 blame 명령어가 있어서 특정한 코드 라인에 누가 마지막에 변경을 했는지도 확인할 수 있다.

겸손하라 (Be Humble)

그리고, 도움을 말하라. 만약 10분내로 버그를 발견할 수 없다면, 겸손(be humble)하게 도움을 요청하라. 문제를 크게 설명하는 것만으로도 종종 도움이 된다. 왜냐하면, 생각하는 것을 듣는 것만으로도 일관되지 못한 것과 숨겨진 가정을 발견하는데 도움이 된다.

도움을 요청하는 것은 또한 확증 편향(confirmation bias)을 줄여준다. 만약 복잡한 프로그램을 작성하는데 한시간을 썼다면, 잘 동작하길 원해서 동작하지 않는 이유를 찾기보다는 왜 동작해야 하는지에 대해서 계속 본인 스스로에게 최면을 건다. 코드에 감정적으로 투자를 최면 투자 규칙 하지 않은 사람은 좀더 객관적일 수 있다. 이것이 왜 외부 사람이 간과한 간단한 실수를 종종 탐지하는 이유다.

겸손의 일부는 실수로부터 배우는 것이다. 프로그래머는 동일한 것을 반복해서 잘못하는 경향이 있다. 작업하는 언어와 라이브러리를 이해하지 못하거나, 프로그램이 어떻게 동작하는지에 대한 모델이 잘못된 것도 이유다. 어느 경우에나 왜 오류가 발생했는지 메모를 해두어 다음번에 점검하는 것이 실수를 다시 하지 않게 돌리는 빠른 방법이다.

그리고 이러한 방법이 장기적으로 좀더 생산적으로 여러분을 만든다. 외국 속담에 “한주의 노력은 한 시간의 생각을 절약해준다(A week of hard work can sometimes save you an hour of thought(는 말이 있다. 어떤 유형의 실수를 피하도록, 코드를 모듈화하고, 테스트할 수 있는 덩어리로 만들고, 모든 가정(혹은 실수)을 가정 설정문(assertion)으로 만든다면, 더 많이 만들지는 못하지만 동작하는 프로그램을 만드는데 더 적은 시간이 걸릴 것이다.

  • 방어적으로 프로그램하라. 즉, 오류가 발생한다고 가정하고 오류가 발생할 때 오류를 탐지하도록 코드를 작성하다.
  • 프로그램에 가정 설정문을 넣어서 프로그램이 실행될 때 상태를 점검하게 하라. 그리고 프로그램을 읽는 사람이 작성한 프로그램이 어떻게 동작을 하는 것인지 이해할 수 있도록 도움을 줘라.
  • 사전 조건을 사용해서 함수 입력값을 사용해도 안전한지 점검하라.
  • 사후 조건을 사용해서 함수 출력값을 사용해도 안전한지 점검하라.
  • 코드를 작성하기 전에 테스트를 작성해서 정확하게 코드가 무엇을 수행해야되는지 결정하도록 하라.
  • 코드를 디버그하기 전에 코드가 무엇을 수행해야하는지 파악하라.
  • 매번 실패하게 만들어라.
  • 빨리 실패하게 만들어라.
  • 이유를 가지고 한번에 하나씩 변경하라.
  • 작업한 것을 기록하라.
  • 겸손하라.

다음 단계

IPython Notebook으로 파이썬 코드를 작성하고 테스트하는 기초를 학습했다. 학습할 필요가 있는 마지막 것은 파이프라인과 쉘 스크립트에서 사용할 수 있는 명령-라인 프로그램을 어떻게 작성하는 것이다. 그렇게 함으로써 다른 사람이 작업한 것을 여러분의 도구와 최면 투자 규칙 통합할 수 있다. 이것이 다음 학습의 주제이며 마지막 학습이다.

한겨레/칼럼 복지재정 더욱 확대해야

정부·여당은 오는 2009년까지 복지예산을 연평균 9.3%씩 늘려 나가고 사회간접자본 투자 증가율은 1.6% 수준에 머물게 하는 결정을 한 바 있다. 이를 두고 “성장기반을 약화시키고 선심성 복지예산을 확대한” 결정이란 비판이 일부에서 일고 있다. 그러나 결론부터 말한다면 이 정도의 복지예산 확대 전망도 부족한 터에, 현재 우리 사회 내에서 일고 있는 비판은 다름아닌 양적 경제성장 중심의 사고, 복지와 경제의 선순환에 대한 몰이해, 현재의 사회적 위기상에 대한 나약한 이해 등에 기초한 발상이라고 말할 수 있다.

지금 우리에게는 새로운 패러다임과 사고의 틀이 요구된다. 짧은 압축성장 전략을 통해 산업사회를 통과해 온 우리지만, 이제 세계는 지구자본주의 시대로 전일화되었으며, 탈산업사회를 지나 기술과 인적자본이 중시되는 지식기반사회로 진입하고 있다. 이제 생산의 중심은 더 이상 물적 자본이 아니며 ‘사람’ 그 자체이다.

그러나 그동안 우리는 바로 사람을 경시하는, 사람의 문제들을 소홀히 여기는 발상에 익숙해져 왔다. 그로인해 실업자로 전락하여 노동 능력이 쇠잔해 가는 사람들, 폭력과 빈곤에 시달려 가출이나 이혼을 선택하는 사람들, 죄없이 어린 시절을 빈곤과 학대 속에 살며 삶의 희망을 일찍부터 꺾은 사람들, 똑같은 천부적 인권을 지녔지만 장애인이라는 이유로 우리 사회에 통합되어 살아가지 못하는 사람들, 젊음을 바쳐 근대화의 일꾼이 되었지만 이제 한 평 남짓한 공간에서 비참한 여생을 보내는 사람들… 이들에게 경제가 성장하면 해결된다는 집단 최면을 요구해왔고, 부족한 국가재원 때문에 어쩔 수 없는 일이라고 우리 스스로 합리화하며 온 것이 사실이다.

그렇지만 이제 이러한 ‘사람의 위기’는 이제 ‘사회의 위기’로 직결되고 있다. 그 위기의 진면목은 저출산으로 인한 노동 인구 자체의 감소와 사회보장의 부실로 인한 양질의 노동력 유지 실패로 압축된다. 이러한 절체절명의 위기 속에서 정부는 여전히 대책없는 ‘시멘트 재정’을 통해 엄청난 건물, 도로, 다리, 항만을 짓는 데에 열중하면서 ‘사람’의 문제를 등한히 해 온 것이 사실이다. ‘토목국가’라고 불릴 만큼 국가재정의 기조는 물적자본의 건설과 투자에 집착해 온 것이다. 이는 사회보장 지출비의 GDP 비중이 OECD 국가들 중 꼴찌라는 사실로도 명백히 증거되고 있다.

현재의 우리 사회는 복지의 확대가 경제의 발목을 잡는 것을 걱정할 것이 아니라 복지의 절대 부족이 경제성장의 잠재력과 동력을 훼손하는 상황을 걱정해야 할 것임에도 여전히 뒤바뀐 사고 속에서 복지의 확대를 선심성, 소비성, 경직성이란 수사로 훼절시키는 관성적 사고를 보이고 있다.

사실 정부에게 경제사업 예산을 확대하라고 하는 것은 시장주의적 사고에도 맞지 않는다. 경제는 민간에 맡기고 정부는 경기의 규칙을 정해 민간경제의 활성화를 도모해 주기만 하면 된다는 발상이 신자유주의적 사고의 핵심이다. 그렇지만 우리 사회내에는 이런 정통 신자유주의자가 없는지, 아직도 정부에게 시장 실패의 치유를 주문하기보다는 경제사업 자체를 주문하는 이가 많은 것은 또 하나의 사회의 후진성을 보여주는 것이 아닐까?

경제학계의 수많은 논문에서 복지와 경제가 상충한다는 것을 학문적 진리로 말하고 있지 않는데도 우리 사회에서는 이것이 하나의 도그마로 가고 있다. 그러나 경제와 복지가 선순환하는 해법을 찾아 사람이 살고 사회가 회생하는 미래를 만들어 가는 사고의 대전환이 요구된다. 이런 측면에서 복지에 대한 정부의 투자는 더욱 확대되어야 한다. (이태수/꽃동네현도사회복지대학교 교수)

최면 투자 규칙

1. 성인 1) 불안, 긴장 : 디아제팜으로서 중증인 경우 5-10mg, 경증 또는 중등도의 경우 2-5mg을 저맥 또는 근육주사합니다. 필요에 따라 3-4시간 후 반복 투여할 수 있습니다. 다만, 8시간이내에 30mg 이상을 투여하지 않습니다. 2) 골격근 경련의 완화보조제 : 이 약으로서 5-10mg을 정맥 또는 근육주사합니 다. 필요에 따라 3-4시간 후 반복투여할 수 있습니다. 파상풍에는 더 많은 양 이 필요할 수 있습니다. 3) 경련발작 또는 간질중첩상태의 치료보조제 : 이 약으로서 초회량 5-10mg을 정 맥주사하고 필요에 따라 10-15분 간격으로 최대 30mg가지 천천히 정맥주사합 니다. 잔류하고 있을 활성대사산물을 고려해야 하며 만성 폐질환환자 또는 불 안정한 심혈관상태의 환자에는 매우 신중히 투여합니다. 4) 마취전 투약 : 이 약으로서 수술전 10mg을 근육주사합니다. 5) 알코올 금단증상 : 이 약으로서 초회량 10mg을 정맥 또는 근육주사합니다. 필 요에 따라 3-4시간 후 5-10mg을 반복 투여할 수 있습니다. 6) 내시경 검사 : 이 약으로서 10mg 또는 그 이하의 양을 정맥주사합니다. 필요 에 따라 20mg 까지 증량할 수 있습니다. 정맥주사를 할 수 없으면 검사 30분 전에 5-10mg을 천천히 근육주사 합니다. 7) 심율동전환 : 이 약으로서 5-10분 전에 5-15mg을 천천히 정맥주사합니다. 2. 소아 원칙적으로 정맥주사하며, 정맥주사가 불가능한 경우에는 근육주사 할 수 있습니다. 1) 불안, 긴장 : 디아제팜으로서 체중 kg당 0.04-0.2mg을 정맥주사합니다. 필요에 따라 2-4시간 마다 반복 투여할 수 있습니다. 다만 8시간 이내 에 체중 kg당 0.6mg 이상 투여하지 않습니다. 2) 경련발작 또는 간질중첩상태의 치료보조제 : 1개월 이상의 영아와 5세 미만 의 유아는 이 약으로서 0.2-0.5mg을 2-5분 간격으로 최대 5mg까지 천천히 정맥주사 합니다. 5세 이상의 유, 소아는 1mg을 2-5분 간격으로 최대 10mg이 될때까지 천천히 정맥주사합니다. 필요에 따라 2-4시간마다 반복투여할 수 있습니다. 3) 파상풍에서의 경련 완화 : 이 약으로서 1개월 이상의 영아와 5세 미만의 유아 는 1-2mg을 천천히 정맥주사합니다. 필요에 따라 3-4시간 마다 반복투여할 수 있습니다. 5세 이상의 유, 소아는 5-10mg을 천천히 정맥주사합니다. 필요에 따라 3-4시간 마다 반복 투여할 수 있습니다. 근육주사시에는 심부에 투여하고 정맥 주사시에는 호흡보조장치가 준비되어 있어야 합니다. 세정맥에는 정맥주사하지 말고 동맥내 투여 또는 혈관외유출을 피하기 위해 신중히 투여합니다. 정맥 주사시에는 적어도 5mg/분 속도로 천천히주사하고 주사기내에서 다른 제제와 혼합해서는 안되며 정맥주사용액으로도 희석해서는 안됩니다.

1. 경고 1) 벤질알코올은 조숙아에게서 치명적인 가쁜 호흡증상과 연관이 있는 것으로 보고되었다.(벤질알코올 함유 제품에 한함) 2) 마약류와 벤조디아제핀계 약물의 병용투여 시 위험성 마약류와 이 약의 성분인 디아제팜을 포함한 벤조디아제핀계 약물의 병용투여는 진정, 호흡억제, 혼수상태 및 사망을 초래할 수 있다. 이러한 위험성 때문에, 마약류와 벤조디아제핀계 약물의 병용투여는 적절한 대체 치료방법이 없는 환자의 경우에 한하여 처방하도록 한다. 이 약과 마약류의 병용투여가 결정되면 최저 유효용량으로 최단 기간 처방하도록 하고 호흡억제 및 진정의 징후와 증상에 대해 환자를 면밀히 추적관찰 하도록 한다. 2. 다음 환자에는 투여하지 말 것 1) 급성 협우각형 녹내장 환자(항콜린작용에 의해 안압이 상승하여 증상이 악화될 수 있다.) 2) 중증의 근무력증 환자(근이완작용에 의해 증상이 악화될 수 있다.) 3) 이 약 또는 벤조디아제핀계 약물에 과민증 환자 4) 중증의 호흡부전 환자 5) 수면무호흡증후c군 환자 6) 알코올 또는 약물의존성 환자 7) 중증의 간부전 환자 8) 쇽, 혼수, 바이탈 사인이 나쁜 급성 알코올중독 환자(때때로 빈맥, 서맥, 혈압저하, 순환성 쇽이 나타날 수 있다.) 9) 4주 미만 신생아, 미숙아(벤질알코올 함유 제품에 한함) 3. 다음 환자에는 신중히 투여할 것 1) 심장애 환자(증상이 악화될 수 있다.) 2) 간·신장애 환자(배설이 지연될 수 있다.) 3) 뇌의 기질적 장애 환자(작용이 강하게 나타난다.) 4) 영·유아(작용이 강하게 나타난다.) 5) 고령자 또는 쇠약 환자 6) 우울증 환자 7) 중증의 환자 및 호흡 예비력이 제한된 환자(정맥주사시 무호흡, 심정지가 일어나기 쉽다.) 8) 척추성 또는 소뇌성 운동실조 환자 9) 알코올, 수면제, 진통제, 항정신병약, 항우울약, 리튬에 의한 급성 중독 환자 4. 이상반응 1) 의존성 : 벤조디아제핀계 약물치료에 의해 의존성이 일어날 수 있으며 장기간 투여 환자, 고용량 투여 환자, 특히 알코올 중독력 환자, 약물 남용력 환자, 인격장애 환자, 정신병 소인이 있는 환자에서 의존성 발생 위험성이 증가되므로 대상 질환을 충분히 고려한 후 투여하고 가능한 한 단기간 동안만 투여한다. 투여용량이 크고, 치료기간이 길수록 의존성 위험이 증가한다. 장기간 투여시에는 투여에 따른 유익성과 위험성을 면밀히 검토한 후 결정한다. 2) 금단증상 : 금단증상 발현시기는 투여중지 수시간 후부터 1주일 후 또는 그 이상으로 다양하며 진전, 불안정, 불면, 불안, 두통 및 집중력 결여 등이 나타날 수 있고 드물게 발한, 근육 및 복부 경련, 지각이상, 헛소리, 경련이 나타날 수 있다. 중증의 경우에는 비현실감, 이인증, 청각과민, 무감각, 사지저림, 광과민성, 잡음 및 신체적 접촉, 환각, 또는 간질경련이 발생할 수 있다. 금단증상이 나타나면 즉시 의사의 치료를 받도록 하며 급격한 투여중지를 피하고 점차적으로 감량하여 투여한다. 3) 반동적 불안 : 이 약의 투여가 필요한 증상이 강화된 형태로 다시 나타날 수 있다. 이러한 증상은 기분변화, 불안, 안절부절함 등의 반응을 동반할 수 있다. 치료를 갑자기 중단하는 경우 금단증상 및 반동증상의 위험이 증가되므로 용량을 단계적으로 감량하는 것이 권장된다. 4) 정신신경계 (1) 정신분열증 등의 정신장애자에 투여하면 오히려 불안, 흥분, 우울, 자극과민, 착란, 환각, 정신병, 기타 행동장애 등의 역설적 반응이 나타날 수 있으므로 관찰을 충분히 하고 이러한 증상이 나타나면 투여를 중지하고 적절한 처치를 한다. (2) 때때로 졸음, 휘청거림, 어지러움, 보행실조, 두통, 요실금, 언어장애, 드물게 진전, 다행증, 실신이 나타날 수 있다. 5) 눈 : 안구진탕, 시력불선명 등 시력장애가 나타날 수 있다. 6) 혈액 : 때때로 백혈구감소, 과립구감소, 혈액이혼화증 등이 나타날 수 있으므로 관찰을 충분히 하고 이상이 인정되는 경우에는 투여를 중지하는 등 적절한 처치를 한다. 7) 간장 : 때때로 황달, 드물게 ALT, AST, ALP의 상승 등이 나타날 수 있으므로 관찰을 충분히 하고 이상이 인정되는 경우에는 투여를 중지하는 등 적절한 처치를 한다. 8) 순환기계 : 때때로 빈맥, 서맥, 혈압저하, 순환성 쇽 등이 나타날 수 있으므로 관찰을 충분히 하고 이상이 인정되는 경우에는 투여를 중지하는 등 적절한 처치를 한다. 9) 소화기계 : 때때로 구역, 구토, 식욕부진, 위장장애, 변비, 구갈, 타액분비의 변화 등이 나타날 수 있다. 10) 과민증 : 발진 등의 증상이 나타날 수 있으므로 이러한 경우에는 투여를 중지한다. 11) 호흡기계 : 때때로 설근침하에 의해 상기도 폐색이 나타날 수 있다. 만성 기관지염 등의 호흡기 질환에 사용하는 경우 호흡억제가 나타날 수 있으므로 관찰을 충분히 하고 이상이 인정되는 경우에는 투여를 중지하는 등 적절한 처치를 한다. 12) 기타 : 때때로 권태감, 무력감, 부종, 황달, 성욕의 변화, 요폐, 요실금, 뇌파의 변화가 나타날 수 있다. 13) 전세계의 시판 후 보고에서 다음과 같은 이상반응이 보고되었다. - 가장 빈번하게 발생한 이상반응은 피로, 기면, 근육약화였으며 대부분 용량 의존적이었다. 이러한 증상은 치료 시작시에 우세하게 나타났으며, 투여가 지속되면서 대부분 소실되었다. - 신경계 장애 : 조화운동불능, 말더듬증(dysarthria), 불분명한 발음(slurred speech), 두통, 떨림(tremor), 현기증. 치료용량에서도 전향기억상실이 발생할 수 있으며, 고용량일수록 발생 위험이 증가한다. 기억상실은 부적절한 행동을 동반할 수 있다. - 정신장애 : 벤조디아제핀계 약물 복용시 안절부절함, 초조함, 과민성, 공격성, 망상, 분노, 악몽, 환각, 정신병, 부적절한 행동과 다른 이상 행동 등의 역설적 반응이 발생하는 것으로 알려져 있다. 이러한 증상이 발생한 경우에는 이 약물의 복용을 중단해야하며, 이러한 증상은 소아 및 고령자에서 더 발생할 것으로 보인다. 착란 상태, 정서 결핍, 각성도 감소, 우울증, 성욕 증가 또는 감소 만성 복용할 경우(치료용량 복용도 포함) 신체적 의존성을 초래할 수 있다. 치료 중단은 금단 증상 또는 반동증상을 일으킬 수 있다. - 상해, 중독 및 적용상 합병증 : 벤조디아제핀계 약물을 복용하는 경우 추락 및 골절이 보고되었다. 진정제(알코올성음료를 포함)를 병용 투여하거나 고령자인 경우 위험성이 증가하였다. - 위장관계 장애 : 구역, 입마름 또는 과다침분비, 변비 및 다른 위장관계 장애 - 시각 장애 : 복시, 흐린 시력 - 혈관 장애 : 저혈압, 순환 억제 - 조사 : 불규칙한 심박율, 매우 드물게 아미노기 전이효소(Transaminases) 증가, 혈액 알칼리 포스파타아제(alkaline phosphatase) 증가 - 신장 및 요로계 장애 : 실금, 요폐 - 피부 및 피하조직 장애 : 피부반응 - 귀 및 미로 장애 : 어지러움 - 심장 장애 : 심정지를 포함하는 심부전증 - 호흡기계 장애 : 호흡부전을 포함하는 호흡억제 - 간담도계 장애 : 매우 드물게 황달 5. 일반적 주의 1) 졸음, 주의력·집중력·반사운동능력 등의 저하가 일어날 수 있으므로 이 약을 투여중인 환자는 자동차운전 등 위험을 수반하는 기계조작을 하지 않도록 주의한다. 2) 결신발작간질치료시 이 약을 정맥주사하는 경우 강직성 간질중첩상태가 촉진된다. 3) 벤조디아제핀계 약물을 정신병의 1차 선택약물로 사용하지 않는다. 4) 벤조디아제핀계 약물을 우울증이나 우울성 불안에 단독으로 사용할 경우 자살경향이 증가할 수 있으므로 신중히 투여한다. 5) 일반적인 항불안효과를 목적으로 사용할 때에는 가능한 한 단기간 투여한다. 많은 경우 총 치료기간은 4-12주를 넘지 않도록 해야하며 장기간 투여가 필요한 경우 정기적으로 환자의 증상을 재평가한 후 투여한다. 투여를 중지할 경우에는 점진적으로 감량한다. 6) 장기간 치료시에는 혈액검사, 간기능검사 및 요검사를 정기적으로 한다. 7) 만성호흡부전환자에서 호흡억제 위험이 있으므로 이 약을 저용량으로 투여하는 것이 권장된다. 8) 벤조디아제핀계 약물 복용시 안절부절함, 초조함, 과민성, 공격성, 망상, 분노, 악몽, 환각, 정신병, 부적절한 행동과 다른 이상 행동 영향이 발생하는 것으로 알려져 있다. 이러한 증상이 발생한 경우에는 약물 복용을 중단해야 한다. 9) 기억상실증 : 이 약 또는 벤조디아제핀계 약물은 전향기억상실증을 유발 할 수 있다. 권장용량을 투여하는 경우에도 발생할 수 있으며, 고용량 투여시 발생 위험이 증가한다. 기억상실증은 이상행동을 동반 할 수 있다. 10) 이 약을 장기간 반복 투여할 경우, 벤조디아제핀계 약물에 대한 반응 감소가 나타날 수 있다. 11) 갈락토오스 불내성에 대한 유전적 소인이 있는 환자(Lapp lactase 결핍증 또는 글루코오스-갈락토오스 흡수장애)는 이 약을 복용해서는 안된다. 12) 이 약은 알코올/중추신경억제제와의 병용투여를 피해야 한다. 이러한 병용투여로 인하여 중증 진정작용, 임상적으로 유의한 호흡기계 및/또는 심혈관계 억제를 포함하는 이 약의 임상효과가 증강될 수 있다. 13) 알코올 또는 약물 남용의 병력이 있는 환자의 경우에는, 이 약을 매우 신중하게 투여해야 한다. 알코올 및 중추신경억제제에 대한 의존성이 있는 환자는 이 약의 복용을 피해야 하며, 급성금단증상을 위한 경우는 예외로 한다. 6. 상호작용 1) 약력학적 약물상호작용 : - 항정신병약, 항불안제/진정제, 항우울제, 수면제, 항간질약, 마약성 진통제, 마취제, 항히스타민제, 알코올과 같은 중추작용억제제와 이 약을 병용하는 경우에는 진정, 호흡, 혈역학에 대한 영향이 증강될 수 있다. 이 약을 복용하는 환자는 알코올 섭취를 삼가야 한다. - 다음 약물과의 병용, 또는 알코올 섭취에 의하여 이 약의 작용이 증강될 수 있으므로 이러한 경우에는 투여를 중지하는 것이 바람직하나 부득이하게 투여해야하는 경우에는 신중히 투여한다. : 페노치아진계 약물, 바르비탈계 약물, 항우울약, 진정최면약, 마약성 진통제, 마취제, 항히스타민제. 특히, 바르비탈계 약물, 알코올 또는 기타 중추신경억제제와의 병용은 무호흡 위험의 증가와 함께 심장 또는 폐기능을 억제시키므로 인공호흡기 등 소생 기구를 비치하여 만약의 사태를 대비한다. 2) 이 약을 포함한 벤조디아제핀계 약물과 마약류의 병용투여는, 상가적인 중추신경계 억제 효과로 인해 진정, 호흡억제, 혼수상태 및 사망의 위험성을 증가 시킨다. 벤조디아제핀계 약물과 마약류의 병용투여 시 투여용량 및 투여기간을 제한하도록 한다. 3) 약동학적 약물상호작용 : - 이 약은 시토크롬 P450 동종효소인 CYP2C19 및 CYP3A를 매개로 하는 산화적 대사를 통하여, N-desmethyldiazepam, 3-hydroxydiazepam(tenazepam), oxazepam의 형태로 전환된다. In-vitro 시험에서 보여주듯이, 수산화반응은 주로 CYP3A를 매개로 하며, N-desmethylation은 CYP3A 및 CYP2C19를 매개로 진행된다. 사람을 대상으로 한 in-vivo 연구 결과는 in-vitro 시험 결과를 확실히 뒷받침하였다. - 결론적으로, CYP3A 및/또는 CYP2C19의 조절자인 기질은 이 약의 약동학을 변화시킬 수 있다. 시메티딘, 케토코나졸, 플루복사민, 플루옥세틴, 오메프라졸과 같은 CYP3A 또는 CYP2C19 저해제에 의하여 진정작용이 증강되고, 연장될 수 있다. 4) 디설피람과 병용투여하는 경우 이 약의 혈중 농도가 증가할 수 있으므로 신중히 투여한다. 5) 레보도파와 병용투여하는 경우에는 신중히 투여한다. 6) 벤조디아제핀계 약물과 디곡신을 병용투여시 디곡신의 신배설이 감소될 수 있으므로 신중히 투여한다. 7) 염산마프로틸린과의 병용으로 중추신경억제작용이 증강될 수 있고 병용중 이 약을 급속히 감량 또는 중지하면 경련발작을 일으킬 수 있다. 8) 단트롤렌나트과 병용투여시 상호 근이완작용을 증강시킬 수 있다. 9) 시사프리드와 병용에 의해 경구용 벤조디아제핀계 약물의 흡수가 촉진되어 진정효과가 증강되므로 신중히 투여한다. 10) 페니토인의 대사를 저해하여 항경련작용을 증강시킬 수 있다. 11) 다른 벤조디아제핀계 약물을 병용투여하는 것은 약물의존성의 위험성을 증가시킬 수 있다. 7. 임부 및 수유부에 대한 투여 1) 임신중에 이 약을 투여받은 환자중에서 기형아 등의 장애아를 출산했다는 예가 대조군에 비하여 유의하게 많다는 역학적 조사 보고가 있으므로 임부(3개월 이내) 또는 임신하고 있을 가능성이 있는 부인에는 투여하지 않는다. 2) 신생아에 포유곤란, 근긴장 저하, 기면, 황달의 증강 등의 증상을 일으키고 태반통과성이 추정되므로 임신 후기의 부인에는 투여하지 않는다. 또한 분만시에 정맥주사한 경우에 sleeping baby가 보고되었다. 3) 분만전에 연용한 경우 출산후 신생아에 금단증상(신경과민, 진전, 과긴장 등)이 나타나는 경우가 있다. 4) 모유중으로 이행하여 신생아에 기면, 체중감소 등을 일으킨 경우가 있고 또한 황달을 증강할 가능성이 있으므로 수유부에의 투여는 피하는 것이 바람직하지만 부득이하게 투여하는 경우에는 수유를 중단한다. 5) 이 약 또는 벤조디아제핀계 약물을 임신기간 동안 지속적으로 복용하는 경우에는 신생아에게 저혈압, 호흡기능 저하 및 체온저하를 일으킬 수 있다. 8. 고령자에 대한 투여 고령자에서는 운동실조, 과진정 등의 이상반응이 나타나기 쉬우므로 소량부터 투여를 시작하는 등 신중히 투여한다. 9. 과량투여시의 처치 1) 벤조디아제핀계 약물은 기면, 조화운동불능, 조음곤란, 안구진탕을 흔히 유발한다. 이 약을 단독으로 과량 투여했을 경우에는 거의 치명적이지는 않지만 무반사, 무호흡, 저혈압, 심장호흡기계 억제, 혼수를 일으킬 수도 있다. 혼수가 발생한 경우에는 단 몇시간 정도만 지속되기도 하지만, 특히 고령자에서는 지속시간이 연장되거나 주기적으로 발생할 수 있다. 벤조디아제핀계 약물의 호흡억제작용은 호흡기계 질병이 있는 환자에서 좀 더 심각한 영향을 미친다. 벤조디아제핀계 약물은 알코올 등의 중추신경계 억제제의 영향을 증가시킨다. 2) 과량투여시 중추신경억제작용이 크게 증강되어 착란, 깊은 수면, 근무력감, 반사장애, 건망증 등이 나타난다. 이러한 경우 위세척, 환자의 모니터링, 호흡기계 및 심혈관계의 통상적 처치방법 등으로 치료한다. 환자의 vital sign을 모니터하고 환자별 임상상태에 따라 보조적 처치를 실시한다. 특히 심폐기능 및 중추신경계 영향에 대해서는 대증요법이 요구 될 수 있다. 3) 과량 투여시 1~2시간 이내에 활성탄 치료 등 적절한 방법을 사용하여 흡수 증가를 예방 할 수 있다. 활성탄을 사용하는 경우, 의식이 흐릿한 환자는 기도 보호가 필수적으로 요구된다. 그러나, 혼합하여 복용하는 경우 일반적이지는 않으나 위세척이 고려될 수 있다. 4) 이 약을 과량투여한 경우 또는 과량투여가 의심되는 경우 벤조디아제핀 수용체 길항제인 플루마제닐 사용을 고려하며, 면밀한 모니터링 하에서만 투여해야 한다. 플루마제닐은 짧은 반감기(약 1시간)를 가지므로 플루마제닐을 투여받은 환자는 그 효과가 없어진 이후에도 모니터링이 요구된다. 플루마제닐은 발작 역치를 감소시키는 약제(예, 삼환계항우울제)를 복용하는 환자에서 매우 신중하게 투여해야 한다. 플루마제닐로 처치 할 때는 플루마제닐에 의한 발작의 위험성을 고려하고 사용전에 반드시 플루마제닐의 사용상의 주의사항(“투여금기”, “신중투여”, “상호작용”항 등)을 읽는다. 10. 적용상의 최면 투자 규칙 주의 1) 투여경로 (1) 경구투여가 곤란한 경우나 긴급한 경우, 또한 경구투여로 효과가 불충분하다고 생각되는 경우에만 사용한다. 경구투여가 가능해져 효과가 충분하다고 판단되는 경우에는 즉시 경구투여로 전환한다. (2) 투여경로는 정맥주사를 원칙으로 한다. (3) 이 약은 근육주사시 흡수가 불규칙하다. (4) 이 약을 근육주사시 혈청 크레아티닌 포스포키나제 활성이 증가할 수 있으며, 주사 후 12시간에서 24시간 사이에 최고치를 나타낸다. 따라서 심근경색의 진단시 동 사항이 고려되어야 한다. 2) 최면 투자 규칙 투여방법 (1) 급속히 정맥주사한 경우 또는 세정맥내에 정맥주사한 경우에는 혈전성정맥염을 일으킬 수 있다. (2) 동맥내에 주사한 경우에 말초괴사, 정맥혈전증, 정맥염, 국소자극감, 종창을 일으킬 수 있으므로 동맥내에 주사해서는 안된다. (3) 투여부위 : 정맥주사시 혈관통, 근육주사시에는 주사부위통, 경결이 일어날 수 있다. (4) 배합변화 : 다른 주사액과 혼합 또는 희석하여 사용하지 않는다. 11. 기타 투여한 약물이 특별히 정해지지 않은 상태에서 플루마제닐을 투여받은 환자에게 새로 이 약을 투여할 경우 이 약의 진정·항경련 작용이 변화 또는 지연될 수 있다.

서울특별시 성동구 천호대로 386
전화번호 : 02-2204-7000 / FAX : 02-3436-4878
Copyright© Daewon Pharmaceutical Co., Ltd. All rights reserved.

책 심리투자 법칙 리뷰 모음

사람들은 더 많은 돈을 불리기 위해 투자를 한다. 투자에 방법에는 여러 가지가 있지만 부동산, 주식, 예금 등이 있다. 예금은 어떻게 보면 가장 안전적인 투자방법인 대신에 수익률이 낮다. 이에 비해 주식은 조금 공격적이기는 하나 잘 투자하면 높은 수익률을 올릴 수 있다. 이런 주식시장에서는 심리적 요소가 크게 작용하는 것 같다.

이번에 읽은 재테크에 있어서 필요한 것은 심리 투자 법칙은 주식시장에서 발생하는 여러 심리적인 상황을 구체적으로 설명하고 제대로 주식투자를 할 수 있는 방법을 제시해주고 있다.

저자는 주식시장에서의 성패는 결국 ‘심리의 문제’라고 하면서 심리 요소를 어떻게 활용하고 대응하느냐에 따라 수익률이 달라진다고 한다. 이 책은 자기 자신의 심리와 군중의 심리를 면밀히 분석해주고 있어서 실전투자를 하는데 있어 매우 유용하게 활용할 수 있을 것 같은 생각이 들었다. 저자는 시장에서 성공하기 위해 ‘심리’를 중시해야 하며 가장 기본적인 지표인 주가와 거래량뿐 아니라 이동평균, 모멘텀, 스토캐스틱 등 시장을 분석하기 위해 사용되는 모든 지표에도 심리가 깔려 있다고 한다. 이런 심리적인 작용이 결국 시장을 상승이냐 하락이냐를 결정짓는다고 한다.

주식시장의 가격은 심리적인 사건이고 가격과 거래량의 패턴은 시장의 대중심리를 반영한다고 한다. 또한 차트에 있는 모든 패턴 뒤에는 다수의 트레이더들이 있으며 시장가격은 시장의 조용한 시기에는 작은 증감을 보이지만 대중이 겁을 먹거나 탐욕이 개입되면 가격은 급격하게 뛰기 시작한다. 이런 금융시장에서 대중심리의 움직임을 연구하고 매수세와 매도세 사이에 균형을 발견하고 승리하는 그룹에 돈을 거는 건다는 사실도 알게 되었다.

조금 뚜꺼운 책이라 많은 내용이 있지만 저자가 핵심적으로 가르키는 것은 시장의 심리적 상황을 잘 파악하여 시장에서 진입과 진출시키를 적절히 조절하라는 것이다. 언제 들어가도 언제 빠져나오느냐가 성패가 갈린다는 것은 누구나 아는 사실이지만 그것을 분석하여 행동으로 실천한다는 것은 쉬운일이 아니며 심리 요소를 잘 파악해두는 것이 중요하다고 계속 강조하고 있다. 주식 시장의 가격과 거래량은 결국 대중의 행동을 반영하는 것이므로 이런 대중들의 행동들을 유심히 지켜보는 것이 중요하다고 생각한다. 이 책을 통해 주식 투자의 심리에 관련된 여러 가지 법칙을 터득하여 정말 유익했던 것 같다.

황소와 곰 중 어느쪽에 베팅할 것인가.

주식, 주식 시장, 아직 많은 사람들이 꿈을 꿀 수 있는 곳, 주식에 들어서게 된 인연은 각자 다를 것이다. 부모님의 권유로, 모임에서 주식이야기로 등, 책의 프롤로그에서 저자는 자신이 어떻게 주식시장과 인연을 맺고, 들어서게 되었는지 이야기한다. 그러다보면 내가 어떻게 주식시장에 손을 집어넣게 되었는지 잊고 있었다. 자세히 생각해보니, 그저 주식에 관심이 있어서 부모님에게 주식 사고 싶다는 이야기를 계기로 내 주식을 갖게 되었던 것 같다. 지금은 어느새 스스로 주식에 관한 책들을 읽게 되고, 공부하게 되고, 어느새 심리투자법칙이란 책 까지 읽고 있으니, 뿌듯하면서도 왠지 점점 더 주식은 내 손에서 멀어져가는 것 같다. 모르는 때가 제일 재밌었던 것 같기도 하다. 심리적으로 분석한 이야기는 드물다. 성공적인 트레이딩에 관한 책은 많아도, 심리적으로 이렇게 두껍게 묶어놓은 책은 없었던 것 같다. 저자는 성공적인 트레이닝을 위해서는 심리, 시장 분석 및 트레이딩 시스템, 자금관리를 꼽았다. 이 세가지를 이 책에서 다뤘다. 개인 심리로 시작하는 이 책의 내용에서는, 저자가 정신과의사로 일하면서 발견한 방법으로 트레이딩 실적에 도움이 많이 된단다. 시장의 군중심리, 차트 패턴으로 집단 행동을 살피는 법, 컴퓨터를 활용한 기술적 분석 방식, 거래량과 미결제약정, 시장에서 시간의 흐름, 주식시장을 분석하는 최고의 기법, 투자자와 트레이더의 여론을 측정하는 심리지표, 저자가 개발한 엘더레이와 강도지수, 트레이딩 시스템, 마지막으로는 자금관리를 중점으로 다루었다. 트레이딩을 한다는 것은 상당한 지식과 기술을 요한다. 왠만한 사람으로는 어림도 없는 것 같다. 이 책을 읽은지 어언 2주, 하지만 아직 반도 못 읽었다. 저자는 읽으면서 자신의 아이디어를 시험해보라고 했다. 그의 말을 항상 생각하면서 책을 읽는다. 이건 이렇게 활용해볼 수 있을 것 같다는 것도 있었고, 처음 듣는 이야기도 있었고(사실 대부분이 그렇다.), 그래도 나름 투자에 대한 책을 많이 읽어왔는데, 아직 내 식견이 이렇게 짧구나란 생각도 들고, 한숨도 푹푹 쉬어가면서도, 놓을 수가 없었다. 정말 두꺼운 만큼 다양하고 방대한 지식을 쌓을 수 있다는 믿음때문이었는지 모른다. 말 그대로 트레이딩은 정보 전쟁이다. 컴퓨터가 어떤 역할을 하는지, 어떻게 노력해야하는지를 단계별로 하나하나 설명하고 있다. 일반적인 많은 사람들이 볼 수 있는 책은 아니다. 토익 토플책처럼 많은 젊은이들이 꼭 읽어야하는 책도 아닌 것 같다. 하지만 트레이딩에 대해 심도 있게 펼쳐놓은 것을 보면 주식에 관심이 있고, 투자에 관심이 있는 모든 사람들이 공부해봐야할 책이 아닐까 싶다. 분명 쉽지 않다. 그래서 왠지 더 재밌게 느껴지는 책이었다. 무언가 성취감도 뿌듯함도 많이 느껴볼 수 있을 것 같다. 시장과 사람의 심리로 정신없는 경제혼란기에 사람들이 어떻게 방향을 설정해야하는지를 배워보고 싶다면 한번 읽어보라고 추천해주고 싶다.

자신의 잣대로 뽑아놓은 종목만을 거래하거나 자신이 정한 룰이나 규칙에 따라 매수하고 매도한다. 주식은 심리게임이다. 그래서 정해놓은 규칙이 없다면 군중 심리에 휩싸여 뇌동매매를 하기 쉽다. 경제가 예측하기 어려운 이유는 통상적인 원칙대로 움직이지 않기 때문인데 그 가장 큰 이유는 인간의 심리가 작용하기 때문이다. 주식도 마찬가지로 경제의 한 분야이기 때문에 인간의 심리가 작용한다.

'주식은 심리게임이다'라는 말은 맞다. 시장의 매기는 '사고 싶다' '팔고 싶다'의 원초적인 심리로 인해 이동하고 '과열과 침체'로 인해 고점과 저점을 형성한다.

이 책의 저자는 세계적으로 손꼽히는 트레이더인 '알렉산더 엘더 박사는 세계의 대표적인 기술적 분석가인 동시에 정신과 개업의이며 파이낸셜 트레이딩 사의 창립자이기도 하다. 정신과 의사로서의 경험 덕분에 거래심리를 꿰뚫어보는 독특한 통찰력을 얻게 되었으며, 그가 개발한 수많은 지표에는 심리분석이 바탕이 되어 있다.

저자는 먼저 심리적 원칙들을 검토한 뒤 저자가 아끼는 분석 도구들에 대해 설명한다

먼저 정신은 거래 심리를 말하고, 기법은 거래할 주식을 찾고 시장에 들어갈지 나올지를 결정하는 방법을 말하며, 돈은 장기적 생존과 성공을 위한 거래자본의 관리를 의미한다. 가치투자와 기술투자는 접근법의 차이일 뿐이지 이들 세 가지는 주식을 사고 팔 때 어떤 식으로든 거쳐야할 경로이다. 이 책은 바로 이 세가지를 골고루 다루고 있으며 저자는 투자심리를 바탕으로 한 지표들의 실전 활용방법을 통해 모든 기법을 공개하고 있다.

시장에서는 언제나 패닉바잉(Panic Buying)으로 고점이 형성되고 패닉셀링(Panic Selling)으로 인해 저점이 형성된다. 먼저 트레이더로서 감정을 제어하는 새로운 방식을 다루고 있다. 지지와 저항이 존재하는 것은 인간에게 기억이 있기 때문이다. 기억이 우리를 자극하기 때문에 일정 수준에서 매수하고 매도하게 된다. 트레이더들은 최근 일정 수준에서 주가 하락이 최면 투자 규칙 멈추고 상승세로 돌아섰다는 사실을 기억한다. 따라서 그들은 주가가 다시 그 수준 가까이 가면 매수에 나선다는 것이다.

저자는 성공적인 주식투자를 위해서는 '심리', '시장분석' 및 '트레이딩 시스템'이라는 중요한 세가지를 알고 있어야 한다고 강조하고 있다. 이를 다르게 분류해보면 정신(Mind), 기법(Method), 돈(Money)으로 나타내어 3M법칙으로도 불리고 있는 저자의 방법을 터득해 실전에 임한다면 좀더 자신감있게 주식시장에서 승리할 수 있을것 같다.

저자는 성공적인 트레이딩을 하려면 심리, 시장분석및 트레이딩 시스템, 그리고 자금관리가 필요하다고 주장한다. 이것이 이 책의 핵심이며 주식투자의 핵심이다.

이 책에서는 트레이더 본인의 심리를 다스리는 법에서부터, 군중심리를 이해하고, 그것을 이용해 트레이딩에서 수익을 올리는 요령 또한 알려준다..

개인의 심리는 이성적이며 종잡을 수 없다..하지만 군중 심리는 보다 단순하며 비이성적이어서 빈번하게 패닉에 빠지며 분위기에 휩쓸려 급변하곤 한다.

기술적 분석은 일종의 응용 사회심리학이라고 할수 있다. 기술적 분석의 목표는 집단행동이 추세와 변화를 감지해 이성적인 트레이딩 결정을 하는 것이다. 매수자들이 강렬한 감정을 느낄때가 언제인지, 그리고 매수자들이 힘을 잃을 때가 언제인지를 밝혀내는 것이 기술적 분석가의 의무이다.

저자는 이 책에서 차트상에 나타나는 현상의 이면에 있는 군중 심리를 자세하게 설명해 주고 있다.

또한, 아무리 뛰어난 트레이더라도 100%성공을 확신할 수 없기에 손실제한에 대해서도 꾸준히 강조하고 있다.

엘더-레이,강도지수등 저자가 고안한 독특하고도 유용한 지표들도 있지만, 이 지표들을 사용하고 말고는 독자 스스로가 판단해야 할 최면 투자 규칙 것같다..

주식투자에 정답은 없다고들 한다. 하지만 군중의 심리를 살펴야 하고 그에 따라 매매해야 한다는것은 확실한 진리이다..

이책은 조잡한 기술서가 아니다. 따라하기만 한다면 대번에 대박을 준다는 번지르한 말로 혹세무민하지도 않는다. 꾸준함이 부족하고 단기간에 대박을 꿈꾸는 독자라면 중간에 읽기를 포기할지도 모른다.

하지만, 주식시장을 꿰뚫는 통찰을 배우고 싶고, 세계에서 손꼽히는 트레이더는 시장을 어떻게 분석하며, 어떤 식으로 매매하는지 배워서, 자신의 매매시스템를 보다 발전시키고자 한다면 꼭 읽어봐야 할 책이다..


0 개 댓글

답장을 남겨주세요