Django 공식문서를 참조했습니다.

 

데이터베이스 셋업

기본으로 설치되어 있는 SQLite를 사용할 수 있다.

 

  • SQLite 진입
# db.sqlite3 가 있는 위치에서
sqlite3 db.sqlite3

 

모델 만들기

모델이란, 부가적인 메타데이터를 가진 데이터베이스 구조!

 

1. polls/models.py에서 모델 작성

Question과 Choice 테이블을 만든다.

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

 

모델 활성화

모델을 통해 장고는 다음과 같은 일을 한다.

  • 이 앱을 위한 데이터베이스 스키마 생성 (CREATE TABLE statements)
  • Question와 Choice 객체에 대한 파이썬 데이터베이스 접근 API 생성

 

2. mysite/settings.py 수정

프로젝트에 polls 앱이 있다는 것을 알려야 한다.

INSTALLED_APPS에 PollsConfig 클래스 추가

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 

3. 변경사항에 대한 마이그레이션 생성

모델에 대한 변경사항을 장고에 알리는 것

python manage.py makemigrations

💡 마이그레이션이란? Migrations

장고에서 모델에 대한 변경사항을 데이터베이스 스키마에 전파하는 방법

장고는 ORM을 사용하는데 DB 스키마를 git처럼 버전 관리 할 수 있도록 함

하나의 마이그레이션 파일은 해당 마이그레이션이 생성된 시점의 구조를 가짐

 

4. 변경사항을 데이터베이스에 적용

모델과 관련된 테이블을 생성한다.

python manage.py migrate

 

🧐 마이그레이션을 만드는 명령과 적용하는 명령이 분리된 이유는 무엇일까?

버전 관리 시스템에 마이그레이션을 커밋하고 앱과 함께 출시할 수 있도록 하기 위해서이다.

 

✅ 공식문서

https://docs.djangoproject.com/en/4.1/

 

⬇️ Django 설치 전이라면 아래 글을 참고해보세요!

 

맥(Mac)에서 Django 개발환경 구축 및 설치하기

개발환경 macbook pro (2019) macOS Monterey 12.6.2 python 3.9.6 django 4.1.6 python3 설치 1. 설치 여부 확인 python3 --version 2. 설치가 되어있지 않다면 설치 python 공식 다운로드 (3.9.6으로 설치함) https://www.python.org/do

myminju.tistory.com

 

https://static.djangoproject.com/img/logos/django-logo-negative.1d528e2cb5fb.png

 

개발환경

  • macbook pro (2019)
  • macOS Monterey 12.6.2
  • python 3.9.6
  • django 4.1.6

Writing your first Django app

장고 프로젝트 생성

django-admin startproject mysite

 

프로젝트 생성 후 파일 목록

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
  • mysite/ : 프로젝트를 담는 컨테이너 폴더, 루트 디렉토리이며 이름 변경 가능
    • manage.py : 여러가지 방법으로 장고 프로젝트와 상호작용 하는 커맨드라인 유틸리티 - manage.py에 대한 디테일
    • 내부 mysite/ : 프로젝트를 위한 실제 파이썬 패키지들이 저장됨
      • __init__.py : 파이썬에게 이 디렉토리를 파이썬 패키지로 인식하도록 하는 비어있는 파일
      • settings.py : 프로젝트의 setting과 configuration  - Django settings
      • ursl.py : 프로젝트의 url 선언
      • asgi.py : ASGI 호환 웹에 배포하기 위한 엔트리 포인트
      • wsgi.py : WSGI 호환 웹에 배포하기 위한 엔트리 포인트

 

개발 서버 실행

python manage.py runserver
  • 언제 runserver를 해야할까?
    자동 변경 기능으로 인해 개발 서버는 요청이 들어올 때마다 자동으로 파이썬 코드를 다시 불러온다.
    즉, 코드 변경 사항을 적용하기 위해서는 굳이 서버를 다시 시작하지 않아도 된다.
    그러나, 파일 추가 등의 작업은 개발서버가 자동으로 인식하지 못하기 때문에 서버를 다시 시작해야한다.

설문조사 앱 생성

python manage.py startapp polls

💡 프로젝트 vs 앱

  • 앱은 블로그 시스템, 공공 기록 데이터베이스 또는 소규모 투표 앱과 같은 작업을 수행하는 웹 애플리케이션
  • 프로젝트는 특정 웹 사이트에 대한 구성 및 앱의 모음
  • 프로젝트는 여러 앱을 포함할 수 있고, 앱은 여러 프로젝트에 있을 수 있다.

 

