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 감각적신사
,

독하게 시작하는 C 프로그래밍 - 1


인프런, 독하게 시작하는 C 프로그래밍

  1. 프로그래밍의 기본 

    • 교환: 두 변수의 값을 교환하는 방법
    • 누적: 변수를 이용해 총합을 계산하는 방법
    • 계수: 횟수를 세는 방법
    • 분류와 선택: 경우의 수를 산정, 경우를 선택하도록 제어문을 기술
    • 최대/최소: 여러 값 중 가장 큰(작은) 값을 찾아내는 방법
    • 반복: 특정 구간의 코드를 반복하고 원하는 시기에 멈추도록 하는 방법
    • 교차: 배열 자료구조에서 정보를 채우는 두가지 방법을 한번씩 번갈아가며 적용할 수 있는 프로그래밍 기법
  2. High Level Code

    • HellowWorld.c (설계도)
      ㅣ Compiler 에 의한 기계어 번역(Compile)
    • HelloWorld.obj (부품)
      | Linker 에 의한 Link 작업
    • HelloWorld.exe (완성품): 컴퓨터의 CPU 에 의한 로딩
  3. C 프로그램의 기본 요소

    • #include 전처리기
      • 용도의 차이: .c 정의 / .h 선언
      • 컴파일 전을 뜻한다
      • printf() 함수를 메인에서 호출할 수 있는 것은 stdio.h 에 선언이 되어있기 때문이다
    • 스코프(Scope)

          {
              ...;  
              ...;
          }
      • 여러 구문을 한 덩어리로 묶을 때 사용한다
      • 연산식, 함수호출, 제어문 등으로 구성되어 있으며 위에서 부터 순차적으로 실행
      • 반드시 ; 로 구분한다
    • C 함수

      • 기본꼴 

        int             main      (void) { body; return }
        ㄴ 반환형식 ㄴ 함수명 ㄴ 매개변수

      • call 함수를 호출하다

        • caller 호출자, 피호출자에게 실인수(값) 을 매개변수로 전달해야 한다
        • callee 피호출자, 호출자에게 결과를 반환한다


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

독하게 시작하는 C 프로그래밍 - 자료형  (0) 2018.01.27
Posted by 감각적신사
,

Docker 기초 - 1

개발 2017. 6. 10. 22:57

Docker


