📗 Django 


요청과 응답

💡 Django가 요청을 받고 응답을 하는 순서 이해하기
  1. 요청(Request)이 들어옴
  2. URL(urls.py) 처리
  3. View(views.py) 처리
  4. Template(html) 처리
  5. 응답(Response) 전달

URL

urls.py

어떠한 url패턴으로 들어오면 어디의 View로 보낼까? 를 설정해 주는 py

urlpatterns 내부에 정의해 주면 된다.

# my_first_pjt/my_first_pjt/urls.py

from django.contrib import admin
from django.urls import path
from articles import views

urlpatterns = [
    path("admin/", admin.site.urls),		# "admin/" ➡️ Trailing Slash
    path("index/", views.index),		# "index/" ➡️ Trailing Slash
]

 

↓ urls.py에 추가하는 과정

더보기

1️⃣ my_first-pjt 속에 있는 urls.py

urls.py의 기본 구성

2️⃣ 새로 만든 App에 있는 views.py

미리 만들어두었던 App 속에 있는 views.py

3️⃣ views.py에 처음 쓸 땐 함수형으로 하는 게 좋음

→ 함수의 흐름이 다 보이기 때문

def index(request):
    pass
  • index를 입력받으면 무엇을 보여줄지 정의 내리는 코드
  • 지금은 "pass"라고 적어두었지만, 나중에 무엇을 할지 정의내려주면 됨

4️⃣ articles라는 App에 있는 views 파일을 my_first_pjt의 urls.py에 불러오기

 

🤔 추가된 코드

from articles import views	# articles에 있는 views 불러오기

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),	# ⬅️ 새롭게 추가
]

 

여기까지 urls.py 설정하는 과정임.


View

Views.py

  • URL에서 보내진 요청을 처리하는 index view 함수를 작성해 준다.
  • HTTP 요청을 받고, HTTP 응답을 반환
from django.http import HttpResponse

def index(request):
	response = HttpResponse("<h1>Hello, Django!</h1>") 
	return response

 

↓ views.py에 함수 작성하는 과정

더보기

1️⃣ views.py에서 함수 정의 내리기

<- urls.py / views.py->

 

🤔 추가한 코드 

from django.http import HttpResponse

def index(request):
    response = HttpResponse("<h1>Hello, Django!</h1>")
    return response

2️⃣ 실행하기

$ python manage.py runserver	# 서버 실행하기
January 11, 2025 - 07:04:37
Django version 4.2, using settings 'my_first_pjt.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

→ 컨트롤 c를 누른 상태로 http://127.0.0.1:8000/ 클릭하기

 

  • Welcome Page가 아닌 실제로 내가 코딩하는대로 동작하는 것이다.
    • 내가 입력한 코드가 반영되었다는 의미
Page not found
  • 해당 경로를 찾을 수 없다는 의미
  • url이 어떻게 정의되었는지 확인해보면 된다.
    • 우리는 index/ 로 정의내렸음

3️⃣ 정의한 url 경로로 실행하기

http://127.0.0.1:8000/index/
Django server
views.py 함수 정의

설정해 두었던 views.py와 똑같은 문자열이 출력된 걸 볼 수 있다.

 

얏호!

Chrome → HttpRequest → urls.py → views.py → HttpResponse → Chrome

 

이 순서를 거쳐서 우리에게 "Hello, Django!"를 보이게 한 것이다.


Django Template

이제는 HTML 파일을 작성하고 view로 사용해 보자

render(request, template_name, context)

 

↓ HTML 파일을 view를 통해서 보여주는 과정

더보기

1️⃣ urls.py 파일은 그대로 두고, views의 함수만 수정

변경 전

⬇️

변경 후
# "index.html"이라는 template를 기입
def index(request):
    return render(request, "index.html")
  • 우선 views.py에서 함수 정의를 새롭게 내린다.

2️⃣ App 폴더에 "templates"의 폴더 생성하기

🚨 templates 절대 오타내면 안 된다. 

articles의 app에 templates의 폴더가 새로 생성되었다.
  • templates의 폴더를 생성하였다.

 

 templates를 오타내면 안 되는 이유
  • Django에 있는 settings.py에 들어가면 TEMPLATES라는 게 있다. 
  • TEMPLATES에 'APP_DIRS' : True 로 돼 있는 걸 확인할 수 있다.
    • 이 코드가 의미하는 것은, 앞으로 App을 새로 만들더라도 그 속에 templates가 있는지 하나하나 확인하라는 의미다.

🚨 이런 기능이 있기 때문에 오타내면 templates를 사용할 수 없다.


