[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/WEB

django 기초 - 프로젝트 생성 / 원리

inu 2020. 8. 20. 11:47
반응형

django란?

  • 서버 역할을 할 수 있는 프레임워크
  • 웹의 특정 요청(request)에 대한 처리를 할 수 있게 된다.
  • 로그인 요청이 들어왔을때, 회원 등록여부를 데이터베이스에 접근하여 확인한다거나 마이페이지를 보여준다거나 하는 등의 여러 작업이 가능하다.
  • 내부적으로 이미 많은 것들이 구현(로그인, 관리, 요청처리 등)되어 있어서 빠른 작업이 가능하다.
  • 보안적으로도 기본적으로 처리가 되어있어 꽤 안전하다.

django 프로젝트 시작하기

  • django를 사용하기 위해서는 환경설정이 필요하다. 이 때 주로 가상환경을 생성해 사용한다.
  • 가상환경을 생성하지 않아도 django를 사용할 수는 있다. 하지만 A프로젝트에 django1.xx 버전을 사용했는데 B프로젝트에는 django2.xx 버전을 사용한다면 두 프로젝트는 한가지 환경에서 공존할 수 없게된다. 이런 상황에 대비해 가상환경을 설치해서 그 위에 django를 깔아 사용하는 것이다.
  • 기초를 학습하는 과정이기 때문에 가장 심플한 가상환경 패키지인 pipenv를 사용하겠다.
pipenv shell
  • 프로젝트 폴더에서 cmd를 열고, pipenv shell 명령어를 사용해 가상환경을 설치한다.
  • 추후 가상환경에 접속할 때도 동일한 명령어를 사용할 것이다.
pipenv install django
  • 해당 pipenv 환경에 django를 설치한다.
  • pipenv install django==2.0.6와 같은 명령어로 버전을 선택할 수도 있다. (현재는 기초단계이므로 default 버전을 설치해 사용해보겠다.)
  • 설치가 완료되면 Success! 라는 메세지가 표시된다.
django-admin startproject firstproject
  • 설치가 완료되었다면, django-admin startproject 명렁어로 첫 프로젝트를 만들 수 있다.
  • firstproject는 프로젝트명이다. 원하는대로 바꾸면 된다.

  • 지금까지의 과정을 마치면 폴더에 위와같은 구조와 파일들이 생성된다.
  • 모두 Pipefile과 Pipefile.lock은 pipenv와 관련된 파일이고, 그 외에는 django 프로젝트 파일이다.
  • manage.py는 프로젝트 전체를 다루는 역할을 한다. (나머지는 필요할 때 설명하겠다.)

django app

  • django는 하나의 프로젝트 안에 여러 개의 앱이 포함된다.
  • 프로젝트를 하나의 서비스라고하면, 앱은 그 서비스의 기능을 큰 틀로 나눈 것이라고 할 수 있다.
  • 꼭 여러 앱으로 서비스를 구현할 필요는 없지만, 하나의 앱만으로 서비스를 구현하면 초기 구현뿐만이라 유지보수가 어려워진다. 따라서 되도록 큰 기능은 나눠서 구현하도록 하자.
python manage.py startapp firstapp
  • 위와 같은 명령어로 앱을 만들 수 있다.
  • firstapp은 앱의 이름이다.
  • 앱생성은 manage.py를 기반으로 이루어지기 때문에 프로젝트 폴더로 이동해서 명령어를 입력해야 한다.

  • 앱생성이 성공적으로 이뤄지면 프로젝트 폴더 안에 위와 같은 폴더와 파일이 생성된다.

django 서버실행

python manage.py runserver
  • manage.py가 존재하는 폴더로 가서 위 명령어를 입력하면 서버가 돌아가기 시작한다.
  • http://127.0.0.1:8000/ 이라는 주소가 cmd창을 통해 보여지게되고, 인터넷 브라우저를 통해 주소에 접속하면 아래와 같은 창이 보여진다.

  • 이 창을 확인했다면 기초적인 프로젝트 준비가 끝났다고 할 수 있다.
  • 이제부터는 django가 대략 어떤 원리로 요청을 처리하고 웹을 구성시키는지에 대해 알아보자.

웹 주소의 의미

  • 우선 앞서 언급한 http://127.0.0.1:8000/의 의미를 명확히 파악해둘 필요가 있다.
  • 내 쟝고 서버가 돌아가는 것은 네이버가 구동되는 것과 원리적으로는 똑같다. 즉, 네이버도 결국은 어딘가에 존재하는 서버컴퓨터에서 돌아가는 서비스이다.
  • 네이버의 호스트를 찾아가서 해당 서버에 존재하는 것을 사용해도 되냐고 확인해야한다. 그럼 이 호스트를 어떻게 찾아갈까?
  • 호스트가 위치하는 주소를 'IP'라고 한다. 이러한 IP를 통해 해당 호스트를 찾아갈 수 있다. (하지만 IP는 의미를 파악하기 어려운 숫자의 나열로 구성되어 있기 때문에 사용하기 어렵다. 따라서 사람들이 좀 더 보기 편하도록 도메인형태로 변경한다. 이것이 우리가 일상적으로 사용하는 'www.naver.com' 같은 주소이다.)
  • 어쨌든 우리가 얻어낸 주소 127.0.0.1가 다름 아닌 IP주소라는 것이다. 이는 자기 자신의 로컬 호스트를 찾아간다는 의미의 주소이다. 따라서 일반적으로 사용하기엔 유효하지 않다. (추후 이 주소를 바꿔서 배포하는 방법도 배워볼 것이다.) 현재로선 우리의 컴퓨터 내부적으로만 작동할 것이다.
  • 그렇다면 :8000은 무엇일까. 이는 포트라고 한다. 말그대로 일종의 항구이다. 같은 IP에서도 어떤 프로그램이 들어올지 구분하기 위해 사용하는 개념이다. 예를 들어 웹은 80, SSH는 22, 메일은 110번 포트를 사용한다. 쟝고는 그 중 8000번 포트를 사용한다는 뜻이 된다. 포트가 다르면 같은 IP라도 프로그램을 구분할 수 있게 된다.

django의 흐름(원리)

  • 클라이언트(사용자)가 요청(Request)를 보내면 이에 대한 url을 파악해 urls.py에서 찾게 된다. '요청(Request)'이라는 것은 프론트적 관점에선 버튼을 누르고 스크롤을 내리는 등 다양한 케이스가 있겠지만, 결국엔 새로운 url을 찾아가는 작업이기 때문이다.
  • urls.py에는 특정 함수와 연결된 부분이 존재한다. url에 해당하는 함수를 views.py에서 찾아 실행한다.
  • views.py에 존재하는 함수는 데이터를 처리하고 가공해 사용자에게 보내게 된다.
  • templates에 존재하는 html을 응답에 담거나, models.py에 존재하는 데이터를 응답에 담는다. (models.py는 일종의 DB 역할을 해준다.)
  • 응답에 모든 것이 담기면 클라이언트(사용자)에게 해당 정보를 내보내준다.
  • 이것이 django의 기초적인 구동원리이다. 이제부터는 이를 활용해 실질적인 페이지를 구성해볼 것이다.
반응형