참고

  1. docker 란

    • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
    • 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다
    • Virtaul Machine vs Container
      • 컨테이너는 별도의 OS나 드라이버 없이 Host OS를 공유하는 형태로 실행 VM 의 경우 많은 시스템 리소스를 사용하게 된다
      • VM 은 서버, Host OS, Hypervisor 위에 올라가게 되고, 각 VM은 OS, 드라이버, 메모리 등 컴퓨터 환경이 구성되기 위해 필요한 요소들을 갖추게 된다
      • Container 의 문제점
        • Security
          • Libcontainers accesses five namespaces — Process, Network, Mount, Hostname, and Shared Memory — to work with Linux
  2. ubuntu 환경에서 docker 설치하기

    • Set up the repository
        $ sudo apt-get -y install apt-transport-https  ca-certificates curl
        $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
        OK
        $ sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
        $ sudo apt-get update
        $ sudo apt-cache policy docker-engine
      
    • Get Docker
        $ sudo apt-get -y install docker-engine
      
  3. docker 명령어 사용하기

    • docker [option] [command] [arguments]
  4. docker 환경에서 tomcat server 설치 및 배포하기

    • tomcat image 확인
        docker@DockerClient:~$ docker search tomcat
        NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
        tomcat                         Apache Tomcat is an open source implementa...   1346      [OK]
        dordoka/tomcat                 Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...   37                   [OK]
        davidcaste/alpine-tomcat       Apache Tomcat 7/8 using Oracle Java 7/8 wi...   18                   [OK]
        cloudesire/tomcat              Tomcat server, 6/7/8                            15                   [OK]
        andreptb/tomcat                Debian Jessie based image with Apache Tomc...   7                    [OK]
        openweb/oracle-tomcat          A fork off of Official tomcat image with O...   5                    [OK]
        fbrx/tomcat                    Minimal Tomcat image based on Alpine Linux      4                    [OK]
        bitnami/tomcat                 Bitnami Tomcat Docker Image                     2                    [OK]
        abzcoding/tomcat-redis         a tomcat container with redis as session m...   2                    [OK]
        picoded/tomcat                 tomcat 8 with java 8, and MANAGER_USER / M...   2                    [OK]
        antoineco/tomcat-mod_cluster   Apache Tomcat with JBoss mod_cluster            1                    [OK]
        camptocamp/tomcat-logback      Docker image for tomcat with logback integ...   1
      
    • docker image 저장
        docker@DockerClient:~$ docker image pull davidcaste/alpine-tomcat
      
    • docker image 저장 위치 확인

        root@DockerClient:/var/lib/docker/image/aufs# ls
        distribution  imagedb  layerdb  repositories.json
      
        root@DockerClient:/var/lib/docker/image/aufs# cat repositories.json
        {"Repositories":{"davidcaste/alpine-tomcat":{"davidcaste/alpine-tomcat:latest":"sha256:068917e56bf36062d3bfd6fe728b55b01b5ebd17406fda27cb2dca07acbfbfde","davidcaste/alpine-tomcat@sha256:5c9e43e76d66fc147bff8a9328d8369cb0d21505a5d0e055a24764cb39c439a0":"sha256:068917e56bf36062d3bfd6fe728b55b01b5ebd17406fda27cb2dca07acbfbfde"},"hello-world":{"hello-world:latest":"sha256:48b5124b2768d2b917edcb640435044a97967015485e812545546cbed5cf0233","hello-world@sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7":"sha256:48b5124b2768d2b917edcb640435044a97967015485e812545546cbed5cf0233"}}}
      
        root@DockerClient:/var/lib/docker/image/aufs/imagedb/content/sha256# ls -al
        total 24
        drwx------ 2 root root 4096 Jun  7 08:37 .
        drwx------ 3 root root 4096 May 24 16:58 ..
        -rw------- 1 root root 8648 Jun  7 08:37 068917e56bf36062d3bfd6fe728b55b01b5ebd17406fda27cb2dca07acbfbfde
        -rw------- 1 root root 1478 May 24 17:21 48b5124b2768d2b917edcb640435044a97967015485e812545546cbed5cf0233
      
    • docker 실행
        docker@DockerClient:~$ docker run -it --rm davidcaste/alpine-tomcat /opt/tomcat/bin/catalina.sh run
        Using CATALINA_BASE:   /opt/tomcat
        Using CATALINA_HOME:   /opt/tomcat
        Using CATALINA_TMPDIR: /opt/tomcat/temp
        Using JRE_HOME:        /opt/jdk
        Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
      
    • docker 실행 확인

        docker@DockerClient:~$ docker ps
        CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS               NAMES
        381a87f75c84        davidcaste/alpine-tomcat   "/opt/tomcat/bin/c..."   4 minutes ago       Up 4 minutes        8080/tcp            inspiring_colden
        docker@DockerClient:~$ docker exec 381a87f75c84 ifconfig
        eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02
                  inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
                  inet6 addr: fe80::42:acff:fe11:2%32650/64 Scope:Link
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:15 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:0
                  RX bytes:1075 (1.0 KiB)  TX bytes:1176 (1.1 KiB)
      
        lo        Link encap:Local Loopback
                  inet addr:127.0.0.1  Mask:255.0.0.0
                  inet6 addr: ::1%32650/128 Scope:Host
                  UP LOOPBACK RUNNING  MTU:65536  Metric:1
                  RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:1
                  RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
      
        docker@DockerClient:~$ telnet 172.17.0.2 8080
        Trying 172.17.0.2...
        Connected to 172.17.0.2.
        Escape character is '^]'.


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

React 의 특징  (0) 2017.12.20
Git 입문  (0) 2017.12.17
go 언어 사용하기  (0) 2016.12.02
swagger 사용하기  (0) 2016.11.15
iOS custom framework 만들기  (0) 2016.11.04
Posted by 감각적신사
,

go 언어 사용하기

개발 2016. 12. 2. 08:35

go 

1. 설치 및 설정

    - https://golang.org/doc/install


2. 튜토리얼 사이트

    - https://go-tour-kr.appspot.com/


3. Go 프로그램 패키지

    - 프로그램은 main 패키지에서부터 실행을 시작한다

    - 패키지 호출 명명규칙

        - 디렉토리 경로의 마지막 이름을 사용

example "{GO_PATH}/src/{package_name}/example.go" 를 사용한다면

 import "{package_name}" 

example (둘다 가능)

 import (

  "fmt"

  "math"
 )


import "fmt"

import "math"

    - 패키지를 Import 하면 패키지가 외부로 export 한 것들(메서드나 변수, 상수 등)에 접근한다

    - Go 에서는 첫 문자가 대문자로 시작하면 그 패키지를 사용하는 곳에서 접근할 수 있는 exported name이 된다

      예를 들어 Foo 와 FOO 는 외부에서 참조할 수 있지만 foo 는 참조 할 수 없다


4. 함수 호출

    - 매개변수(인자) 포함 가능

        - 매개변수의 타입 : 변수명 뒤에 명시

       - Multiple results 가능
          example : 

x int

func add(x int, y int) int {
   return x + y
}

func swap(x, y string) (string, string) {
   return y, x
}


5. go 시작해보기 

>> hello.go

package main

import "fmt"
func main() {
fmt.Println("Hello, 안녕")
}

