latest
태그가 붙은 이미지 가져옴로컬에 있는 파일과 도커 이미지를 연결하는 방법
docker docs
https://docs.docker.com/
이미지로 만들어 놓으면 이전에 작업했던 내용을 다시 한번 수행하지 않아도 됨 + 배포 및 관리가 유용
docker container commit
docker build
docker container 끼리 연결할 수 있을까?
volume
으로 가능
Cloud platform
AWS, GCP 등 어디서든 접근할 수 있는 저장소
docker 와 cloud platform을 연결해서 공부해야 할까?
github, dockerhub는 클라우드 플랫폼이 아님
cloud platform과 docker를 연결하는 이유는 배포할때나 컴퓨터를 세팅해줄때 docker image로 하면 편리함
docker cp
앞에 인수의 경로를 뒤에 인수의 경로에 복사
1. 호스트 → 로컬
2. 로컬 → 호스트
docker는 개발환경일까?
yes, 개발환경을 통일시켜주는 역할
docker container ps 와 docker container ps -al 의 차이
전자 : 현재 실행중인 것
후자 : 중지된 것까지 모두 나오는 것
실행중인 웹 서버 컨테이너가 있을 때 종료 후 도커 이미지까지 삭제하려고 할 때 어떤 순서로 어떤 명령어를 실행해야 할까?
container stop → container rm -> image 삭제
장고(Django) vs 플라스크
플라스크는 최소한의 기능만 가지고 있고, 장고는 too much
- 파이썬을 사용해 웹 어플리케이션을 작성할 수 있도록 도와줌
- 웹 프레임워크
return 가능한 type: 문자열, 튜플, 딕셔너리
프로젝트 구성
__init__.py
모듈 : 파일, 패키지: 모듈을 모아둔 것 = 라이브러리
하나의 프로젝트라는 것을 flask에 알려주는 것
methods
인수 추가해야 함@app.route('/', methods=['POST','GET']) # route : 디폴트 주소에서 endpoint 지정해주는 것
def index():
...
@app.route('/index/<num>')
def index_num(num): #()안에는 <>안과 같은 변수 입력
return f'Welcone to Index {num}'
- 디폴트를 설정하지 않으면 값이 없는 상태로 url 입력하면 오류
```python
@app.route('/index/', defaults={'num' : 0})
@app.route('/index/<num>')
def index_num(num):
return f'Welcone to Index {num}'
```
flask_app 폴더
- __init__.py
- routes 폴더
- user_routes.py
`user_routes.py`
from flask import Blueprint
bp = Blueprint('user', __name__, url_prefix='/user')
# 'user' : 블루프린트 명칭
# __name__ : 블루프린트의 import 이름
# user_prefix='/user' : URL 접두어 설정(해당 블루프린트의 라우트는 URL앞에 '/user' 가 자동으로 붙음)
@bp.route('/')
def index():
return 'User index page'
`__init__.py`
from flask import Flask
from flask_app.routes import user_routes
app = Flask(__name__) # 파일이름, __init__.py일 경우 __init__.py가 포함되어 있는 상위 폴더이름
app.register_blueprint(user_routes.bp)
@app.route('/')
def index():
return 'Hello World!'
circular import error
렌더링 : 객체를 하나의 장면으로 출력시키는 것
render_template
# index.html 파일
<html>
<head>
<title>
New HTML Page
</title>
</head>
<body>
<h1>I am in templates folder</h1>
</body>
</html>
# __init__.py 파일
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
#이렇게 하면 index.html 보여줄 수 있음
웹 템플릿 엔진
쉽게 변수를 특정해 출력, 함수를 사용할 수 있음
엔진 : 다른 프로그램이 해당 프로그램을 위해 핵심적이거나 본질적인 기능을 해주는 것
템플릿 엔진 : 맞춤형 웹 페이지를 자동으로 생산할 수 있도록 도와줌
표현식
# {}
<body>
<h1>{{ title }}</h1> # title 이라는 변수를 <h1> 태그 안에 넣어서 렌더링 하는 방식
</body>
# {%...%} : if, for 등의 구문에 사용
# {{...}}} : 템플릿 결과(html)에 출력할 표현(ex. 변수)
# {#...#}: 주석 처리할 때 사용
Flask에서 Jinja로 변수 넘기기
render_template
(... 생략 ...)
@app.route('/')
def index():
apple = 'red'
apple_count = 10
return render_template('index.html', fruit_color=apple, number=apple_count)
# html 파일
(... 생략 ...)
<body>
<h2>Apple is {{ fruit_color }}</h2>
<h2>{{ number }} 개의 과일이 있습니다.</h2>
</body>
(... 생략 ...)
상속 : 반복적으로 사용된 부분을 하나로 묶어서 사용할 수 있게끔 해주는 기능
{% extends %}
{% block %} ... {% endblock %}
super.super()
를 통해 가능 우리는 웹 개발자가 아닌데 왜 웹 개발을 배울까?
서비스 개발의 궁극적 목적은 배포, 배포를 굳이 하지 않더라도 웹 개발자와 소통할 수 있기 때문
기본적으로 웹이 어떻게 돌아가는지 알게 되면 좋음
프레임워크 vs 라이브러리
프레임워크 : 서비스하나를 만들기 위해 필요한 모든 기능이 다 들어 있는 것, 표준이 존재, flask..
라이브러리 : 편의를 위해 기능들을 모아둔 것, pandas, numpy..
환경변수 설정
변수 값에 경로를 미리 세팅해서 언제든 가져다 쓸 수 있게 하는 것
env, set, export
env : 전역 변수 설정 및 조회
set : 사용자 환경 변수 설정 및 조회
export : 사용자 환경 변수를 전역변수로 설정
flask 실시간 반영
export FLASK_ENV=development
export FLASK_APP=이름 -> python -m flask run 할 수 있음
section3 프로젝트에 flask를 쓴다면 어떤 목적으로 사용할 수 있을까?
API서비스 제공 목적으로 사용가능
extend vs append
list.append(x) : 리스트 끝에 x 1개를 그대로 넣음list = [2,9,3] list.append('a') # [2,9,3,'a'] list.append([1,2,3]) # [2,9,3,'a',[1,2,3]]
list.extend(iterable) : 리스트 끝에 가장 바깥쪽 iterable의 모든 항목을 넣음
list = [2,9,3] list.extend([1,2,3]) # [2,9,3,1,2,3] list.extend((4,5,6)) # [2,9,3,1,2,3,4,5,6]
대시보드 = 데이터베이스의 내용을 다양한 그래프를 통해 표현해주는 도구 (ex. Metabase)
배포 : 공유하는 과정
Werkzeug : 개발용 tool kit
서버 : 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 컴퓨터 프로그램(Server program) 또는 장치(Device)
web 서버 : HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전송해주는 서비스 프로그램리소스 : 하드웨어 리소스, 소프트웨어 리소스
웹 브라우저에 html을 보냈다 렌더링 할대 문서를 해석 해야함 이 역할을 웹 브라우저에서는 DOM이 함
WSGI(Web Server Gateway Interface, 위스기)
Gunicorn(Green unicorn)
workers = n
Heroku
window git bah 에서 heroku cli 오류
/c/Program\ Files/Heroku/bin/heroku 로 실행되면
PATH="$PATH:/c/Program Files/Heroku/bin" 지정해줌
이후 heroku 실행 잘 됨
runtime.txt : 어떤 버전의 파이썬을 사용하고 있는지 알려주는 것
Procfile : heroku에게 우리 웹사이트를 시작시키기 위해 실행되어야 할 명령어의 순서를 알려주는 것
- 보고서 작성 : WORD, PPT, Google Slide 이용 = 문서
- 대화형 인터프리터 : Colab, Jupyter Notebook 이용 = EDA
- 웹 어플리케이션 : Flask, Django, Spring 이용 = 개발 리소스 ↑
- BI 도구(대시보드) : Metabase, Google DataStudio, Retool, Redash 이용
matplotlib 은 대시보드일까?
no, 대시보드는 데이터의 변화를 확인할 수 있음
API를 개발하고 외부의 서비스를 이용하다보면 많은 문제를 마주하게 되는 데 그 중의 시간을 설정하고 표현하는 방법 과 객체를 부호화 및 복호화 하는 방법
부호화 또는 인코딩
컴퓨터를 이용해 데이터를 생성할 때 데이터의 양을 줄이기 위해 데이터를 코드화하고 압축하는 것복호화 또는 디코딩
부호화와 반대되는 개념
컴퓨터에서 시간을 표기하는 방법
시간을 주의해야 하는 상황
date -u +"%Y-%m-%dT%H:%M:%SZ"
date +%s
# 시간확인 명령어
import datetime
datetime.datetime.now()
datetime.datetime.utcnow()
import time
time.time()
time.sleep(3) # 3초 잠듦
#=
from time import sleep
sleep(3)
시간을 저장하는 경우?
주식 동향을 저장할 때, 로그인 시간 저장할 때(시간이 기준이 될 때) 등
특정 시점을 기준으로 업무를 수행시키기 위해 스케줄링이 필요
API나 크롤링/스크레이핑을 할 때 날짜나 시간을 지정하고 지정된 시간에 맞게 데이터를 수집하는 과정이 필요할 때 사용
APScheduler
: 파이썬 라이브러리, 어플리케이션
BlockingScheduler
BackgroundScheduler
AsynclOschedule
GeventScheduler
TornadoScheduler
TwistedScheuler
QtScheuler
# blockingscheduler 선언
from apscheduler.schedulers.blocking import BlockingScheduler
# UTC 기반으로 실행
scheduler = BlockingScheduler({'apscheduler.timezone':'UTC'})
# KST 기반으로 실행
scheduler = BlockingScheduler({'apscheduler.timezone':'Asia/seoul'})
# 스케줄러에 job 선언
def hello():
print("안녕하세요 저는 5초마다 실행됩니다.")
scheduler.add_job(func=hello, trigger='interval', seconds=5)
## trigger options : date(특정시점에 실행하고 싶을 때), interval(고정된 간격을 기반으로 실행하고 싶을 때), cron(unix 기반의 cron에서 사용하는 문법을 이용하여 스케줄링하고 싶을 때)
# 스케줄러 시작
scheduler.start()
cron 으로 시간을 표기하는 방법
2 * * * echo "hello AI"
0 0 12 * echo "hello AI"
https://zamezzz.tistory.com/197
스케줄러는 어떤 목적으로 사용할 수 있을까?
배포한 서버가 계속 돌아가면 매번 최신 데이터가 업데이트 되게 할 수 있음
서버의 과부화 방지 등등
부호화 : 데이터를 저장하거나 전송하기 쉽게 변환하는 과정
인메모리 방식 → 바이트열 방식
피클링
pickle
dump
복호화 = 역부호화 : 부호화된 데이터를 사람들이 읽을 수 있는 형식으로 바꿔주는 것, 부호화된 데이터를 해석하는 것
바이트열 방식 → 인메모리 방식
역피클링
load
Section 3 전체 정리
데이터 베이스의 활용
데이터 베이스
- 어떤 데이터가 데이터 베이스에 저장이 될까? >> 문자열(정형데이터)
csv파일, 사진, 동영상 > raw data > 파일 서버(파일을 저장할 수 있는 어떤 공간, usb 같은거)에 저장데이터 레이크
자연상태의 데이터를 그대로 저장하는 공간
데이터의 생명 == 무결성, 유실된 정보가 없는 데이터데이터 웨어하우스
창고에서 바로 나갈 수 있게 저장되어있는 곳, 정형데이터데이터마트
데이터웨어하우스에서 용도마다 데이터베이스가 만들어진 곳트랜젝션
- OLTP(online transection processing) : 사용을 위한 데이터 사용하는 행위 , 로그인/로그아웃/댓글달기 등등
- OLAP(online analystic processing): 분석을 위한 데이터 사용, 분석을 위해 만든 데이터 베이스 = 데이터 웨어하우스
- 둘의 접근 패턴이 다름, 데이터를 바라보는 시선이 다름
- ETL: extract - transform - load, OLTP 데이터베이스를 가져와서 OLAP 에 적합한 스키마로 변환하고 변환한 데이터를 적재하는 것