🧭 KAIST JUNGLE

[🧭️Jungle] Web Scraper, Flask, Own project - TIL

seungineer = seungwoo + engineer 2024. 1. 13. 00:53

Flask

- Flaskλž€,

파이썬 μ›Ήν”„λ ˆμž„μ›Œν¬λ‘œ κ°„νŽΈν•˜κ²Œ serverλ₯Ό ν˜ΈμŠ€νŒ…ν•  수 있게 ν•΄μ€€λ‹€.

- Flask μ„œλ²„ μ‹€ν–‰

μ„œλ²„ μ‹€ν–‰ μ‹œ ν”„λ ˆμž„μ›Œν¬ κ°„ 좩동을 ν”Όν•˜κΈ° μœ„ν•΄μ„œ '가상 ν™˜κ²½'μ—μ„œ μž‘μ—…μ„ μ§„ν–‰ν–ˆλ‹€.

'가상 ν™˜κ²½(Virtual Environment)'μ΄λž€, μž‘μ—… 폴더 λ‚΄μ—μ„œ ν•˜μœ„ 폴더λ₯Ό λ§Œλ“€μ–΄ 이 μ•ˆμ—μ„œ ν”„λ ˆμž„μ›Œν¬λ₯Ό 관리할 수 있게 ν•œλ‹€. 이λ₯Όν†΅ν•΄ 전체 ν™˜κ²½ ν•˜μ—μ„œ μž‘λ™ν•˜λ˜ ν”„λ ˆμž„μ›Œν¬μ™€μ˜ 좩돌 및 간섭을 막고 버전관리λ₯Ό λ•λŠ”λ‹€.

(* κ°€μƒν™˜κ²½μ„ λ‚˜λˆ„λŠ” 이유 β‘  배포 μ‹œ λΆˆν•„μš”ν•œ ν”„λ ˆμž„μ›Œν¬ μ„€μΉ˜ 방지 및 동일 λ²„μ „μœΌλ‘œ μ„€μΉ˜ν•˜κΈ° μœ„ν•΄ β‘‘ μ„œλ²„μ˜ python 버전에 λ¬΄κ΄€ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ν•˜κΈ°μ— python 버전에 λ”°λΌμ„œ μ§€μ›ν•˜μ§€ μ•ŠλŠ” ν”„λ ˆμž„μ›Œν¬(ex. Django)κ°€ μžˆλŠ” 경우 유용)

- Flask κΈ°λ³Έ 폴더 ꡬ쑰

'v env', 'static', 'template' 폴더와 'app.py'  파일이 기본이 λœλ‹€.

staticμ—λŠ” img, css 파일 등을 μ €μž₯해두고, template의 index.htmlκ³Ό 같은 파일이 static ν΄λ”μ—μ„œ sourceλ₯Ό λΆˆλŸ¬μ™€μ„œ μ‚¬μš©λœλ‹€. app.py νŒŒμΌμ—λŠ” Flask μ„œλ²„ μ‹€ν–‰ κΈ°λ³Έ 문법 및 μ„œλ²„ μš”μ²­ API에 λŒ€ν•΄ μ •λ¦¬λ˜μ–΄ μžˆλ‹€.

- API λ§Œλ“€κΈ°

  HTTP request method(μš”μ²­ λ©”μ†Œλ“œ)λ₯Ό 톡해 μ–΄λ–€ μš”μ²­ μ’…λ₯˜(GET, POST λ“±)인지 μ‘λ‹΅ν•˜λŠ” μ„œλ²„ μͺ½μ— 정보λ₯Ό μ•Œλ €μ€€λ‹€.

1. GET

데이터λ₯Ό 쑰회(Read)ν•  λ•Œ μ‚¬μš©!

→ 데이터 전달: URL 뒀에 λ¬ΌμŒν‘œλ₯Ό λΆ™μ—¬ key=value둜 전달(google.com?q=아이폰)

 

2. POST

데이터λ₯Ό 생성(Create), μˆ˜μ •(Update), μ‚­μ œ(Delete)ν•  λ•Œ μ‚¬μš© ! 

→ 데이터 전달: HTML Body μ•ˆμ—μ„œ key:value ν˜•νƒœλ‘œ 전달


⛏️Own Project

URL, Memoλ₯Ό μ €μž₯ν•  수 있으며, card columns ν˜•μ‹μœΌλ‘œ μ €μž₯ν–ˆλ˜ λ‚΄μš©μ„ 기본적으둜 ν‘œμ‹œν•˜λŠ” μ‚¬μ΄νŠΈ.


κΈ°λŠ₯ λ‹¨μœ„

  • DB의 μ €μž₯된 Memoλ₯Ό card Columns display
  • DB둜 μ‹ κ·œ μž‘μ„± Memo Upload

ꡬ쑰

Body

  • Card ν˜•μ‹μœΌλ‘œ DB에 μžˆλŠ” 직접 남긴 Memo와 URL의 Meta 데이터 쀑 사진, Headline 등을 κ°€μ Έμ™€μ„œ ν‘œμ‹œ(Bootstrap, MongoDB)
  • λ©”λͺ¨ μž‘μ„±μ—΄κΈ° λ²„νŠΌ > URL, Memo μž…λ ₯λž€ .show() > μž…λ ₯ ν•˜κΈ° λ²„νŠΌ > μž…λ ₯ μ™„λ£Œ Pop-up > λ©”λͺ¨ μž‘μ„± λ‹«κΈ° λ²„νŠΌ > URL, Memo μž…λ ₯λž€.hide() (CSS, jQuery)

πŸ’‘ A-Ha

  • ν•œ <Div> Tag에 classλ₯Ό 두 개 이상 지정 ν•˜κ³  싢을 경우 β–Ά class = "클래슀λͺ…1 클래슀λͺ…2" 
  • ν—·κ°ˆλ¦¬λŠ” HTML, CSS, JS, jQuery, Ajax, Flask
    • HTML: Head, Body ꡬ쑰, Head λ‚΄ <script>...</script> μ—μ„œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  수 있음
    • JS: HTMLμ—μ„œ μž‘λ™ν•˜λŠ” μ–Έμ–΄λ‘œ script Tagμ—μ„œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•œλ‹€κ±°λ‚˜ 연산을 ν•œλ‹€κ±°λ‚˜ ν•  λ•Œ μ‚¬μš©λ¨
    • CSS: ν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œ Style을 λ³€κ²½μ‹œν‚¬ λ•Œ CSS에 λ³€ν™”κ°€ 있음
    • jQuery: CSSλ₯Ό λ³€ν™”μ‹œν‚€κ±°λ‚˜ μƒνƒœλ₯Ό κ°€μ Έμ˜€κ±°λ‚˜ ν•  λ•Œ μ‚¬μš©λ˜λ©°, JS ν•¨μˆ˜ μ•ˆμ—μ„œλ„ ν™œμš©λ  수 있음
    • Ajax: μ„œλ²„μ— Dataλ₯Ό μ „μ†‘ν•˜κ±°λ‚˜ μ„œλ²„μ—μ„œ responseλ₯Ό λ°›κ±°λ‚˜ ν•  λ•Œ μ‚¬μš©λ¨
    • Flask: μ„œλ²„λ₯Ό λŒλ €μ£ΌλŠ” 역할을 ν•˜λ©°, static 폴더에 μžˆλŠ” 정보λ₯Ό HTML에 λΏŒλ €μ€„ μˆ˜λ„ 있음