전체 글
-
[AWS] 람다 레이어(Lambda Layer)란?AWS & GCP 2019. 1. 27. 16:04
특정 패키지 또는 라이브러리를 여러 람다 함수에서 공유하여 사용하는 경우가 자주 있습니다. 이러한 공유되는 패키지는 비즈니스 로직의 구현을 간소화하기 위해 추가하는 사용자 정의 코드이거나, 하나 이상의 함수가 사용하는 코드이거나, 표준 라이브러리일 경우가 많습니다. 람다 레이어의 출시 이전에는 공유되는 패키지와 해당 패키지를 사용하여 실제 동작을 원하는 코드를 패키징하여 람다에 배포해왔습니다. 이러면 패키징의 사이즈가 커진다는 점과 다른 람다함수에서 해당 공유 패키지를 사용할 수 없다는 단점이 있었습니다. 람다 레이어는 이러한 불편한 점을 해소하기 위해 나왔습니다. 공통적으로 사용할 패키지 또는 라이브러리를 압축 파일에 담아 하나의 람다 레이어로 업로드한 다음, 사용자는 함수 코드를 변경할 필요 없이, ..
-
[AWS] 람다(Lambda)란?AWS & GCP 2019. 1. 27. 15:28
AWS람다를 찾아보면 서버리스(serverless) 라는 단어를 볼 수 있습니다. 처음 접했을 때 서버가 없는데 어떻게 요청을 받고 실행할 지 햇갈렸는데 여기서 서버리스는 내가 요청받고 처리하는 서버가 없는 것을 뜻합니다. 한 마디로 내 서버가 필요없이 AWS 서버가 알아서 처리해준다는 것입니다. 간략하게 람다를 사용하는 목적은 서버에 대한 걱정 없이 코드를 실행하고 사용한 컴퓨팅 시간에 대해서만 비용을 지불합니다. 아래에서 좀 더 자세하게 설명하겠습니다.AWS Lambda 란? 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행 가능코드를 업로드하면 Lambda에서 높은 가용성으로 코드를 실행 및 확장하는 데 필요한 부분을..
-
이더리움 고스트 프로토콜 (Ethereum GHOST Protocol) 이란블록체인 2019. 1. 23. 21:47
고스트 프로토콜(GHOST Protocol)은 비트코인의 성능 향상과 보안성 향상을 위해 나온 알고리즘입니다. 이더리움은 고스트 프로토콜을 수정하여 적용한 결과, 빠른 블록 생성 속도를 가지면서 보안성도 높이는 결과를 얻었습니다. 비트코인은 블록 생성 속도가 느리기 때문에 stale 블록의 생성확률이 낮고 보안성이 높습니다. 반면, 이더리움은 블록 생성 속도가 빠르기 때문에 stale 블록의 생성확률이 높고 보안성이 낮습니다. 이러한 문제를 보안하기 위해 이더리움은 고스트 프로토콜을 적용하여 stale 블록을 잘 처리하고 보안성도 높였습니다.고스트 프로토콜은 stale 블록의 처리에 대한 알고리즘이라고 볼 수 있습니다. 고스트 프로토콜은 bitcoin을 위해 생성됬습니다. 비트코인은 블록생성시간이 약 1..
-
[Django] queryset 결과 합치기언어/파이썬 & 장고 2019. 1. 22. 21:24
합칠 대상의 결과가 2개 이상인 경우union()union()를 사용해서 1개로 합칠 수 있습니다. union()의 2번째 인자는 중복을 허용할지에 대한 여부인데 기본값은 False로 중복을 허용하지 않습니다. (중복데이터일 경우 중복제거)result = a.union(b, all=True)결과가 쿼리셋 리스트 타입이기 때문에 ORM 형식을 그대로 사용할 수 있습니다.| 연산자| 연산자를 사용하여 손쉽게 쿼리셋 타입 리스트를 합칠 수 있습니다.result = a | b결과가 쿼리셋 리스트 타입이기 때문에 ORM 형식을 그대로 사용할 수 있습니다. + 연산자+ 연산자를 사용하기 위해선 각 쿼리셋 리스트 타입을 일반 리스트 타입으로 변경한 후 합칩니다.a = list(a) b = list(b)result =..
-
[Django] Where 절 or 문 사용하기 (Q() 사용하기)언어/파이썬 & 장고 2019. 1. 22. 20:27
Django model ORM로 Where절에 or 문을 추가하고 싶다면 Q() 를 사용해야 합니다. 사용법은 아래와 같습니다.사용하기ORfrom django.db.models import Q Base.objects.filter( Q(name='qwer') | Q(no=152124)# 동일한 결과 # SELECT * FROM base WHERE no=152124 OR name='qwer'Q() 조건 연결from django.db.models import Q q = Q() q.add(Q(no=12121), q.OR) q.add(Q(name=lee)|Q(name=kim), q.AND) q.add(Q(142411), q.OR) Base.objects.filter(q)# 동일한 결과 # SELECT * FROM..
-
[Python] Selenium 사용하기 (+PhantomJS)언어/파이썬 & 장고 2019. 1. 21. 22:51
Selenium은 웹앱을 테스트 하는데 주로 사용하는 프레임워크입니다. webdriver API를 통해 브라우저를 제어하게 할 수 있습니다. JavaScript를 이용해 비동기적으로 컨텐츠를 호출할 수 있으므로 브라우저에서 보이는 컨텐츠라면 전부 가져올 수 있다는 것을 의미합니다. 한마디로 Selenium은 실제 웹 브라우저가 동작하기 때문에 JS로 렌더링이 완료된 후의 DOM 결과물에 대한 접근이 가능합니다.설치파이썬브라우저의 업데이트 마다 새로운 드라이버를 잡기 때문에 최신버전을 유지하는 것이 좋습니다.pip3 install seleniumwebdriver아래에서는 chrome을 설치하여 사용합니다.https://sites.google.com/a/chromium.org/chromedriver/down..
-
[Node] Node.js 버전 관리하기 (설치, 업데이트, 다운그레이드)언어/자바스크립트 2019. 1. 21. 21:31
node와 npm 버전을 최신으로 전부 올렸다가 기존 프로젝트가 실행되지 않아 노드 버전을 다시 내려야 하는 상황이 왔습니다. 1시간 삽질 덕에 아래와 같이 정리합니다.Node 버전 확인$ node -vCache 삭제$ sudo npm cache clean --forcen 플러그인 설치n은 node의 버전을 관리해주는 플러그인입니다. 해당 플러그인이 있으면 노드 버전을 변경할 때, 해당 노드 삭제가 아닌 사용할 버전선택이라는 간편함이 있으니 설치해줍니다.$ sudo npm install -g n최신 버전 설치$ n lateststable 버전 설치$ n stableLTS 버전 설치$ n lts특정 버전 설치n 다음 특정 버전을 입력하여 설치하여 줍니다.$ n 5.6.0 $ n 8.11.1 $ n 11.4..
-
[Django] subquery 표현하는 방법 (subquery, outerref 사용법)언어/파이썬 & 장고 2019. 1. 21. 20:59
WHERE 절의 subqueryitem = Item.objects.all() base = Base.objects.filter(no__in=Subquery(item.values('no'))) == 동일 쿼리 SELECT * FROM base WHERE no IN (SELECT no FROM item)SELECT 절의 subqueryitem = Item.objects.all() base = Base.objects.annotate(no=Subquery(item.values('no'))) == 동일 쿼리 SELECT *, (SELECT no FROM item) AS "no" FROM base 더 복잡하게먼저 위에서 그냥 예시를 들었던 모델은 아래와 같이 정의되었다고 가정합니다.class Base(models.M..
-
[Python] 문자열 포맷팅 방법들 (%, str.format, f-string)언어/파이썬 & 장고 2019. 1. 20. 04:04
파이썬에서 문자열 포맷팅 방식은 다양합니다. 아래에서 다양한 방법과 사용법을 설명하겠습니다. % operator (오래된 방식) C에서 prinf 스타일로 사용한 적이 있으면 익숙한 방식입니다. python3 이전의 방식으로 편리하지만 타입을 정확하게 알고 작성해야 한다는 단점이 있습니다. test = 'Hello %s' % 'Bob' print(test) # Hello Bob 만약 데이터 타입이 integer일 경우 아래와 같이 %s로 추가합니다. test = 'age: %i' % 111 print(test) # age: 111 만약 포맷팅하고자 하는 데이터 타입이 다를 경우, 아래와 같이 에러를 뱉게 됩니다. test = 'age: %i' % '111' # Traceback (most recent c..