본문 바로가기

TIL 및 WIL/TIL (Today I Learned)

[TIL] 2022.05.26 (Django 기초0, Python 문법 복습)

어제로 사물 인식 머신러닝 팀 프로젝트가 끝이 났다.

이후에 진행될 Django 프로젝트를 대비하여 오늘은 Django에 대한 것과 기초를 알아보기로 하였다.

 

장고 (Django)
- 파이썬으로 만들어진 무료 오픈소스 웹 프레임워크
- 회원가입, 로그인, 로그아웃 등과 같은 기능들을 바로 사용할 수 있도록 해당 구성 요소를 갖춘 프레임워크이다.
- 쉽고 빠르게 웹 사이트를 개발할 수 있도록 돕는 구성 요소를 지원한다.
- Flask와 비교해보면 Flask는 웹 개발을 위한 최소한의 기능만을 지원하지만, Django는 웹 개발에 필요한 대부분의 기능들을 지원한다.

Django의 특징
- MTV 패턴을 사용한다.
- 강력한 ORM 기능을 지원한다.
- Django 자체적인 Template을 지원한다.

ORM (Object Relational Mapping)
- 객체와 관계형 DB를 자동으로 연결(Mapping)해주는 것

 

다음은 웹 동작 순서 및 개념에 대한 이야기이다.

 

웹 동작 순서 및 개념
클라이언트(Client) : 요청을 보내는 곳
서버(Server) : 요청을 받아서 응답을 해주는 곳
API : 데이터를 주고받는 곳

웹 동작 순서

 

해당 사진과 같이 클라이언트(Web, User 등)에서 요청(Request)을 보내면 서버에 있는 API를 거쳐 HTML, CSS, Javascript, DB와 같은 파일들을 불러온 뒤, 요청을 한 클라이언트에게 응답(Response)하여 보내주는 형태로 이루어져 있다.

 

Django의 특징 중 하나인 MVT 패턴에 대해서 알아보자.

 

Django의 MVT 패턴
: M : Model :
- 데이터베이스의 모델(ORM)
- 저장 및 사용이 가능한 데이터의 형태
: T : Template :
- 사용자에게 보이는 부분(화면)
: V : View :
- 프로그램이 실제로 동작하는 부분
- URL을 요청하고 응답하는 사이에 일어나는 것

Django의 MVT 패턴 흐름

 

User가 해당 URL로 서버에 요청을 보내면 프로그램이 동작(View)하고 데이터베이스의 모델(Model)을 거쳐 DB에 있는 값들을 가져온 뒤, 역순으로 응답하여 해당 User에게 화면(Template)을 보여주는 형태로 이뤄진다.

 

Django는 웹 개발에 있어 다양한 기능들을 제공하는 웹 프레임워크(Web Framework)를 사용하는데, Django가 파이썬으로 만들어진 오픈소스 웹 프레임워크이기 때문에 파이썬의 웹 프레임워크를 사용한다.

 

Python의 Web Framwork
- 웹 개발에 도움을 주는 하나의 틀
- 대표적인 웹 프레임워크로는 최소한의 기능을 제공하는 Flask(또는 Pyramid)와 더 많은 기능을 제공하는 Django가 있다.

: Flask, Pyramid :
- 가벼운 프레임워크
- 최소한의 기능만을 제공한다.
- 로그인, DB 등의 관리는 직접 해줘야 한다.
- 관리자 페이지 구축을 따로 진행해야 한다.

: Django :
- 거대한 프레임워크
- 많은 기능들을 제공한다.
- 로그인, DB, Admin, 패스워드 암호화 등의 많은 기능을 제공한다.
- 커뮤니티와 문서가 잘 정리되어 있다.

 

Python에서 Django로 프로젝트를 만들면 다음과 같은 여러 가지 파일들이 자동으로 생성되는데, Django 프로젝트에서 자동으로 생성해준 파일들에 대해 알아보자.

 

Django 자체적으로 만들어준 파일들

: 1 : myDjangoSns : 우리가 만든 Django 프로젝트의 이름
: 2 : myDjangoSns : 추가되는 모듈 및 기능들을 관리하는 폴더
: 3 : __init__.py : 현재 폴더가 Python Package라는 것을 나타내는 파일
: 4 : settings.py : 장고 전체의 setting을 설정 및 관리하는 파일(중요)
: 5 : urls.py : 장고의 URL(API 주소)을 관리하는 파일
: 6 : templates : 작성한 HTML 파일들이 들어가는 폴더
: 7 : venv : 프로젝트의 패키지들을 관리하는 가상 환경
: 8 : manage.py : 장고의 서버를 다루게 해주는 Python 파일

 

생성된 파일들 중 setting.py가 제일 중요하다는 말을 들었는데, 해당 settings.py에 들어가는 것들을 한번 살펴보자.

 

