전체 글
werkzeug 의 정규표현식
Converter 유형 Converter 설명 정규표현식 표현 (regex) PathConverter 같은 string 뿐만 아니라 슬래시( / ) 를 허용 '[^/].*?' UnicodeConverter 슬래쉬( / )문자는 포함하지 않은 문자열 '[^/]' + length IntegerConverter 양의 정수를 허용 r'\d+' FloatConverter 양의 부동 소수점 값을 허용 r'\d+\.\d+' UUIDConverter UUID 문자열 허용 r'[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-' \ r'[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}' Flask는 URL에 변수를 할당하여 동적으로 만들 수 있습니다. 그 방법은 원하는 변수이름에 ""..
WSGI와 Werkzeug
Web Server 클라이언트(웹 브라우저)로부터 Requset를 받아 정적인 컨텐츠(html , css 등등)을 Response 하는, 클라이언트(웹 브라우저)와 직접적인 통신을 하는 프로그램을 말합니다. 대표적인 웹 서버의 종류로는 아파치(Apache), 엔진엑스(NGINX) 가 있습니다. 웹 서버가 필요한 이유 클라이언트가 서버로부터 Response를 받을때 HTML문서와 이미지 파일등의 정적 컨텐츠를 한꺼번에 받는것이 아닌, 웹 문서를 모두 받고 나면 그에 맞는 이미지 파일을 재요청하여 받아오는 식입니다. 이때 웹서버 프로그램이 이미지 파일 요청까지 한번에 처리해서 Response 해주면 WAS에 요청을 다시 보낼 필요가 없이 서버의 부담을 줄일 수 있습니다. WAS 웹 애플리케이션 서버(Web ..
flask clone coding [3] (JWT 구현)
이번에는 인스타 클론코딩을 진행 하면서 아래와 같이 구현 했습니다. ✔️ JWT 구현 access token 발급하기 refresh token 발급하기 서버 내부 정책으로 refresh token 다루기 ✔️ 토큰을 사용한 인증 게시물 작성 시 작성자가 자동으로 추가되도록 구현하기 게시물 작성 시 로그인 된 유저만 작성할 수 있도록 구현하기 게시물 수정 시 작성자만 게시물을 수정할 수 있도록 구현하기 + ✔️ 게시물 삭제 시 작성자만 게시물을 삭제할 수 있도록 구현하기 JWT ? JSON Web Token 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 자체 포함된 방법을 정의하는 개방형 표준( RFC 7519 )을 말합니다. 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는..
flask clone coding [2] (데이터 검증)
이번에는 인스타 클론코딩을 진행 하면서 아래와 같이 구현 했습니다. ✔️ 프론트엔드에서 API를 호출하여 게시물 목록 페이지 불러오기 ✔️ 회원가입 구현 회원가입을 구현하면서, 데이터를 검증하는 부분에서 아래와 같이 기능을 추가해봤습니다. ✔️ 비밀번호 해싱 + ✔️ 비밀번호 자릿수 검증 ✔️ 이메일 형식 검증 ✔️ 부적절한 닉네임 검증 View 단에서 검증된 데이터를 처리하고, Schema 에서 어떤 데이터가 들어와야 하는지, 어떤 데이터가 들어오면 안 되는지를 판단하고 resource/user.py 에 아래와 같은 코드를 작성하였습니다. 간단하게 보면, 25줄 - 중복 닉네임 체크 27줄 - 중복 이메일 체크 30줄 - 비밀번호 자릿수 체크 34줄 - 닉네임 체크 37줄 - 이메일 체크 32줄 - 비..
GET과 POST 방식
GET ? 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 Method GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링 (query string) 이라고 부름 Body 부분이 비어있고 헤더에 Body의 콘텐츠 타입을 명시하는 Content-Type 헤더 필드도 적지 않음 http://localhost:3000/login?id=admin&pw=1234 위와 같이 URL뒤에 쿼리 스트링(Key와 Value)을 붙이고 HTTP 패킷의 헤더에 포함해서 서버에 데이터를 요청함 서버에서는 id 와 pw 라는 파라미터 명으로 각각 admin 과 1234 의 파라미터 값을 전달 받을 수 있음 쿼리스트링으로 데이터를 표현하면 중요한 값들(admin 과..
대칭키와 비대칭키(공개키)
대칭키 암호화, 복호화에 사용하는 키가 동일한 암호화 방식 Session Key, Secret Key, Shared Key 키라고도 불림 기밀성을 제공하나, 무결성/인증/부인방지 를 보장하지 않음 암호화방식에 속도가 빠름 대용량 Data 암호화에 적합 알고리즘 : SEED, DES, 3DES, AES, ARIA, ChaCha20 암호화, 복호화에 사용하는 키가 동일하기 때문에, 필수적으로 한번은 한쪽에서 다른 한쪽으로 키를 전송해야하는데 중간에 누군가 암호화 키를 가로챈다면 암호화된 정보가 유출될 수 있기에 아래와 같은 문제점이 존재함 키를 교환해야 하는 문제 탈취 관리 걱정 사람이 증가할수록 키관리의 어려움 확장성 떨어짐 이러한 단점를 보완한 것이 비대칭키 비대칭키(공개키) 암호화, 복호화에 사용하는 ..
HTTP와 HTTPS
HTTP ? Hyper Text Transfer Protocol 서버와 클라이언트 사이에 요청과 응답을 주고 받는 프로토콜로 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약 흔히 웹브라우저 주소창에 입력하는 웹 주소인 URL을 통해 요청과 응답이 이루어짐 실제 전송은 TCP를 통해 작동이 이루어지며 80번 포트를이용함 HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보냄 프로토콜 ? 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계 HTTP 취약점 HTTP는 상태를 가지고 있지 않는 무상태(Stateless) 프로토콜로, Method, Path, Version, Headers, Body 등으로 구성됨 암호화가 되지 않은 평문 데이..
flask clone coding [1] (Flask-SQLAlchemy 3.0 변경사항)
이번에는 인스타 클론코딩을 진행 하면서 아래와 같이 초점을 둘 것 입니다. ✔️ 프론트엔드와 백엔드의 역할 구분이 어떻게 이루어지는지 공부 ✔️ 유저 인증을 위해 JWT 를 이용한 로그인 구현 구현하면서, 문제가 되었던 점 그리고 그 문제를 해결하면서 알게 된 점을 작성해볼까 합니다. 여기서 구현한 리스트는 아래와 같습니다. ✔️ 사용자 모델을 개선 ✔️ 게시물과 댓글 모델을 작성 ✔️ 게시물 목록, 상세, 생성, 수정, 삭제 API 를 구현 그리고 실제로 잘 작동하는지 테스트 코드를 작성 한 후 테스트를 수행했습니다. 결과는 아래와 같습니다. 에러 1 TypeError: Query.paginate() takes 1 positional argument but 2 positional arguments (a..