3️⃣ index.html 파일 만들어주기

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>My First Django PJT</title>
  </head>
  <body>
    <h1>You done! You made this!</h1>
  </body>
</html>

 

이렇게 완수하고 서버를 다시 실행해주면

$ python manage.py runserver

 

index.html 속 문장이 서버에 표시된다.

 

HttpRequest →  URLs →  View →  Template → View →  HttpResponse

 

이 순서를 거쳐서 우리에게 "You done! You made this!"를 보이게 한 것이다.

 

 

📗 Django 


💡 다양한 응용 소프트웨어를 만들다 보니 공통적인 구조와 문제가 발생한다.
💡 이때, 구조에도 공통점이 있고, 문제에도 공통점이 존재한다.
      == 패턴(Pattern)이 보인다.

소프트웨어의 디자인 패턴

전 세계의 개발자들이 개발을 하다 보니 비슷한 문제를 해결하는 공통적인 구조를 발견한다.

  • 클라이언트-서버 역시 소프트웨어 디자인 패턴 중 하나이다.

 

디자인 패턴이란?
  • 자주 사용되는 소프트웨어의 구조를 마치 건축 공법처럼 일반화해둔

 

디자인 패턴이 필요한 이유
  1. 특정 구조에 대한 설계를 빠르게 할 수 있다.
  2. 공통적으로 발생하는 문제에 대해 재사용 가능한 해결 방법을 제시할 수 있다.

 

프로그래머가 시스템을 디자인할 때 발생하는 공통된 문제를 해결하면서 진행할 수 있는 형식화된 관행이다.


Django의 디자인 패턴

== MTV Pattern

  • 기존에 있던 MVC Design Pattern을 살짝 변형하여 쓰고 있다.

 

MVC 디자인 패턴
  • Model - View - Controller 이렇게 3파트로 나누어져 있다.
  • 데이터와 논리 구조를 제어하는 설계
    • 널리 사용되는 디자인 패턴 중 하나이다.
  • 하나의 큰 소프트웨어를 나눠서 생각해 보기 위해서 등장한 패턴이다.

 

MVC 각각의 역할
  • Model : 데이터와 관련된 로직을 관리
  • View : 레이아웃과 관련된 화면을 처리
  • Controller : Model과 View를 연결하는 로직을 처리
💡 왜 MVC로 분리하는 걸까?
 ① 관심사를 분리하기 위해서다.
 ② 각 부분을 독립적으로 개발할 수 있어서 생산성이 증가하고 유지보수가 쉬워진다.
 ③ 다수의 멤버가 동시에 개발하기도 용이하다.

 

Django의 MTV Pattern

MTV Pattern

Model
  • MVC에서의 Model
  • 데이터와 관련된 로직을 처리
  • 데이터 구조 정의, 데이터베이스 기록 관리
Template
  • MVC에서의 View
  • 레이아웃과 화면상의 로직을 처리 (UI, 레이아웃)
View
  • MVC에서의 Controller
  • 메인 비즈니스 로직을 담당
  • 클라이언트의 요청에 대해 처리를 분기하는 역할
    • DB도 조회하고 외부로 요청하기도 한다.
    • 응답을 만들어서 클라이언트에게 전달한다.

 

↓ 그림으로 정리된 MTV

📗 Django 


Web 이해하기

  • World Wide Web : 전 세계에 펼쳐져 있는 거미줄을 의미한다.

  • 해저 광케이블로 전 세계가 이어져 있다.
  • 우리가 웹 또는 인터넷이라고 하는 건 결국,
    • 전 세계의 컴퓨터가 서로 연결되어 있는 거대한 인프라를 이용하는 것이다.

클라이언트 - 서버 구조

  • 우리가 사용하는 대부분의 서비스는 클라이언트-서버 구조를 가지고 있다.
  • 결국 클라이언트도, 서버도 하나의 컴퓨터다.

 

클라이언트(Client)

  • 인터넷에 연결이 가능한 장치
  • 특히, 웹 브라우저를 말한다.
  • 서비스를 요청하는 주체 (사용자)
    • 스마트폰, 애플워치, 아이패드 등등

 

서버(Server)

  • 자원(Resource)을 가지고 있는 컴퓨터다.
  • 요청을 처리하고 응답하는 주체
우리가 구글 사이트에 접속한다는 것은?
== 어딘가에 있는 구글 사이트를 가지고 있는 컴퓨터에게, ❛구글 홈페이지.html❜을 달라고 요청하는 것!
  1. 구글.html 파일을 요청함
  2. 구글 서버가 요청을 받아서 구글.html 파일을 우리 컴퓨터에게 전달함
  3. 우리 컴퓨터의 웹 브라우저가 구글.html 파일을 해석해서 보여줌

 

