interacting with db
install & introduction
DBAPI 데이터베이스와 상호작용하고 그 결과를 특정 언어(ex. Ruby, Python, Javascript 등)를 이용하여 사용할 수 있다. 데이터베이스 어댑터라고 부르기도 한다. 모든 서버 프레임워크나 언어 + 데이터베이스 시스템에 따라 다른 DBAPI들이 존재한
Introduction SQLAlchemy SQLAlchemy is a particular Python library that's extreamly popular for interacting with databases and developing database bac
Layers of Abstraction layers Without SQLAlchemy psycopg2와 같은 DBAPI 라이브러리가 데이터베이스와 상호작용한다. 하지만 이것은 파이썬을 사용하여 데이터베이스와 상호작용하는 가장 편리한 방법이 아닐 수도 있다. Wit
Install 미국은 거의 맥을 사용해서 그런지 설치도 맥 버전으로만 설명해서 그냥 따라하다가 오류가 나서 또 한참 헤맸다. 일단 Flask와 Falsk-SQLAlchemy를 설치한 후 코드를 작성하고 run을 하려니 FLASK_APP을 실행할 수 없다고 나왔다. 그래
Overview SQLAlchemy와 SQLAlchemy ORM은 파이썬 환경에서 모델을 만들거나 상호작용하기 위해 사용하는 가장 인기있는 라이브러리 중 하나이다. It's a very well-developed library that offers flexibility
Introduction CRUD CREATE INSERT in SQL db.session.add(user1) in ORM READ SELECT in SQL User.query.all() in ORM UPDATE UPDATE in SQL user1.
MVC MVC(Model View Controller): Full stack apllication의 common pattern으로, application을 Model, Veiw, Contorller 3개의 레이어로 생각하며 apllication의 어떤 파트를 관리하고
Getting User Data in Flask View에서 Controller로 user data를 가져오는 방법은 3가지이다. URL query parameters Forms JSON URL query parameters URL query parameters는 k
Using AJAX to send data to flask Data request는 동기(synchronous)이거나 비동기(asynchronous)이다. Async data requests는 서버에게 보내졌다가 페이지 새로고침 없이 클라이언트에게 되돌아 온다. Asy
Migrations 데이터 스키마들의 변경을 관리하는 것을 담당한다. 데이터베이스 스키마에 대한 실수가 발생핟나면 전체 앱이 다운될 수도 있다. 따라서 우리는 다음을 원한다. 빠르게 변경사항을 rollback하기 변화를 적용하기 전에 테스트해보기 Migraion
Implement Updating a Todo Item 기존 todos에서 체크박스를 추가하여 완료/미완료 표시를 하기로 한다. MVC View: 각 todo 아이템들 옆에 체크박스가 나타나도록 업데이트 한다. 사용자가 체크박스를 toggle하면 controller로
Delete a Todo Item item 옆에 있는 x표시를 누르면 아이템이 삭제되로록 만든다. MVC View: 사용자가 누를 수 있는 삭제 버튼을 만들고 눌렀을 때 contorller로 data를 전송한다. Controller: 어떤 item을 삭제해야하는지 i
Modeling Relationships 우리는 이제까지 하나의 모델에 대한 CRUD를 배웠다. 하지만 앞으로 여러 모델들이 서로 관계를 가지고 있는 web apps를 만나게 될 것이다. 모델들간의 관계는 한 모델에 대한 액션이 다른 모델에게도 발생할 수 있는지를 결정
One-to-Many Relationship Setup 이제까지 만들어온 Todo app에 To-Do Lists를 추가하고 To-do model과 새로운 To-Do List model간에 relationship을 설정해본다. To-Do List는 많은 To-Dos를 가
APIs(Application Programming Interfaces) 이전 시간까지는 web을 위해 data를 어떻게 모델링하는지에 대해 배웠다. 이번 강의에서는 API에 대해 더 많이 배우게 될 것이다. API는 통제된 방식으로 백엔드를 노출하기 위해 필수적이며
Introduction to HTTP Hypertext Transfer Protocol(HTTP)는 컴퓨터들이 서로 커뮤니케이션 할 수 있도록 표준화된 방법을 제공하는 프로토콜이다. 이것은 1990년부터 인터넷을 통한 데이터 커뮤니케이션의 기초가 되어왔고 clinet-
Intro to Flask API server를 만들기 위해 Flask를 사용할 것이다. Flask는 microframework로 core functionality는 단순하게 유지하되 수많은 extensions과 개발자들이 다른 functionality(i.e. aut
Organizing API Endpoints API endpoints를 구성할 때, actions이 아닌 resources에 기반해야한다. 주어진 URL endpoint에서 어떤 actions이 발생할지는 request methods가 결정한다. 전체적인 API의 s
Why Testing? 어느 코드를 작성하든지, 당신은 API를 테스트하여 요청이 예상대로 처리되고, 전송된 응답이 정확하며, 데이터베이스에서 수행되는 작업이 올바르고 유지되는지 확인하고 싶을 것이다. 모든 테스트와 마찬가지로, API에 대한 unittests를 작성
API Documentation Examples Google Maps API Stripe API -- Super Strong! Good API Documentation 좋은 API 문서는 API를 고려하는 개발자가 API의 목적, API가 작동하는 데이터, 요청을
Common Authentication Methods Username and Passwords 누가 digital system에 접근하고 있는지를 확인하기 위하여 사용자를 인증하기 위한 많은 방법들이 존재한다. 가장 보편적인 방법은 username과 password 짝
우리는 시스템 구현과 관련된 몇 가지 위험을 탐색하고자 한다. 대부분의 위험은 우리의 server가 우리의 ground truth를 찾는 것을 시도하고 자신이라고 주장하는 사람이 맞는지 아닌지를 결정하는 back-end에 존재한다. Monolichic 구조는 적은 en
Front-end에서 사용자의 정보를 입력받은뒤 Authentication server로 전송한다. 인증이 후에는 성공적인 결과와 함께 token을 return한다. 이 token들은 subsequent requests에 사용될 것이며 credential(로그인 자격
이제 우리는 JWT가 client로부터 server에 어떻게 전송하는지 이해해야 한다. 그러기 위해서 Authorization Header를 사용할 것이다. Autorization header를 서버에 보내는 subsequent request들의 일부분으로 포함시킨다.
Passwords Intro Passwords are ubiquitous and the ABSOLUTE worst. 보통 우리는 비밀번호를 사용해서 authentication을 하는데 사용자들은 비밀번호를 안전하게 사용하는 것을 알지 못한다. 또한 개발자들은 비밀번호를
누군가가 비밀번호를 알아내기 위해 여러번의 로그인을 시도하고 마침내 비밀번호를 얻을 수도 있다. 이러한 공격을 brute force attack이라고 한다. 이 방법은 보기에는 어려워보이지만 실제로는 다음과 같이 간단하게 시도할 수 있다.예측한 비밀번호 값들을 리스트로
네트워크를 통해 전송되는 plain text 메세지들은 도중에 가로채어져 editor같은 것들에게 읽혀질 수 있다. 우리 시스템의 추가적인 위험은 서비스간에 전송되는 메시지들이다.예를들어, frontend가 username과 password를 server로 전송할 때
우리는 plain text를 암호화 해두면 나중에 누군가가 그 데이터를 빼가더라도 key가 없으면 풀 수 없기 때문에 안전성이 더 높아졌다고 생각한다. 하지만 또 다른 alternative technique들이 존재하는데 그 중 하나가 Hashing이다. Hashing
기존의 hashing은 rainbow table에 의해 추적이 가능했다. 왜냐하면 동일한 password에서는 동일한 message digest가 생성되기 때문이다.우리는 이러한 rainbow table attack을 두 개의 패스워드 input에서 절대 같은 hash
'Who is making request?'에 대한 답은 얻었지만 'What can that person do?'의 답을 해주지는 않는다. 우리는 모든 사람에게 같은 데이터를 주고 싶지 않다. 어느 데이터는 누군가에겐 민감한 정보이기 때문이다. 어떤 action은 해당
Containers Intro 클라우드 또는 기타 프로덕션 환경에 배포하려는 경우 애플리케이션을 개발 머신과 다른 환경에서 실행해야합니다. 불행히도, 클라우드 환경이나 설치된 소프트웨어를 직접 제어하지 못할 수 있으며 이로 인해 애플리케이션에 문제가 발생할 수 있습니다
Docker Docker는 현재 산업에서 가장 유명한 container platform이다. Docker Concepts Docker Engine Docker Engine is an application that consists of a daemon, an API,
Deployment Introduction 이전 과정에서는 application과 그의 environment, dependencies를 결합하는 도구로 Docker container를 배웠다. 확장 가능한 웹 애플리케이션을 구축하는 다음 단계는 클라우드에 컨테이너를 구