728x90 반응형 Develop36 [SQL] 불필요한 쿼리 제거 작업 서론자신이 작업한 코드를 포함한 모든 결과물은 Legacy가 된다.다만, 개선하려는 시점의 주제가 무엇이냐에 따라 알고리즘 개선이 될지 비즈니스 로직 개선이 될지 결정될 수 있다.실무를 수행하면서 2년 전 mybatis로 개발된 SQL에서 시스템 고도화에 따라 사용할 수 없거나 불필요한 쿼리가 발견되어 최적화를 위해 해결하던 도중 간단한 이론에 대해 정리해본다.이론적 배경SQL 쿼리는 어떻게 동작하는가?1) FROM : 어느 테이블에서 찾을 것인가?2) JOIN : 어떤 테이블을 연관지을 것인가?3) ON : 연관 조건은 어떤 것인가?4) WHERE : 어떤 필터를 적용할 것인가?5) GROUP BY : 값을 기준으로 그룹화를 수행할 것인가?6) HAVING : WHERE과 유사하지만 그룹에 대한 필터를.. 2024. 5. 8. [Python] Subprocess, 터미널 명령어 활용 방법 서론일일 작업한 개발 이력에 대해 정리 및 회고를 할 방법을 간단한 스크립트를 활용하여 일자 관리를 해보려고 한다.다만, 활용한 개발 도구에 대해 API를 모두 지원하지 않으므로 설치 후 터미널을 활용하는 방법을 응용하기로 해본다.Git 관련 이력을 정리하는 부분을 MVP로 점진적으로 활용 방법을 늘려보도록 한다.개요python subprocess module모듈명처럼 서브 프로세스를 생성하여, 작업한 내용을 메모리에 저장하고 활용할 수 있게 만들어주는 기능을 제공한다.운영체제론을 공부하면서 접할 수 있는 공유 메모리와 세마포어 활용 부분을 연관지어 고민해보아도 좋은 모듈이다.https://docs.python.org/ko/3/library/subprocess.html subprocess — Subpro.. 2024. 5. 3. Python3 가상환경 만들기 (venv) 들어가며... 프로젝트별 개발 환경을 구축하기 위해 가상환경을 생성하여 패키지 관리를 용이하게 수행할 수 있도록 생성해본다. 사전 준비 1. python3-venv 패키지 설치 # sudo apt-get install python3-venv 2. python3 프로젝트 생성 $ python3 -m venv {프로젝트명} 3. 가상환경 확인 # sudo apt-get install tree $ tree {프로젝트} {프로젝트} ├── bin │ ├── activate │ ├── activate.csh │ ├── activate.fish │ ├── easy_install │ ├── easy_install-3.7 │ ├── pip │ ├── pip3 │ ├── pip3.7 │ ├── python -> pyth.. 2022. 5. 9. 지도 검색 알고리즘 들어가며... 모바일에서 전달하는 검색어, 위도, 경도 데이터를 이용하여 데이터베이스에 적재된 데이터를 Map에 표시하기 위한 결과 리스트 처리를 개발해본다. 준비사항 위도(float) 경도(float) 검색어(str) 필요 사항 정리 위도 경도 값을 활용한 거리 계산 및 정렬 방법 business_latitude(float) 위도 business_longtitude(float) 경도 위도 경도 거리 계산 공식 활용 X = ( cos( 위도#1 ) * 6371 * 2 * 3.14 / 360 ) * | 경도#1 - 경도#2 | Y = 111 * | 위도#1 - 위도#2 | D = √ ( X² + Y² ) MySQL 검증 (거리 계산) SELECT business_idx, business_name, busi.. 2022. 5. 9. 커서 페이지네이션 구현 들어가며... 모바일 환경에서 적합한 스크롤 위주의 페이지 호출로 마지막 idx를 기준으로 다음 리스트를 호출하는 커서 페이지네이션을 개발한다. 준비사항 리스트 데이터를 호출하는 API 명세 Endpoint View를 개발하는 담당자와 협의 필요 마지막 idx 정보 필요 사항 정리 첫 번째 페이지 호출 N 번째 페이지 호출 코드 반영 if last_idx == 0: statement = select( Table.table_idx, ).order_by( Table.table_idx.desc() ).limit(20) else: statement = select( Table.table_idx, ).where( Table.table_idx < last_idx ).order_by( Table.table_idx.d.. 2022. 5. 9. FCM 알림 시스템 구현 필요사항 정리 그룹 푸시 형태의 API 구성 (https://fcm.googleapis.com/fcm/notification 활용) FCM Token 테이블 구성 FCM Token 생성 및 수정 (로그인 등) 시 POST /function/fcm 활용 Token 매칭 저장 FCM Token 삭제 (로그아웃) 시 DELETE /function/fcm 활용 고객 식별 정보 매칭 삭제 FCM API 정리 # Push Group 생성 # 동일한 notification_key_name 생성 시 400 Error Return # {"error":"notification_key already exists"} notification_key = requests.post( "https://fcm.googleapis.com.. 2022. 5. 9. 이전 1 ··· 3 4 5 6 다음 728x90 반응형