다시 말해서,

웹 브라우저 (Client) 구글 서버 (Server) → 웹 브라우저 (Client)

의 과정으로 구글 사이트에 접속하는 것이다.


웹 브라우저와 웹 페이지

웹 브라우저의 역할

  • 인터넷에서 내가 원하는 페이지를 찾아서 보여주고, 하이퍼 링크를 통해 다른 페이지로 이동할 수 있게끔 도와주는 프로그램
  • HTML 파일을 보기 편하도록 바꿔주는 프로그램이다. (== 렌더링, Rendering)

 

웹 페이지(Web Page)란?

  • 우리가 보는 모든 화면 하나하나가 웹 페이지이다. 

 

정적 웹 페이지(Static Web Page)
  • 작성한 상태를 그대로 제공하는 웹 페이지이다.
  • 모든 상황에서 동일한 내용을 전달한다.
  • 우리가 작성한 HTML을 말한다.

 

동적 웹 페이지(Dynamic Web Page)
  • 요청에 따라 보여주는 모습이 수정되는 웹 페이지이다. 
  • 포털 사이트에 A유저가 로그인했을 때와 B 유저가 로그인했을 때의 화면이 다르다.
    • 받은 메일의 갯수, 가입한 카페 등등
  • 요청을 받아서 적절한 응답을 만들어주는 주체가 필요하다.
    • Django

웹 개발의 요청과 응답

요청(Request)

  • 클라이언트(웹 브라우저, 모바일 앱 등)가 서버에게 특정한 작업을 요청
    • 클라이언트의 정보, 요청의 형식, 인증 정보 등을 포함
    • 데이터를 포함하며, JSON이나 HTML 폼 데이터와 같은 형식으로 전달
    • 클라이언트가 요청하는 것이 무엇인지 URL을 보면 파악할 수 있다

 

응답(Response)

  • 서버클라이언트의 요청을 받고 처리한 후에 클라이언트에게 결과를 전송
  • 결과에는 여러 가지 부가적인 정보를 포함함
    • 클라이언트가 요청한 작업에 따라 다양한 형태로 전송
    • HTML, JSON, XML 등

 

요청과 응답 과정의 예시는 앞서, Django에서 프로젝트 생성App 생성 과정을 들 수 있다.

 

📗 Django 


프로젝트란?
하나의 프로젝트는 하나의 서비스이다.
A라는 웹사이트를 만든다고 하면, A라는 프로젝트를 생성하는 것

 

하나의 프로젝트는 하나의 기능만 하진 않는다.

  • 우리가 이용하는 웹 사이트들에서도 다양한 기능들로 구성돼 있다.
    • 유저, 게시물, 채팅, 좋아요 등

우리가 이용하는 웹 프로그램들을 보면 공통된 기능들이 존재한다.

  • 이 기능들을 한 번만 만들어서 재사용할 수 있도록 하는 것이 App(앱)이다.
  • 갖가지의 기능 단위로 나누어 App(앱)을 개발해야 한다.

프로젝트와 앱

  • 프로젝트(Project) : 애플리케이션의 집합체
  • 앱(App) : 각각의 기능 단위 모듈

App 사용하기

앱을 사용하기 위해선 두 가지 과정이 필요
1. App 생성하기
2. App 등록하기

 

 

1️⃣ App 생성하기

  • 프로젝트를 생성한 다음부턴 manage.py를 이용해서 장고 프로젝트를 핸들링한다.
# manage.py에서 앱 생성하기
python manage.py startapp <앱 이름>

 

  • Django에서는 앱 이름을 복수형으로 짓기를 권장하고 있다.
python manage.py startapp articles

 

 

articles의 이름으로 앱이 생성됨을 알 수 있다.

 

2️⃣ App 등록하기

  1. setting.py 파일을 연다.
  2. Installed_apps에 앱 이름을 등록하면 끝이다.


App 살펴보기

  • admin.py : 관리자용 페이지 관련 설정
  • apps.py : 앱 관련 정보 설정
  • models.py : DB관련 데이터 정의 파일
  • tests.py : 테스트 관련 파일
  • views.py : 요청을 처리하고 처리한 결과를 반환하는 파일

 

🔗 출처

📘 Jump to Python 

02 파이썬 프로그래밍의 기초, 자료형

