실제 사용자의 요청은 MVT 패턴을 통해서 CRUD가 진행되고 그 결과를 응답해줍니다. 장고 MVT 는 무엇이고 어떻게 CRUD가 진행되는지 공부한 내용을 정리해보았습니다.
장고 MVT
MVT 혹은 MTV로 불리는데요. 이해를 위해서 View 부터 설명하겠습니다. 사용자로 부터 요청이 들어오면 요청이 들어온 URL에 따라 어떤 View 함수로 보낼지 결정하기 때문입니다.
View
- 장고에서의 메인 로직을 담당합니다.
- 클라이언트의 요청에 대해 어떻게 처리하고 응답할지 교통정리를 해줍니다.
Model
- 요청 중에 DB와 상호작용 해야하는 경우 사용됩니다.
- Model은 DB 연결하여 간편하게 쓰게 해주는 패턴입니다.
- 데이터와 관련된 로직을 처리합니다.
Template
- 레이아웃과 화면상의 로직을 합니다.
- DTL를 이용하여 동적으로 HTML 내용만 변경할 수 있게 해줍니다.
아래 그림은 MVT 패턴을 잘 보여주는데요.
- HTTP 요청이 들어오면 urls.py에서 요청을 처리할 view 함수를 views.py에서 찾습니다.
- 모델에서 데이터를 가져오거나 쓰는 작업을 진행합니다.
- 응답을 보내줄 HTML template를 Template 디렉토리에서 가져와서 HTTP로 응답을 해줍니다.
장고 MVT 모델에서 READ
URL로 접근이 되면 Views.py로 넘어가서 Model에서 데이터를 가져오고 Template를 render 해줍니다.
사용자가 전체 기사를 보여주는 URL로 접근했다고 가정해 봅니다.
urls.py는 서버에 해당 URL로 요청이 들어오면 이를 article라는 view 함수로 전달해 달라고 명시되어 있습니다.
실제 요청이 들어오면 서버에서는 해당 요청을 처리하는 article 함수를 views.py에서 찾도록 동작합니다.
article 함수의 메인 로직은 Model인 Ariticle 클래스에서 레코드들을 가져오는 게 전부인 단순한 코드 입니다.
template(articles.html)에 model을 통해서 가져온 데이터를 포함해서 사용자에게 응답을 해줍니다.
장고 MVT 모델에서 CREATE
저장 버튼을 클릭하면 form 태그에 포함된 input 태그의 값들이 POST 방식으로 create URL로 전송됩니다.
create URL은 create view 함수를 작동 시킵니다.
create 함수에서는 POST로 요청 받은 내용을 가져옵니다.
POST로 요청 받은 데이터를 Article 모델에 저장합니다.
모델에 데이터가 저장되면 작성한 글을 보여주는 페이지로 이동시키려고 합니다.
이를 위해서 작성한 글을 보여주는 article_details URL로 redirect 합니다.
NOTE : render 가 아닌 redirect 를 사용함에 유의 합니다.
특정 URL로 들어온 것을 특정 HTML로 render하는 것은 문제가 되지 않습니다. 하지만 특정 URL로 들어왔는데 다른 HTML로 render를 하면 문제가 됩니다.
우선 URL이 바뀌지 않습니다. HTML만 render를 해주기 때문에 주소창의 URL이 그대로 인 것을 알 수 있습니다.
랜더링이 제대로 작동되지 않습니다.
장고 MVT 모델에서 UPDATE
UPDATE 과정은 CREATE, READ 과정과 크게 다르지 않습니다.
수정을 위해서는 요청한 레코드를 READ해서 값을 변경한 뒤, 다시 save하면 UPDATE가 완료된 것 입니다.
장고 MVT 모델에서 DELETE
DELETE 과정도 CREATE, READ 과정과 크게 다르지 않습니다.
단지 유의할 점은 DELETE의 경우, DB에서 데이터를 삭제하는 중요한 요청이므로 POST 요청으로 처리해야 한다는 것 입니다.
URL로 삭제 요청은 아예 받지 않던가 다른 페이지로 redirect 해주도록 처리를 해줍니다.