본문 바로가기

전체 글

(9)
[회사에 기여하기 - 1] 빌더 패턴을 사용한 코드 개선 과정 Intro입사한 지 한 달이 되지 않아 아직까지는 버그 티켓을 처리하고 있습니다. 그렇다 보니 코드 몇 줄을 추가하는 작업이 대부분입니다.그럼에도 개선할 부분이 없는지 고민하고 유지 보수성이나 단위 테스트를 추가하려고 노력하고 있습니다.빌더 패턴을 사용하여 코드를 개선한 경험을 공유하겠습니다. 빌더 패턴 개선전 예시 코드from datetime import datetimefrom docx import Documentfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENTfrom docx.shared import Ptdef create_meeting_minute(meeting_details, participants): document = Document() ..
공식, 이론, 실제를 모두 확인하며 병렬 프로그래밍 성능 개선하기! 1. Intro 2. 원인 분석 2. 해결 방법 📌 INTRO 멀티스레딩으로 집계 기능을 개발한 뒤 운영 서버에서 성능 테스트를 수행했습니다. 로컬에서 테스트와 달리 성능 저하가 발생했습니다. 성능 개선의 공식, 이론, 실제를 모두 측정 및 확인하고 개선한 경험을 공유하겠습니다. 📌 원인 분석 멀티스레드를 사용한 이유는 I/O와 CPU 작업을 분리하고 병렬 처리가 가능한 부분에는 CPU를 최대한 활용하기 위해서입니다. 개발 완료 후 성능테스트를 하며 CPU 사용량을 모니터링했습니다. 80% ~ 90% 사용량을 보여 CPU가 알차게 사용되었다 판단했으나 처리시간이 단일스레드와 별 차이가 없었습니다. CPU 사용량 중에 CPU 모드 별로 얼마나 차지하는지 확인이 필요했습니다. System 모드라면 OS 커널..
동기화된 리스트를 빠르게 조회하기 - synchronizedList와 CopyOnWriteArrayList 성능 비교해봅시다 1. Intro 2. create 3. add 4. get 5. 결론 📌 INTRO 최근 멀티스레딩 프로그래밍을 하며 동시성 제어 기능이 구현된 클래스는 단지 동시성 제어 목적으로 아무거나 가져다 쓰면 안 된다는 것을 배웠습니다. synchronizedList와 CopyOnWriteArrayList를 비교해 보고 간단한 테스트를 해보겠습니다. 📌 create synchronizedList 인자로 넘겨받은 동기화되지 않은 리스트를 암묵적 락이 적용된 동기화된 클래스로 wrapping 해서 리턴해줍니다. 리스트를 새로 생성하지 않기 때문에 생성 비용이 크지 않습니다. CopyOnWriteArrayList 반면 CopyOnWriteArrayList는 리스트의 원소를 새로운 배열에 복사합니다. 리스트의 크기가 ..
대용량 데이터를 빠르게 조회하기 - 페이징 전략 비교(offset, no offset, Where In) - Intro - Offset - No Offset - 성능 비교 📌 INTRO 대용량 데이터로 정산이나 집계 작업을 위해서는 전체 데이터를 한 번에 조회하기 어렵습니다. 메모리에 전체 데이터를 로딩해야 하기 때문이죠. 데이터가 1000만 ~ 1억 건이 된다면 일반적인 사양의 컴퓨터라면 현실적으로 불가능합니다. 그래서 데이터를 나눠서 조회해야 합니다. 조회 단위를 Page라고 하고 Page별로 조회하기 위하는 작업을 Paging이라고 합니다. Paging 전략에는 대표적으로 1) Offset 2) No Offset 이 있습니다. 결론적으로 No Offset 방식이 가장 빠릅니다. 그 이유를 페이징 전략별로 동작 원리와 쿼리 실행계획 결과로 파악해 보겠습니다. (조회 조건에 사용되는 컬럼에 인덱스 설정이 ..
Github Action을 Cloud Function처럼 써서 서버 비용 절약하기 1. Intro 2. Trade-Off 3. 필요환경 - NCP 서버 셋팅 - nCloud API 키 발급 - nCloud API 문서 4. Github Action 워크플로우 설정 Intro 최근 진행 중인 토이 프로젝트에서 성능&부하 테스트를 위해 nGrinder를 구축했습니다. Naver Cloud Platform(이하 NCP)에서 지원받은 크레딧으로 클라우드에 서버를 구축했습니다. nGrinder처럼 24/7 서비스가 아니라면 필요한 시간에만 사용해서 비용을 절감할 필요가 있습니다... NCP 콘솔에서 수동으로 서버 정지, 시작을 하면 되지만 매일매일 해야 하는 불편함과 혹시라도 까먹었을 시 서버 비용이 부과될 것입니다. 서버 시작, 정지를 자동화할 방법을 생각했고 추가 비용 없이 해결 가능한 방..