02-4 튜플 자료형


  1. 튜플은 어떻게 만들까?
  2. 튜플의 요솟값을 지우거나 변경하려고 하면 어떻게 될까?
    1. 튜플 요솟값을 삭제하려 할 때
    2. 튜플 요솟값을 변경하려 할 때
  3. 튜플 다루기
    1. 인덱싱하기
    2. 슬라이싱 하기
    3. 튜플 더하기
    4. 튜플 곱하기
    5. 튜플 같이 구하기

튜플

  • 리스트는 [], 튜플은 ()로 둘러싼다.
  • 리스트는 요솟값의 생성, 삭제, 수정이 가능하지만 → 튜플은 요솟값을 바꿀 수 없다.

 

1. 튜플은 어떻게 만들까?

t1 = ()
t2 = (1,)
t3 = (1, 2, 3)
t4 = 1, 2, 3
t5 = ('a', 'b', ('ab', 'cd'))
  • t2 : 단지 1개의 요소만을 가질 때는 요소 뒤에 쉼표(,)를 반드시 붙여야 한다.
  • t4 : 소괄호를 생략해도 데이터 타입은 튜플로 된다.
  • 프로그램이 실행되는 동안 요솟값이 항상 변하지 않기를 바랄 때와 값이 바뀔까 걱정하고 싶지 않을 때 쓴다.

2. 튜플의 요솟값을 지우거나 변경하려고 하면 어떻게 될까?

→ 튜플은 요솟값을 한 번 정하면 지우거나 변경할 수 없다.

 

2.1. 튜플 요솟값을 삭제하려 할 때

# del 함수로 튜플 지우기 시도
t1 = (1, 2, 'a', 'b')

del t1[0]

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion

 

2.2. 튜플 요솟값을 변경하려 할 때

# 요솟값을 변경하려 시도
t1 = (1, 2, 'a', 'b')

t1[0] = 'c'

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

 

위에와 같이 튜플은 삭제 및 변경이 불가능하다는 것을 알 수 있다.


3. 튜플 다루기

3.1. 인덱싱 하기

t1 = (1, 2, 'a', 'b')

print(t1[0])
1

print(t1[3])
'b'
  • 문자열, 리스트와 마찬가지로 t1[0], t1[3]처럼 인덱싱이 가능하다.

 

3.2. 슬라이싱 하기

t1 = (1, 2, 'a', 'b')

print(t1[1:])
(2, 'a', 'b')
  • 슬라이싱도 가능하다.

 

3.3. 튜플 더하기

t1 = (1, 2, 'a', 'b')
t2 = (3, 4)
t3 = t1 + t2

print(t3)
(1, 2, 'a', 'b', 3, 4)
  • t1, t2 튜플의 요솟값이 바뀐 것이 아니라 새로운 t3의 튜플이 생긴 것이다.

 

3.4. 튜플 곱하기(반복)

t2 = (3, 4)
t3 = t2 * 3

print(t3)
(3, 4, 3, 4, 3, 4)
  • t2 튜플의 요솟값이 바뀐 것이 아니라 새로운 t3의 튜플로 3번 반복되어 생겼다.

 

3.5. 튜플 길이 구하기

len()
t1 = (1, 2, 'a', 'b')

print(len(t1))
4

 

튜플은 요솟값을 변경할 수 없기 때문에  .sort(), .insert(), .remove(), .pop() 등의 내장 함수가 없다.

🔗 출처

📘 Jump to Python 

02 파이썬 프로그래밍의 기초, 자료형

02-3 리스트 자료형


  1. 리스트는 어떻게 만들고 사용할까?
  2. 리스트의 인덱싱과 슬라이싱
    1. 리스트의 인덱싱
    2. 리스트의 슬라이싱
  3. 리스트 연산하기
    1. 리스트 더하기(+)
    2. 리스트 반복하기(*)
    3. 리스트 길이 구하기
  4. 리스트의 수정과 삭제
    1. 리스트의 값 수정하기
    2. del 함수를 사용해 리스트 요소 삭제하기
  5. 리스트 관련 함수
    1. 리스트에 요소 추가하기 - append
    2. 리스트 정렬 - sort
    3. 리스트 뒤집기 - reverse
    4. 인덱스 반환 - index
    5. 리스트에 요소 삽입 - insert
    6. 리스트 요소 제거 - remove
    7. 리스트 요소 끄집어내기 - pop
    8. 리스트에 포함된 요소 x의 개수 세기 - count
    9. 리스트 확장 - extend

1. 리스트는 어떻게 만들고 사용할까?

