[수업 목표]
오늘 배울 것 이야기- 4주차: Flask, 미니프로젝트1, 미니프로젝트2
오늘은 HTML과 mongoDB까지 연동해서 서버를 만들어봅니다!

나중에 또 이야기하겠지만 헷갈리면 안되는 것!
우리는 컴퓨터가 한 대 잖아요... 그래서 같은 컴퓨터에다 서버도 만들고, 요청도 할 거예요. 즉, 클라이언트 = 서버가 되는 것이죠.
이것을 바로 "로컬 개발환경"이라고 한답니다! 그림으로 보면, 대략 이렇습니다.

sparta → projects → prac 폴더를 열고 시작!
Flask 기초: 기본 실행
Flask 프레임워크: 서버를 구동시켜주는 편한 코드 모음. 서버를 구동하려면 필요한 복잡한 일들을 쉽게 가져다 쓸 수 있습니다.
프레임워크를 쓰지 않으면 태양초를 빻아서 고추장을 만드는 격!
프레임워크는 3분 요리/소스 세트라고 생각하면 되겠습니다!
app.py 파일을 만들어 아래 코드를 붙여넣어봅니다.
파일 이름은 아무렇게나 해도 상관없지만,
통상적으로 flask 서버를 돌리는 파일은 app.py라고 이름 짓습니다!
[코드스니펫] - flask 시작 코드
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
오른쪽 클릭 → 'Run app'을 클릭하고, 터미널에 아래와 같은 메시지가 뜨면 실행 성공!

이제 크롬에서 http://localhost:5000/ 으로 접속해보세요.
화면에 Hello World! 라는 메시지가 보이시나요? 그렇다면 성공한 것! 👏
종료하는 방법
터미널 창을 클릭하시고, ctrl + c 을 누르시면 서버를 종료할 수 있습니다.
Flask 기초: URL 나눠보기
@app.route('/) 부분을 수정해서 URL을 나눌 수 있습니다! 간단하죠?
url 별로 함수명이 같거나, route('/')내의 주소가 같으면 안됩니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
@app.route('/mypage')
def mypage():
return 'This is My Page!'
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
Flask 기초: 기본 폴더구조 - 항상 이렇게 세팅하고 시작!
Flask 서버를 만들 때, 항상,
프로젝트 폴더 안에,
ㄴstatic 폴더 (이미지, css파일을 넣어둡니다)
ㄴtemplates 폴더 (html파일을 넣어둡니다)
ㄴapp.py 파일
이렇게 세 개를 만들어두고 시작하세요. 이제 각 폴더의 역할을 알아봅시다!
(꼭 참고!! venv는 실제로는 보이지만, 안보인다~라고 생각하세요! 기억하시죠?)
6) Flask 기초: HTML 파일 불러오기
**templates 폴더의 역할을 알아보겠습니다.**
HTML 파일을 담아두고, 불러오는 역할을 하죠!
1. 간단한 index.html 파일을 templates 안에 만들기
- **[코드스니펫] index.html 예제코드**
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<title>Document</title>
</head>
<body>
<h1>서버를 만들었다!</h1>
</body>
</html>
```
2. html 파일 불러오기
flask 내장함수 render_template를 이용합니다. 바로 이게 프레임워크의 위력!
```python
from flask import Flask, render_template
app = Flask(__name__)
## URL 별로 함수명이 같거나,
## route('/') 등의 주소가 같으면 안됩니다.
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
```