C++ 메모리 할당기 - tcmalloc, jemalloc

멀티스레드 최적화 힙 메모리 할당기: tcmalloc, jemalloc 이글 UPDATE : https://cdecl.tistory.com/304 왜 멀티스레드 메모리 할당기가 중요한가? 기본 메모리 할당기(glibc의 malloc, Windows의 HeapAlloc)는 범용성을 목표로 설계되었지만, 멀티스레드 환경에서는 다음과 같은 문제로 성능이 저하됩니다: 락 경합(Lock Contention): 다중 스레드가 동시에 메모리를 할당/해제할 때 락으로 인한 대기 시간 증가. 메모리 단편화(Memory Fragmentation): 빈번한 할당/해제로 메모리 사용 효율 저하. ABI 호환성 문제: 서로 다른 컴파일러나 표준 라이브러리 간 메모리 관리 방식 차이로 인한 런타임 오류. tcmalloc, jemalloc, mimalloc은 스레드별 캐싱, 효율적인 메모리 관리, ABI 안정성을 고려한 설계로 이러한 문제를 해결합니다. 이들은 웹 브라우저(Chrome, Firefox), 데이터베이스(MySQL, RocksDB), 고성능 서버에서 널리 사용됩니다. ...

May 15, 2025 · Byung Kyu KIM

C++ 언어의 ABI 이슈 및 호환성 가이드

C++ 언어의 ABI 이슈 및 호환성 가이드 1. ABI란 무엇인가? ABI(Application Binary Interface)는 컴파일된 바이너리 코드(오브젝트 파일, 라이브러리, 실행 파일 등)가 서로 상호작용할 수 있도록 정의된 규칙입니다. C++에서는 이름 맹글링, 호출 규약, 객체 레이아웃, 예외 처리 등이 포함됩니다. C++의 복잡한 기능(클래스, 템플릿, 예외 처리 등)으로 인해 ABI 이슈는 특히 중요하며, 서로 다른 컴파일러나 환경 간 호환성 문제를 자주 일으킵니다. 2. C++ ABI의 주요 이슈 C++는 언어의 복잡성으로 인해 다양한 ABI 이슈가 발생합니다. 아래는 주요 이슈와 구체적인 예입니다. ...

May 1, 2025 · Byung Kyu KIM

DuckDB CLI 및 SQL CheatSheet

DuckDB CLI 및 SQL CheatSheet - 주요 파일 포맷, DB Attach, HTTP/S3, Excel DuckDB CLI 및 SQL CheatSheet 가이드 1. DuckDB와 CLI/SQL 기능 소개 DuckDB는 고성능 분석 쿼리를 위해 설계된 인-프로세스, 컬럼 지향 OLAP 데이터베이스입니다. CLI와 SQL 인터페이스를 통해 CSV, Parquet, JSON, Excel 등의 파일 포맷을 처리하고, 데이터베이스를 관리하며, HTTP/S3와 같은 웹 기반 스토리지와 통합할 수 있습니다. 이 치트시트는 DuckDB의 CLI와 SQL 명령어를 중심으로 실용적인 예제와 모범 사례를 제공합니다. 주요 기능: ...

April 15, 2025 · Byung Kyu KIM

MCP 101