리스트명 = [요소1, 요소 2, 요소 3,...]
a = []
b = [1, 2, 3]
c = ['Life', 'is', 'too', 'short']
d = [1, 2, 'Life', 'is']
e = [1, 2, ['Life', 'is']]

2. 리스트의 인덱싱과 슬라이싱

2.1. 리스트의 인덱싱

리스트[숫자]
a = [1, 2, 3]
리스트의 첫 번째 값 출력하기
print(a[0])
1
리스트의 값들 더하기
print(a[0] + a[2])
4
리스트의 마지막 값 출력하기
print(a[-1])
3

 

이중 리스트에서 인덱싱 하기
a = [1, 2, 3, ['a', 'b', 'c']]
print(a[-1][0])
'a'

print(a[-1][1])
'b'

print(a[-1][2])
'c'
  • 기존의 인덱싱 방법에서 2차원 리스트에서 첫 번째, 두 번째, 세 번째 값을 불러올 수 있다.

 

삼중 리스트에서 인덱싱 하기
a = [1, 2, ['a', 'b', ['Life', 'is']]]

print(a[2][2][0])
'Life'

 

 

2.2. 리스트의 슬라이싱

문자열과 마찬가지로 리스트에서도 슬라이싱 기법을 적용할 수 있다.
a = [1, 2, 3, 4, 5]
print(a[0:2])
[1, 2]
문자열의 슬라이싱
a = "12345"
print(a[0:2])
'12'
  • 문자열에서 했던 슬라이싱 기법과 동일하다.
추가적인 리스트의 슬라이싱 예시
a = [1, 2, 3, 4, 5]
b = a[:2]    # 0~1번째 자리까지 슬라이싱
c = a[2:]    # 2번째 자리부터 끝까지 슬라이싱

print(b)
[1, 2]

print(c)
[3, 4, 5]
  • a[2]의 값인 3은 포함되지 않는다.
중첩된 리스트에서 슬라이싱 하기
a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]

print(a[2:5])
[3, ['a', 'b', 'c'], 4]

print(a[3][:2])
['a', 'b']​
→ 위 예에서 a[3]은 ['a', 'b', 'c']를 나타낸다.
→→ a[3][:2]는 ['a', 'b', 'c']의 첫 번째 요소부터 세 번째 요소 직전까지의 값, 즉 ['a', 'b']를 나타내는 리스트가 된다.

3. 리스트 연산하기

3.1. 리스트 더하기(+)

리스트 사이에서 (+)는 2개의 리스트를 합치는 기능을 한다.
문자열에서 "abc" + "def" = "abcdef"가 되는 것과 같은 원리이다.
a = [1, 2, 3]
b = [4, 5, 6]

print(a + b)
[1, 2, 3, 4, 5, 6]

 

3.2. 리스트 반복하기(*)

리스트가 반복되어 새로운 리스트를 만들어 낸다.
문자열에서  "abc" * 3 = "abcabcabc"가 되는 것과 같은 원리이다.
a = [1, 2, 3]

print(a * 3)
[1, 2, 3, 1, 2, 3, 1, 2, 3]

 

3.3. 리스트 길이 구하기

len()
a = [1, 2, 3]

print(len(a))
3

 

리스트 연산 오류
a = [1, 2, 3]

print(a[2] + "hi")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'​

a[2]에 저장된 값은 "정수(int)"인데 "hi"는 문자열이다.
정수와 문자열은 타입이 다르기 때문에 연산이 불가능하다.

print(str(a[2]) + "hi")
3hi

 이렇게 데이터 타입을 일치화 시켜주면 문제를 해결할 수 있다.


4. 리스트의 수정과 삭제

4.1. 리스트의 값 수정하기

변경하려는 리스트의 값을 다시 할당해 주면 수정된다.
a = [1, 2, 3]
a[2] = 4

print(a)
[1, 2, 4]

 

4.2. del 함수를 사용해 리스트 요소 삭제하기

del 객체
a = [1, 2, 3]
del a[1]

print(a)
[1, 3]
슬라이싱 기법으로 리스트의 여러 요소를 한꺼번에 삭제가 가능하다.
# 슬라이싱 기법으로 여러 요소 삭제하기
a = [1, 2, 3, 4, 5]
del a[2:]

print(a)
[1, 2]

5. 리스트 관련 함수

5.1. 리스트에 요소 추가하기

.append()
a = [1, 2, 3]
a.append(4)

print(a)
[1, 2, 3, 4]
a.append([5, 6])

print(a)
[1, 2, 3, 4, [5, 6]]

 

