01 Feb 2018
|
용어
네트워크
일반적인 포트 번호 범위
TCP/UDP 통신에서는 포트 번호를 이용해서 컴퓨터 안의 어떤 프로그램에게 데이터를 전달할지를 식별합니다. 포트 번호는 0부터 65535까지의 16비트 범위의 숫자로 되어 있습니다.
- 0 ~ 1023 : 잘 알려진 Well-Known Port 라고 부르며, 웹 서버나 메일 서버 등의 일반적인 프로그램들이 사용합니다.
- 1024 ~ 49151 : Registered Port 라고 부르며, 잘 알려져 있는 프로그램들이 아닌 다른 용도의 프로그램들이 사용합니다.
- 49152 ~ 65535 : 동적 포트(Dynamic Port)로 서버가 클라이언트를 식별할 때 사용합니다.
일반적으로 잘 알려진 포트 번호들은 여기에 포스팅되어 있습니다.
포트 번호의 사용법
포트 번호를 사용하는 구체적인 예제는 다음과 같습니다.
클라이언트 → 서버 (Request)
클라이언트에서 웹브라우저를 이용해서 서버로 Request를 보내게 되면,
- 출발지 포트에는 동적 포트 중 랜덤으로 선택한 숫자를 할당 (ex. 50000)
- 목적지 포트에는 웹 서버 포트인
80
을 입력
와 같이 세그먼트Segment)를 만들어서 전송합니다.
서버 → 클라이언트 (Response)
웹 서버에서는 클라이언트에게 Response를 보내게 되는데, 이 때
- 출발지 포트에는 웹 서버 포트인
80
을 입력
- 목적지 포트에는 클라이언트에게 받은 포트(ex. 위에서 사용한 50000번 포트)
를 이용해서 데이터를 전송합니다.
01 Feb 2018
|
용어
네트워크
사용 용도에 따른 IP Address Class 분류
클래스 |
선두 비트 |
주소 범위 |
Class A |
0xxx |
0.0.0.0 ~ 127.255.255.255 |
Class B |
10xx |
128.0.0.0 ~ 191.255.255.255 |
Class C |
110x |
192.0.0.0 ~ 223.255.255.255 |
Class D |
1110 |
224.0.0.0 ~ 239.255.255.255 |
Class E |
1111 |
240.0.0.0 ~ 255.255.255.255 |
일반적으로 사용하는 것은 Class A 부터 Class C이며, 컴퓨터의 일대일 통신(유니캐스트)에서 사용합니다. Class D는 멀티캐스트용으로 사용하고 있으며, Class E는 연구용 또는 예약(Reserved)용 주소이비다.
사용 장소에 따른 분류
IP Address는 사용 장소에 따라 글로벌 IP Address와 프라이빗 IP Address로 나눌 수 있습니다.
프라이빗 IP Address의 경우 가정이나 회사 등 폐쇄된 내부에서 사용할 수 있는 주소로 3가지 클래스로 구분합니다.
클래스 |
주소 범위 |
서브넷 마스크 |
Class A |
10.0.0.0 ~ 10.255.255.255 |
255.0.0.0 |
Class B |
172.16.0.0 ~ 172.31.255.255 |
255.240.0.0 |
Class C |
192.168.0.0 ~ 192.168.255.255 |
255.255.0.0 |
29 Jan 2018
|
Python
Django
Django 프로젝트 생성하는 방법
Django에서 프로젝트 뼈대는 다음 명령어를 이용해서 만들 수 있습니다.
$ django-admin startproject mysite
위 명령어를 입력하면 현재 디렉토리에 mysite
라는 이름의 디렉토리가 만들어지고 Django 프로젝트를 시작할 수 있게 됩니다.
프로젝트 구성
tree
(Windows에서는 tree /f
) 명령어를 이용하면 다음과 같은 디렉토리 구조가 만들어진 걸 확인할 수 있습니다.
C:.
└─mysite
│ manage.py
│
└─mysite
settings.py
urls.py
wsgi.py
__init__.py
위에서 각 디렉토리 및 파일은 다음과 같은 역할을 합니다.
- mysite : 가장 바깥쪽의 디렉토리인
mysite
는 Django와 아무 관련이 없는 디렉토리이며 다른 이름으로 바꿔도 상관없습니다.
- manage.py : Django의 다양한 명령어를 실행할 수 있게 해주는 커맨드라인 형태의 유틸리티입니다.
- mysite : 하위에 있는
mysite
디렉토리에 실질적인 프로젝트 파일들이 위치합니다.
- settings.py : 프로젝트의 환경 설정 파일입니다.
- urls.py : 프로젝트 레벨의 URL 패턴을 정의하는 URLConf입니다.
- wsgi.py : Apache 등과 같은 상용 웹 서버와 WSGI 규격으로 연동할 수 있게 해주는 파일입니다.
- init.py : 이 디렉토리가 Python 패키지임을 알려주는 빈 파일입니다.
Django 어플리케이션 생성
하나의 프로젝트 안에는 여러 개의 어플리케이션을 만들 수 있습니다. 다음 명령어를 이용하여 ‘books’라는 어플리케이션을 생성할 수 있습니다.
$ cd mysite
$ python manage.py startapp books
위 명령어를 실행하면 프로젝트는 다음과 같은 구조가 됩니다.
C:.
└─mysite
│ manage.py
│
├─books
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └─migrations
│ __init__.py
│
└─mysite
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
│
└─__pycache__
settings.cpython-35.pyc
__init__.cpython-35.pyc
데이터베이스에 변경 사항 반영
다음 명령어로 데이터베이스에 변경 사항을 반영할 수 있습니다.
$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_auto_20180201_0911... OK
Applying sessions.0001_initial... OK
Django 프로젝트 실행
$ python manage.py runserver
28 Jan 2018
|
Python
Django
Django
Django는 파이썬으로 웹 서버를 쉽게 개발할 수 있는 기능을 제공하는 프레임워크(Framework)입니다. 2003년 로렌스 저널-월드 신문사의 내부 프로젝트로 시작했으며, 2005년 오픈소스화되었습니다.
Django 설치 방법
Django는 pip
를 이용해서 간단히 설치할 수 있습니다.
Django 버전 확인
다음 명령어로 현재 Django의 버전을 확인할 수 있습니다.
$ python -m django --version
Django 특징
MTV 패턴
Django는 MTV 패턴 구조로 되어 있습니다. MTV 패턴은 Modle-Template-View로 이루어져 있으며, MVC 패턴의 Model-View-Controller와 일치합니다. 주의할 점은 MTV 패턴에서 Template는 MVC 패턴에서의 View와 대응되며, MTV 패턴의 View는 MVC 패턴의 Controller와 대응됩니다.
ORM 지원
ORM(Object-Relational Mapping)은 데이터베이스 시스템과 데이터 모델을 쉽게 연결시켜주는 기능입니다. 직접 SQL문으로 쿼리를 작성하지 않더라도 데이터베이스로부터 값을 쉽게 가져올 수 있고, 데이터를 마치 객체를 다루듯이 사용할 수 있습니다.
Admin 화면 제공
Django로 제작한 웹 서버는 Admin 화면을 자동으로 제공합니다. Admin 화면을 통해 데이터들을 쉽게 관리할 수 있습니다.
Elegant URL 방식
웹 프로그래밍에서 URL 디자인은 필수적인 작업인데, Django에서는 Elegant URL 방식을 채택하여 각 URL 형태를 파이썬 함수나 클래스에 직접 연결할 수 있도록 하여 쉽게 개발할 수 있는 환경을 제공합니다.
자체 템플릿 시스템
Django는 내부적으로 확장이 가능하고 디자인이 쉬운 템플릿 시스템을 제공합니다. 이를 통해 디자인과 로직을 분리해서 개발할 수 있습니다.
Cache 시스템
동적인 페이지는 일반적으로 데이터베이스 쿼리를 실행하고 템플릿을 해석하여 관련 페이지를 렌더링해주는 작업이 필요합니다. 이는 서버에 큰 부하를 주게 되는데 Django에서는 Cache 시스템을 제공하여 서버의 부하를 줄여줄 수 있습니다.
자체 웹 서버 제공
Django는 자체적으로 웹 서버 기능을 제공하고 있어 개발 과정에서 손쉽게 테스트할 수 있습니다. 또한 디버깅 모드를 제공하여 에러를 쉽게 파악하고 수정할 수 있도록 상세한 메시지를 제공합니다.
소스 변경사항 자동 반영
Django는 소스에 변경사항이 있을 경우 자동으로 반영해줍니다. 따라서 웹 서버를 구동시킨 후 소스 수정을 하더라도 웹 서버 재실행을 할 필요가 없습니다.
27 Jan 2018
|
Docker
Docker의 파일 시스템
Docker에서 컨테이너 내부의 파일들은 ‘Union File System’에 의해 컨테이너 내부에서 관리됩니다. 하지만 ‘Data Volume’을 사용하게 되면 호스트 PC의 파일 시스템에 파일을 저장할 수가 있습니다. 따라서 이 경우에는 docker commit
명령어를 이용하더라도 해당 파일은 이미지에 포함되지 않습니다.
Data Volume 설정 방법
볼륨을 연결하는 옵션은 -v <호스트 PC 디렉토리>:<컨테이너 디렉토리>
입니다. 아래 예제는 로컬 호스트 PC의 /home/snowdeer/Docker/data-volume/
디렉토리를 snow-volume
라는 이름의 컨테이너 내부의 /data
디렉토리로 연결할 수 있습니다.
$ docker run -i -t --name snow-volume -v /home/snowdeer/Docker/data-volume/:/data ubuntu /bin/bash
위 명령어를 실행하고 나서 bash 명령어로
$ cd /data
$ touch hello-snowdeer.txt
를 입력하고 나서 호스트 PC의 연결된 디렉토리를 살펴보면 컨테이너 내부에서 생성한 파일이 보이는 것을 확인할 수 있습니다.
이렇게 데이터 볼륨을 이용하면 여러 컨테이너들끼리 같은 파일 데이터를 공유할 수 있습니다. 또한 디렉토리 연결뿐만 아니라 다음과 같이 파일을 연결할 수도 있습니다.
$ docker run -i -t --name snow-volume -v /home/snowdeer/Docker/data-volume/hello.txt/:/data/hello.txt ubuntu /bin/bash
–volumes-from 옵션을 이용한 데이터 볼륨 연결
다음 명령어를 입력하면 위에서 생성한 ‘snow-volume’이라는 이미지의 데이터 볼륨을 새로 생성하는 컨테이너에 연결할 수 있습니다.
$ docker run -i -t --volumes-from snow-volume --name snow-volume2 ubuntu /bin/bash