INSTALLED_APPS : 장고에 설치된 앱들
MIDDLEWARE : 사용자 요청 및 응답 사이에서 작동하는 시스템들
TEMPLATES : 작성된 HTML 파일을 자동으로 인식
DATABASES : 사용할 데이터베이스 연동 설정
AUTH_PASSWORD_VALIDATORS : 패스워드 보안 수준 검증
LANGUAGE_CODE : 화면에 보여줄 언어
TIME_ZONE : 어떤 시간대에 있는가?

setting.py 안에 존재하는 해당 코드들

 

오늘은 Django, 장고 프로젝트를 생성해보고 장고에 대해 간단하게 알아보는 시간을 가졌다.

 

Django를 본격적으로 들어가기 앞서 Python 기초 문법에 대해 알아보는 시간을 추가로 가져보았다.

저번 시간에 다루긴 했었지만, 이번에는 복습하는 차원에서 공부를 하는 느낌으로 진행하였다.

 

저번에 작성한 TIL의 파이썬 문법 기초 링크

1 : https://sdrtst.tistory.com/24

2 : https://sdrtst.tistory.com/25

 

1. 출력(print)

# 출력
print("-------------------")
print("# 출력")
print("Django")
print("-------------------")

출력 print

 

해당 문구를 실행창에 출력하고 싶다면 print를 사용하여 간단하게 출력할 수 있다.

 

2. 변수(정수, 실수)를 이용한 사칙연산

# 변수
# 숫자(정수)
age = 6
age_grow = 2
# 숫자(실수)
height = 50.2
height_loss = 1.1
# 사칙연산
age_result = age + age_grow
height_result = height - height_loss
print("# 사칙연산")
print(age_result)
print(height_result)
print("-------------------")

정수와 실수로 사칙연산하기

 

변수 age에는 정수를, 변수 height에는 실수를 넣어주었다.

이후 +와 -를 사용하여 계산된 값을 _result 변수에 담아주고 출력하면 해당 결과값을 볼 수 있다.

 

3. 변수(문자형)

# 문자형
name = "racoon"
print("# 문자형")
print(name)
print("-------------------")

문자

 

위의 출력(print)에서도 사용했지만 print("") 안에 들어가는 값은 보통 문자로 표현된다.

해당 사진과 같이 변수에 문자를 담아주고 출력해도 변수에 담긴 문자가 출력되는 것을 볼 수 있다.

 

문자열 같은 경우에도 정수와 실수에서 사용한 사칙연산을 이용하여 다음과 같이 문자를 합칠 수 있다.

 

# 문자열 덧셈
str_a = "ji"
str_b = "nu"
str_result = str_a + str_b
print("# 문자열 덧셈")
print(str_result)
print("-------------------")

문자열을 합친 모습

 

만약 다음과 같이 특정 문구를 기준으로 문자열이 들어가 있다면 split를 사용해 특정 문구를 기준으로 해당 문자를 나눌 수 있다.

 

# 특정 문구를 기준으로 나누기
split_a = "ra,co,on"
split_result = split_a.split(",")
print("# 특정 문구를 기준으로 나누기")
print(split_result)
print("-------------------")

split 사용

 

4. 리스트

# 리스트[]
list_int = [1, 2, 3, 4, 5]
list_str = ["jinu", "racoon", "django"]
print("# 리스트")
print(list_int)
print(list_str)
print("-------------------")

리스트

 

만약 하나의 변수에 다수의 값을 넣고 싶다면 위 사진과 같이 [ ]를 사용하여 리스트의 형태로 다수의 값을 넣어줄 수 있다.

그런데, 다수의 값들 중 내가 원하는 값만 꺼내오고 싶다면 다음과 같이 값을 꺼내올 수 있다.

 

# 리스트 인덱스
list_str = ["jinu", "racoon", "django"]
print("# 리스트 인덱스")
print(list_str[0])
print(list_str[1])
print(list_str[2])
print("-------------------")

각 인덱스의 값을 출력

 

리스트는 0번부터 n번까지의 순서로 값이 저장되어 있다.

코드에 적힌 것처럼 list_str[0]을 출력하면 제일 첫 번째에 있는 값을 불러온다.

 

이미 만들어진 리스트에 값을 추가하고 싶다면 append를 사용하여 리스트의 마지막 위치에 값을 추가할 수 있다.

 

# 추가하기(append)
list_str = ["jinu", "racoon", "django"]
list_str.append("python")
print("# 추가하기(append)")
print(list_str)
print("-------------------")

append

 

추가(append)하는 것뿐만 아니라 정렬(sort), 반전(reverse), 제거(remove) 등의 다양한 함수들도 사용이 가능하다.

 

5. 딕셔너리