5.2. 리스트 정렬

.sort()
# 숫자 리스트
a = [1, 4, 3, 2]
a.sort()

print(a)
[1, 2, 3, 4]
# 문자열 리스트
a = ['a', 'c', 'b']
a.sort()

print(a)
['a', 'b', 'c']

 

5.3. 리스트 뒤집기

.reverse()
정렬한 다음 다시 역순으로 정렬하는 것이 아니라, 현재의 리스트를 그대로 거꾸로 뒤집는 함수이다.
a = ['a', 'c', 'b']
a.reverse()

print(a)
['b', 'c', 'a']

 

5.4. 인덱스 반환

.index()
소괄호에 있는 값의 위치를 반환한다.
a = [1, 2, 3]
print(a.index(3))
2

print(a.index(1))
0
값이 없을 시에는 오류가 발생한다.
print(a.index(0))

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 0 is not in list​

 

5.5. 리스트에 요소 삽입

.insert(삽입하고자 하는 위치, 삽입하려는 값)
a = [1, 2, 3]
a.insert(0, 4)    # 0번째 위치에 4를 삽입

print(a)
[4, 1, 2, 3]
a.insert(3, 5)    # 3번째 자리에 5를 삽입

print(a)
[4, 1, 2, 5, 3]

 

5.6. 리스트 요소 제거

.remove(삭제하려는 값)
a = [1, 2, 3, 1, 2, 3]
a.remove(3)

print(a)
[1, 2, 1, 2, 3]

a.remove(3)
print(a)
[1, 2, 1, 2]
  • a가 3이라는 값을 중복으로 갖고 있을 경우, 첫 번째 3만 제거된다.
  • 한 번 더 실행하면 다시 3이 삭제된다.

 

5.7. 리스트 요소 끄집어내기

.pop()
맨 마지막 요소를 리턴하고, 그 요소를 삭제한다.
a = [1, 2, 3]
a.pop()    # 아무것도 안 적으면 마지막 요소를 반환 후 삭제
3

print(a)
[1, 2]
a = [1, 2, 3]
a.pop(1)    # 1번째 자리의 값을 반환 후 삭제
2

print(a)
[1, 3]

 

5.8. 리스트에 포함된 요소 x의 개수 세기

.count(x)
리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 리턴한다.
a = [1, 2, 3, 1]

a.count(1)
2
  • 리스트 안에 1이 두 개가 있어서 2를 반환한다.

 

5.9. 리스트 확장

.extend(x)
x에는 리스트만 올 수 있으며, 원래의 리스트에 x 리스트를 더하게 된다.
a = [1, 2, 3]
a.extend([4, 5])    # a에 [4, 5]를 새롭게 추가

print(a)
[1, 2, 3, 4, 5]

b = [6, 7]
a.extend(b)

print(a)
[1, 2, 3, 4, 5, 6, 7]    # 리스트 b가 a에 추가됨

 

🔗 출처

📘 Jump to Python 

02. 파이썬 프로그래밍의 기초, 자료형

02-1 숫자형


  1. 숫자형은 어떻게 만들고 사용할까?
    1. 정수형
    2. 실수형
    3. 8진수와 16진수
  2. 숫자형을 활용하기 위한 연산자
    1. 사칙 연산
    2. x의 y제곱을 나타내는 ** 연산자
    3. 나눗셈 후 나머지를 리턴하는 % 연산자
    4. 나눗셈 후 몫을 리턴하는 // 연산자
    5. 복합 연산자

숫자형은 어떻게 만들고 사용할까?

정수형

정수형(integer)이란 말 그대로 정수를 뜻하는 자료형을 말한다.
>>> a = 123	#양의 정수
>>> a = -178	#음의 정수
>>> a = 0​

 

실수형

실수형(floating-point)은 소수점이 포함된 숫자를 말한다.
>>> a = 1.2
>>> a = -3.45
컴퓨터식 지수 표현 방식
>>> a = 4.24E10    #4.24*10의 10승
>>> a = 4.24e-10   #4.24*10의 -10승

 

8진수

8진수(octal)를 만들기 위해서는 숫자가 0o 또는 0O으로 시작하면 된다.
(숫자 0 + 알파벳 소문자 o 또는 대문자 O)
>>> a = 0o177
>>> print(a)
127

# 0o177 = (1*8에 2승) + (7*8에 1승) +7 =127

 

16진수

16진수(hexadecimal)를 만들기 위해서는 0x로 시작하면 된다.
>>> a = 0x8ff
>>> b = 0xABC
>>> print(b)
2748

