JQuery

  1. 소스

    • <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>Rowspan Test</title>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
      </head>
      <body>
      <div>
      <button onclick="set_rowspan()">rowspan</button>
      <table id="table-rowspan" class="table table-striped table-hover">
        <thead>
            <tr class="info">
                <th>컬럼1</th>
                <th>컬럼2</th>
                <th>컬럼3</th>
            </tr>
        </thead>
        <tbody>
            <tr class="gubun" id='0'>
                <td>0</td>
                <td>0</td>
                <td>0</td>
            </tr>
            <tr class="gubun" id='1'>
                <td>1</td>
                <td>2</td>
                <td>2</td>
            </tr>
            <tr class="gubun" id='2'>
                <td>1</td>
                <td>3</td>
                <td>3</td>
            </tr>
        </tbody>
      </table>
      </div>
      <script>
      $(document).ready(function() {
        console.log('load')
        tableRowSpanning("#table-rowspan", 0);
      });
      
      // 동일한 이름을 가진 열의 값을 통합한다
      function table_row_spanning(table, spanning_row_index) {
          var rowspan_td = false;
          var rowspan_column_name = false;
          var rowspan_count = 0;
          var rows = $('tr', table);
      
          $.each(rows, function () {
              var This = $('td', this)[spanning_row_index];
              var text = $(This).text();
      
              if (rowspan_td == false) {
                  rowspan_td = This;
                  rowspan_column_name = text;
                  rowspan_count = 1;
              }
              else if (rowspan_column_name != text) {
                  $(rowspan_td).attr('rowSpan', rowspan_count);
      
                  rowspan_td = This;
                  rowspan_column_name = text;
                  rowspan_count = 1;
              }
              else {
                  $(This).remove();
                  rowspan_count++;
              }
          });
      
          // 반복 종료 후 마지막 rowspan 적용
          $(rowspan_td).attr('rowSpan', rowspan_count);
      }
      </script>
      </body>
      </html>
      
  2. 화면


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

Javascript 테스트  (0) 2018.02.14
Javascript 로 파일 다운로드 구현하기  (0) 2018.01.10
Posted by 감각적신사
,

Django 앱 만들기

