백엔드/django

[SGC]03_Django 프로젝트 설계

묘걍 2024. 1. 27. 20:20

👉🏻 Django Framework Flow

1️⃣ request

  • 클라이언트가 데이터를 요청한다
    • 클라이언트는 브라우저나 앱 등
  • 요청할 때 URL로 요청한다

2️⃣ URLConf

  • Django는 URLconf라는 방식
  • urls.py안에 어떤 요청에 대한 처리 방법 명시
    • URL과 Django 프레임워크에서 실행할 함수/메서드와 매핑되어있음
  • 어떤 view / 어떤 함수가 실행될지 결정
  • 사용자가 요청한 URL을 어떻게 파싱해서 그것으로 View한테 어떤 view가 실행되어야할지 설정

3️⃣ View로

  • View 에서 실제 실행할 함수나 메서드 실행

4️⃣ Model에게 작업 위임

  • DB 작업이 필요할 경우
  • View가 Model에게 위임

5️⃣ DB에 접근

  • 필요한 데이터 가공

6️⃣ 데이터 전달

  • DB가 Model에게 가공된 데이터를 전달

7️⃣ 데이터 전달

  • Model이 View에게 데이터 전달
  • "당신이 원하는 데이터를 이렇게~ 뽑았다"
  • View 는 추가로 필요한 보조 작업을 실행

8️⃣ Template에게 요청

  • 사용자에게 응답을 하기 위해
  • 가장 알맞은 html 폼을 달라
  • Template 안에 있는 여러 html파일 중에 특정한 것을 뽑아

9️⃣ response

  • 위에서 뽑은 html로 응답

 

👉🏻 URLconf (urls.py)

URL 맵핑

✅ 위치

tempProject/tempPjt/urls.py

  • 프로젝트 폴더 내부 기본 폴더에 urls.py

🧩 urlpatterns

출처: SEOUL G-캠프 유튜브

  • 리스트 형태
  • 컨테이너 자료형
  • path 함수 이용
  • 사이트가 복잡해지고 많은 기능이 있으면 내용이 많이 늘어난다

✅ path 함수

  • 콤마(,)로 구분자 이용
  • 앞 부분이 클라이언트가 요청한 URL
  • path('student/register/', views.student_register) 
    • 서버에 미리 '만약 클라이언트가 http://도메인/student/register로 접속한다면 나는 view안에 있는 student_register 함수를 실행하겠다' 고 말해두는 것
    • 앞 부분이 URL(클라이언트 요청 URL)
    • 뒷부분이 view(함수 또는 메서드)

🧩 코드 살펴보기

강사님이 완성본 코드로 설명해주셔서 일단 강사님 코드로

  • admin: 장고는 기본적으로 관리자 모드를 제공하고 있다
    • url에 admin이라고 들어오면 admin 사이트로 유도하는 view가 실행된다
  • student라고 들어오면 students 디렉토리에 있는 urls.py로 가라

출처: SEOUL G-캠프 유튜브

  • 들어온 url에 따라 어떤 함수가 실행될지를 미리 정의
  • student 뒤에 reg로 들어왔다면 regStudet(학생 등록 함수)가 실행되도록
    • 나머지에 대해서도 마찬가지
  • <str:name>의 경우 요청이 들어올 때 앞에 값이 붙는 것
    • name에 있는 값이 뒤에 있는 함수의 매개변수가 된다

👉🏻 View (views.py)

  • URLconf에서 url요청에 따른 실행해야할 함수

✅ 위치

tempProject/students/views.py

🧩 함수 정의

출처: SEOUL G-캠프 유튜브

  • student/register로 url 요청이 들어왔다면 view 모듈에 있는 student_register함수가 실행되면 된다
    • 함수 이름 맞춰줘야함 
  • 매개변수로는 request 객체가 들어올 수 있다
  • 함수 안에 DB 작업이나 사용자가 원하는 결과를 낼 수 있는 작업을 정의한다
  • 그것을 HttpResponse()객체로 반환한다

  • view에서 모든 작업이 끝난 후 Template에서 적합한 템플릿을 가져옴
  • 그 템플릿에 정보를 담아 client에게 response해준다 
  • 뷰는 전체적인 지휘자/관리자라고 할 수 있다
    • 클라이언트와 서버의 관계 관리
    • Model과의 관계 관리
    • Template와의 관계도 관리

클라이언트의 요청에 따른 애플리케이션 실행 결과를 Template(html), 에러 메시지 등을 이용해 클라이언트에게 response한다

👉🏻 Model (models.py)

✅ 위치

tempProject/student/models.py

🧩 ORM (Object Relational Mapping) 사용

출처: SEOUL G-캠프 유튜브

  • class Student에서 Student가 DB 이름
  • DB를 만들고 나서 DB 안에 테이블을 만드는 방식
    • ORM방식
    • 쿼리스트링 문법을 이용하지 않고 간단한 방식으로 만든다
  • CharField: 필드명
    • 5개의 필드가 존재하는 것
    • 각 필드에 해당하는 데이터타입 (문자/숫자)과 범위/기본값
  • Create Table과 같은 것
    • 그게 class로 만들어진 것

출처: SEOUL G-캠프 유튜브

  • Model 클래스를 상속받아서 내가 생성하고자 하는 테이블을 생성함
  • 테이블 이름은 애플리케이션이름_클래스명 
  • DB가 있고, DB를 다루기 위한 언어 SQL 쿼리문이 있다
    • 이를 클래스로 매핑해서 조금더 쉽게 사용할 수 있도록 만들어진 방식이 ORM방식이다

👉🏻 Template (*.html)

