- 개요
Django를 공부하기 시작했다. 웹페이지를 만들어야 할 일이 생겼는데 서버에대해 아는 것이 하나도 없었기 때문에 스스로 프로젝트를 하기 전 기초적인 지식을 공부해보고자 시작하였다. 문범우님의 저서 'Django 한그릇 뚝딱' 이라는 책으로 공부를 시작하였는데, 연락을 통해 부탁드리자 블로그에 책에 관련된 내용을 올리는 것을 친절하게 허락해주셨다. 이곳에 내가 공부한 것들을 많이 올려보았으면 좋겠다.
출처: www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791190014571
문범우님 블로그: doorbw.tistory.com/
- 주요 내용
- chapter2 - ToDoList 만들기
- application 생성
- urls.py 파일 설정
- views.py 파일 설정
- HTML 파일 생성 및 적용
- 데이터베이스 생성
- 데이터 추가 및 삭제
- HTML에서 Python코드 사용
- MVC패턴
- CRUD
- URI
- 관련필기
Django를 처음 배울 뿐만 아니라 git 프로젝트를 처음 사용해보았기에 어려움이 많았다. 따라서 파일의 구조와 그역할에 대해 이해하는 것이 중요하다고 생각이 들어 각각의 디렉토리와 그 디렉토리의 생성, 역할을 정리하기 위해 필기를 진행하였다. 필기를 보면 민트색은 Django로 생성한 최상위의 파일을, 그 밑에 연보라색은 하나의 프로젝트 안에 속해있는 Application 파일을 의미한다.
이 필기는 파일이 아닌 구현 흐름의 관점으로 정리하기 위해 만든 필기이다. 각 단계에서 사용하는 파일의 역할과 그에 따른 구현에 대해 정리하였다.
- MVC
MVC는 하나의 '디자인 패턴'이다. 책의 표현을 따르자면 디자인 패턴이란 소프트웨어를 어떤 식으로 개발하는 것이 좋은지를 구체화한 것이다. MVC패턴의 장점은 '화면단 로직과 내부적으로 실행되는 비즈니스 로직을 나누어 서로에게 영향이 없도록 시스템을 개발하고, 유지 보수할 수 있다는 것이다. 하나의 프로젝트를 해결하면서 느낀 결과 사용자에게는 template파일에 있는 index.html즉 html문서로 이루어진 파일이 보여지고, 내부적인 로직은 내가 생성한 어플리케이션 안에 있는 views.py 파일에서 이루어진다. 이런 개발 방법이 화면단 로직과 비즈니스 로직을 나누어 개발한다는 것의 예인 것 같다. (블로그를 작성한 필자의 생각이기에 확실하지 않을 수 있습니다.)
MVC는 Model, View, Controller의 앞글짜를 땄다. 이름의 유래에서 알 수 있듯이 Mode, View, Controller를 나누어서 개발하는 구조이다. 다음은 각각의 역할과 의미를 정리하였다.
이름 | 의미, 역할 |
Model | - 백엔드에 존재하는 데이터베이스 (대표적인 의미). - 해당 프로젝트에서는 models.py파일에서 Todo Class로 생성한 데이터베이스를 뜻한다. |
View | - 사용자에게 보여지는 화면. - 웹사이트의 화면. - 해당 프로젝트에서는 templates파일 안에 있는 index.html을 의미함. |
Controller | - Model과 View를 컨트롤하는 역할이다. - View를 통해 받은 요청으로 내부적 처리를 진행. - 해당프로젝트에서는 views.py 파일이 해당된다. |
알아야할점은 Django는 MVC가아닌 MTV 패턴을 따른다. MTV는 Model, Template, View의 약자로 위의 내용과 정리하면 파일의 이름과 일치하는 것을 알 수 있다. 다만 책에서 MVC에 대해 설명된 이유는 MVC가 더욱 일반적인 개념인 것과 동시에 MTV와 다를 것이 없기 때문이다.
- CRUD
CRUD란 소프트웨어가 기본적으로 가져야하는 기능을 의미한다. Create, Read, Update, Delete의 앞글자를 따서 CRUD이다. 다음은 내가 정리해본 CRUD의 의미와 해당 프로젝트의 내용이다.
이름 | 기능 | 해당 프로젝트에서의 비교 |
Create | - 데이터를 만드는 기능이다. - 데이터를 생성해 데이터베이스에 저장하는 의미이다. |
- 메인 페이지에서 Todo리스트를 입력하고 '메모하기'버튼을 누르면 데이터베이스에 저장되는 과정을 의미한다. |
Read | - 데이터를 읽는 기능이다. | - 메인 페이지에서 사용자에게 입력된 데이터를 보여주는 기능이 해당된다. |
Update | - 데이터를 갱신하는 기능이다. - 예시로는 게시판에 올린 글을 수정하는 것을 의미한다. |
- 해당 프로젝트에서는 구현하지 않았다. |
Delete | - 데이터를 지우는 기능이다. | - 리스트에서 완료 버튼을 눌렀을 때 데이터가 지워지는 기능이 해당된다. |
- URI
책에 적혀있는 말을 빌리자면 "URI는 URL과 같은 개념으로 받아들여도 좋다. 웹 페이지에서는 결국 URI의 이동에 따라서 특정 기능이 진행된다. Create를 예로 들면, 일반적으로는 '기본 도메인/write' 와 같은 URI에서 그 기능이 수행된다." 라고 설명되어있다.
약간의 설명을 위해 코드를 떠올려보면, 메인 페이지에서 주는 값을 '기본도메인/CreateTodo' 주소로 이동하여 값을 처리하였다. 이를 위해 urls.py파일로 주소 변경시의 사용되는 views.py의 함수를 지정하고 views.py에서 직접 함수를 작성해 값들을 처리해주었다. 이과정에서 '기본 도메인/CreateTodo'가 URI 이다. 다음은 URI에 대해 잘 정리된 문서의 주소를 첨부했으니 참고할 사람은 참고하길 바란다.
URI : velog.io/@jch9537/URI-URL
- GET POST
위에 내용을 정리하자면 우리는 서버에 값을 전달할 때 URI가 변경되면서 값이 전달된다고 할 수 있다. GET과 POST방식은 이렇게 서버로 값을 전달할 때 차이가 있다. 결론을 먼저 말하자면 GET 방식은 주소에 전달되는 값이 표시되고 POST 방식은 주소에 전달되는 값이 표시되지 않는다. 예시를 위해 다음 주소를 확인해보자. 다음은 네이버에 django를 검색했을 때 주소창에 나타나는 주소이다.
- search.naver.com/
- search.naver?where=nexearch&sm=top_sug.pre&fbm=0&acr=1&acq=django&qdt=0&ie=utf8&query=django
주황색으로 표시된 주소는 메인 주소이고 두번째에 표시된 주소는 검색후 생긴 주소 즉 URI이다. 여기서 파란색으로 표시된 부분이 바로 'django' 즉 우리가 검색한 검색어이다. 이렇게 보면 네이버는 검색어를 GET 방식으로 서버에 전달한다는 것을 알 수 있을 것이다. GET 방식과 POST 방식에 대해서는 따로 자세하게 포스팅을 해볼 예정이다.
'programming > 웹프로그래밍' 카테고리의 다른 글
[spring] Interceptor와 Session의 개념과 구현, Clone Coding (0) | 2021.05.05 |
---|---|
[spring] 로컬 파일에 이미지 저장과 예외처리 - (SimpleDateFormat), Clone Coding (0) | 2021.04.10 |
[spring] 로컬 파일에 Img 저장하기! - (ServletContext), Clone Coding (0) | 2021.03.22 |
[Django] Django 한그릇 뚝딱 Chapter2 실전 예제 해결 (0) | 2021.02.14 |