# 0xABC = (10*16의 2승) + (11*16의 1승) + 12 = 2748 (A:10, B:11, C:12)

 


숫자형을 활용하기 위한 연산자

사칙 연산(+, -, *, /)

>>> a = 3
>>> b = 4

 

덧셈(+)

>>> a + b
7

 

뺄셈(-)

>>> a - b
-1

 

곱셈(*)

>>> a * b
12

 

나눗셈(/)

>>> a / b
0.75

 

x의 y제곱을 나타내는 ** 연산자

>>> a = 3
>>> b = 4
>>> a ** b
81

 

나눗셈 후 나머지를 리턴하는 % 연산자

%는 나눗셈의 나머지 값을 리턴하는 연산자이다.
>>> 7 % 3
1

>>> 3 % 7
3

 

나눗셈 후 몫을 리턴하는 // 연산자

/ 연산자를 사용하여 7 나누기 4를 하면 1.75가 된다.
>>> 7 / 4
1.75
1.75에서 몫에 해당하는 정수값 1만 리턴하는 것이 // 연산자이다.
>>> 7 // 4
1

 

복합 연산자

복합 연산자는 +,-와 같은 산술 연산자와 대입 연산자(=)를 합쳐 놓은 것이다.
>>> a = 1
>>> a += 1  # a = a + 1 과 같음
>>> print(a)
2
>>> a = 1
>>> a -= 1  # a = a - 1 과 같음
>>> print(a)
0
+= == a = a + 2 2를 더한 값을 리턴
-= == a = a - 2 2를 뺀 값을 리턴
*= == a = a * 2 2를 곱한 값을 리턴
/= == a = a / 2 2를 나눈 값을 리턴
//= == a = a // 2 2를 나눈 몫을 리턴
%= == a = a % 2 2를 나눈 나머지를 리턴
**= == a = a ** 2 a에 2 만큼 제곱한 값을 리턴

 

 

📗 Django 


프로젝트 시작하기

※ Django는 프로젝트 단위로 움직인다.

 

<프로젝트 시작 과정>
1. 가성환경 생성
2. 가상환경 활성화
3. Django 설치
4. 의존성 파일(requirements.txt)을 생성
🔗 1단계~4단계 진행 방법

1. 프로젝트 생성

django-admin startproject <프로젝트 이름> <생성 디렉토리>

 

→ 여기서 <생성 디렉토리>를 생략하면, 현재 위치에 프로젝트 이름의 폴더가 만들어지면서 생성된다.

 

django-admin startproject <프로젝트 이름> .

 

→ [ . ]은 현재 폴더를 의미하며, 현재 폴더를 프로젝트 폴더로 사용해서 생성된다.

 

 

2. 해당 폴더 안쪽으로 이동

cd my_first_pjt

 

 

3. Django 개발 서버 실행

python manage.py runserver

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
  • 이 창이 뜬다.
http://127.0.0.1:8000/
  • Control-C를 누른 상태에서 위의 링크를 누르시면 새로운 사이트가 실행된다.

http://127.0.0.1:8000/

  • Django 서버가 실행이 된다.

살펴보기 

  • __init__.py : 하나의 폴더를 하나의 파이썬 패키지로 인식하도록 하는 파일
  • settings.py : 프로젝트의 설정을 관리하는 곳
  • urls.py : 어떤 요청을 처리할지 결정하는 곳
  • wsgi.py : 웹 서버 관련 설정 파일
  • manage.py : Django 프로젝트 유틸리티 (조종기)

∴ settings.py, urls.py만 잘 사용하면 된다.

📗 Django 


1. 파이썬 설치

 macOS
https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg​

 

🚨 Add Python to PATH에 체크하셔야 해요


2. 가상 환경 만들기

2.1. ignore 파일 만들기

$ touch .gitignore
  • GitHub와 연동하여 폴더를 쓰고 있기 때문에 .gitignore 파일 먼저 만들었다.

 

2.2. 가상환경 만들기

# 가상환경 만들기_가상환경 이름 == Django
$ python -m venv Django
  • venv 폴더를 만들었고, 가상 환경 관련된 폴더로 사용하면 된다.

 

2.3. 가상환경 활성화하기

# 가상환경 활성화
$ source Django/bin/activate
  • 가상환경을 활성화 하는 코드이다.

성공적으로 활성화가 되면 초록불과 함께 (가상환경명)이 뜬다.

# pip의 list 확인
pip list

Package Version
------- -------
pip     24.3.1
  • pip에 아무것도 설치되어 있지 않음을 알 수 있다.

