반응형
반응형

특정 url에서 사진을 다운받아서, local에 저장을 한 후, 해당 사진을 post로 보내야 할 일이 생겼다.


1. 사진을 다운받은 후, local에 저장

2. local에 저장된 사진을 read

post로 보내는 거는.. 이전 포스트에 작성해두었으니, 이 포스트엔 작성하지 않는다.


일단 사진을 땡겨오려면, get이든 post든 http request를 통해 데이터를 가져와야 하기 때문에,

requests module을 import하고, file read의 경우는 별도로 import할 것 없이 내장함수로도 간단하게 사용이 가능하다.


아래 예제와 같이 구현을 하면 된다.


import requests

if __name__ == "__main__":
    res = requests.get("이미지 URL")
    res_img = res.content

    with open("이미지가 저장될 local 경로", 'wb') as fp:
        fp.write(res_img)


이렇게 구현을 하고, 이전에 포스팅한 multipart upload 연동을 참고하면, upload api 연동이 완료된다.

반응형

'개발 > Python' 카테고리의 다른 글

[Python] paramiko for SSHClient  (0) 2017.02.10
[Python] requirements.txt  (0) 2017.01.31
[SMTPlib] mail loops back to me (MX problem)  (0) 2016.12.27
[Python] multipart file upload  (0) 2016.11.09
[Python] logging to file  (0) 2016.11.09
,
반응형

파일 업로드 api 연동을 할 때, java의 경우는 form을 만들어서, multipart 옵션을 추가해서,

이것저것 복잡한 작업을 거쳐야 하는데, python의 경우 requests module을 이용하면 간편하게  연동을 할 수 있다.


아래 예제처럼, requests module을 import시킨 후, 로컬에 있는 file을 읽어서, files라는 파라미터에 전달만 해주면된다.


import requests

if __name__ == "__main__":
    files = {"img_file": open('이미지 경로', 'rb')}
    params = {"key":"value"}
    res = requests.post('api url', params=params, files=files)


앞으로 이런거 연동 할 일 있으면, python을 이용하면 좋을 것 같다.

반응형

'개발 > Python' 카테고리의 다른 글

[Python] paramiko for SSHClient  (0) 2017.02.10
[Python] requirements.txt  (0) 2017.01.31
[SMTPlib] mail loops back to me (MX problem)  (0) 2016.12.27
[Python] file read / write  (0) 2016.11.09
[Python] logging to file  (0) 2016.11.09
,
반응형

python은 내장되어 있는 logging module을 이용해서 java처럼 logback이나 log4j 같은 3rd party library를 이용하지 않고도,

편리하게 logging을 할 수 있는 것 같다.


아래 예제와 같이 logging 모듈을 import 하고, basicConfig method를 호출하여, 파일명과 로그 레벨을 지정해주면 끝난다.


import logging

def callLog():
    logging.info("testInfoLog")

if __name__ == "__main__":
    logging.basicConfig(filename="로그파일명", level=logging.INFO)
    callLog()


Rotate 기능이 있는 Handler도 일부 지원을 하는데, 대부분 가벼운 프로그래밍을 할 때 쓰는 언어라

굳이 사용할 필요가 있나 싶다.

반응형

'개발 > Python' 카테고리의 다른 글

[Python] paramiko for SSHClient  (0) 2017.02.10
[Python] requirements.txt  (0) 2017.01.31
[SMTPlib] mail loops back to me (MX problem)  (0) 2016.12.27
[Python] file read / write  (0) 2016.11.09
[Python] multipart file upload  (0) 2016.11.09
,
반응형

TableName을 UpperCase로 지은 경우, @Table에다가 UpperCase로 똑같이 입력을 해줘도,

validate 단계에서 missing table 오류를 뱉는 버그(?)가 있었다.


이런 경우 아래와 같이 네이밍 정책을 변경해주면, 해결이 된다.


spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl


반응형
,
반응형

웹페이지 개발을 하다보면, 사용자 편의성 등을 위해, 서버에서 데이터를 가져와서 Ajax형태로 화면의 변화없이

실시간 처리를 하는 경우가 많다.


이런경우 태그를 변수 하나에 담은 후에, $('#test').html(''); 과 같은 형태로 특정 element에 태그를 삽입하게 되는데,

방식에 따라 성능차이가 있다.


innerHTML (jquery에서의 .html())은 해당 태그 안에 있는 모든 element를 다시 파싱을 하여, 재 가공을 하는 작업을 하기 때문에

매우 느리다.


insertAdjacentHTML (jquery에서의 append, appendTo, 등 자세한 설명은 아래 링크를 참조)

http://api.jquery.com/insertAfter/
http://api.jquery.com/append/
http://api.jquery.com/appendTo/
http://api.jquery.com/prepend/
http://api.jquery.com/prependTo/


insertAdjacentHTML 같은 경우는 해당 태그의 앞, 뒤 등 원하는 부분을 선택해서 태그를 추가할 수 있기 때문에,

innerHTML 방식보다는 속도가 확실히 빠르고, innerHTML 에서의 속도 문제를 해결하기 위해 나온 스펙이라고 한다.

