로그를 잘 남기기

보통의 웹 어플리케이션, 사이트 등을 만들 때 순수한 개발 외적으로 신경 써야 할 부분 중 여러 가지가 있는데 그 중에 하나가 로그이다. 잘 돌아가는 사이트들도 서버에 들어가서 로그를 남기는 형태나 로그파일을 보면 얼마나 신경을 썼는지를 알 수 있다. 이건 마치 그림의 뒷면이나, 자동차 하부를 보는것과 같다. 로그를 남기는 것은 매우 중요하다. 뭔가 문제가 생겼을 때… Read More

인공지능 스피커, 과연 이게 필요한가?

카카오미니, 네이버의 웨이버, 아마존의 에코 등 인공지능 스피커들이 난리다. 정확히 인공지능 스피커라는 용어가 맞는지도 모르겠지만, 개인적으로는 솔직히 왜 이게 필요한지를 모르겠다. 일단 기능자체는 거의 모든것들이 현재의 스마트폰에서 되는것이다. 노래를 찾아서 재생하거나, 길을 찾거나, 집에 있는 하드웨어를 제어하거나 등등. 좀 더 나은점이라면 음성인식 + 서비스가 하나로 결합된 상태라고 볼 수 있을것이다. 아이폰의 시리나 삼성의 벅스비에 구글이나 네이버의… Read More

python - db stored procedure 호출에 generator 활용하기

프로시저 호출은 몇 가지 제약을 가진다. 일단 프로시저명을 전달해야 하고 파라미터를 순서대로 전달해야 한다. 그리고 결과를 주는 방식이 하나의 결과를 줄 수도 있고 여러 결과를 줄 수도 있다. 프로시저당 하나의 호출 함수를 만들면 너무 많은 프로시저 호출 함수가 생기는 문제가 있다. 그래서 프로시저 이름을 받는 파라미터와 전달할 프로시저 파라미터, 그리고 insert, update, delete 의 경우… Read More

퇴사자는 진실을 말하지 않는다.

나도 그랬고 다른 사람도 그랬다. 친한 사람들 앞에서는 퇴사의 이유에 대해서 이야기를 하지만 진짜 퇴사 이유를 밝히지는 않는다. 더 좋은 오퍼가 있어서 간다는 식이다.(어떤 사람이 더 나쁜 오퍼가 가겠는가, 가봐야알뿐) 왜 그럴까? 불편해서?, 나가는 마당에 굳이 애기할 필요가 없어서? 여러가지 이유들이 있겠다. 퇴사자들을 탓하고 싶지는 않다. 어찌보면 그건 당연한것이다. 이 바닥은 좁고 굳이 나가는… Read More

flask-sqlalchemy multiple databases

사용하기 flask-sqlalchemy 에서 기본적으로 SQLALCHEMY_DATABASE_URI 설정을 통해서 mapping class 에 정의된 테이블들이 DB와 연결되게 된다. 그런데 1개 이상의 DB와 연결해야하는 경우가 생긴다. 기존의 회원정보를 같이 쓰는 다른 서비스의 경우가 대표적인 케이스이다. 이럴경우, flask-sqlalchemy 에서는 SQLALCHEMY_BINDS 를 통해서 여러 데이터베이스 URI를 지정할 수 있게 해주고 있다. app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql:… Read More

python sorted 에 대해서.

sorted 에 대해서 질문을 받았고 잘 대답을 하지 못해서 복기차원에서 이 글을 쓴다. 대부분의 내용은 Sorting HOW TO 라는 글에서 가져왔음을 밝힌다. list.sort() vs sorted() list.sort() 는 리스트 내부에서 정렬된다. 그에 비해 sorted() 는 정렬된 값을 돌려준다. 그렇기 때문에 원래 값을 유지하면서 정렬된 결과를 얻고 싶다면 sorted() 를 사용하면 된다. list.sort() 는… Read More

dev-meetup.github.io - 마우스 오버 기능 추가

작은 기능을 추가했다. 데스트탑 환경에서는 현재 월 캘린더 형태로 보여주고 있는데, 위의 사진과 같이 시간 제목 으로 표시하다 보니 세부내용을 확인하려면 일일이 들어가서 봐야하는 불편함이 있었다. 그래서 캘린더 상에서는 마우스 오버를 할 경우 popover 의 형태로 내용들, 시간, 장소, 태그를 출력해 주는 기능을 추가했다. fullcalendar 에는 이벤트에 대한 여러가지 액션을 지원해주고 있어서 그것을 활용했고, 그… Read More

PYCONKR2017 을 다녀와서.

파이콘2017 에 다녀왔다. 작년의 pyconApac 의 화려함을 뒤로하고 올해는 표제부터 Back to the Basic 이었다. 언제나 파이콘의 티켓 예약은 전쟁터였다. 나 빠른 점심을 먹고 들어와서 예약을 했고, 몇분후 예약을 못한 사람들이 속출하기 시작했다. 발표자 모집이 시작이 되었고, 발표를 하고 싶은 마음도 있었지만 올해는 한발자국 멀리서 지켜보게 되었다. 2-3주 정도 남았을 무렵부터 어떤 발표를 들을까 고민을… Read More

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