0부터 시작하는 Django 공부 - DB 연동 & Model 만들기 & Data 조회

Jaehong Lee·2022년 6월 17일
0
post-thumbnail

0. 시작하기 앞서

  • 간단한 이야기 : 컨테이너는 가상화 기술로 VMWARE는 본체의 시스템 자원을 가져다 써서 휘발성이 적지만 컨테이너는 가벼워서 빠른 생성 속도를 가지지만 휘발성이 크다. 따라서 컨테이너가 데이터를 잘 처리 못하면 데이터가 날라간다

  • 본 장에서는 이러한 가상머신을 이용해 가상머신에 DATABASE를 설치하여 본 컴퓨터 Django와 연동해볼 것이다

1. APP 생성

  • 1.1 BOARD APP 생성

  • 1.2 메인페이지 url 지정 및 함수 만들기

    • 메인페이지는 url이 입력되지 않으므로 url칸을 비워놓는다
  • 1.3 사용할 template 생성

    • board 폴더를 만들고 안에 index.html을 생성한다

2. static 바꿔주기

  • 장고에서는 css,js,img 파일을 정적으로 다룬다. 따라서 static 폴더에 가져온 부트스트랩 파일을 넣고 불러오는 경로를 static으로 수정해주어야 한다
    • load static
    • CSS
    • JS
    • IMG
    • 이렇게 static으로 css와 js, img를 수정하면 페이지가 잘 나온다

