브루트포스 브루트 포스(Brute force)는 영어 그대로 해석하면 무식한, 무지한 힘이 된다. 주어진 모든 상황을 다 살펴 보는 방법으로 시간 복잡도는 높지만 확실하게 답을 찾을 수 있다. 선형 구조에서는 순차 탐색이 브루트포스라고 할 수 있고 비선형 구조에서는 DFS, BFS가 브루트포스라고 할 수 있다. 해킹시 모든 경우의 수를 다 계산하여 찾아보는 방법으로도 쓰인다.
에라토스테네스의 체 소수를 빠르게 구하기 위한 방법 중 하나로 에라토스테네스가 발견하였다. 소수를 구하는 가장 기본적인 방법은 모든 수를 돌아보며 1과 자기 자신 이외에 나눠지는 수가 있는지 확인하는 것이지만 모든 수를 확인해야되기 때문에 시간 복잡도가 커지게 된다. 이때 에라토스테네스의 체를 사용할 수 있는데, 에라토스테네스의 체는 2부터 3 , 4 , 5, ... 이렇게 숫자를 증가시키면서 본인의 배수를 지워간다. 이렇게 체로 걸러내듯이 숫자들을 지워가면 이미 지워진 수들은 확인할 필요가 없기 때문에 숫자가 커질수록 확인해야되는 숫자들도 줄게 되고 소수를 훨씬 더 적은 수만 확인하고도 찾아낼 수 있다. 추가적으로 N까지의 소수를 찾을 때는 N의 제곱근까지만 찾으면 된다. 아래 그림의 예를 들자면 12..
JWT 인증에 필요한 정보들을 암호화 시킨 토큰이다. 최초 서버에서 부여하며, 브라우저가 쿠키 형태로 보관하고 있다가 서버에 요청을 보낼 때 HTTP 헤더에 JWT를 실어 보낸다. Token 구성 Header.Payload.Verified Signature 형태로 Base64url 인코딩을 사용하여 전송 Header - 암호화 방식 및 타입 정보를 작성 Payload - 서버로 보낼 data, 유저의 ID값이나 유효기간 등, key: value 값으로 저장 - 해독이 가능하므로 중요한 data를 담아서는 안된다. Signature - Base64 방식으로 인코딩한 header와 payload Refresh token 사용자의 정보가 만기 되었을 때 서버에 재요청을 하면 Refresh token을 만들어 ..
쿠키 쿠키는 클라이언트 로컬에 저장되는 키, 벨류 값을 가지고 있는 저용량 data 파일이다. 일정시간만 저장할 수 있기 때문에 로그인 유지와 같은 곳에 쓰인다. 사용 밥법 클라이언트가 웹페이지 접속 시 쿠키를 같이 받아 사용자의 로컬에 저장을 한다. 페이지에 재요청할 때에 header에 쿠키값을 넣어서 같이 전송한다. 로그인의 경우 HTTP 통신의 특성상 response를 받으면 접속이 끊기기 때문에 새로운 페이지로 접속할 경우 로그인을 유지할 수 없고 새로 로그인을 해야되는 상황이 벌어진다. 이때 최초 요청에서 받은 쿠키로 사용자가 이미 인증이 되었다는걸 확인 받아 재로그인을 할 필요가 없다. 이미 인증 받은 키를 가지고 있어 새로운 요청을 할 때마다 이 키로 로그인 상태라는 걸 인증하는 셈이다. 세..
Jinja2 Python에서 가장 많이 사용하는 template 엔진이다. 아래에 공식 사이트에서 소개하는 것처럼 Django를 모델링하여 만들어졌으며 template에 변수 입력 및 제어문 등을 이용하여 rendering을 쉽고 빠르게 할 수 있도록 도와준다. 간단한 문법 {{ 변수 }} - 변수가 data로 치환 된다. {% 제어문, 조건문%} - 제어문 조건문에는 end point가 있어야 한다 예시) {% endfor %}
정적 웹페이지 서버에 저장되어 있는 HTML과 CSS를 그대로 가져와 보여주는 것 속도가 빠르고 서버에 부담이 없다. 페이지에서 변화가 필요하면 전체를 다시 가져와야되기 때문에 번거롭다. 예시) 회사 소개 동적 웹페이지 상황에 따라 서버에 저장되어 있는 HTML에 데이터를 추가, 가공하여 보여준다. 상황에 따라 특정 부분만 바꿀 수 있기 때문에 훨씬 dynamic하나 보안에 취약하다. 예시) 블로그 동적 웹페이지의 종류 CSR(Client-Side Rendering) - Javascript에 data를 포함해서 보낸 후 client 측에서 실행 SSR(Server-Side Rendering) - Server측에서 data를 전송하여 HTML에 끼워넣는 방법 복합적인 방법 - Client에서 Server로..
Flask 파이썬으로 작성된 마이크로 웹 프레임워크. 서버를 구동하기 위한 복잡한 일들을 쉽게 가져다 쓸 수 있다. 특징 간단한 웹사이트나 간단한 API서버를 만드는데 특화되어 있다. 가볍게 사용 및 배포할 수 있다. 자유도는 높으나 제공해주는 기능들이 많이 없어서 복잡한 어플리케이션을 만들 때는 주로 Django를 사용한다. 예시)
Requests Python에서 HTTP 요청을 보내는 라이브러리 .get() 과 .post()로 HTTP 요청하여 data를 받거나 보낼 수 있다. Beautifulsoup Requestsf로 받은 데이터는 text형태의 html 이다. 이것을 우리가 보기 쉬운 html 형식으로 바꿔주는 library data를 선택자를 설정하여 가져올 때는 soup.select, 하나만 가져올 때는 soup.select_one 함수를 사용한다. 위의 두가지 libray는 주로 크롤링할 때 사용한다.