flask - request.script_root 이용하기

하나의 웹을 여러 path 에 올려야 할 경우가 있다. 예를 들면, 테스트를 위해서 /web1, /web2 이런식으로 구성해서 올릴 경우이다. 이런 경우 프론트단에서 URL로 지정해 놓은 값들을 수정해 줘야 한다. ajax 를 호출한다고 생각해 보자. 원래 /web/api/room 이런식으로 ajax 를 호출하는 경우가 있었다면 /web1, /web2 에 따라서 /web1/api/room, /web2/api/room 이렇게… Read More

pymssql nextset() 빈값 이슈

최근에 구현한 부분에서 이상한 경험을 했는데 같은 db 프로시저를 호출하는 코드를 쓰고 테스트를 했는데 어떤 조건으로는 데이터가 순서에 맞게 잘 나오고 안나오고 하는 경우였다. 데이터는 mssql 저장 프로시저에서 2개의 결과셋을 반환하는데 첫번째에서는 보여줄 데이터의 금액, 건수 합산 데이터를 보여주고, 두번째에서는 실제 보여줄 데이터가 나오는 것이었다. 그래서 generator 를 이용해서 g.next(), g.next() 이렇게 2번… Read More

flask - render_template 어떻게 사용할까?

flask 를 사용하다보면 view 코드가 길어지는 경우가 있는데 그 중 하나가 views.py 에 route 함수가 많아져서 길어지는것 그리고 다른 하나는 render_template() 함수에 파라미터가 많아져서 길어지는 경우다. 전자의 경우 blueprint 로 분할하거나 resource 단위로 분할하면 해결할수 있다. (이건 다른 포스트에서 자세히 설명하겠다.) 후자의 경우에는 어떻게 해결 할수 있을까? 뭐 이런식으로 길어지는 경우다. return render_… Read More

Azure Text Analytics 연동하기

지난 글에서 chatfuel을 이용해서 챗봇을 간단하게 만들어봤는데 MS Azure 에서 제공하는 Text Analytics API 를 연동해서 감정분석까지는 아니고 단순하게 텍스트에 대한 긍정부정을 알려주는 챗봇을 구성해 보기로 했다. https://azure.microsoft.com/en-us/services/cognitive-services/text-analytics/ 총 4가지 API를 제공하는데 DetectLanguage 랑 Sentiment API 를 이용하기로 했다. Detect Language 는 입력된 텍스트에 대한 언어를 감지해서 결과를… Read More

Python - 리스트 순회중 수정하는 문제

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #5: Modifying a list while iterating over it 리스트 순회중 수정하는 문제 >>> odd = lambda x : bool(x % 2) >>> numbers… Read More

flask - json_encoder 지정하기

API 상에서 JSON 으로 응답을 내보내기 위해서는 데이터를 Json Serialize(직렬화)를 해야한다. 그런데 json 에서 표현할 수 있는 데이터는 한정이 되어 있어서 각 프로그래밍 언어에 있는 모든 타입을 지원하지는 못한다. Decimal 형도 그런 예 중 하나인데 파이썬에서는 json.dumps()를 통해서 주로 직렬화를 하고 그 함수의 기능 중에 cls 인자를 통해서 JSONEncoder 를 구현한… Read More

Python - 파이썬 범위 규칙에 대한 잘못된 이해

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #4: Misunderstanding Python scope rules 파이썬 범위 규칙에 대한 잘못된 이해 파이썬 범위 해석은 LEGB(Local, Enclosing, Global, Built-in)에 기초하고 있다고 알려져 있다. 충분히… Read More

Python - 예외처리 블록에 대한 잘못된 파라미터 지정

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #3: Specifying parameters incorrectly for an exception block 예외처리 블록에 대한 잘못된 파라미터 지정 try: l = ["a", "b"] int(l[2]) except ValueError, IndexError: # To… Read More

Python - 잘못된 클래스 변수의 사용

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #2: Using class variables incorrectly 잘못된 클래스 변수의 사용 class A(object): x = 1 class B(A): pass class C(A): pass print A.x,… Read More

Security bugs on Windows servers: Flask 0.12.2 and Werkzeug 0.12.2 released

원문 : https://www.palletsprojects.com/blog/flask-werkzeug-0122-security-release/ Flask 0.12.2, Werkzeug 0.12.2 가 릴리즈 되었는데 이것들은 safe_join 함수에 대한 보안관련 버그수정을 포함하고 있다. 이 문제는 Windows 서버에서 application 을 운영시에 발생한다. Details David Lord가 이 버그를 발견했고, 개인 이메일로 다른 관리자에게 알렸다: While going through PR #2059 about safe_join, I… Read More

Python - 함수 디폴트인자의 잘못된 사용

본 글은 Toptal에 올라온 Buggy Python Code: The 10 Most Common Mistakes That Python Developers Make 글을 보고 공부하면서 쓴 글이다. 번역 + 개인의 공부내용이라고 생각하면 될 것 같다. Common Mistake #1: Misusing expressions as defaults for function arguments 함수 디폴트인자의 잘못된 사용 def foo(bar=[]): bar.append("baz") return bar print foo() print foo() print… Read More

git feature branch 모델 프로젝트 적용기

