분류 전체보기
-
[Python] re 모듈 사용법언어/파이썬 & 장고 2020. 7. 25. 22:53
regex는 정규 표현식으로 흔히 알려져 있습니다. 파이썬에서 정규 표현식을 사용할 때, 내장 모듈인 re를 사용하고 있습니다. re 모듈에서 제공해주는 함수들을 보면 match(), fullmatch(), findall(), search() 등등이 있는데 어떤 함수를 사용하냐에 따라 결과가 달라지게 됩니다. 여기서는 정규 표현식에 대한 기본부터 설명하는 것이 아닌, 파이썬의 re 모듈에서 제공하는 함수의 쓰임새를 예제와 함께 설명하여 사용자의 목적에 맞게 사용할 수 있도록 설명합니다.왜 정규 표현식을 쓸까?파이썬에서는 문자열에서도 기본적으로 특정 문자 또는 문자열이 존재하는지나 어느 위치에 있는지와 같은 기능을 제공합니다.'123' in 'abc123def' # True s = 'foo123bar' s..
-
[Django] Channels 란?언어/파이썬 & 장고 2020. 7. 22. 20:21
Django 3.0 에서 Channels 기능을 제공하는데 Channels은 ASGI를 기반으로 만들어진 프로젝트입니다. 기존의 HTTP 통신을 넘어서 웹 소켓, 채팅 프로토콜, IoT 프로토콜 등을 처리할 수 있습니다. 장고의 핵심을 그대로 따오고 계층화 시켜서 장고는 동기로 실행하지만 기타 connection과 socket을 비동기적으로 처리할 수 있도록 합니다. 또한 동기, 비동기 모드를 선택할 수도 있습니다.ASGI란?ASGI는 Asynchronous Server Gateway Interface의 약어이며 Django 3.0부터 지원하는 새로운 기능으로 비동기 웹서버 및 어플리케이션을 만들 수 있도록 제공합니다. Django 3.0부터는 ASGI를 주로 지원하는 형태를 볼 수 있습니다.WSGI의 ..
-
[PostgreSQL] JSON type 사용하기DB/PostgreSQL 2020. 6. 7. 16:40
json과 jsonb 타입PostgreSQL에서는 JSON 형식을 필드로 선언해 저장할 수 있습니다. 관련 타입은 json, json[], jsonb, jsonb[] 으로 4가지가 있습니다. 여기서 jsonb 라는 타입을 볼 수 있는데 json과 jsonb의 차이점은 입력된 값 그대로를 저장할 것인지 최적화된 값을 저장할 것인지 입니다.json 타입은 입력된 공백, 키 순서, 중복 등과 같은 모든 것을 그대로 저장합니다. 저장 이후 질의를 한다고 가정하면 json blob을 질의할 때마다 로드하고 구문을 분석하기 때문에 속도가 느린 단점이 있습니다.그에 반해 jsonb는 json blob의 줄임말로 입력된 값을 질의에 최적화된 형태로 저장합니다. 따라서 키의 순서, 중복 제거, 공백 제거 등이 발생해 초..
-
[Python] Selenium과 BeautifulSoup4를 사용해 네이버 검색 결과 크롤링하기언어/파이썬 & 장고 2020. 5. 27. 20:40
[Python] Selenium과 BeautifulSoup4를 사용해 네이버 카페 검색 결과 크롤링하기 에서는 네이버 카페를 타게팅하여 크롤링 하는 방법을 소개했다면 여기서는 네이버 검색 결과를 크롤링 하는 방법을 소개합니다.코드 실행 환경이나 사전 설치의 설명은 위 게시글 첫 문단에서 확인할 수 있습니다.네이버 검색 결과 크롤링하기from bs4 import BeautifulSoup from selenium import webdriver from urllib import parse options = webdriver.ChromeOptions() # options.add_argument('headless') chrome_driver = webdriver.Chrome('chrome/chromedriver'..
-
[Python] Selenium과 BeautifulSoup4를 사용해 네이버 카페 검색 결과 크롤링하기언어/파이썬 & 장고 2020. 5. 26. 21:03
네이버 카페에 원하는 키워드를 입력해 검색하고, 해당 검색 결과 리스트를 크롤링하는 방식을 설명합니다. 크롤링 사이트는 네이버 카페 중고나라를 타겟으로 합니다.selenium과 beautifulsoup 모듈을 사용하고 웹드라이버는 Phantom JS가 아닌 chromedriver의 headless 모드를 사용하여 로 진행합니다. chromedriver를 받으실 때, chrome://settings/help 에서 현재 설치된 크롬의 버전과 동일한 드라이버를 다운 받으셔야 시작부터 막히지 않습니다.selenium과 beautifulsoup 사용법은 아래 정리된 게시물을 확인하시면 도움이 됩니다.[Python] Selenium 사용하기 (+PhantomJS)[Python] BeautifulSoup 사용하기버전..
-
[Python] URL 인코딩 (퍼센트 인코딩) - urllib 사용하기언어/파이썬 & 장고 2020. 5. 10. 00:18
URL (퍼센트) 인코딩이란?URL 인코딩은 퍼센트 인코딩이라고도 불리며 URL에 문자를 표현하는 문자 인코딩 방법입니다. 알파벳이나 숫자 등 몇몇 문자를 제외한 나머지는 1바이트 단위로 묶인 16진수로 인코딩하는 방식입니다.불곰→ url encode%EB%B6%88%EA%B3%B0왜 해야 하는가GET 방식을 통해 HTTP 요청을 할 때 쿼리 파라미터가 붙는 경우가 생기는데 URL은 ASCII 코드값만 사용됩니다. 이 쿼리 파라미터에 한글이 포함될 경우, ASCII 코드만으로 표현을 할 수 없어서 인코딩을 진행해야 합니다. 호출하는 API마다 쿼리 파라미터에 한글 문자 그대로를 지원하는 경우도 있지만 그렇지 않은 경우도 있으므로 미리 인코딩을 거친 형식으로 전송하는 것이 바람직합니다.url encode파..
-
[Django] OuterRef, Subquery 사용할 때, .count() 오류 해결법언어/파이썬 & 장고 2020. 4. 27. 20:02
Select 절에 inner 쿼리 형태를 만들고 inner 쿼리의 결과로 count를 세고자 할 때 아래와 같은 쿼리를 짤 수 있습니다.SELECT id, title, (SELECT COUNT(tag.id) AS count FROM tag INNER JOIN post ON (post.id = tag.id) GROUP BY tag.id ) AS "count" FROM post 이러한 형태를 ORM으로 변형하면 다음과 같은 형태로 표현할 수 있습니다.from django.db import models from django.db.models import OuterRef, Subquery class Tag(models.Model): name = models.CharField(max_length=120) clas..
-
[Design Pattern] 컴포지트 패턴 (Composite Pattern)공부/디자인 패턴 2020. 3. 8. 17:59
컴포지트 패턴이란?객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴입니다. 객체와 객체들의 집합 간의 처리 방법의 차이가 없을 경우 사용하면 됩니다. 여기서 컴포지트는 객체 또는 객체 집합을 트리 구조로 구성하는 의미입니다. 단일 객체와 복합 객체의 처리 방법이 다르지 않은 경우, 전체 - 부분 관계로 정의할 수 있는데 여기의 대표적인 예는 폴더-파일 구조입니다. 위 클래스 다이어그램을 폴더 - 파일 구조로 표현하면 아래와 같습니다.예시위 파일 구조를 아래와 같이 표현할 수 있습니다.// component interface Node { public String getName(); } // leaf class Fil..
-
[Design Pattern] 브리지 패턴 (Bridge Pattern)공부/디자인 패턴 2020. 3. 8. 17:03
브리지 패턴이란?브리지 패턴은 구현부에서 추상층을 분리하여 각자 독립적으로 변형 및 확장이 가능하도록 만드는 패턴입니다. 즉, 기능과 구현에 대해 두 개의 별도의 클래스로 구현합니다. Abstraction : 기능 계층의 최상위 클래스이며 추상 인터페이스RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의ConcreteImplementor : 실제 기능을 구현하는 클래스예시헬스장에서 운동을 하는 것으로 예시로 들어보겠습니다.먼저 기능 부에 운동하는 사람에 해당하는 exerciser가 존재하고 그 하위에 오직 하체만 하는 사람, 오직 상체만 하는 사람 (예시를 위해 극단적으로..)의 클래스가 있다고..
-
[Python] string concat vs list join 속도 비교언어/파이썬 & 장고 2020. 3. 8. 01:35
특정 템플릿에 문자를 매치 시킨 후, 해당 결과를 계속 더해 나가는 코드를 짜던 중, 방법은 여러가지인데 어떤게 속도가 더 빠를 지 궁금해서 비교를 해봤습니다.배경작업ES에 벌크로 호출할 데이터를 만들기 위해 아래와 같은 형태가 필요했습니다.POST _bulk {"update": {"_index": "product", "_type":"product", "_id":0}} {"doc": {"price":0, "margin": 0}} {"update": {"_index": "product", "_type":"product", "_id":0}} {"doc": {"price":0, "margin": 0}} .... {"update": {"_index": "product", "_type":"product", "_i..