오래된 프로그래머의 요즘 이야기

그리고 소소한 일상들...

허니의 소소한 일상들이 켜켜이 쌓여가고......

MariaDB 4

[ SQLiTE ] Local DB Update process (2)

이전글 : [ SQLiTE ] Local DB Update process (1) 현재까지 Flutter 로 만든 앱들의 동작 환경을 살펴보면 휴대폰 내부에서는 SQLiTE 를 사용하고, 서버는 주로 Docker 로 구축한 MariaDB (또는 MySQL)로 되어있다. 서버와의 통신은 Python 으로 만든 RestAPI 호출로 운영하고 있으며 SSL 적용한 WEB Server 도 컨테이너로 돌아가고 있다. (참고 : [Environment] 개발 환경에 대해... ) 처음에는 Database Update를 위해 효율 보다는 빠른 구축이 먼저였기에 서버의 API를 통해 버전번호를 체크/비교하면서 변경된 데이터를 조회해 온 후 휴대폰 내부의 SQLiTE에 Insert 와 Update 쿼리를 사용해 업데이트를..

Tech Story 2023.12.22

[ SQLiTE ] Local DB Update process (1)

일전에 지자체에서 운영하는 Android 와 iOS 앱을 개발해준 적이 있다. 지자체 서버에서 제공하는 API를 호출하고 그 결과를 앱에 표현해 주는 앱인데 API호출 회수를 최소화 하기 위해 대부분의 데이터는 휴대폰의 SQLiTE 에 저장하고 사용했다. 또한 서버와의 동기화(Synchronization)를 위해 Update가 필요한 테이블별 Version No를 Check하여 Local 과 Server 의 DB 동기화를 진행해 왔다. 고도화 작업까지 완료된 꽤 긴 기간동안 작업했던 앱이었기에, 초기의 앱과 비교해 보면 디자인부터 기능까지 무척이나 많은 변화를 간직하고 있는 앱이다. 오늘은 수많은 변화 중 Database 의 Table data Update 관련한 몇가지를 얘기하고자 한다. 우선 서버는 ..

Tech Story 2023.12.22

[ SQL ] Query 작성 시 count() 함수의 함정

많은 개발자들이 Database Query 작성할때 습관적으로 ... count(*) ... 이렇게 사용하는 사람들이 많다. 대개의 경우 큰 문제가 생기지는 않으나, 혹 실행 결과값이 다를 수 있음을 인지하고 사용하는 개발자는 그리 많지 않은 듯 하다. 바로 Field의 값이 Null 이냐 아니냐에 따라 리턴되는 count() 함수의 결과값이 달라질 수 있다. 예제를 보자 예제에서 사용한 테이블 t1 은 간단하게 Nullable 속성의 2개 필드를 가지고 있고, PrimaryKey 설정도 하지 않았으며, 테스트를 위한 Record 6개를 넣은 후 전체 조회한 결과는 우측 이미지와 같다. 다음과 같이 3개의 쿼리를 던져보면 받는 결과값이 다름을 알 수 있으며, 필자가 얘기하려는 바가 무엇인지 바로 알 수 ..

Tech Story 2023.12.06

[PYTHON / MYSQL(MariaDB)] _last_executed 가 사라졌다?

예전엔 MYSQL (MariaDB) 를 쓸때 Cursor 를 실행 시킨 후 _last_executed 를 잘 썼는데, 언제부터 인지 API가 작동을 안해서 Query가 잘못되었나? 아님 파이썬 코드에 문제가 있나? Parameter가 문젠가? 등등 원인이 될만한 버그를 찾기 위해 많은 시간을 디버깅에 애쓴적이 있다. 쿼리는 아무리 봐도 문제가 없었는데 쿼리를 담은 커서만 실행시키면 API가 뻗어 버리는 걸 지켜보다보니 내가 뻗어버릴 것만 같았고 답답해 미칠려던 찰나에, 실행된 쿼리를 확인하기 위해 작성한 logger.debug(cur._last_executed) 문장을 지웠더니 정상 실행 되는게 아닌가? 급한대로 logger.debug(cur._last_executed) 문장들을 전부 주석처리하고 API..

Tech Story 2023.11.21