>> 실행
PS D:\02.workspace\11.go> go run .\hello.go
Hello, 안녕


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

Git 입문  (0) 2017.12.17
Docker 기초 - 1  (0) 2017.06.10
swagger 사용하기  (0) 2016.11.15
iOS custom framework 만들기  (0) 2016.11.04
Ubuntu 머신에서 다른 머신 제어하기  (0) 2016.09.09
Posted by 감각적신사
,

swagger 사용하기

개발 2016. 11. 15. 08:39

# swagger 사용하기

-------------------------------------

0. swagger 소개

    - [web](http://swagger.io/)

    - Tools

    - SWAGGER UI: html 기반으로 API DOCS 및 TEST 지원

        - SWAGGER EDITOR: swagger yaml / json 형식의 파일 생성 / 수정 가능하며 바로 UI 표현식을 보여줌

        - SDK GENERATORS: swagger 파일을 통해 server-side / client 용 code 를 생성


1. swagger 를 통한 REST API docs 만들기

- maven 

- dependency 설정

            <!-- https://mvnrepository.com/artifact/io.swagger/swagger-core -->

     <dependency>

                <groupId>io.swagger</groupId>

                <artifactId>swagger-core</artifactId>

                <version>1.5.10</version>

            </dependency>


- build 값 추가

<build>

                <plugins>

                    ...

                    <plugin>

                        <groupId>com.github.kongchen</groupId>

                        <artifactId>swagger-maven-plugin</artifactId>

                        <version>1.1-SNAPSHOT</version>

                        <configuration>

                            <apiSources>

                                <apiSource>

                                    <locations>com.foo.bar.apis;com.foo.bar.apis.internal.Resource</locations>

                                    <apiVersion>v1</apiVersion>

                                    <basePath>http://www.example.com</basePath>

                                    <outputTemplate>strapdown.html.mustache</outputTemplate>

                                    <outputPath>generated/strapdown.html</outputPath>

                                    <withFormatSuffix>false</withFormatSuffix>

                                    <swaggerDirectory>generated/apidocs</swaggerDirectory>

                                </apiSource>

                            </apiSources>

                        </configuration>

                        <executions>

                            <execution>

                                <phase>compile</phase>

                                <goals>

                                    <goal>generate</goal>

                                </goals>

                            </execution>

                        </executions>

                    </plugin>

                    ...

                </plugins>

            </build> 


- Controller Class 에 swagger annotation 적용

- [annotation 소개](https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X)

@Controller 

@RequestMapping(value = "컨트롤러가 매핑되는 URL PATH", produces = {APPLICATION_JSON_VALUE}) 

@Api(value = "컨트롤러가 매핑되는 URL PATH", description = "controller 에 대한 설명을 써준다") // swagger annotation

public class SampleAPIController {

...

    @ApiOperation(  // swagger annotation

value = "개별 API 에 대한 소개", 

notes = "개별 API 에 대한 설명", 

response = SampleResponseObject.class, responseContainer = "List" 

@ApiResponses(  // swagger annotation

value = { 

@ApiResponse(code = 200, message = "Success Return Results"), 

@ApiResponse(code = 0, message = "Unexpected error") 

@RequestMapping(value = "/{pathVariable}", method = RequestMethod.GET) 

public ResponseEntity<Collection<SampleResponseObject>> sendGetAPI(

@ApiParam(value = "pathVariable 에 대한 설명", required = true) 

@PathVariable String pathVariable, 

@ApiParam(value = "파라미터에 대한 설명") 

@RequestParam(value = "limits", required = false) Integer limits, 

@ApiParam(value = "파라미터에 대한 설명")

@RequestParam(value = "rollbackOptions", required = false) String rollbackOptions,

@ApiParam(value = "Body 에 대한 설명", required = true)

@RequestBody SampleRequestObject sRequestObject

) {

...

}

...

} 


- maven build

- index.html

- ./json/*.yaml


2. swagger 를 통한 REST API SDK 만들기

- [web](http://editor.swagger.io/#/) 접속

- 1 에서 생성된 .yaml 파일을 왼쪽 탭에 입력

       

    - 상단 bar 의 Generate Clinet 선택

    - 다양한 language 를 지원 한다

        

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

Docker 기초 - 1  (0) 2017.06.10
go 언어 사용하기  (0) 2016.12.02
iOS custom framework 만들기  (0) 2016.11.04
Ubuntu 머신에서 다른 머신 제어하기  (0) 2016.09.09
Ubuntu 설치 후 초기 환경 세팅  (0) 2016.09.07
Posted by 감각적신사
,

# iOS custom framework 만들어 사용하기

-------------------------------------


1. framework 생성:

- Xcode > File > New > Project...

- iOS > Framework & Library > Cocoa Touch Framework 선택

           

- 프로젝트 이름, identifier 등 입력

          

- swift 파일 생성

          

- class 및 func 구현

          

- 빌드


2. application 에 framework 적용하기:

- Xcode > File > New > Project...

- iOS > Application > 원하는 Application 선택 (Single View Apllication 선택함)

- 프로젝트 선택 후 General 탭 선택

          

- Linked Frameworks and Libraries 에 + 클릭, .xcodeproj 파일을 선택

                   

- 좌측 탭에 프로젝트 import 확인

                   

- framework , application project 각각 빌드 후 Xcode 종료 (한번에 인식이 잘 안되서..)

    - application project 만 open 후 프로젝트 선택 후 General 탭 선택

    - Embedded Binaries 에 + 클릭 시 .framework 가 보인다 선택 (안 보이면.. 빌드 다시하고 다시 껐다켜본다)

          

         

3. application 에서 framework 호출 및 사용

    

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

go 언어 사용하기  (0) 2016.12.02
swagger 사용하기  (0) 2016.11.15
Ubuntu 머신에서 다른 머신 제어하기  (0) 2016.09.09
Ubuntu 설치 후 초기 환경 세팅  (0) 2016.09.07
RabbitMQ 사용하기-2  (0) 2016.09.06
Posted by 감각적신사
,

# Ubuntu 머신에서 다른 머신 제어하기

-------------------------------------


1. windows 머신 제어:

- winexe 

      - 사용포트: TCP 139

   - 다운로드: 

 http://download.opensuse.org/repositories/home:/uibmz:/opsi:/opsi40-testing/xUbuntu_12.04/amd64/winexe_1.00.1-1_amd64.deb 

- 설치

 dpkg -i winexe_1.00.1-1_amd64.deb

- 실행

 winexe -U {{domain}}/Administrator%{{password}} //{{ip}} "{{명령어}}" 


2. linux 머신 제어:

- sshpass

- 사용포트: TCP 22 

- 설치

 sudo apt-get update

 sudo apt-get sshpass 

- 사용

 # ssh 접속

 sshpass -p패스워드 ssh -o StrictHostKeyChecking=no 아이디@호스트주소

 # ssh 접속 후 명령어 입력

sshpass -p패스워드 ssh -o StrictHostKeyChecking=no 아이디@호스트주소 명령어

 # scp 를 이용한 머신간 파일 복사

sshpass -p패스워드 scp -o StrictHostKeyChecking=no 로컬파일 아이디@호스트주소:/폴더/파일명 


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

swagger 사용하기  (0) 2016.11.15
iOS custom framework 만들기  (0) 2016.11.04
Ubuntu 설치 후 초기 환경 세팅  (0) 2016.09.07
RabbitMQ 사용하기-2  (0) 2016.09.06
RabbitMQ 사용하기-1  (0) 2016.09.05
Posted by 감각적신사
,

# Ubuntu 설치 후 초기 환경 세팅

------------------------------------


1. vi 사용시 방향키 동작시 이상한 문자열이 출력된다

$ sudo apt-get update

$ sudo apt-get install vim

$ vim ~/.vimrc

                set number            # 줄 번호 표시

set tabstop=4         # tab을 4칸으로

set ignorecase      # 검색시 대소문자 구별하지 않음

set hlsearch         # 검색시 하이라이트

set fileencodings=utf-8,euc-kr    # 파일인코딩 형식

set bs=indent,eol,start    # backspace 키 사용

set ruler              # 상태표시줄 커서 위치 표시

set title               # 제목 표시

set showmatch    # 매칭되는 괄호 표시

set nowrap         # 자동 줄바꿈 해제

set wmnu           # tab 자동완성시 가능한 목록 표시


syntax on        # 문법 하이라이트

 

2. apt-get proxy 설정

$ cd /etc/apt

$ sudo vi /apt.conf

    Acquire::http::proxy "http://192.168.1.1:8080/";

$ sudo apt-get update


3. 계정 생성 및 권한 추가

- 생성

$ adduser 계정명 # 홈디렉토리를 자동으로 생성해주고 password 를 입력하게끔 command 가 나온다

- sudo 권한 부여

$ cd /etc

$ vi sudoers

  계정명 ALL=(ALL) ALL


4. 인증키 없이 password 로 ssh 접속 가능하게 설정 변경

- sshd 설치/실행

$ sudo apt-get install openssh-server

- sshd 설정

$ cd /etc/ssh/

$ sudo vi sshd_config

   ...

   PasswordAuthentication yes

   ... 


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

iOS custom framework 만들기  (0) 2016.11.04
Ubuntu 머신에서 다른 머신 제어하기  (0) 2016.09.09
RabbitMQ 사용하기-2  (0) 2016.09.06
RabbitMQ 사용하기-1  (0) 2016.09.05
API 모델링 및 개발 - 2  (0) 2016.09.01
Posted by 감각적신사
,