개발

· 개발
flask 기반의 프로젝트를 빌드하고 환경별로 패키징을 하는 과정을 이야기해 보도록 하겠습니다~ c 가 포함된 경우에는 어떻게 진행을 해야할지 별도로 안내를 드리려고 합니다. 소스코드 컴파일우선 node 별로 필요한 파일을 모으는 것이 기본이 되겠지요. 인증서가 필요한 노드, 아닌 노드 등 많이 있겠지요? 이미 디렉토리가 노드별로 쪼개져있는 경우에는 이 과정을 크게 상관을 안써도 될거 같습니다. 그 다음은 frontend 필요한 파일을 컴파일을 하는 과정이 필요하겠네요. 제 경우에는 flask-jinja 를 사용하고 있어서 jinja 템플릿과 local 파일을 미리 compile 을 해두는 과정이 필요합니다. 이 과정에서는 py_compile dictionary 를 사용합니다.  window 빌드 및 패..
· 개발
이번시간에는 플라스크 백엔드의 기본적인 프론트엔드 템플릿인 진자에 대해서 이야기해보려고 합니다. 이건 가장 기본인 프론트엔드이고 필요에 따라서 react, nextjs 등을 붙여서 사용할 수 있습니다 template, app.html.j2우선 다른 python 모듈이 들어있는 디렉토리에 template 디렉토리를 추가합니다. 거기에 추가하는 app.html.j2 는 모든 템플릿의 기본 header, body 구조를 가지며 formfor 나 필요한 함수들을 정의해주는 역할을 합니다. app.html.j2의 최상단에서는 거기서 main 에서 생성한 formfor 를 가져와서 macro 설정을 해 주는 과정을 거칩니다. 기본적인 header 와 body 를 설정을 해주는데, header 에서는 여러 기본 세팅..
· 개발
flask-jinja-sqlalchemy 가 플라스크의 기본 구조이고 필요에 따라서 DB 나 front 를 바꿀 수 있다. 이번 글에서는 백엔드를 어떤식으로 모듈들을 구성해 두는지 확인해보도록 하겠다.    app, mainapp 모듈은 app.run 으로 해당 서버를 실행하는 역할을 수행한다. 또 --set-config  같은 argument 를 세팅해두는 역할, 필요한 thread 를 돌리는 역할 등을 수행한다. main 모듈은 모든 요청의 사전 처리인 @main.before_request 를 사용해서 규정에 맞는 요청이 들어왔는지를 확인한다. 또한 이 before_request 에서는 csrf_token이 유효한지, 수많은 요청들의 proxy 기능, session 만기 설정, locale 및 ORM..
· 개발
우리가 흔히 아는 윈도우 인스톨러 즉 MSI(MicroSoft Installer) 를 만드는 프로그램은 바로 wix 이다. wix 의 candle, light 명령으로 wxs 파일을 말아서 msi 를 만든다. upgrade 란?그런데 어떻게 window installer 는 같은 어떠한 두 msi 파일을 같은 "종류" 의 프로그램으로 인식을 하고, 재설치시에 해당 프로그램을 지우고 업그레이드를 하는 등의 행위를 할 수 있을까? 그건 바로 윈도우에서 규정한 여러 업그레이드 방식을 따라 wxs 파일을 만들면 된다. 윈도우 공식 문서를 살펴보면은 small, minor, major 등의 다양한 업그레이드 방식이 있음을 알 수 있다. 지금부터 그 방식들 중의 주요한 방법 2개인 major upgrade, min..
activity 와 service안드로이드 4대 구성요소중 둘. activity 는 UI 즉 메인쓰레드 상의 모든 action 을 의미하고service 는 백그라운드에서 주로 돌아간다.activity 는 oncreate - onstart - onresume - onpause - onstop - ondestroy 순서로 진행되며 끝 2개씩을 쌍으로 생각할 수 있다. 또, 자식 activity 를 실행하기 위해선 StartActivityForResult 를 쓰고, 자식 activitiy 에서 무언가를 받아야 한다며 OnActivityResult 를 사용한다.생명주기에 대한 자세한 내용, activity 의 선언, activity 의 이동에 대해선 다음 포스팅을 참고하면 좋다https://yeon-lee.ti..
· 개발
window 프로그램 펌웨어 업데이트를 할 경우 .bat 파일로 파일 스위칭 하는 것과 Microsoft Installer(.msi) 를 활용해서 파일을 바꾸는 것 중 어떤 것이 적절할지에 대한 고민우리는 어떠한 파일을 설치함에 있어서 zip 파일을 bat 폴더와 함께 실행시켜 필요한 build 를 하고 원하는 파일을 원하는 디렉토리에 설치하는 방식을 사용하였다.그런데 이 펌웨어가 가동되는 도중에 이 업데이트를 진행해야 하는 문제에 봉착하였다.문제점은 다음과 같았다.admin 계정이 아닌 kiosk 계정으로 로컬디스크에 접근할 권한을 가질 수 있는가?이미 프로세스에 의해 점유된 파일을 read/write 할 수 있겠는가?1번 문제는 admin 계정으로 window scheduler를 등록함으로 인해 극복..
· 개발
threading lock 시 어떤 함수를 사용하는게 적절할지에 대한 고민msi 설치파일을 서버로부터 다운로드를 받고 다운받은 파일을 실행할지 여부를 묻는 팝업을 띄우는 작업을 해야했다. Z팝업을 거절할 경우에 주기적으로 의사를 물어보아야 하기 때문에 thread 2개로 작업을 진행했고, 그 과정에서 msi 파일을 두개의 쓰레드에서 접근을 해야하는 상황이 되어서 lock 을 사용해야만 했다.일단 본인은 lock 을 threading.lock() 객체를 이용했다.lock_for_msi = threading.Lock()def thread_for_download_msi(): ... with lock_for_msi: install_msi()def thread_for_install_msi(): ... with ..
· 개발/C
C socket 통신처음 회사에 가자마자 들은 이야기이다.멋진 개발자는 low level 이 탄탄해야 한다. 우리 가상화 제품은 소켓을 잘알아야 한다. 소켓 프로그래밍을 C로 구현해보자!처음 할때는 뭐가뭔지 하나도 모르겠었고, 네트워크 기본 개념이 이렇게 쓰이는구나 싶었다. 또, 내가 사용하던 함수들의 안쪽은 이렇게 구현이 되어있구나 싶었다.소켓의 정의부터 천천히 정리해보자. 소켓은 네트워크 상에서 양방향 통신을 하기 위한 양쪽의 엔드포인트 이다.인터넷상에서 특정 PC 를 식별하기 위한 최소 단위는 무엇인가? 복잡한 개념을 빼고 생각하면 일단은 IP 라고 할수 있을 것이다. 그렇다면 한 노드가 다른 노드의 IP 로 정보를 준다면 잘 받아들일까?이 통신의 용도를 모르므로 이게 어떤 통신이며 나의 어떤 요청..
activity > service 만 통신을 하다가 service > activity 로 결과파일을 받고자 할 때 aidl 을 거쳐서 받는 방법을 서술하겠습니다 Activitiy 는 socketManager 이고 Service 는 CGService 입니다 개요는 .aidl 에 callback interface, startTask 메소드 추가 socketManager 의 ServiceConnection 부분에 binder.startTask 추가 socketManager 에 asBinder, onResult 메소드 추가 CGService 의 ICGService.Stub 에 startTask 추가 정도가 있습니다. .aidl 에 callback interface, startTask 메소드 추가 // ICGSe..
· 개발/Java
int 에 두개 숫자를 넣기 한 int 에 두개 숫자를 넣어 보낼 필요가 생겼습니다 int 는 4byte, 32byte 이므로 16byte 씩 2개로 나눈다면 65536 이내의 숫자라면 2개는 넉넉히 보낼 수 있습니다. 하지만 난 한 숫자가 50만이 넘어가는 경우였기 때문에, 8byte 와 24byte 로 나누어서 보내야 합니다. bitwise operator bitwise operator 를 이해할 필요가 있습니다. 위 그림은 char, 1byte, 8bit 를 기준으로 했습니다. 메모리 크기는 그대로인데, 비트 array 를 화살표 방향으로 옮긴다고 생각하면 편합니다. encoding encoding 하는 부분은 다음과 같습니다. startActivityForResult(i, cmdMsgIdEncod..
· 개발/Java
간략한 코드는 다음과 같습니다 bytetohex byte[] bytes = new java.math.BigInteger(hexText, 16).toByteArray(); hextobyte new java.math.BigInteger(hexByte).toString(16); 그런데 이렇게하면 추가시 00이 더해지는 에러가 발생할 수도 있기 때문에 big integer 나오기 전에 하던 방식도 추가해 두겠습니다 bytetohex final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); public static String bytesToHex(byte[] bytes) { char[] hexChars = new char[bytes.le..
android 에서 통신하는 방법 android 에서 통신하는 방법은 크게 3가지가 있다 intent handler aidl 이중 intent 로 통신하는 것은 activity 간 통신하는 것으로 가장 간단하고 기본적인 방식이다. intent 통신 특징 intent 통신 특징은 포그라운드에서 진행되기 때문에 항상 Main Thread 에서 동작해야만 한다는 단점이 있다. 백그라운드에서 데이터를 주고받고 싶다면 aidl 혹은 socket 혹은 handler 를 이용해야만 한다. intent 통신 절차 Mainactivity 에서 진행 1. intent 를 선언해준다. 첫번째엔 보낼 activity class, 두번째에는 수신받는 activity class 를 설정한다 Intent myIntent = new..
yeonlee
'개발' 카테고리의 글 목록