본문 바로가기
공부/웹해킹

2주차 과제

by suyeon27 2023. 11. 17.

1장 플라스크 개발준비!

venvs 디렉터리 : 파이썬 가상 환경의 루트 디렉터리
python -m venv : 파이썬 모듈 중 venv라는 모듈을 사용한다는 의미

가상환경을 사용하려면 가상 환경에 진입해야 한다.

C:\venvs> cd C:\venvs\myproject\Scripts
C:\venvs\myproject\Scripts> activate
(myproject) C:\venvs\myproject\Scripts>
*(myproject) : 현재 진입한 가상 환경의 이름 
가상 환경에서 벗어나기 : deactivate

가상 환경에서 플라스크 설치하기 : pip install flask
*pip : 파이썬 라이브러리를 설치하고 관리해 주는 파이썬 도구
pip 최신 버전으로 설치하기 : python -m pip install --upgrade pip

플라스크에서 프로젝트는 하나의 웹 사이트라고 생각하면 된다.
플라스크 프로젝트는 여러 개가 될 수 있으므로 프로젝트를 모아 둘 프로젝트 루트 디렉터리 생성은 필수다.
C:\projects 디렉터리를 프로젝트들의 루트 디렉터리로 정하고 진행
윈도우에서 확장자 .cmd가 붙은 파일을 배치(batch) 파일이라고 한다. 

파이썬 인터프리터 위치를 가상 환경 위치로 수정하기
C:\venvs\myproject\Scripts\python.exe

플라스크 서버 실행하기
(myproject) c:\projects\myproject>flask run

플라스크 서버를 실행하려면 반드시 FLASK_APP 환경 변수에 플라스크 애플리케이션을 설정해야 한다.
플라스크 애플리케이션 설정하기
(myproject) c:\projects\myproject>set FLASK_APP=pybo
(myproject) c:\projects\myproject>flask run


개발 서버를 디버깅 가능하도록 실행하기
(myproject) c:\projects\myproject>set FLASK_DEBUG=true
(myproject) c:\projects\myproject>flask run

 127.0.0.1과 localhost는 현재 컴퓨터를 가리키는 아이피 주소다.

 

2장 플라스크 개발 기초 공사!

pybo 디렉터리 안에 있는 __init__.py 파일이 pybo.py 파일의 역할을 대신할 것이다.

데이터베이스를 처리하는 models.py 파일
서버로 전송된 폼을 처리하는 forms.py 파일
화면을 구성하는 views 디렉터리
CSS, 자바스크립트, 이미지 파일을 저장하는 static 디렉터리
HTML 파일을 저장하는 templates 디렉터리
파이보 프로젝트를 설정하는 config.py 파일

flask run 명령은 반드시 프로젝트 홈 디렉터리(C:/projects/myproject)에서 실행
플라스크의 블루프린트를 이용하면 라우팅 함수를 체계적으로 관리할 수 있다.

데이터베이스를 사용하려면 SQL 쿼리(query)라는 구조화된 질의를 작성하고 실행하는 등의 복잡한 과정이 필요하다.
ORM(object relational mapping)을 이용하면 파이썬 문법만으로도 데이터베이스를 다룰 수 있다.
flask db init 명령은 데이터베이스를 관리하는 초기 파일들을  migrations 디렉터리에 자동으로 생성한다.

데이터베이스 관리 명령어 정리
명령어                              설명
flask db migrate               모델을 새로 생성하거나 변경할 때 사용 (실행하면 작업파일이 생성된다.)
flask db upgrade              모델의 변경 내용을 실제 데이터베이스에 적용할 때 사용 (위에서 생성된 작업파일을 실행하여 데이터베이스를 변경한다.)

pybo.db : SQLite 데이터베이스의 데이터 파일

질문 저장하기
>>> from pybo import db
>>> db.session.add(q)
>>> db.session.commit()
add 함수를 사용한 다음 commit 함수까지 실행해야 한다. 
db.session은 데이터베이스와 연결된 세션, 즉 접속된 상태를 의미
데이터를 저장, 수정, 삭제 작업을 한 다음에는 반드시 db.session.commit()으로 커밋을 해주어야 한다. 

커밋을 해야 비로서 데이터베이스에 데이터가 저장된다.
커밋은 취소할 수 없다는 점에 유의하자.

플라스크 셸 실행 

(myproject) c:\projects\myproject>flask shell
플라스크 셸에서 빠져 나오려면 <Ctrl+Z>를 누르고 <Enter>를 입력한다. 또는 quit()를 입력한다.

2-05(다시공부)

[파일명: projects/myproject/pybo/views/main_views.py]
detail 함수는 제거하고 index 함수는 question._list에 해당하는 URL로 리다이렉트(redirect)하도록 코드를 수정했다. redirect 함수는 입력받은 URL로 리다이렉트하고, url_for 함수는 라우팅 함수명으로 URL을 역으로 찾는 함수이다.

redirect(URL) - URL로 페이지를 이동
url_for(라우팅 함수명) - 라우팅 함수에 매핑되어 있는 URL을 리턴
url_for 함수에 전달된 question._list는 question, _list 순서로 해석되어 라우팅 함수를 찾는다. question은 등록된 블루프린트 별칭, _list는 블루프린트에 등록된 함수명이다. 따라서 question._list는 question이라는 별칭으로 등록한 question_views.py 파일의 _list 함수를 의미한다. 그리고 _list 함수에 등록된 URL 매핑 규칙은 @bp.route('/list/')이므로 url_for('question._list')는 bp의 프리픽스 URL인 /question/과 /list/가 더해진 /question/list/ URL을 반환한다. (다시공부)

