서버는 요청에 대한 제공을 해주는 역할을 담당한다.
식당을 예로 들면 종업원(서버)가 하는 역할이라고 생각하면 쉽다.
( 기본 세팅을 준비해주고, 주문을 받고, 제공을 해주는 역할)
⬇︎ ⬇︎ ⬇︎
클라이언트가 요청(request)을하면 서버는 제공,응답(response)을 하는 역할을 한다.
웹서버는, 웹이라는 서비스를 제공하는 역할을 한다.
이 때, 우리는 브라우저라는 도구를 이용해서 웹서버에 요청을 하게 되는데,
여기서 우리(사용자)와 브라우저를 묶어서 클라이언트라고 한다.
Request요청을 할 때 우리는 url로 요청하게 되고
response로 응답할때는 retrun으로 응답한다.
크롬과 나는 한 몸으로 서버에 dict이라는 get요청을 하고,
서버는 그 get요청을 받아 해당 html을 render(제공)해주게 된다.
로그인 할 때, 아이디와 패스워드를 담아서
url로 post요청을 서버에 보내게 된다.
서버는 우리서버에 있는 값인지 찾게 되고, 응답(response)에 대한 return을 브라우저에 보내주게 된다
그리고 브라우저는 그걸 판단해서 html을 render(제공)하게 되는 것이다.
서버는 컴퓨터이다.
AWS도 서버를 사용하기위해 컴퓨터를 빌리는 것.
그러므로 내컴퓨터도 서버가 될 수 있다.
이때 내 컴퓨터를 지칭하는 것이 로컬호스트이다.
127.0.0.1
프로젝트를 예시로 들었을 때,
내컴퓨터 안에 있는 프로그램 중 하나가 app.py가 되는 것이고,
이 프로그램을 구동시키는 순간 localhost로 돌게 된다.
돌고 있는 동안은 계속 request가 들어올때까지 요청을 기다리는 것이다.
클라이언트로부터 요청이 들어오면 어디로가게끔 정해주는 것
@app.route(‘/‘) = 요청을 보낸 경로
서버는 인터넷에 연결되어 있는데, 포트가 없다면 모든 사람들이 내컴퓨터에 있는 정보를 볼 수 있음. 이때, 모든 사람들이 내 컴퓨터에 들어와서 보면 안되기 때문에, 방화벽으로 다 막아놓고 조금조금만 뚫어놓게 되는데, 이게 포트이다.
예를 들어, 한국이라는 서버에 포트가 부산항,인천항 등등이 있다고 생각해보면, 이 항구개념을 번호로쓰는게 포트!!
definition (정의)의 약자이며, 요청을 받았을 때, 정의된 내용을 return하는게 역할
ex)
Route하면 home()을 정의를 하고, render_template를 return한다.
여기서 render_template나, jsonfy, request 등을 사용할 수 있는 건,
위에서 render_template모듈을 import로 가져왔기때문에 쓸 수 있는 것이다.
: 쉽게 페이지를 새로고침 하지않고 호출하는 방법
type으로 routing을 매칭함
route(경로, 메소드)가 맞아야 아래의 def로 들어가서 return하게 되는 것.
동기 = 같은시기 = sunchoronism 이기 때문에
1~5번까지 처리해야할 작업이 있다면 이 작업들을 순서대로 처리하게 되는 것이고,
비동기는 앞의 작업들을 기다리지 않고 처리하는 것이다.
get은 파라미터를 노출하게 되고,
post는 파라미터를 노출하지 않는다.
ex ) 로그인을 get요청으로 이루어질 경우 파라미터가 노출되기 때문에, post로 진행해야한다.
그러므로, DB통신은 post방식을 사용하고 get은 html을 render할때 사용하게 되는 것이다.
: 정의매개변수
로그인 할 때, 아이디와 패스워드가 담겨있어야 판단이 가능한데, 이때 이 아이디와 패스워드가 매개변수, 즉 파라미터라고 할 수 있다.
: 입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계
입력값이 늘어나도 시간이 덜 늘어나는 알고리즘인지 판단하기!
for num in array:# N
for compare_num in array: #N
if num < compare_num: # 비교 연산 1번 실행
break
else:
return num
위 식의 시간 복잡도는 가 됨.
for num in array: # N
if num > max_num: # 비교 연산 1번 실행
max_num = num # 대입 연산 1번 실행
= 위 식의 시간복잡도는 이 된다.
입력값에 비례해서 얼마나 증가하는지 파악하면 되는데, 상수보다는 지수를 먼저 비교해야한다. ( 지수가 높을수록, 입력값에 비례해서 증가하는 양이 많아지기 때문. )
물론, 상수도 의미가 있기 때문에, 고려는 해야함 !
: 입력값과 문제를 해결하는 데 걸리는 공간과의 상관관계를 의미. ( 나한테 리소스가 얼마나 할당되어 있는가 )
공간보다는 데이터의 크기가 공간복잡도를 생각하는데 중요한 요소.
저장하는 데이터의 양이 1개의 공간을 사용한다고 계산
alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "y", "z"]
# -> 26 개의 공간을 사용합니다
max_occurrence = 0 # 1개의 공간을 사용합니다
max_alphabet = alphabet_array[0] # 1개의 공간을 사용합니다.
for alphabet in alphabet_array:
occurrence = 0 # 1개의 공간을 사용합니다
= 총 29만큼의 공간이 사용됨.
: 빅오(Big-O) 표기법은 최악의 성능이 나올때의 연산량을 표기하고, 빅오메가(Big-Ω) 표기법은 최선의 성능이 나올 때의 연산량을 표기한다.
빅오 표기법은 예를들어, 처럼 표기하며, 빅오메가 표기법은 처럼 표기한다.
위 4가지중 어떤 부분이 빨라야하는지 고려해서 자료구조를 선택하여야 한다.
배열은 크기가 정해진 데이터의 공간으로, 한 번 정해지면 바꾸기가 어렵다.
배열은 원소에 즉시 접근이 가능( 상수 시간 내에 접근이 가능 )하다.
중간에 삽입/삭제를 하려면 모든 원소를 다 옮겨야한다. 최악의 경우 배열의 길이만큼 옮겨야 하므로 의 시간복잡도를 가진다.
원소를 추가하려면 새로운 공간을 할당해야해서 매우 비효율적인 구조이다.
알고리즘 개념은 역시 그림도 그려보면서 혼자서 다시 되새김하느라 이해하는데 아직은 시간이 좀 걸리는 것 같다. 그래도 오늘은 이해가는 부분들이 많아서 괜찮았다 ! 진도도 좀 뒤쳐지고 그렇지만, 주말내내 연습하면서 보충해야지..!!🥲
그림 그려보시면서 하는거 진짜 베스트입니다 ㅎㅎ 완전 잘하고계셔요!