분류 전체보기
-
[Github] 외부 저장소 fork, pull request, 동기화 하기저장소/git 2019. 12. 7. 18:51
외부 저장소를 fork를 하고 내용을 수정한 다음, 해당 저장소의 master에게 내가 변경한 사항을 확인하고 머지해 주세요 라는 의미로 pull request를 요청할 수 있습니다. 또한 원본 저장소에서 변경된 사항이 있으면 fork를 받은 내 저장소에는 반영이 되지 않으므로 동기화를 시켜줘야 합니다.외부 저장소 fork하기 fork 할 저장소에 들어간 다음, star 버튼 옆에 있는 fork 버튼을 누릅니다. organization이 여러개일 경우, 아래와 같이 팝업이 나오는데 fork할 위치를 지정해 줍니다. fork에 성공하면 아래와 같이 계정에 새로운 저장소가 생성됩니다. fork를 진행한 다음, 로컬에 해당 저장소의 파일을 내려받습니다.$ git clone https://github.com/b..
-
[Git] Command 알아보기저장소/git 2019. 12. 7. 17:59
지금까지 gitlab이나 github을 사용할 때, 커맨드를 쓰지 않고 source tree에서 제공하는 GUI로 처리했습니다. GUI가 편리하긴 하지만, 프로젝트의 크기가 커지고 브랜치가 많아지는 경우 살짝 느려지는 경향이 있습니다. 이를 보완하고 git 커맨드에 친숙해지고자 커맨드를 사용하는 방법을 설명합니다.git 저장소 생성기존 폴더를 git 저장소로 추가$ git init Initialized empty Git repository in /.../test_git/.git/ test_git이라는 폴더를 저장소로 git 저장소로 추가한 방법입니다. 해당 폴더에 들어간 후, $ls -la | grep .git을 하면 .git 파일이 추가된 것을 확인할 수 있습니다. 로컬에서 .git을 추가한 것이므로 ..
-
[Django] serializer bulk create, update 구현하기언어/파이썬 & 장고 2019. 12. 3. 21:04
장고의 DRF를 사용하여 viewset을 구현하면 제목과 같은 기능이 필요할 때가 있습니다. 기본 ORM을 사용한다면 쉽지만 유효성 검사를 직접 구현해줘야 합니다. DRF의 serializer를 사용하여 처리를 하는 방식을 아래에서 설명합니다.bulk createbulk create는 큰 구현이 필요하지 않습니다. viewset에서 def list() 함수를 상속 받은 다음, 요청 데이터 타입이 list일 때만 serializer의 파라미터에 {'many': True}를 주면 끝납니다. class AdminViewSet(viewsets.ModelViewSet): def create(self, request, *args, **kwargs): kwargs["many"] = isinstance(request...
-
[Django] custom command 만들기언어/파이썬 & 장고 2019. 12. 2. 19:40
$ python3 manage.py --help를 입력하면 django에서 제공하는 command를 확인할 수 있습니다. 이 때, 사용자가 임의로 어떤 명령어를 만들고 해당 명령어를 통해 일련의 작업을 수행하도록 하기 위해선 커스텀 커맨드를 만들어야 합니다.개요먼저 프로젝트의 구성이 아래와 같다고 가정합니다.polls/ __init__.py models.py management/ commands/ _private.py closepoll.py tests.py views.py 커스텀 커맨드를 만들기 위해선 polls와 같이 app이 지정되어야 하고 해당 app 하위에 management/commands/ 폴더가 생성되어야 합니다. 해당 폴더의 이름은 고정이며 다른 이름으로 변경할 시, 커스텀 커맨드가 작동하..
-
[Elasticsearch] DSL 살펴보기DB/Elasticsearch 2019. 12. 1. 17:53
DSL이란 Domain Specific Language 으로 JSON에 기반한 질의입니다. ES에서의 DSL은 데이터베이스의 SQL문과 동일하다고 이해하면 쉽습니다. 사용자가 원하는 데이터를 추출하기 위한 질의 언어입니다. 아래는 Elastic search에 질의를 하여 원하는 데이터를 추출하기 위한 DSL 예시입니다. 기본적으로 질의를 위해선 아래와 같이 "query" 속성을 사용합니다.GET /조회할 인덱스명/_search/ { "query": { ... } }Query VS FilterDSL 기능이 어떤게 있는지 설명에 앞서 query와 filter간 차이점을 먼저 설명합니다.기본적으로 Elastic search는 일치하는 검색 결과의 관련성을 점수 별로 정렬하여 각 문서가 쿼리와 얼마나 잘 일치하..
-
[Python] Kruskal Algorithm (크루스칼 알고리즘)언어/파이썬 & 장고 2019. 11. 30. 21:48
크루스칼 알고리즘의 이론은 https://brownbears.tistory.com/396에 설명이 되어 있습니다. 아래는 파이썬으로 기본적인 크루스칼 알고리즘을 어떻게 구현했는지에 대한 내용입니다. 코드에 앞서 크루스칼 알고리즘의 중요한 점은 아래와 같습니다.edge가 가장 작은 순으로 선택해 나감edge 연결 후, cycle이 생기면 안됨 즉, 가장 작은 edge를 선택할 때마다, 그동안 연결한 vertices끼리 cycle이 생기는지 확인을 해야 합니다. 이러한 cycle이 생겼는지 확인하는 것은 union-find (disjoint-set) 알고리즘을 사용합니다. union-find (disjoint-set) 알고리즘의 설명은 https://brownbears.tistory.com/460에 정리되어..
-
[Python] union find (disjoint-set) 알고리즘언어/파이썬 & 장고 2019. 10. 21. 00:16
union find (disjoint-set) 이란?서로 중복되지 않는 부분 집합들로 나눠진 원소들에 대한 정보를 저장하고 조작하는 자료 구조입니다. 간단하게 다수의 노드들 중에 연결된 노드를 찾거나 노드들을 합칠때 사용하는 알고리즘입니다. 아래 예시 그림을 보면 어떤 개념인지 바로 이해가 됩니다.원소(노드)가 1~10까지 있다고 할 때, 해당 원소들은 아래와 같은 리스트의 구조를 갖습니다. 첫 번째 행은 원소의 번호고 두 번째 행은 원소의 관계로 보면 됩니다. 1234567891012345678910 이러한 원소들은 아래와 같은 연결 구조를 갖고 있다고 가정합니다. 위 그림은 원소 1,2,3,4 / 5,6,7,8 / 9,10 과 같이 3개의 그룹으로 묶여 있습니다. 이를 리스트로 표현하면 아래와 같습니..
-
[Python] 조합(combination) 개수 계산하기언어/파이썬 & 장고 2019. 10. 13. 20:51
조합을 구하는 파이썬 내장함수가 있지만 (from itertools import combination) 이 함수는 리스트 조합의 결과를 반환합니다.from itertools import combinations lists = [1,2,3] a = list(combinations(lists, 2)) print(list(a)) # [(1, 2), (1, 3), (2, 3)] 따라서 단순히 개수를 확인할 때 사용하기에는 적합하지 않습니다. 이러한 이유로 아래와 같이 단순 개수만 반환하는 로직을 구현했습니다.import operator as op from functools import reduce def nCr(n, r): if n < 1 or r < 0 or n < r: raise ValueError r = m..
-
[Python] operator 모듈 사용해서 연산 처리 속도 빠르게 하기언어/파이썬 & 장고 2019. 10. 13. 20:44
파이썬에서 문자열을 더하거나 숫자를 곱하는 등의 코딩을 할 때 아래와 같이 연산자를 사용하게 됩니다.result = 'a' + 'b' result2 = 4 * 5여기서 파이썬 내부적으로 operator 모듈을 호출하여 처리를 한 다음 사용자에게 반환하게 됩니다. 만약 속도가 정말 중요한 프로그램에서 연산처리를 조금이나마 빠르게 하려면 operator 모듈을 사용하면 됩니다. 아래는 100만번 반복문을 실행하면서 각 값을 곱하는 예제로 수행속도를 확인한 코드입니다.from functools import reduce import operator import timeit def test1(): return reduce(operator.mul, range(1000000)) def test2(): return r..
-
[Python] functools 모듈의 reduce 함수 사용하기언어/파이썬 & 장고 2019. 10. 13. 20:25
reduce 함수는 아래와 같은 파라미터를 받고 있습니다.reduce(function, iterable, initializer=None)첫 번째 파라미터는 함수가 들어가게 됩니다. 따라서 람다일 수도 있고 정의해놓은 함수가 될 수도 있습니다. 두 번째 파라미터는 계산을 하고자 하는 리스트가 들어가게 됩니다. 아래는 reduce()의 예제입니다.from functools import reduce result = reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) # ((((1+2)+3)+4)+5) print(result) # 15 위 예제는 1,2,3,4,5 값을 전부 더한 결과를 반환합니다. 여기서 초기값 100이 존재한다고 하면 아래와 같이 reduce()에 세번째 파라미터를 지..