maxscale 은 DB 프록시로 로드밸런서의 역할을 한다. 이거는 mysql 과는 상이한 프로그램으로 플러그인이라늗가에 포함되지 않고 DB 와 완전히 별개의 프로그램으로 동작한다. 전 글을 참고해도 좋을 것 같다. maxscale 상속 과정maxscale 은 master 로 write 쿼리가 들어가고 동기화 설정으로 인해 slave 까지 해당 변화가 넘어간다. (이때 주의해야 할 점은 maxscale 은 mysql 에 소속되어 있지 않기 때문에, 동기화 작업은 DB 단에서 이루어진다!) read 쿼리는 slave 로 넘겨주거나 분산해서 받거나 하는 식으로 너무 많을 경우 분산해서 받을 수 있다. maxscale 은 master 가 있고 master candidate 를 설정할 수 있는데 이 후보들은 m..
flask 기반의 프로젝트를 빌드하고 환경별로 패키징을 하는 과정을 이야기해 보도록 하겠습니다~ c 가 포함된 경우에는 어떻게 진행을 해야할지 별도로 안내를 드리려고 합니다. 소스코드 컴파일우선 node 별로 필요한 파일을 모으는 것이 기본이 되겠지요. 인증서가 필요한 노드, 아닌 노드 등 많이 있겠지요? 이미 디렉토리가 노드별로 쪼개져있는 경우에는 이 과정을 크게 상관을 안써도 될거 같습니다. 그 다음은 frontend 필요한 파일을 컴파일을 하는 과정이 필요하겠네요. 제 경우에는 flask-jinja 를 사용하고 있어서 jinja 템플릿과 local 파일을 미리 compile 을 해두는 과정이 필요합니다. 이 과정에서는 py_compile dictionary 를 사용합니다. window 빌드 및 패..
server 노드와 client 노드로 제공되는 제품이 일을 안한다고 한다. client 가 보내는 api 를 server 에서 특정 조건이 충족되면 받지를 못한다고 한다. 참 여러가지 상황이 있었는데 이것들을 대응하면서 생긴 생각을 적어보도록 하겠다. 버전 확인auto-update 가 제공이 되는 제품이라면 문제가 되지 않겠지만, 수동 업데이트를 해야하는 상황이라면 두가지 node 가 모두 최신 버전으로 깔려 있는지부터 확인을 해야한다. 여기서 포인트는 '두가지 모두' 이다. server 에 문제가 있어서 표기가 안되는거 같지만 그거는 너의 생각일 뿐이고 실상 문제는 client 에 있을 확률도 아주 높다. 따라서 양쪽 노드 모두가 최신 버전임을 확인하는 것을 맨 첫번째로 가져가야 한다. 패킷 캡쳐..
Maxscale 은 mariadb 에서 사용하는 이중화 툴로, 분산된 DB 서버를 관리하는 일종의 확장팩같은 느낌이다. 주된 기능은 DB 쿼리 IO 를 로드밸런싱하는 기능으로, 한 DB 에 과한 부하가 가해지는 것을 막는 것을 목적으로 한다. master, slave 동기화우선 maxscale 을 진행하기 전에 DB 끼리 master-slave 로 동기화를 시켜야 한다. master-slave 구조를 간단히 설명하자면 master 는 DB 의 주체이며, 모든 변경이 여기서부터 이루어진다고 가정하고 본인의 DB 를 slave 에 복제하는 것을 autocommit 해준다. 그리고 master 가 다운될 경우 slave 가 master 역할을 하도록 수행하는 기능이 있다. 작동이 종료된 master 는..
이번시간에는 플라스크 백엔드의 기본적인 프론트엔드 템플릿인 진자에 대해서 이야기해보려고 합니다. 이건 가장 기본인 프론트엔드이고 필요에 따라서 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..
아직 1년차 개발자라서 대선배님들이 보기에는 너무 귀여워 보일 수 있어요~ 그런데 제가 지금까지 일하며 생각한 개발의 핵심은 이렇습니다. 잘 버리기!! 에요. 급변하는 개발시장 개발 생태계는 정말 빨리 바뀐다는 특징이 있어요~~ 특히 툴이 많이 나오기로 유명한 프론트엔드의 경우에는 그야말로 1년마다 시장을 선도하는 기술이 바뀌고 있어요~ 10년 전에 아무리 잘하던 스택을 가지고 있더라도 지금 사장되어버린다면 내 가치가 굉장히 반감될 거에요~~ 이러한 업계 특성이 반영되어서 개발자들이 불안감, 부정적인 마음을 유독 많이 가지는거 같기도 하네요. 그렇다면 이런 상황에서 개발자는 어떤 대처를 해내야 할까요?? 내가 이러이러한 언어를 썼다는 생각 그 자체 내가 이젠 가치 없어졌다는 그 나의 부정적인 마음 자체를..
오픈소스 개발 사회는 다른 분야와 약간 다른 특징을 가진다 Open Source 그건 자신의 결과물을 공유하는 문화가 있다는것 당장 우리 회사만 해도 프랑스의 멋쟁이 개발자 Fabrice 형님이 한 20년 전에 만든 QEMU 라는 에뮬레이터 오픈소스로 지금까지 밥먹고 살고있다 예전에 학부생때는 막연히 그런가보다.. 했는데 이 일 해보니까 거기에 기여한다는거 자체가 얼마나 대단한건지 알겠다. 그 C 코드는 읽고 분석하는 것만 해도 머리가 아프다. 구조체 구조체 포인터 포인터 함수는 또 그냥 쓰는것도 아니다 #define 써서 매크로 매크로... OOP 를 어떻게든 구현해내려고 함수 이름과 레벨을 기를 쓰면서 나눠둔 것들을 보면은 참 감사하다는 생각이 많이 든다. 그 몇만줄의 코드를 쓰는 노고를 전부 세상이..
여의도에서 근무하는 친구가 찾아보기 귀찮다고 해서 만들어줬다. 코딩한 기간은 땡땡하게 해서 이주정도 걸린거 같다. 크롤링 라이브러리는 beautifulsoup 를 사용했다. 상한가 종목은 naver finance 에서 긁어오고, 그 종목 상한가 원인은 구글 클라우드 플랫폼으로 검색해서 이유를 찾았다. 챗GPT 는 초기사용자 무료 크레딧으로 연결해서 만들었다. 알림은 API가 잘나오는 텔레그램으로 진행했다. 자세한 사항은 링크 들어가보면 어떻게 사용해야 하는지 잘 써있다. 그렇게 모듈은 총 4개정도 쓴거 같다. 다음은 각 모듈별로 까다로웠던 부분 개선점을 얘기해 보겠다. naver finance API tables = soup.find_all('table', {'class': 'type_5'}) # Che..
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..
https전자서명과 HTTPS 의 역할이 굉장히 헷갈렸다. 둘 다 공개키 암호화를 사용하기 때문이다. 하지만 둘은 사용되는 역할이 다르다.전자서명은 어떠한 권위 주체가 문서의 진위여부를 ‘서명’ 해주는 것이다. 이 과정에서 ‘공개키 암호화’ 가 쓰인다. 편의상 서명을 희망하는 객체를 C, 서명을 해주는 객체를 S 라고 부르겠다.C 가 ‘서명을 희망한다’ 는 것은 문서 내용을 MD 혹은 SHA 로 해쉬해서 문서 뒤에 붙여주는 과정을 의미한다.S 가 ‘서명을 해준다’ 는 것은 S 가 가진 비밀키로 해쉬값을 암호화해서 그 문서 뒤에 붙여주는 과정을 의미한다.C1 가 ‘서명을 확인한다’ 는 것은 S 가 뿌린 공개키(보통 OS 안에 내장됨)로 암호문을 복호화하고, 문서 내용을 해쉬해서 두 값을 비교하는 것을 의미..