# pyenv 
0. 환경
- centos 7.4

1. 설치 및 설정하기
- yum 을 이용한 설치
- ```
  # 사전 설치목록
  $ yum install -y  gcc gcc-c++ make git patch openssl-devel zlib-devel readline-devel sqlite-devel bzip2-devel
  $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
      ```
    - 환경변수에 선언해두기 (.bashrc 파일에 추가)
    - ```
  # pyenv path
  export PATH="$HOME/.pyenv/bin:$PATH"

  eval "$(pyenv init -)"
  eval "$(pyenv virtualenv-init -)"
  ```

2. pyenv 확인하기
- 사용가능한 pyenv 목록 확인하기
- ```
      [centos@centos ~]$ pyenv versions
      * system (set by /home/centos/.pyenv/version)
        3.6.5
  ```
- pyenv 변경하기
- ```
      [centos@centos ~]$ pyenv global 3.6.5
      [centos@centos ~]$ pyenv versions
        system
      * 3.6.5 (set by /home/centos/.pyenv/version)
      
      # 해당 shell 에서만 동작시키고 싶다면
      $ pyenv shell 3.6.5
  ```
    - pyenv 실행하기 및 종료하기
- ```
  [centos@centos ~]$ pyenv activate 3.6.5
  [centos@centos ~]$ pyenv deactivate
  ```

Posted by 감각적신사
,

Django + Apache 연동하기

  • 참고 URL

  • 웹서버와의 연동 필요성:

    • Django 의 runserver 기능은 개발의 편의를 위해 테스트 목적으로 제공되는 기능이다
    • Django 측에서도 실제 서비스 환경에서는 runserver 기능을 이용하는 것을 권장하지 않는다
      • 안정성과 성능 측면을 고려하지 않은 기능이기 때문이다
      • multi threading 처리도 불가하다
      • audit 기능과 같은 보안에 관련된 기본 설정도 불가하다
  • 테스트 환경

    • centos 7.5
    • python2.7.10
    • Django 1.11.15
    • apache 2.4
  • apache 설치

    • apache 2.4 다운로드 페이지 접속
    • 다운로드 목록
      • Httpd 2.4.35
      • Apache APR(Apache Portable Runtime) 1.6.5
      • Apache APR Util 1.6.1 (https://apr.apache.org/download.cgi)
      • PCRE(Perl Compatible Regular Expressions) 8.39 (ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/)
    • 다운로드 압축 해제
      $ tar xvfz httpd-2.4.35.tar.gz
      $ tar xvfz apr-1.6.5.tar.gz
      $ tar xvfz apr-util-1.6.1.tar.gz
      $ tar xvfz pcre-8.38.tar.gz
      
    • 컴파일 전 디렉토리 구조 정리
      {{ apache_home }}/httpd-2.4.35
          ㄴ srclib
                ㄴ apr       # apr-1.6.5 압축 해제한 것을 옮긴다
                ㄴ apr-util  # apr-util-1.6.1 압축 해제한 것을 옮긴다
      
    • 컴파일
      $ make && make install
      
    • 컴파일 후 apache 디렉토리 구조
      {{ apache_home }}/httpd-2.4.35  # 컴파일 실행했던 디렉토리
      {{ apache_home }}/apache2       # 컴파일에 의해 생성된 디렉토리
                          ㄴ bin
                          ㄴ conf
                          ㄴ ...
      
    • 설정 변경
      $ vi {{ apache_home }}/conf/httpd.conf
      # ServerName 127.0.0.1
      # Listen 8080   << 80 은 root 에게 부여되는 port 라 8080 으로 변경함
      
    • 실행
      $ {{ apache_home }}/apache2/bin/apachectl start (graceful)  # graceful 은 stop & start
      
  • django 프로젝트 생성

  • 연동하기

    • mod_wsgi 패키지 설치
      • 웹서버에서 받은 요청을 django 같은 python application 으로 전달해주는 interface 역할을 하는 패키지
        $ sudo yum search mod_wsgi
        $ yum install mod_wsgi      # search 목록에서 python 버전에 맞는 것을 설치한다
        
    • 아파치 설정 추가하기

      $ vi {{ apache_home }}/conf/httpd.conf
      
      # 접근 권한 추가
      <Directory />
          Require all granted
      </Directory>
      
      # django 프로젝트 연결
      <VirtualHost *:8080>
          Alias /static/ {{ django_project_path }}/static/
          <Directory {{ django_project_path }}/static>
              Order allow,deny
              Allow from all
          </Directory>
      
          WSGIScriptAlias / {{ django_project_path }}/{{django_project_app}}/wsgi.py
          <Directory {{ django_project_path }}/{{django_project_app}}>
            <Files wsgi.py>
                    Order allow,deny
                    Allow from all
            </Files>
          </Directory>
      </VirtualHost>
      
      # wsgi 패키지 로드
      LoadModule wsgi_module      /usr/lib64/httpd/modules/mod_wsgi.so
      
    • django 프로젝트에 wsgi.py 파일 추가

      $ vi {{ django_project_path }}/{{django_project_app}}/wsgi.py
      
      import os, sys
      
      path = os.path.abspath(__file__+'/../..')
      
      if path not in sys.path:
          sys.path.append(path)
      
      from django.core.wsgi import get_wsgi_application
      
      os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project_app.settings")
      application = get_wsgi_application()


Posted by 감각적신사
,


  • 참고 URL:

  • 이벤트 루프 란?

    • 자바스크립트는 단일 스레드 기반의 언어 이다 == 동시에 하나의 작업만 가능하다
    • 이벤트 루프는 이런 환경에서 동시성을 지원하는 방식을 말한다
  • 자바스크립트가 동작하는 환경

    • 브라우저
      • 이미지 참고
      • setTimeout, XMLHttpRequest 함수는 JS 엔진 외부인 Web API 영역에 정의되어 있다
    • Node.js
      • 이미지 참고
      • libuv 라이브러리 에서 이벤트 루프를 제공한다
  • 샘플 코드와 호출 순서 분석

    function printHello() {
      console.log('Hello from baz');
    }
    function baz() {
      setTimeout(printHello, 3000);
    }
    function bar() {
      baz();
    }
    function foo() {
      bar();
    }
    foo();
    
    • foo > bar > baz > setTimeout (WebAPI 영역으로 전달 - event loop 에 의한 callback 처리) > printHello
  • Promise

    • Promise 란, 자바스크립트 비동기 처리에 사용되는 객체 이다
    • ‘비동기 처리’ 란, 특정 코드의 실행이 완료될 때까지 기다리지 않고 다음 코드를 먼저 수행하는 것 이다
    • 3가지 state

      function getData() {
        new Promise(function (resolve, reject) {
              // ...
        });
      }
      
      getData().then(...).catch(...);
      
      • Pending(대기) : 비동기 처리 로직이 아직 완료되지 않은 상태 (new Promise(…)메소드 호출 상태)
      • Fulfilled(이행) : 비동기 처리가 완료되어 프로미스가 결과 값을 반환해준 상태 (reslove 수행상태 - then() 처리결과 반환)
        (Promise 의 이행의 다른 표현으로는 완료 이다)
      • Rejected(실패) : 비동기 처리가 실패하거나 오류가 발생한 상태 (reject 메소드 실행상태 - catch() 처리결과 반환)


'개발' 카테고리의 다른 글

ELK + grafana 구축  (0) 2019.01.08
성공적인 Git 브랜치 모델  (0) 2018.10.18
React 튜토리얼  (0) 2018.04.15
vi 사용하기  (0) 2018.02.08
React 의 특징  (0) 2017.12.20
Posted by 감각적신사
,