본문 바로가기

About my life/Development Studies

[Server] GET 요청 튜토리얼

728x90
반응형

1. GET 요청 기초: 리소스를 요청하고 가져오는 것

내 컴퓨터로 GET 요청을 하면 "Hello World!" 를 출력하도록 작성.
 
먼저 아래 명령어를 통해서 파이썬 패키지인 Flask 설치

pip install Flask

 
다음으로 특정 디렉토리에서 py 파일 생성

vim get_tutorial.py

 
아래 python 코드를 작성

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(debug=True, port=8080)

 
파이썬 코드 실행

python3 get_tutorial.py

 
URL을 통해 GET 요청 테스트

Fig 1. get_string

 
내 컴퓨터로 요청했을 때 특정 html 파일을 응답해주도록 작성
 
파이썬 코드 수정

from flask import Flask

app = Flask(__name__)

@app.route('/')
def test():
    return render_template('test.html')
    
if __name__ == '__main__':
    app.run(debug=True)

 
아래 코드로 test.html 파일 작성

vim test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask HTML</title>
</head>
<body>
    <h1>Hello, World!</h1>
    <p>This HTML is rendered from a Flask app.</p>
</body>
</html>

 
ERROR 발생.
TemplateNotFound
jinja2.exceptions.TemplateNotFound: test.html
 
Flask는 html 파일을 찾기 위해 templates 폴더를 먼저 찾는다고 한다.
 
하지만 templates 폴더가 없기 때문에 찾을 수 없다고 에러가 나온 것이다.

mkdir tmeplates

mv test.html templates/test.html

 
다시 실행해보면 정상적으로 응답을 해주는 것을 알 수 있다.

Fig 2. get_html

 

이제 여기서 기초 공부를 마치기 전에 기본적인 개념을 잡고 가려고 한다.

PIP

PIP : Pip Installs Packages 의 약자로 python 으로 작성된 패키지를 쉽게 설치하고 관리할 수 있도록 도와주는 도구

# how to install python packages
pip install package_name

# how to upgragde python packages
pip install --upgrade package_name

# how to uninstall python packages
pip uninstall package_name

# how to show python packages
pip list

# how to generate virtual environment
python -m venv env_name

# how to activate virtual environemnt
source vir_name/bin/activate

# how to deactiavte virtual environemnt
deactivate

Http

HTTP: HyperText Transfer Protocol 의 약자로 웹에서 클라이언트와 서버 간에 데이터를 주고받기 위한 규칙. 이 규칙은 일반적으로 텍스트를 기반으로 되어 있기 때문에 보안에 매우 취약하다. 주요 메서드(Method)는 아래와 같다:
 
GET: 리소스를 요청하고 가져옴
POST: 서버에 데이터를 제출
PUT: 지정된 URL에 새로운 데이터를 저장
DELETE: 리소스를 삭제
 
HTTP는 주로 웹 브라우저와 웹 서버 간의 통신에 사용되며 URL(Uniform Resource Locator)를 통해 특정 리소스에 접근함.


Https

HTTPS: HyperText Transfer Protocol Secure 의 약자로 HTTP에 데이터 암호화가 추가된 프로토콜이다. TLS(Transport Layer Security) 또는 SSL(Secure Sockets Layer) 프로토콜을 사용하여 데이터를 암호화한다. 데이터 암호화 외에도 중간자 공격, 데이터 변조, 위조 등에 대한 방어 기능을 제공.
 
사용자가 https://naver.com 을 주소창에 입력하면 웹 브라우저(ex.chrome) 는 서버에게 HTTP 요청을 보낸다. 서버는 웹 브라우저에게 SSL/TLS 인증서를 제공한다. 이 인증서에는 서버의 공개키와 서버의 정보를 포함하고 있다. 웹 브라우저는 받은 인증서를 사용하여 서버의 공개키를 얻고, 그 후 공개키를 사용하여 사용자의 데이터를 암호화하고 서버로 전송한다고합니다. 그러면 서버는 자신이 가지고 있는 개인 키를 사용하여 클라이언트가 보낸 암호화된 데이터를 해독하고, 이후 서버는 클라이언트에게 필요한 데이터를 암호화하지 않은 상태로 전송한다.


GET vs POST

둘은 구체적으로 여러 가지 차이점이 존재한다.

 

1. 데이터 전송 방식:

  • GET: 데이터를 URL의 쿼리 문자열에 첨부하여 전송. URL 에 노출되므로 주로 데이터를 가져오는 용도로 사용됨
  • POST: HTTP 요청의 본문(body)에 포함되어 전송되므로 데이터가 URL에 노출되지 않음. 따라서 주로 데이터를 서버로 제출하거나 업로드할 때 사용됨

2. 데이터 전송량:

  • GET: URL 을 통해 데이터를 전달하기 때문에 데이터의 양에 제한이 있음
  • POST: 본문에 데이터를 넣기 때문에 GET 에 비해 더 많은 양의 데이터를 전송할 수 있음

3. 보안:

  • GET: 취약 (위에서 언급했던 이유)
  • POST: GET보다는 상대적으로 보안이 강력함 (body에 넣어서 전달하기 때문에)

4. 캐싱:

  • GET: 캐싱 가능. 브라우저에서 이전에 받은 응답을 재사용할 수 있음
  • POST: 캐싱되지 않음. POST 요청은 서버로 전송되어야함.

http://127.0.0.1

이것은 보통 localhost 로도 사용한다. 의미하는 바는 내 컴퓨터에서 local 하게 요청과 응답을 주고 받기 위함이다. 따라서 다른 서버에서 이 경로로 들어올 수 없다고 한다. 보통 테스트할 때 자주 사용한다고 함. 추가적으로 http://localhost:port_num 라고 요청을 하게 되는데 Flask 에서 port 번호를 지정해주지 않으면 보통 5000번 포트로 설정된다.


 

728x90
반응형