본문 바로가기

개발 관련

(68)
도커란? (+ MacOS 도커 설치하기) 💡 도커란? 도커란, 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어라고 한다. 주로 서버에 사용되는데, 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다. 프로그램을 실제로 설치하게 되면 오류를 일으키는데, 문제 대부분의 원인은 프로그램 간 공유에 있다. 도커 컨테이너를 사용해 프로그램을 격리하면 여러 프로그램이 한 서버에서 실행되면서 발생하는 문제를 대부분 해결할 수 있다. 도커 엔진(Docker engine)을 설치해야 컨테이너를 만들 수 있고, 이 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커(docker)다. 컨테이너를 만들려면 도커 엔진 이외에도 컨테이너의 빵틀과도 같은 역할을 할 이미지가 필요하다. 이미지는 담고 있는 소프트웨어 종류에 따라 다양한 이미..
git subtree를 이용해 github 정리하기 별로 중요한 것도 없는데 늘어나기만 하는 레파지토리가 신경 쓰였다. 더 늘어나기 전에 카테고리별로 정리를 하고 싶어서 subtree를 이용해 정리를 하고자 했다. 💡 HOW TO? 1. 일단 합치고자 하는 부모 repository를 만든다. 참고로 빈 레파지토리에서 진행을 하려니 오류가 나서 README.md 파일을 생성하고 시작했다. 2. 새로 만든 부모 repository의 url을 복사한 후, git clone을 통해 내 local에 받는다. git clone {새로 생성한 repository 주소} 3. 부모 레파지토리에 넣어줄 자식 레파지토리의 주소를 복사한 후, git remote add로 부모 레파지토리에 연결해준다. git remote -v로 연결이 잘 되었는지 확인해준다. git remo..
[crawling] HTTP error 403 웹 크롤링이 필요해서 다음과 같은 코드를 실행했다. from bs4 import BeautifulSoup from urllib.request import urlopen url = '크롤링하고자 하는 URL' html = urlopen(url) soup = BeautifulSoup(html, 'html.parser') soup 하지만 다음과 같은 오류가 발생했다. 403 에러는 서버가 클라이언트의 접근을 거부할 때 생기는 응답 코드이다. 크롤링 코드는 제대로 작동되지 않았으나, 웹 사이트는 잘 들어가지는 것을 보면 서버에서 크롤링을 막고 있는 것이라고 생각했다. 때문에 다음과 같이 headers를 추가했다. 또한 urllib.request의 Request도 추가해주었다. from bs4 import Bea..
[flask] 블루프린트(blueprint) 블루프린트는 대규모 애플리케이션 구현에 필요한 중요한 클래스이다. 이는 공통 URL에 대해 조직적으로 묶어 관리해주는 클래스이다. 별도의 정적 파일과 템플릿을 정의할 수 있으며, 공통 URL에 대해서 url_prefix 인자로 관리한다. API를 작성한다고 가정해보자. # main.py from flask import Flask app = Flask(__name__) @app.route('/v1/users') def v1_users(): return 'v1' @app.route('/v2/users') def v2_users(): return 'v2' 매번 API 버전이 늘어날 때마다 위의 코드처럼 v1_users(), v2_users() 등 버전을 추가해주는 방식은 매우 비효율적이다. 이 때 블루프린트를..
[flask] 플러거블 뷰(pluggable view) View 플라스크는 기본적으로 데코레이터와 함수 기반으로 API를 작성하며, 이를 함수 기반 뷰(functional-based view)라 한다. 플러거블 뷰(pluggable view)는 장고의 클래스 기반 뷰에서 영향을 받아 만들어졌으며 플라스크 0.7 버전에 추가되었다. from flask import Flask, render_template app = Flask(__name__) @app.route('/users') def user_list(): users = [] return render_template('users.html', users=users) 위의 코드를 플러거블 뷰로 바꿔보겠다. 일단 View 클래스를 상속받고, dispatch_request를 통해 API를 구현할 수 있다. app...
아스키(ASCII) 아스키(ASCII) 아스키 코드, 즉 ASCII는 'American Standard Code for Information Interchange'의 약어로, 정보 교환을 위한 미국 표준 코드란 뜻이다. 아스키는 128개(=$ 2^7 $)의 문자 집합을 제공하는 7 bit 부호이다. 처음 32개의 문자는 인쇄와 전송 제어용으로 사용되는 제어문자로 출력할 수 없고, 마지막 문자를 제외한 33번째 이후의 문자들은 출력할 수 있는 문자들로, 기호와 숫자, 영대소문자로 이루어져 있다. 아스키는 숫자 '0~9', 영문자 'A~Z', 'a~z'가 연속적으로 배치되어 있다는 특징이 있으며, 이러한 특징때문에 프로그래밍에서 유용하게 활용된다. 확장 아스키(Extended ASCII) 일반적으로 데이터는 byte 단위로 다..
[flask] 리다이렉션과 에러 다른 엔드포인트로 이동하려면 redirect() 함수를 사용한다. 에러를 발생시키고 싶으면 abort() 함수를 사용한다. from flask import Flask, redirect, url_for, abort app = Flask(__name__) @app.errorhandler(403) def permission_denied(error): return '403', 403 @app.route('/') def index(): return redirect(url_for('user_list')) @app.route('/users') def user_list(): abort(403) 위 코드에서 url_for() 는 함수 이름을 넣으면 해당 라우팅 URL을 반환한다. user_list를 요청했기 때문에 /u..
[difflib] 두 문자열 비교하기 파이썬의 기본 라이브러리 중 difflib는 SequenceMatcher라는 메서드를 제공한다. 이 메서드를 통해 두 개의 문자열의 유사성을 확인할 수 있다. 앞서 말했다시피, difflib는 파이썬의 기본 라이브러리로, 설치가 불필요하다. difflib 사용하기 from difflib import SequenceMatcher result = SequenceMatcher(None, a, b).ratio() print(result) 위 코드를 실행했을 때, 동일한 문자열에 대해서는 1.0을, 어느정도 유사한 문자열은 0.6에서 0.8 사이의 숫자를 반환했고, 아예 다른 문자열은 0.0을 반환했다. 테스트를 많이 해보고, 그 상황에 적절히 사용하면 될 것 같다.