앱 생성 후 파일 목록

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

첫번째 뷰 띄우기

1. polls/views.py에 아래 코드 추가

# polls/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

 

2. polls/urls.py에 URL 매핑

뷰를 호출하려면 이와 연결된 URL이 있어야 하고, 이를 위해 URLConf가 사용된다.

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

 

3. mysite/urls.py에서 모듈 가리키기

최상위 URLConf에서 polls.urls 모듈을 바라보게 설정한다.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

💡 include()

다른 URLConf를 참조하도록 함

URL이 일치하는 부분까지 잘라내고 남은 부분을 included URLConf로 보냄

 

💡 path()

필수 파라미터 : route, view

선택 파라미터 : kwargs, name

 

4. http://localhost:8000/polls/ 에 접속하여 연결 확인하기

index 뷰가 URLConf에 연결되어 잘 나오는 것을 확인할 수 있다!

https://i0.wp.com/hanamon.kr/wp-content/uploads/2021/05/django.jpeg?fit=1280%2C720&ssl=1

 

개발환경

  • macbook pro (2019)
  • macOS Monterey 12.6.2
  • python 3.9.6
  • django 4.1.6

python3 설치

1. 설치 여부 확인

python3 --version

 

2. 설치가 되어있지 않다면 설치

  • python 공식 다운로드 (3.9.6 설치)
 

Download Python

The official home of the Python Programming Language

www.python.org

 

 

  • python3 명령어를 python으로 바꿀 수 있도록 환경변수 설정
    • vi ~/.zshrc 실행 후 하단에 아래 코드 기입
alias python="python3"
# Setting PATH for Python 3.9
export PATH="/Library/Frameworks/Python.framework/Version/3.9/bin:${PATH}"

 

가상환경 구축

1. virtualenvwrapper 설치

sudo pip install virtualenvwrapper

 

2.  하단에 환경변수 추가

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

 

3. 터미널에서 source ~/.zshrc 실행

 

4. 가상환경 생성

mkvirtualenv [가상환경명]

 

5. 가상환경 활성화

worknon [가상환경명]

 

가상환경 명령어 모음

  • 가상환경 생성
mkvirtualenv [가상환경명]
  • 사용가능한 가상환경 목록 확인
workon
  • 가상환경 활성화
worknon [가상환경명]
  • 가상환경 비활성화
deactivate
  • 가상환경 제거
rmvirtualenv [가상환경명]

 

장고 설치

❗️가상환경을 실행한 상태에서 하는 것 잊지 말기 ⭐️

 

pip install django

 

  • 설치가 잘 되었는지 테스트 (파이썬이 장고 모듈을 찾을 수 있는지 확인)
python -m django --version

 

장고 프로젝트 생성

  • 생성
django-admin startproject [프로젝트명]

 

  • settings.py에 Timezone 설정
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'  # 한국 시간 적용 
USE_I18N = True
USE_TZ = False  # False 로 설정해야 DB에 변경 된 TIME_ZONE 이 반영 됨

 

서버 구동 확인

cd [프로젝트명]
python manage.py runserver

# python manage.py runserver [IP]:[port]

 

  • http://127.0.0.1:8000/ 접속

장고 로켓이 잘 뜨는 것을 확인할 수 있다!

3장. 운영체제

 

리눅스

  • 레드햇 계열 : RHEL, CentOS, Fedora, Vine Linux, Scientific Linux, Oracle Linux 등
  • 데비안 계열 : Debian, Ubuntu, KNOPPIX, Linux Mine 등

윈도우 서버

  • 윈도우 서버에서 실행되는 소프트웨어를 사용할 때
  • 닷넷(.NET) 프레임워크를 사용할 때
  • 액티브 디렉터리 환경을 사용할 때

유닉스

  • 대부분 엔터프라이즈 서버용으로 사용
  • AIX, Solaris, HP-UX

1장. 인프라 엔지니어의 업무

 

01 인프라 엔지니어의 업무

인프라 설계

  1. 인프라를 만든 목적을 잘 이해한다.
  2. 목적을 달성하기 위해 필요한 기능이나 성능 등을 기준으로 조건을 정리한다.
  3. 조건에 맞는 기획서와 설계서를 작성한다. 비용, 기간 등을 예상
  4. 책임자에게 결재를 올린다.

