잡동사니 : 장고레플릿

김기욱·2020년 8월 13일
0

위의 구조가 본 과제에 놓여있는 파일 구조입니다.
main 디렉토리 내부 파일의 명세는 위와 같습니다.

  • 'views.py' 는 파일이름을 봤을 때는 화면에 대한 파일이라고 생각하실 수 있지만, 이 파일은 로직을 담당하는 파일입니다. 앞으로 여러분이 장고프로젝트를 진행하면서 제일 많이 다루게될 파일 입니다.
  • 'migrations 디렉토리' 는 models.py파일에 정의한 테이블 구조를 manage.py의 makemigrations 옵션을 통해 생성되는 파일이 저장되는 디렉토리 입니다.
  • 'models.py' 는 바로 장고의 핵심 기능중 하나인 ORM과 관련되어 있는 파일입니다. 단순하게는 데이터베이스의 테이블을 정의하는 파일이라고 생각하시면 좋습니다. 장고 ORM은 뒤에 설명이 있으니, 지금은 이정도로 정리하도록 하겠습니다.
  • 'settings.py' 파일은 이름대로 프로젝트 관련 모든 설정 정보를 담고 있는 파일입니다.
  • 'urls.py' 파일은 이름대로 url 경로에 대한 부분입니다. 이부분은 아직 잘 이해가 되지 않으실 수 있지만, 괜찮습니다.**

네이버를 예로 들어보겠습니다. 네이버에는 다양한 서비스가 존재합니다.
그 중 여러분의 이해를 돕기 쉬운 서비스인 velog를 예로 들겠습니다.
velog.io에서 특정 사용자의 주소 keywookkim를 표시하려면 어떻게 할까요?

바로 velog.io/keywookkim 입니다. 이것이 바로 경로 입니다.
url에서 특정 사용자의 velog 향하기 위해 지정된 사용자 명으로 가기 위해 설정하는 것이죠. 이러한 일을 하는 것이 바로 urls.py 파일 입니다.

views.py를 다음과 같이 수정해보자.
json 모듈을 import해서 튜토리얼 내내 진행했던 http로 받는 데이터에서 벗어나 Json형식의 데이터를 받아들이도록 한다. 잠깐, 그전에 Json이 뭔지 알고가자!

Json 이란?
JavaScript Object Notation라는 의미의 축약어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 Data교환형식이다.
Json 표현식은 사람과 기계 모두 이해하기 쉬우며 용량이 작아서, 최근에는 JSON이 XML을 대체해서 데이터 전송 등에 많이 사용된다.
Json은 데이터포맷일뿐이며 어떠한 통신 방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다.


Json 특징?
서버와 클라이언트 간에 교류에 많이 사용되며, 자바스크립트 객체 표기법과 아주 유사하다.

View와 JsonResponse를 임포트하면서 http를 Json으로 응답할 수 있게 밑준비를 해준다. Class Mainview라는 클래스를 지정하고 내장메소드인 get을 불러오면서 http 통신메소드 중 Get메소드로 오는 호출에만 응답하여 Jsonresponse로 "Hello World" 로 응답할 수 있게한다.

urls.py또한 다음과 같이 작성한다.

그렇다면 Get 메소드는 어떻게 받을까? urls.py 파일로 받는다.
첫 번째 줄은 장고에서 Url 경로를 처리하기 위한 모듈을 임포트하는 코드다.
두 번째 줄은 내가 작성한 view파일안에 있는 MainView 클래스를 임포트하는 코드다.
장고안에서는 경로를 명시할 때 항상 'urlpatterns'와 같은 리스트 안에 경로를 저장하고 읽어 들인다.

urlpatterns 안에 존재하는 코드를 읽어보면, ''일때 MainView.as_view() 즉 Mainview라는 클래스에 내장된 as_view() 함수를 실행한다.

그럼 as_view() 메소드는 현재 주소인 나를 호출하면 그 호출한 http 메소드가 GET인지 POST인지 Delete인지 Put인지 등을 판별해서 그에 맞는 함수를 실행시켜준다.

Httpie

이번 챕터에서는 POST 메소드 처리를 위한 뷰를 제작하기 전에 Http 메소드를 전송할 수 있는 프로그램인 Httpie를 배워보도록 한다. Httpie를 설치한 후 터미널에 http -v '레플릿 과제 결과창 주소' 를 입력하면 ....

다음과 같이 결과창을 터미널에 불러올 수 있다.

모델링

models.py는 모델링과 관련된 장고의 파일이다. 데이터를 서버에 저장하기 위해서는 Database가 필요하다. 장고에서는 별도로 DB를 설치하지않아도 SQLite3라는 파일기반의 경량화된 DB를 기본 제공한다. 따라서 우리가 장고를 설치해서 사용하는것만으로도 사용할 수 있는 DB가 존재하고 이를 장고에서 컨트롤 하기위헤 장고는 ORM이라는 것을 제공하고 있다.

ORM이란?
Object Relational Mapping 객체 관계 매핑의 준말로 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다. 객체 모델과 관계형 모델간에 불일치가 존재한다. ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동 생성하여 불일치를 해결한다.
데이터베이스 데이터 <-------- 매핑 --------> Object 필드
객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.

이와 같이 ORM을 사용하면서 원하는 모델을 작성하고 다루는 곳이 바로 models.py파일이다. 쉽게 말하면 Database를 잘 몰라도 models.py를 통해 DB를 관리할 수 있다는 사실만 알고 있으면 된다. 먼저 User 정보를 담는 테이블을 작성해보자.
보통 우리는 회원 가입시 name, e-mail, password를 받는다. 또 언제 가입했는지 혹은 언제 회원정보를 수정했는지 알기 위해 시간정보를 저장한다. 레플릿의 models.py에 아래와 같이 작성해보자.

위와 같이 작성하고 별 이상이 없다면 장고는 models.py 파일을 참고해서 migration 및 migrate를 하게된다. 모델을 만들었다면, 남은 일은 뷰에서 모델에 정보를 가져오거나 정보를 입력할 수 있도록 하는 일만 남아있다. 이전에 작성했던 views파일에 변화를 줄 시간이다.

이전에 작성한 MainView 클래스에 post함수를 추가했다. 이렇게 되면 이제 우리는 위에서 만든 Users라는 모델에 데이터를 입력할 수 있는 로직을 만든것이다. 이를 테스트 해보기 위해서는 다음 명령어를 터미널에 입력하면 된다.

http -v '본인 레플릿 페이지 주소' name='테스트용이름' email='테스트용이메일' password='비밀번호'

주의해야 할 점은 파이썬과 달리 터미널에서는 name = 같이 띄어쓰기를 하면 안되고 문자열이지만 따옴표를 붙이면 안된다. 제대로 입력하면 정상적으로 HTTP 통신중 POST 메소드가 구현된다. 바로 데이터베이스에 데이터를 입력했다는 뜻이다. 그럼 입력된 값은 어떻게 확인 할 수 있을까?
바로 기존에 작성한 GET메소드를 수정하면 된다.

위와 같이 기존의 GET함수를 변경해준다면 레플릿 결과창이 정상적으로 뜰 것이다.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글