플라스크 폼 모듈 설치하기 : pip install flask-wtf
SECRET_KEY는 CSRF(cross-site request forgery)라는 웹 사이트 취약점 공격을 방지하는 데 사용
POST 방식으로 데이터를 처리하게 하려면 create 함수의 라우팅 정보를 수정해야 한다.

 

3장 파이보 서비스 개발!

Email() 검증조건은 해당 속성의 값이 이메일형식과 일치하는지를 검증한다.
Email() 검증을 사용하기 위해서는 email-validator를 설치해야 한다.
(myproject) c:\projects\myproject>pip install email_validator

 

회원 데이터 확인

 

 

answer_form.html

 

login.html

 

signup.html

 

question_detail.html (1)

 

question_detail.html (2)

 

question_detail.html (3)

 

question_form.html

 

question_list.html (1)

 

question_list.html (2)

 

base.html

 

form_errors.html

 

navbar.html

 

answer_views.py (1)

 

answer_views.py (2)

 

auth_views.py (1)

 

auth_views.py (2)

 

main_views.py

 

question_views.py (1)

 

question_views.py (2)

 

__init__.py (1)

 

__init__.py (2)

 

filter.py

 

forms.py

 

models.py

 

config.py

 

게시판 결과 화면

회원가입

 

로그인

 

목록

 

Q&A

 

 

 

Docker란? 

컨테이너를 만들고, 실행하고, 배포할 수 있는 가상화 플랫폼


도커 컨테이너 : 가상의 환경이 구축되어 있는 하나의 박스
<도커 컨테이너는 도커 이미지로부터 만들어진 실행 가능한 인스턴스이다. 다르게 말하면, 실행 중인 이미지를 컨테이너라고 한다. 컨테이너는 도커 이미지와 사용자가 컨테이너를 시작할 때 작성하는 옵션에 의해 정의된다. 컨테이너를 실행하는 동안은 분리된 파일 시스템을 사용한다.>

도커 이미지 : 도커 컨테이너의 전 단계로, 컨테이너를 생성하고 실행하기 위한 모든 것을 포함

(ex.컨테이너 생성에 필요한 파일, 환경 변수, 명령어 등과 파일 시스템)

도커 파일 : 이미지를 생성하는 데 단계적으로 필요한 명령을 작성하는 파일


도커 레지스트리 : 도커 이미지를 저장하는 저장소

도커 이미지를 빌드하기 위해서는 도커 파일이 필요하다.

도커 파일은 이미지를 생성하는데 필요한 명령어를 포함하여 모든 설정이 정의된 파일이다.

운영체제와 버전, 환경 변수, 파일 시스템, 사용자 등을 정의한다.

1. 도커 명령어

도커파일을 이용하여 이미지를 생성
docker build [옵션] [Dockerfile 경로]
docker build -t [이미지명:태그] [Dockerfile 경로]

 

도커 이미지 목록을 출력

docker images

 

도커 이미지로 컨테이너를 생성하고 실행
docker run [옵션] [이미지명|ID] [명령어]
docker run -p [호스트 PORT]:[컨테이너 PORT] [이미지명|ID]

실행 중인 컨테이너 목록을 출력
docker ps -a

도커 이미지로 컨테이너를 생성
docker create [옵션] [이미지명|ID] [명령어]

중단된 컨테이너를 시작
docker start [옵션] [컨테이너명|ID]

실행 중인 컨테이너에 접속하여 명령을 수행
docker exec [옵션] [컨테이너명|ID] [명령어]

실행 중인 컨테이너를 중단
docker stop [옵션] [컨테이너명|ID]

레지스트리(Docker Hub)에 존재하는 도커 이미지를 다운
docker pull [옵션] [이미지명]

도커 컨테이너를 삭제
docker rm [옵션] [컨테이너명|ID]

도커 이미지를 삭제
docker rmi [옵션] [이미지명|ID]

도커 이미지 혹은 컨테이너의 자세한 정보를 출력
docker inspect [옵션] [이미지 혹은 컨테이너명|ID]

 

2. 도커 파일 명령어
Dockerfile은 FROM 명령어로 시작해야 합니다.

 

생성할 이미지의 기반이 되는 base 이미지를 지정
FROM 이미지:태그

도커 파일 내에서 사용하는 환경 변수를 지정
ENV 변수명 값 or ENV 변수명=값

이미지를 빌드할 때 실행할 명령어를 작성
RUN 명령어 or RUN ["명령어", "인자1", "인자2"]

 

src 파일이나 디렉토리를 이미지 파일 시스템의 dst로 복사
COPY src dst

 

src 파일이나 디렉토리, URL을 이미지 파일 시스템의 dst로 복사
ADD src dst

도커파일 내의 명령을 수행할 작업 디렉토리를 지정, 리눅스의 cd 명령어와 유사
WORKDIR 디렉토리

명령을 수행할 사용자 혹은 그룹을 지정
USER 사용자명|UID or USER [사용자명|UID]:[그룹명|GID]

컨테이너가 실행 중일 때 들어오는 네트워크 트래픽을 리슨할 포트와 프로토콜을 지정
EXPOSE 포트 or EXPOSE 포트/프로토콜

컨테이너가 실행될 때 수행할 명령어를 지정
ENTRYPOINT 명령어 or ENTRYPOINT ["명령어", "인자1", "인자2"]

컨테이너가 실행될 때 수행할 명령어를 지정하거나, ENTRYPOINT 명령어에 인자를 전달
CMD 명령어 or CMD ["명령어", "인자1", "인자2"] or CMD ["인자1", "인자2"]

'공부 > 웹해킹' 카테고리의 다른 글

7주차 과제  (0) 2024.01.14
6주차 과제  (0) 2023.12.15
5주차 과제  (0) 2023.12.08
3주차 과제  (0) 2023.11.24
1주차 과제  (0) 2023.11.10

댓글