인프라 구축

  • 작업 내용 : 기기 운반과 조립, 장착, 설치, 설정, 동작 테스트, 부하 테스트 등
  • 인프라 엔지니어가 직접하거나 오퍼레이터나 외부 업체에 맡김
  • SI(System Integration) 업계
    • CE : 기기 설치 관련 하드웨어 작업
    • SE : 서버나 스토리지 관련 시스템 작업
    • NE : 네트워크 장비 관련 네트워크 작업
  • 웹기반 업계
    • 보통 역할 분담을 하지 않고 처음부터 끝까지 인프라 엔지니어의 몫

인프라 운영

  • 장애 대응
  • 수용량 관리
  • 인프라가 원인이 아닌 문제의 파악

 

02 IT 인프라를 구성하는 요소

  • 퍼실리티 : 데이터 센터, 랙, 에어컨, 발전기, 변압기, 소화 설비 등
  • 서버, 스토리지
  • 네트워크 : 서버와 스토리지를 연결하고 인터넷에 접속

 

03 기술자 관점에서 보는 인프라 엔지니어

정확한 지식, 정보 수집력, 최신 동향

서버 하드웨어

  • 기본 구성
    • 메인보드, CPU(Central Processing Unit), 메모리, 디스크, NIC(Network Interface Card), PSU(Power Supply Unit)
  • 종류
    • IA(Intel Archictecture) 서버
    • 엔터프라이즈 서버

서버 운영체제

리눅스, 윈도, 유닉스

실전 경험이 중요

스토리지

  • 디스크의 대용량화, 플래시 디스크의 등장으로 인한 고속화, 데이터의 폭발적 증가로 인해 신기술 등장
  • 신기술 : 스토리지 가상화, 씬 프로비저닝, 중복 제거, 스냅샷 등
  • 새로운 기술의 장단점을 신중하게 파악하고 비용 대비 효과 측면에서 적절한 스토리지 선정 필요

네트워크 설계와 구축

  • TCP/IP
  • 네트워크를 보이지 않는 것이어서 네트워크 오류시 원인을 찾아내긴 어려움
    • 통신이 잘 되지 않으면 자신들의 문제인지 연결된 외부 네트워크 문제인지 파악 필요
  • 네트워크 구축시 설계 단계부터 모든 각도에서 검토

네트워크 장비

  • 역할 : 통신의 교환
  • 장비 선정 시 고려할 점
    • 연결하는 서버 및 네트워크 장비의 수와 커넥터의 차이
    • 어느 정도의 통신량을 얼마나 빠르게 교환할지
    • 라우터, L2 스위치, L3 스위치, L4 스위치, L7 스위치의 차이 파악
  • 업체마다 명령 체계가 다르기 때문에 업체별 명령 체계를 학습해야 함
  • 특정 업체의 고유 기능을 이용할 때 다른 업체의 장비로 다룰 수 없음
  • 이러한 문제를 피하고자 도입할 네트워크 장비를 통일하는 편

 

04 선정자로서의 인프라 엔지니어

정답인 선택지는 없으며, 프로젝트의 성질이나 기업문화 혹은 최종 결재권자의 사고 방식 등에 의해 달라짐

시스템 구성

  • 몇 가지 제안 중에서 최선의 구성을 선택
    • 최소 구성, 이중화 구성, 데이터 영역 분리 구성 등

서버 사양 선정

CPU, 메모리, 디스크, RAID, NIC, PSU의 이중화 필요성, 보수 연수, 보수 레벨, 확장성, 물리적 크기 및 중량 등

네트워크 구성

  • 랙에 몇 개의 스위치를 설치할 것인가?
  • 각 스위치의 수용량은 어느 정도로 할 것인가?
  • 채택할 업체
  • 보증 기간
  • 네트워크 인터페이스별로 통신량을 정하고 이중화 여부를 결정

데이터베이스 설계

  • RDBMS 선정 (오라클, SQL Server, MySQL, PostgreSQL 등)
  • 필요 용량 계산
  • 데이터베이스 스키마와 물리적인 데이터 배치 결정

운영 시스템

  • 시스템을 어떻게 감시하고 운영할 것인직 검토
    • 장애의 발생을 시스템 감시 도구로 감지하고, 장배 발생을 감지했을 때만 사원이 대응한다.
    • 1차 대응은 MSP 업체에 위임한다. 그래도 해결되지 않을 때만 전화 등으로 사원에게 문제를 전달해서 단계적으로 대응
    • 별도의 조직을 만들어 24시간, 365일 감시 운용 시스템 구축
  • 서비스, 기술, 시스템 별로 개발자, 서버 엔지니어, 네트워크 엔지니어 등 사내 책임 범위 결정

+ Recent posts