Model Context Pro MCP 101: Model Context Pro Model Context Pro 1. MCP란 무엇인가? MCP(Model Context Pro 주요 기능 동적 도구 탐색: 도구가 JSON 메타데이터로 자신의 기능을 제공하여 AI가 자동으로 이해하고 활용. 양방향 통신: WebSocket 또는 SSE(Server-Sent Events)를 통해 실시간 상호작용 지원. AI 중심 설계: AI의 의도(intent)를 기반으로 적합한 도구를 동적으로 호출. 사용 시기 MCP는 다음과 같은 경우에 적합합니다: AI가 외부 리소스(예: GitHub, Google Drive)에 접근하거나 작업을 수행할 때. 새로운 도구를 동적으로 추가하거나 복잡한 워크플로우를 자동화할 때. 예: AI가 “파일을 읽고 Slack에 공유"하거나 “GitHub에서 코드 검색"하는 작업. 2. MCP와 다른 API의 차이점 MCP는 REST API, SOAP와 비교해 AI 중심의 유연성을 제공합니다. 아래는 셀프 디스크립션(self-description)을 중심으로 주요 차이점입니다. ...

April 10, 2025 · Byung Kyu KIM

Playwright `page.get_by_role`

Playwright page.get_by_role 역할 기반 요소 탐색 Playwright page.get_by_role 가이드 1. page.get_by_role이란? Playwright의 page.get_by_role 메서드는 웹 페이지에서 요소를 역할(role)에 기반하여 탐색하는 강력한 도구입니다. 이는 접근성(Accessibility) 표준인 ARIA(Accessible Rich Internet Applications)를 활용하여 요소를 식별하며, HTML 태그 대신 사용자가 인식하는 기능적 역할을 기준으로 동작합니다. **역할(role)**이란 요소가 웹 페이지에서 수행하는 목적을 정의하는 속성으로, 예를 들어 버튼(button), 링크(link), 입력 필드(textbox) 등이 이에 해당합니다. get_by_role는 이러한 역할과 선택적으로 name 속성을 결합하여 요소를 정확히 찾아냅니다. 주요 기능 접근성 기반 탐색: ARIA 표준을 준수하여 요소를 식별. 직관적 사용: 개발자가 요소의 시각적 표현이나 태그 구조 대신 기능적 역할을 지정. 유연성: name, checked, disabled 등의 추가 옵션으로 세부 조정 가능. 이 메서드는 Playwright의 테스트 자동화 및 웹 스크래핑 작업에서 신뢰성과 유지보수성을 높이는 데 적합합니다. ...

March 20, 2025 · Byung Kyu KIM

Git 시맨틱 커밋 메시지

Git 시맨틱 커밋 메시지 가이드 시맨틱 커밋 메시지란? 시맨틱 커밋 메시지는 커밋의 목적과 의도를 명확하게 전달하기 위한 규칙입니다. 이 규칙을 따르면 프로젝트의 히스토리를 쉽게 이해하고 자동화된 도구를 활용할 수 있습니다. 기본 구조 시맨틱 커밋 메시지의 기본 구조는 다음과 같습니다: <type>[optional scope]: <description> [optional body] [optional footer(s)] 주요 타입 커밋 메시지는 다음 타입 중 하나로 시작해야 합니다: feat: 새로운 기능 추가 fix: 버그 수정 docs: 문서 변경 style: 코드 포맷팅, 세미콜론 누락 등 (코드 변경 없음) refactor: 코드 리팩토링 test: 테스트 코드 추가 또는 수정 chore: 빌드 프로세스 또는 보조 도구 변경 모범 사례 제목은 50자 이내로 제한합니다. 제목의 첫 글자만 대문자로 씁니다. 제목 끝에 마침표를 넣지 않습니다. 제목과 본문 사이에 빈 줄을 넣습니다. 본문은 72자마다 줄바꿈합니다. 명령형 현재 시제를 사용합니다 (예: “변경”, “수정함” 대신 “변경하다”). 예시 좋은 커밋 메시지 예시: ...

March 16, 2025 · Byung Kyu KIM

Python uv 101

Python uv 가이드: 빠르고 강력한 패키지 관리 도구 1. Python uv란? uv는 Astral에서 개발한 Python 패키지 및 프로젝트 관리 도구로, 기존 pip와 venv를 대체하거나 보완할 수 있도록 설계되었습니다. Rust로 작성되어 초고속 성능을 자랑하며, 통합적인 환경 관리와 의존성 해결 기능을 제공합니다. 주요 용도는 다음과 같습니다: Python 패키지 설치 및 관리 가상 환경 생성 및 동기화 의존성 잠금 및 프로젝트 관리 기존 워크플로우 개선 주요 기능 초고속 성능: pip보다 10~100배 빠른 설치 속도 통합 도구: 패키지 설치, 가상 환경 생성, 의존성 잠금을 단일 명령어로 처리 글로벌 캐시: 동일한 의존성을 재사용해 디스크 공간 절약 호환성: 기존 pip 및 venv와의 높은 호환성 uv는 기존 Python 도구의 복잡성을 줄이고, 현대적인 개발 환경에 최적화된 대안을 제공합니다. ...

March 15, 2025 · Byung Kyu KIM

Playwright 101

Playwright 가이드: 웹 자동화 1. Playwright란? Playwright는 웹 브라우저 자동화를 위한 도구로, Selenium의 대안으로 설계되었습니다. 주요 용도는 다음과 같습니다: 웹 애플리케이션 테스트 자동화 웹 스크래핑 및 데이터 추출 반복적인 웹 작업 자동화 크로스 브라우저 테스팅 주요 기능 브라우저 제어: Chromium, Firefox, Webkit(Safari 엔진) 지원 DOM 조작: querySelector와 locator로 요소 검색 및 조작 폼 자동화: 입력 및 제출 자동화 스크린샷 캡처: 페이지 또는 요소 캡처 헤드리스 모드: GUI 없는 실행 Playwright는 Selenium보다 최신 기술을 활용하며, 자동 대기와 간결한 API를 제공합니다. ...

March 1, 2025 · Byung Kyu KIM

macOS Homebrew Cask, 추가 애플리케이션

macOS 애플리케이션 - personal installation 시스템 유틸리티 alt-tab (AltTab.app) 윈도우 스타일의 앱 전환기로, 모든 열린 창을 한눈에 보고 빠르게 전환할 수 있습니다. macOS의 기본 앱 전환 기능을 개선하여 생산성을 높이는 데 도움을 줍니다. linearmouse (LinearMouse.app) macOS용 마우스 커스터마이징 도구로, 스크롤 방향, 속도, 버튼 기능 등을 세밀하게 조정할 수 있습니다. 특히 서드파티 마우스 사용 시 macOS의 제한적인 마우스 설정을 보완해줍니다. rectangle (Rectangle.app) 키보드 단축키로 창 크기와 위치를 쉽게 조절할 수 있는 창 관리 도구입니다. 다중 모니터 환경에서 창 관리를 효율적으로 할 수 있어 작업 생산성을 크게 향상시킵니다. ...

November 17, 2024 · Byung Kyu KIM

모던 CMake 기본 가이드

모던 CMake 기본 가이드: 타겟 중심의 현대적인 빌드 시스템 1. Makefile 대비 CMake의 장점 크로스 플랫폼 지원 Makefile은 Unix 계열 시스템에 특화되어 있지만, CMake는 Windows, Linux, macOS 등 다양한 플랫폼 지원 Visual Studio, Ninja, Unix Makefiles 등 다양한 빌드 시스템 생성 가능 타겟 중심의 의존성 관리 명확한 의존성 전파 (PUBLIC, PRIVATE, INTERFACE) 자동 헤더 의존성 추적 현대적인 패키지 관리 (find_package) 향상된 IDE 지원 Visual Studio, CLion 등과 완벽한 통합 자동 완성 및 인텔리센스 지원 CMake 프리셋 지원 2. 모던 CMake의 특징 기존 CMake와의 주요 차이점 타겟 중심 접근: 전역 변수 대신 특정 타겟에 한정하여 빌드 옵션을 지정합니다. 개선된 의존성 관리: 빌드 의존성 문제를 해결하고 불필요한 참조를 줄입니다. 새로운 명령어 도입: target_link_libraries, target_include_directories 등의 새로운 명령어를 사용합니다. PUBLIC, PRIVATE 키워드를 통한 세밀한 의존 관계 설정 CMake 3.0.0부터 모던 CMake의 기본 기능 지원 CMake 3.12+ 버전부터 “More Modern CMake” 기능 제공 CMake 3.15+ 버전 사용 권장 타겟 중심 접근 # 안티패턴 (사용하지 말 것) include_directories(include) add_definitions(-DSOME_DEFINE) link_directories(lib) # 모던 패턴 (권장) add_executable(myapp src/main.cpp) target_include_directories(myapp PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_compile_definitions(myapp PRIVATE SOME_DEFINE ) target_link_directories(myapp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib ) 범위와 전파 # 라이브러리 설정 add_library(mylib SHARED src/lib.cpp include/lib.h ) target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include # 헤더는 공개 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src # 구현은 비공개 ) # 실행 파일에서 라이브러리 사용 add_executable(myapp src/main.cpp) target_link_libraries(myapp PRIVATE mylib) # 자동으로 include 경로 전파 범위(Scope)와 전파(Propagation)의 개념 CMake에서 범위는 특정 설정(컴파일 옵션, include 디렉토리 등)이 어디에 적용될지를 나타냅니다. 전파는 이러한 설정이 다른 타겟(target)으로 전달되는 방식을 정의합니다. ...

November 15, 2024 · Byung Kyu KIM