참고
how to use

  1. 시작하기 전에

    • 프로젝트 vs. 앱
      - 프로젝트는 다양한 앱을 포함
      - 앱은 웹 어플리케이션의 기능 (e.g., 웹 블로그시스템,공공 기록의 데이터베이스 또는 간단한 투표 앱)
      
    • virtualenv: 개발환경에서 독립된 개발환경을 제공해주는 프로그램

      ```
      # 패키지 설치
      $ sudo pip install virtualenv
      
      # 프로젝트 생성
      $ virtualenv venv_projat
      New python executable in /mr.sense/venv/venv_projat/bin/python
      Installing setuptools, pip, wheel...done.
      
      # 가상환경 실행
      $ source ./venv_projat/bin/activate
      
      # 가상환경 에서 사용하는 python moduel 확인
      $ pip list
      Django (1.11.3)
      pip (9.0.1)
      pytz (2017.2)
      setuptools (36.2.5)
      wheel (0.29.0)
      
      # 가상환경 종료
      $ deactivate
      ```
      
  2. Django 의 구조

    • MVT 모델
      - [좋은 참고자료](http://heiswed.tistory.com/category/SW%20%EA%B0%9C%EB%B0%9C/Django)  
      - 모델  Model:  
            - DB 구조를 설정하는 컴포넌트, ORM 방식을 사용하여 SQL 문을 직접 사용하지 않고 파이썬 객체로 접근  
            - 하나의 class 가 하나의 table 을 의미한다  
      - 뷰 View: (== MVC 모델의 Controller)  
            - 데이터를 입력받거나 표시하는 컴포넌트   
      - 템플릿 Templates: (== MVC 모델의 View)  
            - 사용자의 입력과 이벤트에 반응하여 Model 과 View 를 업데이트  
            - 디자인 영역의 분리 및 재사용서을 높이기 위해 HTML 구조만 따로 모아놓은 것  
            - {{변수}}, {{% 태그 %}}   
      
    • 흐름도

  3. Django 프로젝트

    • 생성

       ```
           # django-admin.py {{실행 파라미터}} {{프로젝트명}}
           $ django-admin.py startproject djangoproject
       ```
        > django-admim 스크립트의 이름은 배포 패키지에 따라 다를 수 있음
      
    • 구조

       ```
          djangoproject/
              ㄴ manage.py # 초기화, 마이그레이션, 실행 등을 수행하는 파일
              ㄴ djangoproject/
                      ㄴ __init__.py
                      ㄴ settings.py # 웹사이트 설정이 있는 파일
                                - ALLOWED_HOSTS: 접근 가능 호스트 정리
                                - DATABASES: 사용할 DB 정보
                                    - ENGINE:
                                        'django.db.backends.sqlite3'
                                        'django.db.backends.postgresql_psycopg2'
                                        'django.db.backends.mysql'
                                        'django.db.backends.oracle'
                                - INSTALLED_APPS:
                                    - django.contrib.auth – 인증시스템
                                    - django.contrib.contenttypes – 컨텐츠타입 프레임워크.
                                    - django.contrib.sessions – 세션프레임워크
                                    - django.contrib.sites – 한번의 Django설치로 여러 사이트 관리를 위한 프레임워크.
                                    - django.contrib.messages – 메시징 프레임워크
                                    - django.contrib.staticfiles – 정적파일을 관리하기 위한 프레임워크.
                                    - **신규 생성할 앱을  프로젝트에 추가한다.**                                
                      ㄴ urls.py # urlresolver 가 사용하는 패턴 목록을 포함
                      ㄴ wsgi.py # wsgi 호환 서버에서 서비스를 하기 위한 진입점
           ```
      
  4. Django 앱

    • 생성
      $ python manage.py startapp django1stapp
    • 프로젝트와의 연결
      • 프로젝트 하위 settings.py 의 INSTALLED_APPS 에 추가한다
  5. 실행

    •   $ python manage.py makemigrations
      

      model 의 변화 사항을 migration 폴더에 python 파일로 저장함.
      위에서는 ./migrations/ 폴더내에 0001_initial.py 파일이 새로 생김
      아직 database 에 model table 생성된것은 아님

        $ python manage.py migrate
      

      db table 생성

        $ python manage.py runserver ip:port
      

      django project run


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

Python multiprocess vs multithread  (0) 2018.05.24
django mysql rest api project  (0) 2018.03.11
Django 프로젝트에서 batch job 돌리기  (0) 2018.01.23
Django 프로젝트  (0) 2017.11.29
Python Django WEB project 개발하기1  (0) 2016.08.17
Posted by 감각적신사
,

Apache httpd 기초


  1. 소개

    • 아파치 웹서버

    • 장점:
      • 오픈 소스 이다
      • 풍부한 자료와 경험 많은 개발자와 운영자가 있으므로 손 쉽게 접근할 수 있다.
      • 모듈 기반의 확장성을 제공하여 웹서버의 기능을 확대할 수 있다
      • PHP, Python 같은 스크립트 언어로 된 어플리케이션을 효율적으로 구동할 수 있다
      • 리버스 프록시 기능을 사용하면 다양한 어플리케이션의 게이트 웨이로 사용할 수 있다.
  2. 설치

    • 환경:
      • centos 6.9
      • apache httpd 2.4.27
    • 설치 스크립트

      APACHE_VER=2.4.27
      APR_VER=1.5.2
      APR_UTIL_VER=1.5.4
      PREFIX=/apache
      
      # 필요한 사전 라이브러리 설치
      yum -y install wget make gcc bzip2 pcre-devel openssl-devel
      
      # 아파치 라이브러리 다운로드
      wget http://mirror.navercorp.com/apache/httpd/httpd-${APACHE_VER}.tar.bz2
      wget http://mirror.navercorp.com/apache/apr/apr-${APR_VER}.tar.bz2
      wget http://mirror.navercorp.com/apache/apr/apr-util-${APR_UTIL_VER}.tar.bz2
      
      # 라이브러리 압축풀기
      tar xvf httpd-${APACHE_VER}.tar.bz2
      tar xvf apr-${APR_VER}.tar.bz2
      tar xvf apr-util-${APR_UTIL_VER}.tar.bz2
      
      mv apr-${APR_VER} httpd-${APACHE_VER}/srclib/apr
      mv apr-util-${APR_UTIL_VER} httpd-${APACHE_VER}/srclib/apr-util
      
      # httpd 설치
      mkdir -p $PREFIX
      cd httpd-${APACHE_VER}
      ./configure --prefix=${PREFIX} --enable-ssl
      CPU_CORE=$(lscpu | awk '/^CPU\(s\):/ {print $NF}')
      make -j${CPU_CORE}
      make install
      cd -
      
      # profile 등록
      sudo echo "export PATH=${PREFIX}/bin:\$PATH" >> /etc/profile
      source /etc/profile
      
  3. 설정파일

    • ./conf/httpd.conf 소개

      ServerRoot "/etc/httpd"
      이 지시자는 Apache의 홈디렉토리를 지정하며 절대경로로 지정한다. 이후에 나오는 대부분의 경로(PATH)들은 이 경로를 루트로 한 상대경로로 지정이 된다.
      
      PidFile run/httpd.pid
      서버가 시동할때 자신의 프로세스 고유 번호를 기록할 파일위치이다.
      
      Timeout 300
      클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와 서버간에 아무런 메세지가 발생하지 않았을 때 타임아웃시키고 연결을 끊을 시간을 초단위로 설정한다. 다시말해, 홈페이지에 접속한 사용자가 특정페이지를 로딩한 후에 다음 연결작업(웹페이지 링크 클릭등)을 하지 않고 여기서 지정한 시간동안 머물게 되면 그 사용자와 Apache 프로세스와의 연결이 끊어지게 된다. 한참후에 다시 사용자가 페이지로딩을 하였을 때에는 다른 Apache 프로세스가 요청을 처리하고 서비스하게 된다. 이 값은 보통 300초로 지정한다. 네트웍의 속도가 낮을수록 수치값은 높게 설정하는 것이 좋다.
      
      KeepAlive On
      Apache의 특정 한 프로세스가 특정 사용자의 지속적인 요청작업들을 계속해서 처리하도록 허용할 것인가 아닌가에 대한 여부를 설정한다. 즉, 한 방문자가 홈페이지에 접속하여 다른 여러페이지들을 계속해서 보게될때 그 방문자의 지속적인 다른 요청들을 한 프로세스가 계속해서 처리하도록 할 것인가를 결정하는 지시자이다.
      
      MaxKeepAliveRequests 100
      KeepAlive의 값이 On일 경우에 유효한 값으로, 하나의 프로세스가 특정방문자의 요청을 계속해서 처리할때 지정한 횟수만큼만 처리한다. 프로세스가 이 횟수를 넘어서면 그 프로세스는 죽고 다시 다른 프로세스가 그 방문자의 요청을 처리한다.
      
      하나의 프로세스가 지속적으로 요청을 처리하다보면 메모리의 효율이 저하되고 이런 일이 계속 발생하면 전체적인 시스템 성능이 저하된다. 이 값이 0일경우 무한대로 요청을 처리하며 성능을 높이기 위해 높은 값을 추천한다.
      
      KeepAliveTimeout 2
      KeepAlive의 값이 On일 경우에 유효한 값으로, 설정한 시간(초)동안 요청이 없다면 그 연결을 끊기 위해 타임아웃 시킨다. 효율적인 프로세스관리와 자원낭비를 줄이기 위한 설정이다. 이 값이 낮다면 동시접속 수를 좀더 올리는데 공헌할 수 있다.
      
      <IfModule prefork.c>
      컴파일이 prefork 방식으로 되었을 경우의 설정, prefork 방식은 프로세스:쓰레드 = 1:1 방식
      
      StartServers       8
      Apache가 처음 시동될 때 자식프로세스를 몇 개로 시작할 것인가를 지정한다. 그러나 시스템의 부하율에 따라 MinSpareServers와 MaxSpareServers의 설정에 의해 합리적인 개수만큼 동적으로 생성되었다가 죽기도 한다.
      
      MinSpareServers    5 
      MaxSpareServers   20
      Apache의 성능향상과 빠른 응답속도를 위해 서비스대기 중인 프로세스를 만들게 되는데 이 대기 프로세스의 개수를 지정하는 지시어다. MinSpareServers에 지정한 값보다 적으면 대기 프로세스를 더 많이 만들게 되고, MaxSpareServers 보다 더 많으면 대기 프로세스를 줄인다. 절대적인 수치가 아니라 설정된 수치에 맞게 Apache가 노력하게 된다.
      
      ServerLimit      256
      MaxClients      256
      ServerLimit 지시어는 MaxClients가 생성할수 있는 최대 프로세스 값이다. 이 값은 Apache 2.2 버전대에 들어서면서 기본값은 256이나 최대 허용값은 20000으로 설정되어 있다. MaxClients는 최대 동접자수로 Apache 자식 프로세스의 최대값이 된다.
      
      MaxRequestsPerChild  4000
      Apache의 자식프로세스들이 생성할 수 있는 클라이언트들의 요청 개수를 제한하는 지시어다. 이 값만큼의 클라이언트 요청을 받았다면 이 자식프로세스는 자동으로 죽게된다. 이 값이 0으로 설정이 된다면 자식프로세스가 죽는일이 없다. 이 값을 적절히 설정함으로서 부하조절과 자원낭비를 어느정도 예방 할 수 있다.
      
      </IfModule>
      <IfModule worker.c>
      worker 방식으로 작동시의 설정, worker 방식은 프로세스:쓰레드 = 1:n 방식
      
      StartServers         4
      시작시에 초기화되는 서버 프로세스 갯수
      
      MaxClients         300
      동시 연결가능한 클라이언트의 최대 개수
      
      MinSpareThreads     25
      대기하고 있는 최소 스레드 갯수
      
      MaxSpareThreads     75
      대기하고 있는 최대 스레드 갯수
      
      ThreadsPerChild     25
      각각의 자식프로세스가 지속적으로 가질수 있는 스레드의 갯수
      
      MaxRequestsPerChild  0
      자식 프로세스가 서비스할 수 있는 최대 요청 갯수
      
      Listen 80
      시스템의 기본값 이외에 다른 IP 주소와 포트에 대해서도 연결할 수 있도록 해준다. 주로 가상호스트(Virtual Host)부분에서 기본 80번 이외에 다른 포트를 이용하여 가상호스트를 설정하고자 할 때에 필요하다.
      
      # Dynamic Shared Object (DSO) Support
      DSO 방식으로 컴파일된 Apache의 모듈을 적재. 모듈의 위치는 /etc/httpd/modules이며 이는 usr/lib64/httpd/modules의 심볼릭 링크이다.
      
  4. 실행

     $ /apache/bin/httpd -f /apache/conf/httpd.conf
    



Posted by 감각적신사
,