# 딕셔너리{}
dic_str = {"name": "jinu", "age": 25}
print("# 딕셔너리")
print(dic_str["name"])
print(dic_str.get("age"))
print("-------------------")

딕셔너리

 

위 사진과 같이 { }를 사용하여 딕셔너리의 형태로 값을 넣어줄 수도 있다.

"name"과 "age"는 key이고, "jinu"와 25는 value의 형태를 가지고 있다.

그렇기에 dic_str["name"]을 출력하면 name(key)의 value값인 "jinu"가 출력되는 것을 볼 수 있다.

 

6. 조건문(if)

# 조건문(if)
# 추가 조건이 없으면 else, 추가 조건이 있으면 elif
my_age = 25
if my_age == 25:
    print("# 조건문(if)")
    print("25살")
    print("-------------------")
else:
    print("# 조건문(if)")
    print("나이가 다릅니다.")
    print("-------------------")

조건문 if

 

간단한 조건문의 예제이다.

위 사진에서는 변수 my_age에 25가 들어가 있고, if문의 조건으로 my_age가 25라면?(==(같으면))이라는 조건이 성립하여 25살이 출력되는 것을 볼 수 있다.

 

보통 조건문은 if - else 형태로 존재하고, if 뒤에 추가적인 조건이 있으면 elif(else if(조건))를 사용한다.

간단하게 이루어진 파이썬에서는 else if(조건)을 사용하는 것이 아닌 줄여서 elif를 사용하여 추가 조건문을 입력할 수 있다.

 

7. 반복문(for)

# 반복문(for)
list_int = [1, 2, 3, 4, 5]
print("# 반복문(for)")
for a in list_int:
    print(a)
print("-------------------")

반복문 for

 

간단한 반복문의 예제이다.

위 사진에서 list_int에 리스트의 형태로 1부터 5까지의 값을 넣어주었다.

for a in list_int:를 통해 a 안에 list_int 값을 넣어주고 for문을 사용하여 계속 반복시켜주면 해당 리스트의 시작부터 끝까지의 값이 출력되는 것을 볼 수 있다.

 

8. 함수(def)

# 함수(def)
def int_sum(a, b):
    result = a + b
    return result

sum = int_sum(2, 20)
print("# 함수(def)")
print(sum)
print("-------------------")

함수 def

 

def를 사용하여 int_sum라는 이름의 함수를 선언해주었다.

함수 int_sum의 값으로 a와 b라는 이름의 값이 존재하고 result에 a+b의 값을 넣어주었다.

하지만 이렇게만 적히면 해당 함수의 a와 b의 안에는 아무런 값이 존재하지 않으므로 밑에서 int_sum(2, 20)을 통해 a에는 2를, b에는 20이라는 숫자 값을 넣어주고 실행시켜준다.

이렇게 되면 int_sum의 result에 a(2) + b(20)의 값이 들어간 뒤 return을 통해 해당 함수에 있는 값을 반환해준다.

마지막으로 변수 sum안에 int_sum()을 실행해주고, 해당 함수의 값이 담긴 sum을 출력해보면 해당 결과를 볼 수 있다.

 

9. 클래스(class)

# 클래스(class)
class MyPersonal:
    name = ""
    age = ""
    height = ""

person = MyPersonal()
person.name = "박진우"
person.age = "25세"
person.height = "175cm"
print("# 클래스(class)")
print(person)
print(person.name)
print(person.age)
print(person.height)
print("-------------------")

클래스 class

 

클래스 MyPersonal 안에는 name, age, height가 아무것도 없는 상태로 존재한다.

MyPersonal 클래스를 person 변수에서 실행시켜주고, person.name/age/height를 통해 해당 문자열을 넣어주었고, person을 출력해보면 MyPersonal 클래스가 출력되고 추가한 해당 문자열들이 출력되는 것을 볼 수 있었다.

 

-

 

오늘은 Django, 장고에 대해 짧게 알아보고 파이썬 문법 기초에 대해 복습하는 시간을 가졌다.

 

파이썬 같은 경우에는 확실히 이전 프로젝트들에서 쓰기도 하고 다시 복습하는 시간을 가지니 많이 익숙해지고 헷갈리지 않는 상태가 된 것 같다.

장고는 아직 오늘이 첫날이라 그런지 잘은 모르겠지만 Flask와 비슷하다는 느낌을 받았다.

 

주변에서 말하길 장고는 심화 과정을 밟을수록 확실히 어렵다고 말하는 것을 계속 들었다.

하지만 장고를 배우기 위해 시작했다고 말해도 과언이 아닐 만큼 장고에 대해서는 열심히 공부해야 할 것 같다는 느낌이 들었다.

앞으로의 프로젝트 일정에 있어서 장고는 아주 중요하고 자주 사용될 것이라 잘 익히는 것이 중요하다고 생각한다.

 

:P