원래 사내에서 svn을 사용하고 있는데 자회사쪽과 작업을 하면서 그쪽 개발자를 구워 삶아서(홀려서) svn 이 아닌 git을 저장소로 사용하기로 하고, github 를 쓰고 싶었지만 작업자가 2명이라서 yona H2 embedded 버전을 사용하기로 했다. 오픈소스에 기여하거나 혹은 만들거나 할때 master 브랜치 외에 develop 브랜치 까지만 써보긴 했고, git feature branch 모델은 실제 업무에 사용해 본적은 없었다. 고도화… Read More

PROGRESSIVE WEB APP ROADSHOW 2017 KOREA

커리어가 웹의 백엔드와 프론트 언저리에 걸쳐져 있는데 확실히 프론트엔드 개발쪽은 변화가 굉장히 빠르게 일어나고 있다는 것을 느낀다. AMP, PWA 에 대해서 도데체 뭔지 그리고 지금 결제 관련 일을 하고 있기 때문에 WebPaymentAPI 에 대해서 좀 더 알고자 참가하게 되었다. 행사 준비 자체는 잘 되었던것 같다. 스타벅스 커피도 있었고, 오후에는 도넛을 나눠줘서 다들 즐겁게 먹으면서 봤던것… Read More

pycharm - 화면 모드

pycharm 에서는 3가지 화면을 다르게 볼수 있는 것을 제공하고 있다. 그래서 특정 상황에 맞는 화면모드를 사용 할 수가 있다. Full Screen Presentation Mode Distraction Free Mode FullScreen 은 말 그대로 전체화면으로 보기다. 이 모드를 선택하면 단순히 현재보는 화면에서 상태표시줄이나 맥의 경우 dockbar 가 없어지고 pycharm이 전체화면으로 보여지게 된다. Presentation Mode 는 기본 뷰에서 프로젝트 뷰나… Read More

pycharm - bookmarks 북마크

pycharm 에는 북마크 기능이 있다. 많은 파일과 소스 파일내에 특정 위치를 빠르게 이동하기 위해서는 북마크 기능이 필수적이다. F11(윈도우 기준) 키를 눌러서 현재 있는 위치에 북마크를 지정 할 수 있다. 중요한 점은 소스파일 뿐만 아니라 project 뷰 안에 파일을 선택한 상태에서도 F11을 통해서 북마크에 추가 할 수가 있다. Shift+F11 를 누르면 현재까지 북마크한 파일이나… Read More

늦은 저녁을 먹다.

퇴근을 해서 늦은 저녁을 먹었다. 밥상머리에 앉아서 아내가 차려준 저녁을 먹으면서 왜 늦게 퇴근을 한 것일까? 왜 내가 지금 밥을 먹고 있는지 생각하게 되었다. 오늘 오후, 우리는 장애를 맞이했다. 2시부터 일어났던 장애를 6시에 알게 되었고 롤백을 했고, 피해에 대한 수치적 자료를 수집했고, 이슈가 장애의 원인이 되는 코드에 대해서 리뷰를 했다. 리뷰 후, 장애를 맞이했을 때에… Read More

flask - jinja2 tojson 필터

flask 문서를 보다보니 standard filters 라는 항목이 있는데 tojson 이 그 내용이다.(기본적으로 제공하는 필터라는 내용) 간략하게 애기하자면, 어떤 랜더링할 변수에 tojson 이라고 jinja2 템플릿 상에서 | 를 이용해서 붙이게 되면 json으로 변환된 값을 랜더링해준다. 예를들어, user 라는 dict 객체에 데이터를 넣어서 전달한다고 할 때, @app.route('/') def hello_world(): user ={} user['name'] = 'ash84'… Read More

pycharm - settings.jar 개발환경 공유

사내 팀에서 pycharm 을 파이썬 개발 공식툴로 사용하고 있다. 처음에 커뮤니티버전에서 시작해서, 개인 프로페셔널을 쓰다가, 이제는 회사에서 라이센스를 끊어서(기업용) 사용하고 있다. 개인 개발용으로도 구입해서 사용하고 있는데, 회사와 내 개인용 컴퓨터(맥) 간의 pycharm 환경을 동일하게 맞추고 싶었다. 테마, 폰트, 색깔 같은 외향적인 부분이 가장 크게 맞추고 싶은 부분이었고 개인적으로 사용하는 서버나 그런것들도 다시 설정하기도… Read More

dev-meetup.github.io 개발기

개발자 세미나는 예전보다 훨씬 많이 자주 열리고 있다. 컨퍼런스 단위는 사실 1년에 많이 열리진 않지만, 어떤 단체나 회사에서 주도하기 때문에 홍보가 잘되고 많은 사람들이 참여하기 마련이다. 그렇지만, 밋업이나 세미나 그런 단위는 커뮤니티안에서만 주로 공유가 되고 외부 개발자가 알기가 어려웠다. 물론 찾는 노력을 하면 되지만, 모든 커뮤니티/사이트에 대한 워치독(watchdog)이 될 수는 없다. dev-meetup.… Read More

AWSKRUG 신년 콘퍼런스 - re:Invent 특집

올해 첫 세미나/컨퍼런스로 [AWSKRUG 신년 콘퍼런스 - re:Invent 특집] 을 선택했고, 다녀왔다. AWS 를 사실 회사에서나 개인 프로젝트를 할때에도 부담되는 부분이 있어서 사용하진 않고 있지만, 앞으로는(언젠가는) 더 AWS, AZURE 등을 도입하는 방향으로 갈 것이라고 생각했기 때문에 신청하게 되었다. AWS RE:INVENT 신규 서비스 정리 (윤석찬) 전반적으로 새로나온 서비스에 대한 간략한 소개가 주를… Read More