우분투(Ubuntu) 16.04 크롬 브라우저 설치

|

크롬(Chrome) 브라우저 설치

Ubuntu 16.04 기준으로 크롬 브라우저 설치하는 방법입니다.


wget으로 설치하기

$ sudo apt-get install libxss1 libgconf2-4 libappindicator1 libindicator7

$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 

$ sudo dpkg -i google-chrome-stable_current_amd64.deb


apt-get으로 설치하기

$ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - 

$ sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'

$ sudo apt-get update

$ sudo apt-get install google-chrome-stable

만약 설치 이후에 apt-get update 명령을 이용해서 패키지 목록을 업데이트 할 때, 다음과 같은 오류 메세지가 나오면

W: Target Packages (main/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/google-chrome.list:3 and /etc/apt/sources.list.d/google.list:1

아래 명령을 수행해줍니다.

$ sudo rm -rf /etc/apt/sources.list.d/google.list 

NAT와 NAPT

|

기업이나 가정 등의 폐쇄된 네트워크에서 사용하는 프라이빗 IP 주소를 인터넷의 글로벌 IP 주소로 변환해주는 기술에는 NAT(Network Address Translation)와 NAPT(Network Address Port Translation)이 있습니다.

NAT와 NAPT의 처리는 인터넷과 내부 LAN이 연결되는 라우터(Router)나 방화벽에서 수행합니다.


NAT

NAT는 프라이빗 IP 주소와 글로벌 IP 주소를 1:1로 연결합니다.

NAT는 LAN에서 인터넷으로 연결할 때에는 출발지 IP 주소를 변환합니다. 반대로 인터넷에서 LAN으로 연결할 때는 목적지 IP 주소를 변환합니다.


NAPT

NAPT는 프라이빗 IP 주소와 글로벌 IP 주소를 N:1로 연결합니다.

NAPT는 LAN에서 인터넷으로 접근할 때 출발지 IP 주소와 출발지 포트를 같이 변환합니다.

Linux에서는 NAPT를 IP masquerade라고 부릅니다.


image

포트(Port) 번호의 사용법

|

일반적인 포트 번호 범위

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번 포트)

를 이용해서 데이터를 전송합니다.

IP Address의 클래스와 사용 용도

|

사용 용도에 따른 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

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