웹 프레임워크 또는 웹 애플리케이션 프레임워크는 동적인 웹페이지나, 웹 애플리케이션, 웹 서비스 새발 보조용으로 만들어지는 애플리케이션 프레임워크의 일종이다.
-> 개발을 도와주는 하나의 틀로 생각하자!
웹 페이지를 개발하는 과정에서 겪는 어려움을 줄이는 것을 목적으로 하여 데이터베이스 연동, 템플릿 형태의 표준, 세션 관리, 코드 재사용 등의 기능을 포함한다.
-> 결과물을 일정한 형태로 만들 수 있게 도와주고, 때문에 비슷한 방법으로 완성된 형태를 만들 수 있다.
프레임워크란?
웹 서비스를 쉽게 만들어주는 기계!
인증 : 로그인/로그아웃
데이터 저장 : 데이터베이스 관리
요청에 대한 응답 : HTML, JSON, ..
보안 기능
코드의 재사용성
등등
=> 알아서 다해준다!
파이썬 기반의 웹 프레임워크
Flask vs Django
Flask는 단순한 기계느낌(제공 기능이 적지만, 사용법이 단순)
-> 비교적 단순한 웹 서버 간단하게 만들 때 주로 사용한다.(경량 프레임워크)
-> 배우기 쉽다.
Django는 복잡한 기계느낌(제공 기능이 많지만, 사용법이 복잡)
-> 작정하고 웹 서비스를 만들 때 사용한다.(거대한 프레임워크)
-> 실무적인 내용이라 어렵다.
Django 사용(데이터의 흐름)
• 중요한 것은 파일 간의 티키타카
• 파일 간에 어떤 데이터를 주고 받는지
• 그 과정에서 각 파일들은 어떤 역할을 하는지
예시) urls.py가 https://spartacodingclub.kr/hello 라는 정보를 받았을 때(사용자가 접속했을 때)
1. /hello 라는 URL이 있는가?
2. 있으면
3. /hello라는 요청은 views.py의 hello라는 함수를 실행해야 하는 url이구나!
4. views.py에게 토스(request 넘겨주기)
5. hello라는 함수가 회원 이름과 함께 hello.html을 띄워주는 함수네? 회원 이름을 알아야 하니 데이터베이스를 봐야겠다!
6. db.sqlite에게 토스(request 넘겨주기)
7. 어떤 회원 이름이 필요한가? 현재 접속한 회원? 회원 이름은 스파르탄!
8. 회원 이름을 hello.html에 찍어 보내기
파이썬으로 개발 할 때 외부 기능들을 이용하고 싶을 경우 패키지를 설치한다.
Django도 패키지이기 때문에 이를 이용하기 위해서는 pip로 Django를 설치해야 한다.
pip는 패키지들을 설치, 삭제, 업그레이드, 조회 할 수 있게 하는 패키지 관리자이다.
- pip 사용방법
패키지 설치 -> $pip install 패키지 이름
패키지 제거 -> $pip uninstall 패키지 이름
설치된 패키지 이름 및 버전 조회 -> $pip freeze
설치된 패키지들의 목록을 requirements.txt로 내보내기
-> $pip freeze >> requirements.txt
requirements.txt 안에 적힌 파일 설치하기
-> $pip install -r requirements.txt
패키지를 컴퓨터에 그냥 설치할 경우 패키지가 영향을 줄 수 있는 범위는 컴퓨터 전체이다. 때문에 패키지 하나가 잘못되면 전체에 영향을 끼칠 수 있다.
이를 방지하기 위해 가상환경을 사용한다!
패키지를 가상환경에 설치할 경우 그 패키지는 가상환경 안에서만 영향을 끼친다.
가상환경 == 통 이라고 생각하자!
- 가상환경 사용방법
가상환경 생성 -> python -m venv 가상환경이름
가상환경 실행 -> source 가상환경이름/Scripts/activate (앞에 괄호치고 가상환경이름이 생기면 성공)
가상환경 끄기 -> deactivate
클라이언트 : 요청을 보내는 곳(나, 내 컴퓨터, 방문하는 사이트 등)
서버 : 요청을 받아서 응답 해주는 곳
서버는 우리가 인터넷에서 웹페이지, 로그인 등의 행동을 하고 난 후에 이루어지는 많은 과정들을 처리해준다.
API: 데이터를 어떻게 주고 받자! 하고 정한 약속
웹의 동작 구조
Model
데이터 베이스의 모델 ORM -> 데이터베이스와 소통하는 방식 중 하나, 데이터 베이스와 연결되어 있고 이 모델이 데이터 베이스의 형태를 나타내고 있다.
View
실직적으로 프로그램이 동작하는 부분, 만들고 싶은 기능들이 있으면 대부분 view에서 작업한다.
Template
사용자에게 보여지는 부분, 사용자가 화면을 본다(html파일을 본다)라고 하면 템플릿 안에서 html파일을 전달하는 것이다.
ORM
데이터 베이스의 형태를 클래스로 나타내준다.
데이터 베이스를 다루기 위해 사용되는 쿼리를 작성하지 않아도 데이터를 가져오고 저장하고 삭제하고 수정할 수 있게 도와준다.
장고 프로젝트 구조
settings.py
urls.py
메인 파일에 있는 파일들은 프로젝트의 가장 핵심적인 세팅을 담당
urls.py -> 장고 프로젝트 전체의 api를 담당, 즉 접속할 수 있는 url의 주소들를 생성&관리
settings.py -> 장고 프로젝트가 어떤 기능들을 할건지 어떤 설정이 들어가 있는건지 이야기 해주는 곳
view.py 파일 생성
HttpResponse를 이용해 함수 작성
HttpResponse -> 괄호안에 들어있는 내용을 전달
함수가 동작하는 일은 HttpResponse로 괄호 내용을 화면에 출력시켜준다.
그렇다면 함수를 어디로 접근해야 나올 수 있게 할까? -> url과 연결
urls.py 파일 수정
-> 해석 : test라는 url로 views의 base_response라는 함수와 연결시켜준다.
로컬 호스트 주소 들어가보기
http://127.0.0.1:8000/test/
template폴더에 my_test.html 파일 생성 후 settings.py 설정
settings.py-> TEMPLATES에서 DIRS에 [BASE-DIR / 'templates'] 적기
views.py 파일에 코드 작성
my_test.html을 보여주는 역할을 하는 함수
urls.py 파일 수정
-> 해석 : import로 이 파일에 views라는 파이썬 파일을 가져올 것이다.
first라는 url로 first_view라는 함수와 연결시켜준다.
로컬 호스트 주소 들어가보기
http://127.0.0.1:8000/first
며칠 전에 헷갈렸던 재귀함수 관련하여 튜터님께 질문을 드렸다.
이를 이해하기 위해서 한 단계씩 디버그를 돌려보았고 이해할 수 있게 되었다.
디버그를 돌렸던 코드를 올린다.
numbers = [2, 3, 1]
target_number = 0
result = [] # 모든 경우의 수를 담기 위한 배열
def get_all_ways_to_by_doing_plus_or_minus(array, current_index, current_sum, all_ways):
print(f"array: {array}, current_index: {current_index}, current_sum: {current_sum}, all_ways: {all_ways}")
if current_index == len(array): # 탈출조건!
all_ways.append(current_sum) # 마지막 인덱스에 다다랐을 때 합계를 추가해주면 됩니다.
return
get_all_ways_to_by_doing_plus_or_minus(array, current_index + 1, current_sum + array[current_index], all_ways)
get_all_ways_to_by_doing_plus_or_minus(array, current_index + 1, current_sum - array[current_index], all_ways)
get_all_ways_to_by_doing_plus_or_minus(numbers, 0, 0, result)
print(result)
# current_index 와 current_sum 에 0, 0을 넣은 이유는 시작하는 총액이 0, 시작 인덱스도 0이니까 그렇습니다!
# 모든 경우의 수가 출력됩니다!
# [6, 4, 0, -2, 2, 0, -4, -6]
💜 오늘 느끼고 배운 점
오전 : 프레임워크&장고 입문 실시간 특강 수강, 팀 교체로 인한 팀원과의 자기소개 시간
오후 : 장고 기초반 인터넷 강의 1주차 수강
저녁 : 재귀함수 복습 및 백준 알고리즘 문제 풀기
오늘 팀 처음으로 팀 교체가 이루어졌다. 다양한 사람들과 협업을 진행해보고 싶은 마음에 이전 팀을 해체하기로 결정하였다. 새로운 팀은 기존 팀을 해체하지 않은 4분이었고, 나 한명만 달라져 처음에는 어색했지만 좋은 분들이신 것 같아 잘 지낼 수 있을 것 같다! 오늘은 처음으로 장고를 배우는 날이라 실시간으로 장고 입문 강의를 들을 후 장고 기초강의를 수강하였다. 아직 초반이라서 할만 한 것 같다. 또, 며칠 전에 이해하지 못한 재귀함수를 튜터님께 질문하였는데 한 단계씩 디버깅 하며 공부하는 방법을 추천하셨다. 이 방법을 이용하니 재귀함수가 이해 되었고, 종종 헷갈릴 때 이 방법을 사용하면 좋을 것 같다. 열심히 공부해서 파이썬, 장고 마스터가 되고싶다!!!