3. DB 서버 연동

  • 3.1 setting

    • ENGIME : 데이터베이스 엔진
    • HOST : DB서버는 다른 컴퓨터에 설치되었기에 그 컴퓨터를 찾아가기 위한 ip주소
    • PORT : ip를 이용해 찾아간 컴퓨터에서 서버 프로그램이 동작중인 포트 번호
    • USER, PASSWORD : 해당 컴퓨터의 서버에 접속하기 위한 아이디, 패스워드
    • NAME : 사용자가 사용할 DB 명칭
  • 3.2 Django migration

    • migration ? migration이란 os환경에서 다른 os로 옮기는 것으로 DB상에서의 DB migration은 기존 DB를 타 DB로 변경하거나 통합시스템 구축 시 여러 DB를 하나의 DB로 합치는 것이다
    • Django migration : Python model class의 수정 및 생성등 변경 내역을 DB의 저장 구조 및 제약 조건을 정의한 Schema에 적용하는 방법으로 장고에서 시본적으로 제공하는 ORM 서비스를 통해 진행된다
  • 3.3 ORM

    • 영속성 : Data를 생성한 프로세스가 종료되도 사라지지 않는 데이터 특성이다. 이 속성을 지니지 않으면 Data는 메모리에만 존재하기에 프로세스 종료시 모두 사라진다
    • ORM : object relational mapping 기술로 파이썬 코드로 DB 처리를 가능하게 해준다. 이는, 객체 관계형 데이터베이스 매핑으로 ORM 기술을 통해 객체 간의 관계를 바탕으로 객체인 CLASS와 DB의 TABLE의 불일치를 해결하여 매핑 시켜주는 것이다.
      • 장점 : 객체 지향적인 코드로 더 직관적이고 코드의 재사용 및 유지보수의 편리성이 증가하며, 객체의 관계를 바탕으로 SQL을 자동으로 생성하기에 DBMS에 대한 종속성이 줄어든다
      • 단점 : 완벽한 ORM 으로만 서비스를 구현하기 어렵다. 이는 프로젝트의 복잡성이 커질수록 난이도가 증가하며, 설계에 신중함을 요한다. 또한 프로시저가 많은 시스템에선 시스템을 다시 객체로 바꿔야되므로 생산성 저하나 리스크가 발생할 수 있다
  • 3.4 가상머신에 maria db 설치

    • utf8 : 텍스트를 utf8로 인코딩하겠다. utf8이란 유니코드의 여러 방식 중 하나로 하나의 문자를 1~4바이트로 표현한다
    • root : 기본 계정으로 이에 대한 패스워드 설정 (qwer1234)
    • enable access : 원래 root 사용자는 해킹위협으로 인해 원격 접속이 안되지만 이 옵션으로 다른 컴퓨터에서 원격으로 접속이 가능하게 한다
    • 서버가 실행됬는지 확인해볼려면 cmd에서 netstat을 통해 port번호를 확인하고 listening 상태인지 확인해야한다. maria db의 포트는 3306
    • 윈도우 절전모드 들어가면 서버 실행 안된다
    • 설치완료
  • 3.5 maria db에 접속하기 위한 클라이언트 프로그램을 통해 접속

    • 5가지 설정 : 가상머신에서 설정한 값을 토대로 입력한다. ip주소는 가상머신 ip
    • 접속 성공!
    • 서버를 확인하면 3306포트에 접속되고 현재 상태가 established된걸 확인할 수 있다
  • 3.6 DB 생성

    • 사용할 DB를 SQL문을 통해 MARIADB에 생성시킨다
  • 3.7 장고와 DB 연동

    • 장고가 db에 접속해서 주고받는 클라이언트가 되야하므로 클라이언트 프로그램 설치 - mysql과 mariadb가 같은 사람이 제작
    • settings.py 파일 설정

      SET SQL_MODE = STRICT_TRANS_TABLES : ORM을 사용하므로 객체를 바꿀때 테이블이 바뀔수 있게 SQL MODE를 설정하겠다
    • DB 변경 사항을 적용 : migrate
    • django_migrations에는 migrate한 기록들이 저장
    • installed_apps에서 orm 기능이 있는 app들에서 내용을 복사해 db에 테이블을 생성
  • 3.8 모델 연습을 위해 앱 생성

  • 3.9 DB 테이블과 1대1 매핑할 모델 생성

    • 문법적으로 봤을때 Fruits라는 이름의 models.Model을 상속 받아 기능을 가져와 쓰는 클래스. migrate하면 이에 대응하는 테이블이 자동으로 생성되게 장고에서 만든 모듈의 클래스를 가져옴
    • fruits라는 테이블을 만드는데 변수들을 저장할 수 있게 틀을 만든것
    • models에 들어있는 클래스를 가지고 객체를 만드는것. 앞에가 대문자이다
    • CHAR, TEXT, FLOAT, INT를 models모듈의 Model클래스의 method들을 이용하여 값을 반환받아 저장한다고 객체를 정의한다
    • datatimefield : 시간을 로그형태로 저장 - auto now add로 data가 저장될때 자동으로 시간이 저장되게 설정
    • class의 속성들은 model의 field이며 DB의 column이다
  • 3.10 모델을 DB에 적용전 확인

    • 'makemigrations'은 현재 인스톨된 앱들이 마이그레이션 됬는지 확인 하는 것인데 뒤에 앱 이름을 적으면 해당 앱만 확인한다

      0001_initial 파일이 생기는데 이 파일은 모델에서 생성한 사항이나, 변경 사항된 사항을 감지하여 생성한 파일. 단순하게 마이그레이션을 진행할 구조를 생성하는 것이므로, 적용은 되지는 않습니다.어디까지 migration이 적용됬는지 파일에 대한 migration을 저장. 이 파일을 통해 migrate를 진행해야 DB에 적용
  • 3.11 DB에 적용

  • 3.12 Data 입력 페이지 생성 및 DB 저장

      1. 함수 생성
    • 위에서 부터 각각 사용자에게 과일정보 입력 페이지, 사용자가 form 을 받아서 data를 전달해주고 db에 저장 페이지, db 내용 보는 페이지로 정의
      1. 입력 페이지인 create.html 생성
      1. 입력된 data를 받아올 함수 작성
      1. 모델이라는 틀에 데이터를 저장해서 DB에 저장해야 하므로 product.models모듈에서 Fruits 클래스를 임포트해서 객체를 생성하고, 각 속성에 값 저장해서 save한다
        • 객체.save() : modles의 메소드로 이 구분을 사용하면 ORM 기술을 통해 자동으로 sql문으로 바꿔서 DB에 저장
    • 실행하면 페이지
    • db에 저장 확인
    • 로그 시간은 data 저장시 자동으로 저장되게 설정했으므로 입력값을 안해도 된다
  • 3.13 DB에서 불러오기

    • 여러개의 data를 불러오는 법과 하나를 불러오는 법이 있다
    1. 여러개 조회 ( ex. 목록 )
      • Fruits라는 model 안에 들어있는 objects 객체에 all 메소드를 통해 model의 Data를 모두 fruits에 저장한다. 이때, 이 fruits는 model 객체가 저장되는 것이다. 이 과정에는 자동으로 sql문으로 변환되어 db로부터 data를 가져오는 과정까지 있다.
      • all, filter는 다수의 model Data가 담긴 list 형태로, get은 단일 model Data가 담긴 형태로 저장된다
      • 결과 : 리스트 형태로 모든 객체를 목록에서 가져온다
      • 불러온 모든 객체를 context에 담아 사용자에게 전달해준다. 딕셔너리 형태로 가져온다
      • 반복문으로 객체 하나씩 빼와야한다, html 반복문으로 fruits의 객체를 fruit에 저장해서 출력. 키값이 datas로 했으므로 이 키값에 해당하는 클래스의 리스트에서 DB에서 받아온 모델 클래스를 뽑아와 각 속성을 출력해본다, 이름 자체에는 ID가 저장. 즉, 딕셔너리 안에 리스트 안에 클래스 안에 속성을 뽑아서 출력하는 원리
      • 결과
    1. 하나씩 조회
      • objects.filter( 조건 )을 이용해 조건에 해당 하는 것만 출력한다
      • 결과
      • ID가 1인 객체만 불러와서 출력한 것을 확인할 수 있다
profile
멋진 엔지니어가 될 때까지

0개의 댓글

관련 채용 정보