반응형
전체 글
디버거(Debugger) 브레이크 포인트(Break Point)의 구현 원리
디버거(Debugger) 브레이크 포인트(Break Point)의 구현 원리
2026.02.270. 요약 디버거의 소프트웨어 브레이크 포인트는 메모리 패칭(Memory Patching)과 CPU의 예외 처리 메커니즘을 이용해 구현합니다.유저가 특정 라인에 브레이크를 걸면, 해당 주소의 원래 기계어 1바이트를 디버거 메모리에 백업하고, 그 자리를 0xCC (INT 3) 명령어로 덮어씁니다.타겟 프로세스의 스레드(CPU)가 실행되다 0xCC를 만나면 디버그 익셉션(Trap)이 발생하고, OS는 스레드를 블로킹한 뒤 디버거에게 이벤트를 전달합니다.디버거는 이때 CPU 레지스터(Context)와 메모리를 읽어 유저에게 보여줍니다.유저가 실행을 재개(F5)하면, 덮어썼던 0xCC를 백업해 둔 원래 기계어로 복원합니다. 그리고 CPU의 명령어 포인터(RIP)를 1바이트 감소시켜 원래 명령어를 정상적으로 실행..
Windows DPC(Deferred Procedure Call), ISR(Interrupt Service Routine)
Windows DPC(Deferred Procedure Call), ISR(Interrupt Service Routine)
2026.02.270. 요약 ISR과 DPC는 OS가 하드웨어 인터럽트를 효율적으로 처리하기 위한 2단계 메커니즘입니다.랜카드에 패킷이 도착하면 먼저 최우선 순위인 ISR이 실행되어 하드웨어 상태만 빠르게 응답하고, TCP/IP 스택 분석 같은 무거운 작업은 DPC 큐에 지연시켜 처리합니다. 여기서 서버 개발자가 주의해야 할 점은 우선순위(IRQL)입니다. DPC는 일반 유저 스레드(IOCP Worker)보다 높은 IRQL에서 실행되므로, 대규모 트래픽 발생 시 특정 코어에 DPC 처리가 집중되면 해당 코어의 유저 스레드는 CPU를 할당받지 못해 심각한 지연(Latency)이 발생합니다. 이를 해결하기 위해 실무에서는 랜카드의 RSS(Receive Side Scaling) 기능을 활성화하여 하드웨어 인터럽트와 DPC ..
Windows 64-bit Calling Convention (호출 규약)
Windows 64-bit Calling Convention (호출 규약)
2026.02.271. 왜 알아야 할까? 릴리즈(Release) 빌드에서 서버가 죽었을 때, 범인을 찾기 위해서 금요일 밤 10시, 동시 접속자 5천 명인 서버가 갑자기 크래시(Crash)를 내며 죽었습니다. 남은 건 OS가 뱉어낸 메모리 덤프 파일(.dmp) 하나뿐입니다.Visual Studio나 WinDbg로 덤프를 엽니다. 소스 코드가 멈춘 줄은 가리키고 있는데, 변수 값을 확인하려고 마우스를 올려보면 이렇게 뜹니다. (최적화되어 값을 알 수 없음) 릴리즈 빌드는 속도를 위해 컴파일러가 변수들을 다 날려버리고 레지스터에 쑤셔 넣습니다.지역 변수 창을 봐도 다 쓰레기 값입니다. "도대체 어떤 유저가, 어떤 스킬을 쓰다가 죽은 건지" 알 길이 없습니다.이때 Calling Convention(호출 규약)을 알면, CPU..
컨텍스트 스위칭(Context Switching)에 대한 고찰, 정리
컨텍스트 스위칭(Context Switching)에 대한 고찰, 정리
2025.11.06서버 개발을 하다보면 필수적으로 알아야하고 단골 문제로 등장하는 손님이 있다.바로 컨텍스트 스위칭(context switching)인데, 잊어버리지 않도록 해당 포스팅에서 완벽하게 정리하려고 한다. 1. 컨텍스트 스위칭? 시분할 시스템 컨텍스트 스위칭의 개념은 멀티태스킹(Multitasking)을 구현하기 위해 탄생했다.초기 컴퓨터는 한 번에 하나의 작업(프로세스)만 처리할 수 있었는데,CPU의 처리 속도는 I/O(디스크 읽기, 네트워크 수신 등) 속도보다 압도적으로 빨랐다. CPU가 I/O 작업을 요청하고 응답을 기다리는 동안, CPU는 말 그대로 '아무 일도 하지 않고' 놀게 되었다.이러한 비효율을 해결하기 위해 시분할 시스템(Time-Sharing System)이 고안되었다. CPU의 시간을 매우 ..
[MySQL] ERROR 1418 (HY000) at line 5022: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) 해결 방법
[MySQL] ERROR 1418 (HY000) at line 5022: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) 해결 방법
2025.05.08SET GLOBAL log_bin_trust_function_creators = 1;
[프론트엔드] 움직이는 3D 카드 효과 만들기
[프론트엔드] 움직이는 3D 카드 효과 만들기
2025.03.13본 포스팅은 아래 코딩애플님의 동영상 '바로 쿠팡 취업가능한 포트폴리오 만들기'를 참고하여 작성하였습니다.https://youtu.be/YDCCauu4lIk?si=hYyzxZVK5CIwoprZ 0. 준비카드로 사용할 이미지 1장(images/3vx2.webp)HTML 파일(index.html) 1. 카드 이미지 파일 출력 2. 마우스 움직임에 따라 카드 이미지 회전 container영역에 마우스의 좌표(e.offsetX, e.offsetY)에 따라서 transform 속성을 줘서 카드 이미지를 회전시킨다.transform: 요소의 변형을 정의하는 CSS 속성입니다. 회전, 이동, 크기 조절, 기울임 등의 효과를 적용할 수 있습니다.perspective(350px): 3D 변형 효과를 줄 ..
Confluence REST API를 활용하여 페이지 작성/수정/삭제 하기
Confluence REST API를 활용하여 페이지 작성/수정/삭제 하기
2024.12.05실무에서 Confluence 문서 자동화가 필요하여 REST API에 대하여 간단하게 정리하였다.자신이 환경이 Cloud 환경이냐, 자체 서버냐에 따라 조금 다르므로 아래 링크들은 참고한다. API 문서* Cloudhttps://developer.atlassian.com/cloud/confluence/rest/v1/ The Confluence Cloud REST API developer.atlassian.com * 자체 서버https://docs.atlassian.com/ConfluenceServer/rest/8.5.0-m04/#api/admin/group-create https://docs.atlassian.com/ConfluenceServer/rest/8.5.0-m04/#api/admin/group-..
[Flutter] Cannot fit requested classes in a single dex file 에러 해결법
[Flutter] Cannot fit requested classes in a single dex file 에러 해결법
2024.05.22에러Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...ERROR:D8: Cannot fit requested classes in a single dex file (# methods: 78979 > 65536)com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:The number of method references in a .dex file cannot exceed 64K.Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html a..
[Flutter] Flutter 설치 및 기본 프로젝트 세팅
[Flutter] Flutter 설치 및 기본 프로젝트 세팅
2024.01.281. Flutter SDK 다운로드 Flutter SDK 다운로드 링크 2. 환경 변수 설정 "시스템 속성"을 열고 "고급" 탭으로 이동한 다음 "환경 변수"를 클릭합니다. "시스템 변수" 섹션에서 "Path"를 찾아 "편집"을 클릭합니다. "새로 만들기"를 클릭하고 Flutter SDK의 bin 디렉토리 경로를 추가합니다. 예: C:\src\flutter\bin 모든 창을 닫고 변경 사항을 저장합니다. 3. Flutter 도구 설치 Windows PowerShell을 열고 다음 명령어를 입력하여 Flutter 도구를 설치합니다. flutter doctor 4. Android Studio 설치 Android Studio 공식 웹사이트에서 Android Studio를 다운로드하고 설치합니다. Android..
파이썬 venv 모듈을 통해 가상 환경에서 프로젝트 생성하기
파이썬 venv 모듈을 통해 가상 환경에서 프로젝트 생성하기
2023.12.12venv? 파이썬의 venv 모듈은 가상 환경을 생성하여 프로젝트를 격리된 환경에서 개발하고 실행할 수 있게 해준다. 가상 환경을 사용하면 시스템에 설치된 파이썬 환경에 영향을 주지 않으면서, 특정 프로젝트에 필요한 라이브러리와 설정을 관리 할 수 있다. https://docs.python.org/ko/3/library/venv.html venv — Creation of virtual environments Source code: Lib/venv/ The venv module supports creating lightweight “virtual environments”, each with their own independent set of Python packages installed in their s..
파이썬으로 디스코드(Discord) 알림 메세지 봇 만들기(2)- 알림 메세지 전송
파이썬으로 디스코드(Discord) 알림 메세지 봇 만들기(2)- 알림 메세지 전송
2023.10.19이전 글 2023.10.19 - [Language/Python] - 파이썬으로 디스코드(Discord) 알림 메세지 봇 만들기(1) - 봇 생성 및 추가 파이썬으로 디스코드(Discord) 알림 메세지 봇 만들기(1) - 봇 생성 및 추가 00. 개요 개발자들 사이에서 많이 사용되고 있는 커뮤니케이션 앱 디스코드(Discord), 이 디스코드에 봇을 만들어 알림 메세지를 전송하고 싶은 경우가 생겨서 만들게 되었다. 01. 봇(Bot) 생성 및 추 cjwoov.tistory.com 00. 개요 이전 포스팅에서 디스코드 알림 봇을 만들기 위한 사전 생성 과정을 다뤄보았다. 이번에는 본격적으로 파이썬으로 알림 메세지를 전송하는 코드를 작성해보자. 01. 알림 메세지 전송 코드 작성 패키지 설치 파이썬에서 디스..
파이썬으로 디스코드(Discord) 알림 메세지 봇 만들기(1) - 봇 생성 및 추가
파이썬으로 디스코드(Discord) 알림 메세지 봇 만들기(1) - 봇 생성 및 추가
2023.10.1900. 개요 개발자들 사이에서 많이 사용되고 있는 커뮤니케이션 앱 디스코드(Discord), 이 디스코드에 봇을 만들어 알림 메세지를 전송하고 싶은 경우가 생겨서 만들게 되었다. 01. 봇(Bot) 생성 및 추가 1. 디스코드 개발자 포탈 접속 https://discord.com/developers/applications Discord Developer Portal — API Docs for Bots and Developers Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with. discord.com 2. 어플리케이션 생성(New Applic..