AWS클라우드기반의 Django(2. Django 개발환경 구축)
1. Python Programming
01. Python 설치
-1. Python3 설치
$ sudo apt-get update
$ sudo apt-get upgrade
python3 --version
$ sudo apt-get update
$ sudo apt-get upgrade
python3 --version
- 파일을 만들어서 'Hello World 출력'
$ vi hello.py
# 파일 내용 내부에 작성
print('Hello World')
$ python3 hello.py
# 출력
Hello World
- 저장 후 종료 : ':wq'
- 쉘을 이용하여 python3 작성
$ python3
>>> print('Hello World')
Hello World
-2. Python 패키지관리 - pip
- pip
- Python Package Index(PyPI)에서 제공하는 Python 패키지 설치 관리자 프로그램
- Django 프레임워크도 PyPI에서 제공되는 패키지 중 하나이며, 시스템 추가 기능 구현을 위해서는 반드시 pip도 실치되어야 한다
# pip3가 설치되어 있는지 확인, 없다면 설치
$ pip3 --version
$ sudo apt install python3-pip
$ pip3 --version
-3. Django에서의 Python 사용
- models.py
- 모델 클래스 정의(MVC의 Model 역할)
- views.py
- 웹 페이지구성을 특정 기능 정의(MVC 패턴에 Controller 역할)
- urls.py
- URL 지정
- settings.py
- Django 환경 설정
- MVC의 V는 Templates에서 담당
- Django는 MVC 패턴이 아닌 MVT 패턴이다
02. 기초 문법
-1. 기본 문법
- 1) 패키지 및 모듈 선언
- 특정 함수 및 클래스는 패키지나 모듈을 선언해야 사용할 수 있으므로, Python 파일의 최상단에 어떤 패키지 및 모듈을 사용할 것인지를 기입
- import [모듈명]
# math 모둘 사용 $ python3 >> import math >> math.ceil(10.3) 11
- from [모듈명] import [클래스명]
>>> from math import ceil >>> ceil(10.3) 11
- Django에서는 Python 언어 기반의 패키지를 포함하고 있으며, 또한 사용자가 정의한 다른 Python 파일의 클래스 및 모둘을 사용할 수 있다
- 패키지 사용은 모듈 사용과 동일하다
# django.shorcuts는 패키지는 Django에서 제공하는 패키지 중 하나로, 그 중 render, redirect 클래스를 사용할 대 선언
>>> from django.shorcuts import render, redirect
# 사용자 정의 패키지, 클래스
>>> from boardapp.models import *
-
2) 블록
- 블록
- Python에서 수행하는 여러 명령어를 하나의 구역으로 설정하는 단위
- 다른 언어에서는 '{}' 중괄호를 사용하여 블록을 형성하는 경우가 많지만 Python 에서는 ':' 과 'tab' 문자를 통해서 블록 구분
- 주의! Python은 탭 문자를 사용하지 ㅇ낳으면 블록에 속하지 않다고 간주
# Java public class HelloWorld() { public static void main(String args[]){ System.out.println("Hello World"); } }
# Python >>> def HelloWorld() : print("Hello World")
- Python 조건문 코드 예제
>>> a = -1; >>> if a > 0: ... print("양수") ... else: ... print("0 또는 음수") ... 0또는 음수
- 블록
-
3) 주석
- 주석
- 코드에 대한 설명 등을 나타내는 것으로, 실제 코드 수행에 영향을 미치지 않는다.
- #, """, '''
>>> print("Hello World") # 출력하는 부분입니다 Hello World
- 주석
-
4) 화면 출력(print)
- print()
- Python3 부터는 괄호를 붙여야만 올바른 결과를 확인할 수 있다
- print()
-2. 변수(Variable) 및 기본 자료형
- 1) 변수의 기본 사용
- 변수
- 특정 값을 저장하고, 저장된 값을 사용하기 위한 개체
- 일반적으로 영문자로 시작하고 숫자와 혼합해서 사용
- Python에서는 ㅂ녈도의 변수 선언 없이도 입력되는 값의 유형에 따라 자동으로 변수 유형이 결정(Dynamic Typing)
- 값을 변경할 때에도 자유롭게 변경
- But 한 번 선언된 변수는 값을 변경하기 전까지는 지정된 ㄱ밧의 유형으로 사용(비교 또는 연산에서 주의)
>>> a = 10 >>> b = "test" >>> print(a) 10 >>> print(b) test
>>> a = "1" >>> b = a+1 TypeError ...
- 변수
- 2) 기본 자료형과 유형변환
- 변수의 기본 자료형
- int, float, str, boolean, true/false
- 변수의 복합 자료형
- List, Tuple, Dictionary
- 유형 변환(Type Casting)
- int(), float(), str(), list(), tuple(), ...
>>> a = 10.5 >>> b = 10 >>> int(a) 10 >>> float(b) 10.0 >>> str(a) 10.5'
- 변수의 기본 자료형
-3. 복합 자료형
- 리스트(List), 튜플(Tuple), 딕셔너리(Dictionary)
- 단일 값이 아닌 복수의 값을 입력할 때 사용
- 1) 리스트(List)
- 리스트 사용
- 배열과 유사
- 배열은 구성 요소의 자료형이 모두 동일한 반면, 리스트는 구성 요소의 자료형이 동일하지 않아도 문제가 없다
- '[]', ','
- index는 0부터 시작
>>> a = [1, 'test', 2, 3.5] >>> a[0] 1 >>> a[1] 'test' >>> a[3] 3.5
- 리스트 변경, 추가, 삭제
- 변경은 인덱스 값을 대입하여 간단히 변경
>>> a[0] = 2 >>> print(a) [2, 'test', 2, 3.5] >>> a[4] = 3 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list assignment index out of range
- 리스트 추가는 append와 insert를 사용
- append(value)는 요소의 마지막에 추가
- insert(position, value)는 요소의 특정 위치에 삽입
>>> a = [1,2,3,4,5] >>> a.append(6) >>> print(a) [1, 2, 3, 4, 5, 6] >>> a.insert(2, 7) >>> print(a) [1, 2, 7, 3, 4, 5, 6]
- 삭제는 pop과 remove 사용
- pop()은 요소의 마지막에 있는 값을 삭제
- remove()는 요소의 특정 값을 찾아서 삭제
>>> print(a) [1, 2, 7, 3, 4, 5, 6] >>> a.remove(3) >>> print(a) [1, 2, 7, 4, 5, 6] >>> a.pop() 6 >>> print(a) [1, 2, 7, 4, 5]
- 리스트 정보 확인
- 변수명[인덱스]는 특정 값 사용
- index(value)는 반대로 리스트의 특정 값을 찾을 때 사용
>>> print(a) [1, 2, 7, 4, 5] >>> a.index(4) 3
- len(list|tuple|dictionary|...)은 리스트의 요소 갯수 확인
- len은 앞에 사용한 함수와 달리 len() 함수의 파라미터로 리스트 변수 또는 자료를 대입
>>> a [1, 2, 7, 4, 5] >>> len(a) 5
- [n:m] 부분 요소 확인
- m의 앞 까지(m은 미포함)
>>> a = [10, 20, 30, 40, 50] >>> b = a[:2] >>> c = a[2:] >>> d = a[1:3] >>> print(b) [10, 20] >>> print(c) [30, 40, 50] >>> print(d) [20, 30]
- 리스트 사용
- 2) 튜플(Tuple)
- 튜플 사용
- 읽기 전용 데이터를 처리할 때 사용
- 리스트와 유사하게 여러 개의 ㄱ밧을 하나의 변수 형태로 사용
- But 리스트는 요소의 값 변경이 자유롭다면, 튜플은 한번 선언된 값을 변경할 수 없다
- '[]' -> '()', ','
>>> a = (1, 2.3, "4") >>> a[0] 1 >>> a[0] = 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment
- 튜플 정보 확인
- 리스트와 동일 index(value), len(list|tuple|dictionary|...)
>>> a.index(1) 0 >>> len(a) 3
- 튜플 사용
- 3) 딕셔너리(Dictionary)
-
딕셔너리 사용
- 딕셔너리는 리스트, 튜플에서 확장된 변수형으로 key-value 형태이다
- 각 요소에 대한 이름(key)와 값(value)을 기반으로 자료를 저장
- '[]' -> '()' -> '{}' => '{key:value}'
- 요소의 값을 나타날 때 인덱스가 아닌 Key 값을 사용
>>> a = {"title" : "타이틀", "page" : 1} >>> print(a) {'title': '타이틀', 'page': 1} >>> a["title"] '타이틀'
-
딕셔너리 변경, 추가, 삭제
- 변경은 Key 값을 사용하여 변경
>>> print(a) {'title': '타이틀', 'page': 1} >>> a["title"] = "변경된 타이틀" >>> print(a) {'title': '변경된 타이틀', 'page': 1}
- 추가는 key-value 대입과 update(key:value|dictionary) 사용
- update는 자료를 직접 입력해서 추가할 수도 있고, 다른 딕셔너리 변수를 입력하여 추가할 수도 있다
>>> a = {"title" : "타이틀", "page" : 1} >>> a['name'] = 'Tom' >>> print(a) {'title': '타이틀', 'page': 1, 'name': 'Tom'} >>> a = {'title' : '타이틀'} >>> b = {'name' : 'Tom'} >>> a.update({'page' : 1}) >>> print(a) {'title': '타이틀', 'page': 1} >>> a.update(b) >>> print(a) {'title': '타이틀', 'page': 1, 'name': 'Tom'}
- 삭제는 del, clear()를 사용
- del은 함수가아닌 단일 명령어로 'del 변수명[키]' 형태로 사용
- clear는 모든 값을 지울 때 사용
>>> print(a) {'title': '타이틀', 'page': 1, 'name': 'Tom'} >>> del a['page'] >>> print(a) {'title': '타이틀', 'name': 'Tom'} >>> a.clear() >>> print(a) {}
-
딕셔너리 요소 개수 및 키(Key) 추출
- len(list|tuple|dictionary|...)으로 요소의 개수 확인
- keys() 함수를 사용하여 키 추출
- keys()함수를 사용하면 dict_keys([keys...]) 형태로 key를 나타내지만, 해당 값을 자료형 형태로 사용하기 위해서는 list() 또는 tuple() 함수를 사용
>>> a = {'title' : '타이틀', 'page' : 1, 'name' : 'Tom'} >>> len(a) 3 >>> a.keys() dict_keys(['title', 'page', 'name']) >>> b = list(a.keys()) >>> print(b) ['title', 'page', 'name'] >>> c = tuple(a.keys()) >>> print(c) ('title', 'page', 'name')
-
- 4) 자료형의 혼합 사용
- 리스트, 튜플, 딕셔너리는 기본 자료형의 유형에 상관없이 복수의 값으로 구성
- 기본 자료형 뿐만 아니라 서로 다른 리스트, 튜플, 딕셔너리도 구성할 수 있다
- 리스트, 튜플, 딕셔너리 혼합
>>> a = [1, 2, (3,4)] >>> b = (1, 2, [3, 4]) >>> print(a) [1, 2, (3, 4)] >>> a[2] (3, 4) >>> b[2] [3, 4] >>> a[2][0] 3 >>> c = (1, 2, {'key' : 3}) >>> c[2] {'key': 3} >>> c[2]['key'] 3
-4. Python 자료 처리
- Python 자료처리
- 연산자 및 반복문, 조건문을 사용하여 처리하는 형태
- 1) 반복문(for, while)
- for문은 자료형 데이터 요소를 반복하여 사용하거나 특정 회수만큼 반복할 때 사용
- while문은 특정 조건을 만족하는 경우에만 반복할 때 사용
# for문 >>> a = ['title', 'page', 'name'] >>> for i in a: ... print(i) ... title page name
>>> a = [1,2,3,4,5] >>> i = 0 >>> while i < 5: ... print(a[i]) ... i += 1 ... 1 2 3 4 5
- 2) 조건문
- 특정 조건을 만족하거나 그렇지 않을 경우의 명령을 수행하는 것
- if-elif-else
>>> a = 10 >>> if a > 10: ... print('Over 10') ... elif a > 5: ... print('Between 5 and 10') ... elif a > 3: ... print('Between 3 and 5') ... else : ... print('Under 3') ... Between 5 and 10
- 조건문 연산자
- 주로 두 개 이상의 값을 비교하기 위한 비교 연산자가 사용
- 다수의 조건 설정을 위한 and, or 등 논리 연산자도 사용
- Boolean 형 결과값을 비교하기 위해서 True/False를 사용
if a > b : # a가 b보다 클 경우 if a == b : # a와 b가 같을 경우 if a != b : # a와 b가 다를 경우 if a is False : # a의 값이 False일 경우 if a : # a의 변수의 값이 빈 값이 아닐 경우 if a is None : # a 변수의 ㄱ밧이 존재하지 않는 경우 # None은 None만 None이며 None은 값이 없음(빈값)과 같다 # 값이 없는(빈값) ""은 None이 아니다
- 3) 예외 처리(try-except, finally)
- 특정 상황에서 에러가 발생했을 때 이를 처리하기 위한 용도로 사용
- 일반적으로 try-exceot 블록으로 구성
- 필요시 예외 발생 여부와 상관없이 항상 실행되는 finally 블록도 동시에 구성
>>> a = [1,2,3,4] >>> try : ... print(a[2]) ... print(a[4]) ... except : ... print(0) ... 3 0
- Python에서는 다수의 오류가 존재하며, 오류 유형에 따라서 except를 여러번 사용할 수 있다
>>> try : ... print(a[2]) ... print(a[4]) ... except IndexError : ... print('인덱스 에러') ... except FileNotFoundError : ... print('미존재 파일 에러') ... 3 인덱스 에러
03. 함수와 클래스
-1. 함수(def)
- 1) 정의
- 하나 이상의 복합적인 기능을 한 번에 수행하기 위한 기본 구성단위
- 프로그램에서 호출을 할 경우에만 사용
- 특정 값을 반환받기 위하여 사용되는 경우도 있으며, 특정 값을 반환받지 않더라도 특정 기능을 수행하기 위하여 사용되가도 한다
- def [함수명]([파라미터]): 형태
- def 명령을 사용하여 함수를 선언
- 함수 내용은 블록에서 정의
- 반환 값이 있을 경우 'return [반환 값]' 문장 사용
- 반환 값이 없을 경우 return 명령어를 사용하지 않는다
- 2) 함수 사용 예제
- 기본적인 함수 사용
>>> def helloWorld() : ... print('Hello World!') ... print('Welcome to Python') ... >>> helloWorld() Hello World! Welcome to Python >>> helloWorld() Hello World! Welcome to Python
- 파라미터가 있는 함수 사용
>>> a = 'Apple' >>> b = 'Orange' >>> def printFruit(fruit) : ... print(fruit) ... >>> printFruit(a) Apple >>> printFruit(b) Orange >>> printFruit('Banana') Banana
- 파라미터와 반환값이 있는 함수 사용
>>> def exp(number) : ... return number*number ... >>> a = exp(5) >>> b = exp(100) >>> print(a) 25 >>> print(b) 10000
- 3) 함수 유형 및 외장 함수
- 함수는 사용 형태에 따라 크게 사용자 정의 함수, 내장 함수, 외부 함수 등으로 구분
- 사용자 정의 함수
- 사용자가 직접 정의한 함수
- 내장 함수
- Python에서 기본 기능 수행을 위해서 정의한 함수로, print() 함수와 같이 즉시 사용할 수 있다
- 외부 함수
- 패키지 또는 모듈에서 제공하는 함수로, 특정 기능을 사용하기 위한 함수
- 외장 함수 사용
>>> print(ceil(10.3)) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'ceil' is not defined >>> import math >>> print(math.ceil(10.3)) 11 >>> from math import ceil >>> print(ceil(10.3)) 11
-2. 클래스(Class)
-
1) 클래스의 개념 및 정의
- 객체 지향 프로그래밍에서 사용되는 대표적인 단위
- 함수가 가지고 있는 한계를 보완하고 복잡한 구조를 다루기 위한 객체(Object)
- 클래스는 특정 값을 나타내는 필드(변수, Field)와 특정 동작을 나타내는 메소드(Method)로 구성
- 클래스를 실제로 사용하기 위한 변수(실체화)를 인스턴스(Instance)
>>> class Apple : ... def set_information(self, location, color) : ... self.location = location ... self.color = color ... >>> Apple1 = Apple() >>> Apple1.set_information('seoul', 'red') >>> Apple1.location 'seoul' >>> Apple1.color 'red'
- 여기서 'Apple' 클래스는 location과 color라는 요소를 가진 하나의 개념이다
- '개념'이라 하는 것은 특정 유형의 객체가 존재할 뿐 실체가 있는 것을 뜻하지는 않는다
- 'Apple1' 인스턴스는 이러한 'Apple'이라는 개념을 가진 실체
-
2) 생성자 상속, 오버라이딩
-
클래스에는 다양한 기능이 있지만, 그 중에서도 생성자(Constructor), 상속(Inherit), 오버라이딩(Overriding)은 반드시 알아야 한다
-
생성자(Constuctor)
- 인스턴스를 초기 생성할 때 클래스 변수에 값을 대입하거나 특정 기능을 수행하는 역할을 한다
- def init() : 형태
>>> class Apple : ... def __init__(self, location, color) : ... self.location = location ... self.color = color ... >>> Apple1 = Apple('seoul', 'red') >>> Apple1.location 'seoul' >>> Apple1.color 'red'
- 위 예제에서 set_information() 함수를 사용하는 것 보다 좀 더 유용하게 사용할 수도 있다
-
상속(Inherit)
- 클래스를 신규 선언할 때, 다른 클래스로부터 클래스 변수와 메소드를 모두 동일하게 상속 받아 사용한다는 뜻
- class 클래스명(상속 받을 클래스) : 형태
>>> class Human : ... def __init__(self, name): ... self.name = name ... def getName(self): ... return self.name ... >>> class Female(Human) : ... def getGender(self): ... return "Female" ... >>> girl = Female('Jame') >>> girl.getName() 'Jame' >>> girl.getGender() 'Female'
-
오버라이팅(Overriding)
- 상속에서 확장된 개념으로, 상속 받은 클래스의 메소드를 재사용하는 것을 뜻한다
>>> class Human : ... def __init__(self, name) : ... self.name = name ... def getName(self): ... return self.name ... >>> class Female(Human) : ... def getName(self) : ... return "Miss "+self.name ... >>> girl = Female('Jane') >>> girl.getName() 'Miss Jane' >>> human1 = Human('Unknown') >>> human1.getName() 'Unknown'
-
2. Django 웹 애플리케이션 개발 환경 구축
01. 개요
-1. Django 소개
- Django는 Python 웹 개발을 위한 대표적인 오픈소스 프레임워크
- MTV(Model-Template-View) 모델 기반의 웹 사이트 구축을 지향, 속도와 확장성 그리고 벙용성이 뛰어나다
-2. 웹 애플리케이션 구축 절차
- [환경 구축 -> 프로그램 개발 및 테스트 -> 프로그램 배포] 순서로 진행
- AWS에서는 Elastic Beanstalk를 통해서 웹 어플리케이션 배포 진행
02. Django 설치 및 실행
-1. Python 가상환경 VirtualEnv
-
1) Python 가상환경의 이해
- 독립된 환경에서 테스트와 개발을 진행할 수 있도록 해주는 가상 환경
- VirtualEnv를 통해서 생성된 환경에서 독립적으로 Python 패키지를 설치하고 관리
-
2) VirtualEnv 설치
$ pip3 install --user virtualenv
- '--user' 옵션, 현재 사용자에게 대한 설치 권한을 부여하기 위해서 사용
- 반대로 VirtualEnv 가상환경 상에서는 가상환경 내에서만 pip 패키지가 사용되므로 '--user' 옵션을 별도로 사용하지 않아도 된다
- virtualenv --version 버전 확인이 안되면 .profile 파일의 경로 수정
$ cat .profile
$ source ~/.profile
$ virtualenv --version
- 새 가상환경 생성
$ virtualenv venv
- 가상환경 폴더 트리 확인
$ tree venv
- 가상환경 실행 및 종료
# 가상환경 실행
$ source venv/bin/activate
# 가상환경 종료
$ deactivate
-2. Django 설치
- Django 설치
$ source venv/bin/activate
(venv) pip install django
- pytz는 시간대 정의를 위한 패키지로, Olson Timezone Database로부터 나온 세계 표준 시간대에 대한 시간으 모두 정의한 규격
- Django 설치 확인
(venv) pip freeze
- Django 프로젝트 생성(startproject)
(venv) django-admin startproject test_proj
-3. Django 예제 프로그램 실행
- 가상환경을 활용하여 Django 웹 서버 가동
- 웹 서버 가동 명령어는 Python의 manage.py 파일을 사용
- manage.py 파일은 Django 프로젝트 구동 및 관리를 위한 모든 기능을 수행하는 파일
(venv) cd test_proj
(venv) python manage.py runserver
- 빨간 텍스튼ㄴ 처음 실행했을 때 나타난 메시지로, 'python manage.py migrate' 명령을 실행을 먼저 하는 것을 권장하는 메시지 이다
- Django 웹 어플리케이션을 생성한 후 별도의 환경 설정을 변경하지 않았을 경우에는 Django에 내장된 admin, auth, contenttypes, sessions 앱도 같이 실행
- 이들 앱은 각각의 DB 모델을 가지고 있으며, DB 모델을 반영하지 않고 웹 서버를 가동할 경우에 위와 같은 경고 메시지를 표현
- migrate는 Django 프로젝트가 DB와 연동할 때 연돌을 위한 DB 모델을 반영하기 위한 명령어이다
(venv) python manage.py migrate
(venv) pthon manage.py runserver
- 현재 접속되어 있는 환경은개발을 현재 진행하려는 PC의 로컬환경이 아닌, EC2 인스턴스에 접속중인 클라우드 환경이다
- 그렇기 때문에 웹 서버 실행화면 역시 클라우드 환경에서 조회할 수 있도록 설정해주어야 한다
03. GUI 원격 접속 설정
- 웹 서버 실행화면은 웹 브라우저를 통해서 확인할 수 있지만, 웹 브라우저는 GUI 기반의 프로그램이라는 점에서 터미널 화면에서 자체적으로 실행화면을 조회하는 것은 불가능
- EC2 인스턴스의 GUI 원격 접속을 위해서는 크게 VNC, RDP를 이용한 X-Windows 데스크톱 환경 원격 접속과 Putty, MobaXtream 등의 터미널 프로그램에서 지원하는 플러그인을 통한 웹 브라우저를 실행하는 방법이 있다
-1. VNC, RDP 원격 테스크톱 접속
- VNC(Virtual Network Computing)은 리눅스 서버의 ㅌ데스크톱 환경을 원격 접속하기 위해서 사용되는 서버로 사용
- RDP(Renite Desktop Protocol)는 윈도우 서버의 원격 데스크톱을 위한 접속 프로토콜
- 1) EC2 인스턴스와 원격 데스크톱
- EC2 인스턴스의 Ununtu Linux 운영체제에서는 VNC, RDP를 통한 원격 접속을 모두 지원하고 있지만 기본으로 설치되어 있지 않다, 그러므로 데스크톱 환경 구축을 위한 X-Windows 및 VNC Server, RDP Server 등의 패키지를 설치해야 한다
- But, VNC, RDP를 통한 원격 데스크탑 접속을 권장하지 않는다
- 만약 VNC, RDP 원격 데스크톱 접속 방식이 리눅스 서버를 개인 또는 기업에서 집접 보유하여 관리하는 형태라면, VMC, RDP를 사용한 원격 데스크톱 환경에서 웹 브라우저를 싱행하여 개발 화면을 조회하는 것이 용이할 수 있다
- 그러나 AWS EC2 인스턴스를 사용할 경우에는 AWS의 가상 서버를 임대해서 사용하므로, 웹 브라우저 실행을 위해서 X-Windows 데스크톱 환경을 구축하고 원격 접속을 하는 것은 효율이 높지 않다
- 2) VNC Server 설정
- VNCServer, VNC4Server, TigerVNC, UltraVNC, TightVNC 등이 있고 어떤것을 사용하더라도 큰 차이는 없다
- VNC4Server를 사용할 예정
- 데스크톱 환경 구축을 위해서 Ununtu Desktop, VNC4Server 외에도 관련된 여러 패키지를 설치해야 하며, 이에 따른 전체 설치 패키지 목록은 다음과 같다
- ubuntu-desktop : Ubuntu 데스크톱 환경 구축 프로그램
- VNC4Server : NVC Server 실행 프로그램
- gnome-panel : Ununtu 데스크톱 환경 내 상/하단 작업 표시줄
- gnome-settings-daemon : 데스크톱 환경의 다양한 세팅 환경 제공
- xfce4 : 경량화 데스크톱 환경, Ubuntu Desktop과 같이 호환되어 사용됨
- metacity : GNOME 환경에서 사용되는 기본 차 환경
- nautilus : Ubuntu의 기본 File Manager
$ sudo apt-get install ubuntu-desktop VNC4Server gnome-panel gnome-settings-daemon xfce4 metacity nautilus
Author And Source
이 문제에 관하여(AWS클라우드기반의 Django(2. Django 개발환경 구축)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@ansalstmd/AWS클라우드기반의-Django2.-Django-개발환경-구축
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1) Python 가상환경의 이해
- 독립된 환경에서 테스트와 개발을 진행할 수 있도록 해주는 가상 환경
- VirtualEnv를 통해서 생성된 환경에서 독립적으로 Python 패키지를 설치하고 관리
2) VirtualEnv 설치
$ pip3 install --user virtualenv
- '--user' 옵션, 현재 사용자에게 대한 설치 권한을 부여하기 위해서 사용
- 반대로 VirtualEnv 가상환경 상에서는 가상환경 내에서만 pip 패키지가 사용되므로 '--user' 옵션을 별도로 사용하지 않아도 된다
- virtualenv --version 버전 확인이 안되면 .profile 파일의 경로 수정
$ cat .profile
$ source ~/.profile
$ virtualenv --version
- 새 가상환경 생성
$ virtualenv venv
- 가상환경 폴더 트리 확인
$ tree venv
- 가상환경 실행 및 종료
# 가상환경 실행
$ source venv/bin/activate
# 가상환경 종료
$ deactivate
$ source venv/bin/activate
(venv) pip install django
- pytz는 시간대 정의를 위한 패키지로, Olson Timezone Database로부터 나온 세계 표준 시간대에 대한 시간으 모두 정의한 규격
(venv) pip freeze
(venv) django-admin startproject test_proj
- 웹 서버 가동 명령어는 Python의 manage.py 파일을 사용
- manage.py 파일은 Django 프로젝트 구동 및 관리를 위한 모든 기능을 수행하는 파일
(venv) cd test_proj
(venv) python manage.py runserver
- 빨간 텍스튼ㄴ 처음 실행했을 때 나타난 메시지로, 'python manage.py migrate' 명령을 실행을 먼저 하는 것을 권장하는 메시지 이다
- Django 웹 어플리케이션을 생성한 후 별도의 환경 설정을 변경하지 않았을 경우에는 Django에 내장된 admin, auth, contenttypes, sessions 앱도 같이 실행
- 이들 앱은 각각의 DB 모델을 가지고 있으며, DB 모델을 반영하지 않고 웹 서버를 가동할 경우에 위와 같은 경고 메시지를 표현
- migrate는 Django 프로젝트가 DB와 연동할 때 연돌을 위한 DB 모델을 반영하기 위한 명령어이다
(venv) python manage.py migrate (venv) pthon manage.py runserver
- 현재 접속되어 있는 환경은개발을 현재 진행하려는 PC의 로컬환경이 아닌, EC2 인스턴스에 접속중인 클라우드 환경이다
- 그렇기 때문에 웹 서버 실행화면 역시 클라우드 환경에서 조회할 수 있도록 설정해주어야 한다
- EC2 인스턴스의 Ununtu Linux 운영체제에서는 VNC, RDP를 통한 원격 접속을 모두 지원하고 있지만 기본으로 설치되어 있지 않다, 그러므로 데스크톱 환경 구축을 위한 X-Windows 및 VNC Server, RDP Server 등의 패키지를 설치해야 한다
- But, VNC, RDP를 통한 원격 데스크탑 접속을 권장하지 않는다
- 만약 VNC, RDP 원격 데스크톱 접속 방식이 리눅스 서버를 개인 또는 기업에서 집접 보유하여 관리하는 형태라면, VMC, RDP를 사용한 원격 데스크톱 환경에서 웹 브라우저를 싱행하여 개발 화면을 조회하는 것이 용이할 수 있다
- 그러나 AWS EC2 인스턴스를 사용할 경우에는 AWS의 가상 서버를 임대해서 사용하므로, 웹 브라우저 실행을 위해서 X-Windows 데스크톱 환경을 구축하고 원격 접속을 하는 것은 효율이 높지 않다
- VNCServer, VNC4Server, TigerVNC, UltraVNC, TightVNC 등이 있고 어떤것을 사용하더라도 큰 차이는 없다
- VNC4Server를 사용할 예정
- 데스크톱 환경 구축을 위해서 Ununtu Desktop, VNC4Server 외에도 관련된 여러 패키지를 설치해야 하며, 이에 따른 전체 설치 패키지 목록은 다음과 같다
- ubuntu-desktop : Ubuntu 데스크톱 환경 구축 프로그램
- VNC4Server : NVC Server 실행 프로그램
- gnome-panel : Ununtu 데스크톱 환경 내 상/하단 작업 표시줄
- gnome-settings-daemon : 데스크톱 환경의 다양한 세팅 환경 제공
- xfce4 : 경량화 데스크톱 환경, Ubuntu Desktop과 같이 호환되어 사용됨
- metacity : GNOME 환경에서 사용되는 기본 차 환경
- nautilus : Ubuntu의 기본 File Manager
$ sudo apt-get install ubuntu-desktop VNC4Server gnome-panel gnome-settings-daemon xfce4 metacity nautilus
Author And Source
이 문제에 관하여(AWS클라우드기반의 Django(2. Django 개발환경 구축)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ansalstmd/AWS클라우드기반의-Django2.-Django-개발환경-구축저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)