✅ 위치

  • 애플리케이션 디렉토리 → templates라는 디렉토리 생성
    • 개발자가 임의로 만들어서 쓰는 것
    • 이 안에 개발자가 정한대로 경로와 html 문서를 만들어서 사용함
  • 장고가 만들어준게 아님!!
  • 그렇기 때문에 장고가 이 templates 파일들을 찾을 수 있도록 알려줘야 한다

🧩 TEMPLATES에 추가하기

tempProject/tempPjt/settings.py 에서 Template 파일 검색 디렉토리 정의

출처: SEOUL G-캠프 유튜브

  • settings.py: 프로그램의 전체적인 환경설정
  • INSTALLED_APPS: 설치된 앱들의 목록을 적어줘야 한다

출처: SEOUL G-캠프 유튜브

  • Students앱의 StudentsConfig라고 명시되어있음
  • 이 경로의 이름은 내가 만든 애플리케이션 안에 apps.py라는 기본 파일이 생성된다
    • 그 안에 현재 해당하는 애플리케이션이 class로 정의되어 있고
    • 출처: SEOUL G-캠프 유튜브
    • 그것을 그대로 가져와서 넣어주면 된다
      • package name까지
  • 그 외에 나머지는 기본 생성되는 것

👉🏻 프로젝트 설정

✅ 위치

/tempPjt/settings.py

프로젝트의 전체적인 설정을 담당한다

🧩 모든 애플리케이션 설정 파일에 등록

✅ 애플리케이션의 설정 클래스를 이용한 등록

출처: SEOUL G-캠프 유튜브

  • 애플리케이션을 만들고 나면 그 앱의 apps.py에 들어가서
  • 클래스명(패키지명까지)을 settings.py의 INSTALLED_APPS에 명시해준다

🧩 개발모드와 운영모드 설정

출처: SEOUL G-캠프 유튜브
출처: SEOUL G-캠프 유튜브

✅ 개발모드

  • settings.py 초반에 DEBUG모드가 True로 설정되어있다
  • 아직 상용화 되지 않은 웹서비스

✅ 운영모드

  • DEBUG모드가 False로 되어있다면 운영모드
  • 상용화 모드
  • 상용화되어있다는건 서버 고유의 IP주소가 있다는 것

출처: SEOUL G-캠프 유튜브
출처: SEOUL G-캠프 유튜브

✅ 개발모드

  • 비어있거나 / Localhost라고 입력하면
  • 로컬에서 127.0.0.1 혹은 개인 DH서버로부터 받은 사설 IP로 웹서비스를 접근해 테스트해볼 수 있다

✅ 운영모드

  • 상용화된 서비스의 고유 IP주소를 명시

👉🏻 기본 사용자 및 그룹테이블 생성

  • 장고의 좋은 기능
  • 다른 프레임워크는 관리자모드를 따로 만들어줘야함
    • 홈페이지를 두 개 만드는 / 웹서비스를 두 개 만드는 것과 다름 없음
  • 장고는 빠른 생산성을 위해 기본적으로 관리자모드를 제공하고 있다
    • 프로젝트를 하나 만들면 자동으로 관리자모드가 생성됨

🧩 관리자모드 사용하기

✅ 사용자 및 그룹테이블 생성

출처: SEOUL G-캠프 유튜브

  • 기본적으로 사용하는 사용자
  • 그룹테이블
    • 관리자들이 모여있는 그룹테이블
  • 프로젝트 안에 들어가서 python manage.py를 migrate

출처: SEOUL G-캠프 유튜브

  • 하면 관리자 모드가 열린다

출처: SEOUL G-캠프 유튜브

  • DB도 생성한다

출처: SEOUL G-캠프 유튜브

  • DB 변경이 있을 때 마다 위 명령어로 models.py의 내용을 적용시킨다

👉🏻 관리자 계정 생성 및 서버 구동

🧩 관리자 계정 생성

출처: SEOUL G-캠프 유튜브

  • 기본 사용자와 그룹 테이블을 생성하고나서 관리자모드를 들어가게 되는데
  • 관리자모드가 바로 들어가게 되는 건 아니다
    • 일단 생성은 됐음
    • 하지만 관리자 계정암호가 필요
  • manage.py를 이용해 계정과 암호를 설정해줄 수 있다

출처: SEOUL G-캠프 유튜브

  • 이름은 무엇으로 할건지
  • 메일 주소는 무엇인지
  • 비밀번호는 무엇으로 할건지 (+확인)

🧩 서버 구동

  • 파이썬은 내가 따로 서버를 만들어 놓지 않아도 기본적으로 테스트 서버를 제공해준다

출처: SEOUL G-캠프 유튜브

  • manage.py를 통해 이용할 수 있다

출처: SEOUL G-캠프 유튜브

  • 웹사이트에서 127.0.0.1(내 로컬):8000(port번호)를 통해 접근할 수 있다

모의로 테스트를 해볼 수 있다

🧩 생성 이후

✅ client

출처: SEOUL G-캠프 유튜브

  • 클라이언트에게 보여지는 화면

✅ 관리자

출처: SEOUL G-캠프 유튜브

  • 뒤에 admin을 붙이면 관리자 화면
  • 관리자 계정 생성시 만들었던 계정암호를 입력하면 관리자모드로 들어갈 수 있다
  • 관리자모드로 들어가면 그룹과 사용자에 대한 테이블이 만들어져 있다
    • DB가 만들어져 있음
    • 사용자 및 그룹테이블 생성을 했기 때문에 기본 테이블이 만들어진 것
  • 이 외에 애플리케이션을 위한 테이블을 만들 경우 계속 추가된다

 

 

 

 

 

 

 

출처: https://youtu.be/Go-NZbOgcUE?si=qJzBzs2jBY4CtHAD