3. Django 설치하기

 

3.1. Django 라이브러리 설치하기

pip install django==4.2
  • 뒤에 버전(4.2)도 붙여서 설치하였다.

 

3.2. 설치 패키지 확인하기

# pip list 확인하기
$ pip list

Package  Version
-------- -------
asgiref  3.8.1
Django   4.2
pip      24.3.1
sqlparse 0.5.3
Django만 설치했는데, 다른 것도 설치되는 이유

 

→ 의존성 때문이다.

  • Django도 결국 다른 것들의 도움을 받아야 만들어진다.
  • 따라서, 장고를 사용하기 위해서는 저것들이 자동으로 함께 설치된다.

→ 이 버전들은 항상 동일해야 한다.

→ 그래서 freeze 해야 한다.

 

3.3. requirments.txt에 freeze 하기

pip freeze > requirements.txt
  • 저절로 txt 파일이 만들어져서 버전이 기록된다.
  • 앞으로 설치를 하고 나서 항상 이 과정을 진행해야 한다.

 

3.4. requirments.txt 파일 읽어오는 방법

pip install -r requirements.txt

 

 

버전과 함께 입력하여 설치한 이유

LTS(Long Term Support)

  • 모든 것은 진화하고 발전한다.
  • 그렇다고 가장 최신버전이 좋은 건 아니다.
    • 어떤 패키지를 선택 & 설치할 때는 반드시 호환성을 고려해야 한다.
    • 가장 최신 버전을 설치한다고 해서 모든 것이 호환되지는 않는다.
      • 예) macOS M1 Chip
    • 프로젝트 호환성이 높고 오래 사용할 수 있는 버전을 선택해야 한다.
      • → 안정적이고 장기적으로 지원을 받을 수 있는 버전을 선택해야 한다.
  • 소프트웨어나 기술 제품의 장기 지원을 나타내며 LTS 버전은 보다 오랜 기간 동안 지원되며 보안 업데이트, 버그 수정, 백포트된 기능 업데이트 등을 포함한다.
    • → 사용자들이 해당 소프트웨어를 안정적으로 운영하고 유지보수할 수 있도록 도와준다.

 

LTS 관련 내용을 검색하고 읽으며 찾아야 함
🔗 Django
🔗 Python

이 과정이 끝나면 프로젝트를 시작 할 수 있습니다.

(== 하나의 프로그램을 만들기 시작한다.)

📗 Django 


프레임워크(Framework)란?

소프트웨어 개발을 위한 구조적인 틀
  • 개발자들이 프로그램을 만들 때 자주 사용하는 여러 도구를 모아놓은 것이다.
  • 특정한 작업이나 목적을 수행하기 위한 코드 뭉치이다.
  • 파이썬에서는 Django, Flask, FastAPI 등의 여러 프레임 워크가 있다.

 

프레임워크를 왜 사용할까?

  1. 프레임워크를 사용하면 생산성이 아주 높아진다.
  2. 부가적인 부분은 프레임워크에 맡기고, 핵심 로직에만 집중할 수 있다.
  3. 구조적으로 안정적인 형태로 개발이 가능하다.
    • 프레임워크는 슈퍼개발자가 만든 것이다.
    • 한 명도 아니고 여러 명이 모여 논의를 통해 만들어진다.
    • 즉, 굉장히 단단하고 안정적인 코드이다.
  4. 빠르고 안정적이며, 높은 품질의 소프트웨어 개발이 가능하다.

Why?

다양한 프레임워크 중에서도 Django를 배워야 하는 이유

 

Python 기반
  • Django를 다루기 위해 다른 언어를 배울 필요가 없다.
  • Python을 사용해어 웹개발이 가능하다.
웹 프레임워크
  • 웹을 만들기 위한 프레임워크이다.
  • 빠른 웹개발을 위한 모든 것이 준비되어 있다.

 

Why Django?
  • DRY(Don't Repeat Yourself) 원칙
    • 코드 중복을 최소로 하는 개발 원칙을 따른다.
  • 모든 것이 갖춰진 프레임워크
    • 보안, 관리자 기능, Auth 등의 필요한 모든 것이 준비되어 있다.
  • 풍부한 레퍼런스
    • Google과 함께 사용 가능하다.
    • 모든 에러에 대한 해결책이 이미 존재한다.
  • 검증된 프레임워크
    • 어떠한 도구(프레임워크)를 고를 때는 그것을 어디에 사용했는지 봐야 한다.
      • Spotify, Instagram, Dropbox, Toss 등등에 쓰였다.

+ Recent posts