MDN을 참고 (https://developer.mozilla.org/ko/docs/Web/API/Element/insertAdjacentHTML)


tbody같은 태그에 내용을 한번에 다 구성해서 넣는 경우에는 성능차이가 없을 것으로 보이지만,

되도록이면 새로운 스펙을 사용하도록 노력하는 게 좋을 것 같다.

반응형
,
반응형

BackEnd 라이브러리 : Maven Central Repository에서 검색 후 pom.xml에 추하

FrontEnd 라이브러리 : CDN URL 활용 or 다운받아서 프로젝트에 포함


위와 같이 라이브러리 관리를 하였는데, FrontEnd 라이브러리도 WebJars라는 솔루션을 이용해서

Maven으로 통합을 할 수가 있다.


사이트는 아래와 같고, SBT, Maven / Gradle 등 이것저것 다 지원을 한다.

http://www.webjars.org/


사이트에 들어가서 Build Tool 부분에 Maven을 누르면, 아래와 같이 pom.xml에 바로 복붙할 수 있도록 포맷까지 제공한다.


    org.webjars
    ace
    01.08.2014


pom.xml에 추가를 한 후 추가된 라이브러리의 폴더 구조를 보면, META-INF/resources/webjars/... 와 같은 형태를 가지므로,

UI페이지에서 참조할 때 webjars/...  와 같은 형태로 참조를 하면 된다.


SpringBoot의 경우에도 원래는 resources/static, resources/template 폴더에서만 UI페이지 참조가 가능한걸로 알고 있는데,

언제부터 패치된지는 잘 모르겠지만 최근 버전인 1.4.x 에서는 Webjars를 사용할 수 있도록 ResourceHandler 처리까지 되어 있으므로

그냥 사용을하면 된다.

반응형
,
반응형

Table의 데이터가 많아 지는 경우, 스크롤을 내리다보면, THead부분이 보이지 않아서 

대부분은 Table의 Height를 고정시켜서 스크롤을 시키는 등의 방법을 사용하는데,

FloatThead라고, 스크롤이 되서 THead가 안보이는 순간에 화면 상단에 Label형태로 THead의 텍스트를 표시해주는 편리한 라이브러리가 있었다.


사용법도 매우 간단하고, Table의 Height를 지정하지 않아도 되기 때문에, 사용상으로 더 편리하고

가장 중요한건 기존의 코드를 변경하지 않아도 되는 점이다.


일단 아래 링크를 참조하여 js파일을 받아서 사용을 했고,

http://mkoryak.github.io/floatThead/


페이지 초기화 구문에서 $('#테이블명').floatThead(); 으로 해주면 알아서 상단에 THead를 띄워준다.

반응형
,
반응형

최근에 MS에서 인수하여 Hot한 Xamarin을 해보기로 하였다.


VS2015와의 연동에 특화되어 있는지라, VS2013에서는 조금 헤매고 삽질을 하여, 그 과정을 정리한다.


1. VS2013 서비스팩 최신버전

 - VS2013에 들어가서 도구 - 확장 및 업데이트 - 업데이트



2. Xamarin Installer 

 - https://www.xamarin.com  사이트에 방문하여, 상단의 탭 찾으려고 하지말고, 아래로 조금만 스크롤하면 Download Xamarin 버튼이 있다.)

 - 다운로드만 해두자..


3. Microsoft Build Tools 2015 설치

 - https://www.microsoft.com/ko-kr/download/details.aspx?id=48159 에서 받으면된다.

 - 이걸 설치하는 이유는, Xamarin Installer가 설치도중 뿜어낼 예외상황을 방지하기 위해서라고 보면 될 것 같다.

 - 그리고, VS버전이 2013이라고, Build Tools를 2013으로 설치하면, Xamarin Installer님께서 설치되었다고 인지를 못하니, 2015 무조건 최신버전으로 설치해주자.


4. Xamarin Installer 실행

 - 2번에서 다운받은 Installer를 실행하자.

 - 실행도중, 에러 팝업이 나오면서 Xamarin.VisualStudio_4.1.1.1.msi  비슷하게 생긴 msi파일을 받아서 수동으로 더블클릭하라는 팝업이 나온다. (이것저것 삽질하면서 해결하다보니 캡쳐를 못함;)

 - 하이퍼링크가 걸려있으니. 클릭하여 다운받아서 설치를 하자. (이 과정에서 Microsoft Build Tools 2015가 설치되어있지 않다면, 설치하라는 안내 팝업이 나오며, 설치가 중단된다.)

 - 설치를 다 했으면, Xamarin Installer를 다시 실행하던, Retry를 해서 재개해주자.


MS에서도 아직 불안정하다고 얘기하는 Xamarin이라 다른 예외상황들이 있을 것 같은데, 본인은 위에 작성한 과정으로 전부 해결이 되었다.



반응형
,
반응형

특정 환경에서 cp 명령어 -f 옵션이 먹지 않는 경우가 있는데,

이런 경우 아래와 같이 백슬래쉬를 하나 넣어주면 해결이 된다.


$ \cp -rf test.txt a.txt
반응형
,
반응형

기본적으로 팝업을 구현할 때 window.open을 통해 뜨는 팝업을 좋아하지 않아서, modal을 이용한 LayerPopup으로 구현을 하는 편인데,

단순히 팝업을 하나 출력할 때는 아무문제 없는데, 데이터를 주고 받아야하는 경우가 있다. 데이터 편집 등.. seq 값을 넘겨야하는 경우라고 이해하면 편할 것 같다.


a 태그를 이용하여, custom attribute를 선언하여 주고받을 수 있는 방법이 있어서, 그 방법에 대해 알아본다.

편의상 LayerPopup만드는법은 생략하고, LayerPopup의 id는 testModal로 했다고 가정한다.


1. 데이터를 넘길 a 태그 작성

<a href="#" data-toggle="modal" data-target="#testModal" data-id="1">


2. modal (LayerPopup)을 누른 후 data-id 불러오기

$(document).ready(function() {		
    $('#testModal').on('show.bs.modal', function(event) {			
        var seq = $(event.relatedTarget).data('id');
    });
});


이와 같이 구현하면, a 태그를 눌러서 뜬 modal에서 데이터를 받아서 활용이 가능하다. 

data-id는 정해진건 아닌거 같고, data-{변수} 형태로 넘길 수 있는 것 같다.

반응형
,
반응형