새해가 되면 더 열심히해야지 했는데 그게 잘 안된당 ㅠㅠ
미치겠다 진짜 의자에 앉아있기만해도 시간이 훅훅 간다
집에 오니까 더 안되나?? 집이 너무 좋은가 으으 무튼 내일부터는 정말 열심히해야지
면접 준비도 진짜 꼭꼭 해야지 스터디에서 하는 것 말고는 하는 게 없어서 진짜 스터디 안했으면 어쩔뻔했나 싶다 정말 한 세문제 했으려나.. 다 제대로 읽어보지도 않긴 했지만 그래도 한명씩 돌아가면서 읽는 바람에 대충 무슨 문제가 나오는 지는 알았으니 그나마 다행이라고 해야할까 으으 무튼 낼부터 다시 화이팅..!
창 띄워놓은 것만이라도 정리↓
우스기 🐇
- WSGI는 웹서버의 리퀘스트를 해석해서 파이썬 앱에 전달해준다
- 파이썬의 대표적 WSGI는 uWSGI, gunicorn
- gunicorn은 WSGI의 일종으로 웹서버와 장고 사이에서 요청을 처리해준다.
- Django의runserver: gunicorn과 같은 역할을 하지만 보안이나 성능면에서 검증되지 않아 배포환경에서는 사용하지 않고 개발용으로만 사용한다.
- 멀티쓰레드를 만들 수 있어야 리퀘스트가 많아지더라도 효율적으로 처리할 수 있고 production환경에 사용하기 알맞다.
-멀티 쓰레드:
하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행함을 뜻한다.
멀티 프로세스란 여러개의 cpu를 사용해서 여러개의 프로세스를 동시에 수행함을 뜻한다. (일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행한다.)
멀티 스레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하여 시스템 자원의 낭비가 적고 하나의 스레드가 작업을 할 때 다른 스레드가 다른 작업을 할 수 있어서 사용자와의 응답성이 좋다.
클라이언트 → 웹서버 → WSGI → App Server
https://leffept.tistory.com/345
포스트그레스큐엘 🐘 (49,50,51)
- 데이터베이스 서버의 주요 기능은 데이터를 안전하게 저장하고 다른 응용 소프트웨어로부터의 요청에 응답할 때 데이터를 반환하는 것
- 장고에서 PostgreSQL를 사용하는 이유:
PostgreSQL에서만 작동하는 여러 데이터 유형을 장고에서(django.contrib.postgres) 지원하기때문에 RDBMS를 강력하고 안정적으로 사용할 수 있다
오픈소스 RDBMS: SQLite, MySQL 및 PostgreSQL
- PostgreSQL: 표준 SQL을 준수하는 객체 관계형(object-relational) 데이터베이스
기본적으로는 관계형 데이터베이스지만 객체 데이터베이스와 연관되는 기능(테이블 상속 및 함수 오버로딩 등)
- 동시성(Concurrency): 동시에 여러 작업을 효율적으로 처리
- PostgreSql 작업을 단순화하도록 설계된 타사 도구 및 라이브러리가 많음(pgAdmin, Postbird)
- 기하학적인 도형, 네트워크 주소, 비트 문자열, 텍스트 검색, JSON 항목과 같은 특이한 데이터 타입도 지원
- 확장성:
- 커뮤니티 규모가 큼
- 모든 새로운 클라이언트 연결에 대해 PostgresSQL은 새로운 프로세스를 포크하는데 각 프로세스에 약 10MB의 메모리가 할당되어 메모리 소모가 많음. 읽기와 같은 단순 작업의 경우 MySQL과 같은 다른 RDBMS보다 성능이 떨어짐
- PostgreSQL 데이터베이스를 관리하는데 도움이 되는 타사 도구가 여전히 적습니다
- 데이터 무결성을 높게 유지해줌
- 다양한 프로그래밍 언어 및 플랫폼과 호환 가능
- 복잡한 작업 연산을 수행하는 경우(CPU 활용)
- 속도가 중요하고 읽기 작업이 많은 경우, 간단한 복제작업애는 부적합
FBV vs. CBV (19)
- Function Based Views
-데코레이터를 사용
-어떤 HTTPmethod에서 사용할 건지 명시
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET', 'POST'])
def hello_world(request):
if request.method == 'POST':
return Response({"message": "Got some data!", "data": request.data})
return Response({"message": "Hello, world!"})
- Class-based Views
-APIView 를 상속받음
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
from django.contrib.auth.models import User
class ListUsers(APIView):
authentication_classes = [authentication.TokenAuthentication]
permission_classes = [permissions.IsAdminUser]
def get(self, request, format=None):
usernames = [user.username for user in User.objects.all()]
return Response(usernames)
몇번이더라?
모두 딕셔너리같은 key: value 형태
with open()으로 열고
load()로 파일을 파싱
XML, JSON, YAML .load() ⇆ Python Object .dump()
해싱
DB hashing:
해싱은 Hash Table이라는 기억공간을 할당하고 해시 함수(Hash Function)을 이용하여 레코드 키에 대한 Hash Table 내의 Home Address를 계산한 후 주어진 레코드를 해당 기억장소에 저장하거나 검색 작업을 수행하는 방식
https://developer-rooney.tistory.com/67
Password Hashing:
전자 서명 알고리즘에서나 암호화 및 복호화에서도 사용
해시:
일방향 함수 -> 집어서 풀기에는 어려운 수학연산
해독하도록 설계되지는 않음
비밀번호의 해시 값을 확인하여 저장하지 않고도 비밀번호의 유효성을 확인할 수 있음
해시 알고리즘- SHA1/bcrypt/Argon2
패스워드 크랙 = 합법적인 로그인 시스템과 같은 기능
- 솔팅
- 해싱한 결과 값을 다시 해싱
비밀번호의 보안은 사실상 사용자에 달려있다
http://news.grayhash.com/html/category/term/32a33a2b9a.html?id=2016_12_13
내일 읽어봐야지 잼땅
Flask vs. Django
- 웹 프레임워크: 웹 서비스 개발을 위한 프레임워크
- 쉽고 빠르게 웹사이트를 만들 수 있다
- Java의 Spring, Python의 Django, Node.js의 Express.js
- 프레임워크: 매크로/ 마이크로로 나뉨
- 매크로 = 풀스택 프레임워크: 웹 개발에 필요한 요소를 모두 갖춤
Spring, Django, Ruby on Rail
- 마이크로프레임워크: 다른 서비스나 애플리케이션을 위한 API의 빌드를 목적으로 설계된 경우가 많다 -> 간편하고 빠르게 개발이 가능하다
확장을 통해 없는 기능들은 구현이 가능하다
- Flask: 배우기 쉽고 가볍다
최소한의 구조를 제공하기때문에 장고만큼 복잡하지 않다
MVC 구조(일반적임)
구조가 복잡하지 않음(프로젝트를 열면 빈 디렉토리)
초보자에게 친숙함
의도한대로 프로젝트를 빌드할 수 있음(파일 연결 등)
ORM을 사용하려면 타사의 SQLAlchemy패키지가 필요함
- Django: 웹앱개발을 빠르게, 안정적으로, 견고하게 할 수 있음
커뮤니티가 활발함
MVT구조
구조가 복잡함(프로젝트를 만들면 여러가지 파일들이 많음)
내장 패키지가 많음
확장성을 제공하는 강력한 아키텍쳐.. 확장성이라는 게 대채 뭘까 여기저기 쓸 수 있다?
풀스택 개발 가능
다양한 개발 패키지와 사전 생성된 파이썬 파일 구조를 이용할 수 있고
ORM 을 내장하여 데이터베이스에 유연하게 접근가능(개체를 삽입하거나 호출할 때 많은 쿼리를 쓸 필요가 없음)
ORM: Object Relational Mapping
SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작
부수적인 코드가 사라지거나 줄어들며
ORM을 통해 작성한 객체를 재활용할 수 있다는 측면에서 재사용 및 유지보수의 편리성 증가
객체의 자료형을 사용할 수 있어 DB와 모델 간의 간격을 좁힐 수 있다.
DDL: Data Manipulation Language
- 데이터 조작어(SELECT, INSERT, UPDATE, DELETE)
HttpMethods(GET, POST, PUT, DELETE)와 대응됨