우용이 블로그 우용이 블로그
(python) 세마포어와 뮤텍스

(python) 세마포어와 뮤텍스

세마포어와 뮤텍스 비동기(Asynchronous) 환경에서는 여러 작업이 동시에 실행되는 것 처럼, 또는 실제로 동시에 실행되도록 사용자에게 보여진다. 이때 개발자가 겪게 되는 가장 큰 문제는 공유 자원(shared resource)에 대한 경쟁 상태(Race Condition)이 발생하게 되는 경우다. 세마포어, 뮤텍스는 이 문제를 해결하기 위해 존재하는 로직이다. 동기화가 필요한 이유 여러 비동기 작업이 같은 변수, 파일, 데이터베이스, 네트워크 소켓 등에 접근할 경우 실행 순서를 정해주지 않으면 아래의 문제가 발생된다. 데이터 손상 중복 처리 앱 크래시 등등 count = 0 async def increase(): global count temp = count await asyncio.sleep(0.1) count = temp + 1 위 예시에서, 사용자가 많아져 동시에 여러 increase()가 실행되면 count 값이 기대한 결과보다 작아지는 경우가 발생하게 된다. 이것을
(FridaLabs) FridaLabs - 0xb, Patching instructions using X86Writer and ARM64Writer

(FridaLabs) FridaLabs - 0xb, Patching instructions using X86Writer and ARM64Writer

FridaLabs - 0xb, Patching instructions using X86Writer and ARM64Writer https://github.com/DERE-ad2001/Frida-Labs GitHub - DERE-ad2001/Frida-Labs: The repo contains a series of challenges for learning Frida for Android Exploitation. The repo contains a series of challenges for learning Frida for Android Exploitation. - DERE-ad2001/Frida-Labs github.com Android NDK(Native Development Kit)를 사용하면 개발자는 C, C++ 언어로 작성된 네이티브 코드를 Android 어플리케이션에 추가할 수 있다. 이러한 네이티브 코드는 라이브러리 또는 공유 라이브러리(.so)와 같은 번들 형태로 제공
(FridaLabs) FridaLabs - 0xa, Calling a native function

(FridaLabs) FridaLabs - 0xa, Calling a native function

FridaLabs - 0xa, Calling a native function https://github.com/DERE-ad2001/Frida-Labs GitHub - DERE-ad2001/Frida-Labs: The repo contains a series of challenges for learning Frida for Android Exploitation. The repo contains a series of challenges for learning Frida for Android Exploitation. - DERE-ad2001/Frida-Labs github.com Android NDK(Native Development Kit)를 사용하면 개발자는 C, C++ 언어로 작성된 네이티브 코드를 Android 어플리케이션에 추가할 수 있다. 이러한 네이티브 코드는 라이브러리 또는 공유 라이브러리(.so)와 같은 번들 형태로 제공되므로 성능이 중요한 구성 요소를 최적화하고, 개발
(FridaLabs) FridaLabs - 0x9, Changing the return value of a native function

(FridaLabs) FridaLabs - 0x9, Changing the return value of a native function

FridaLabs - 0x9, Changing the return value of a native function https://github.com/DERE-ad2001/Frida-Labs GitHub - DERE-ad2001/Frida-Labs: The repo contains a series of challenges for learning Frida for Android Exploitation. The repo contains a series of challenges for learning Frida for Android Exploitation. - DERE-ad2001/Frida-Labs github.com Android NDK(Native Development Kit)를 사용하면 개발자는 C, C++ 언어로 작성된 네이티브 코드를 Android 어플리케이션에 추가할 수 있다. 이러한 네이티브 코드는 라이브러리 또는 공유 라이브러리(.so)와 같은 번들 형태로 제공되므로 성능이
(FridaLabs) FridaLabs - 0x8, Introduction to native hooking

(FridaLabs) FridaLabs - 0x8, Introduction to native hooking

FridaLabs - 0x8, Introduction to native hooking https://github.com/DERE-ad2001/Frida-Labs GitHub - DERE-ad2001/Frida-Labs: The repo contains a series of challenges for learning Frida for Android Exploitation. The repo contains a series of challenges for learning Frida for Android Exploitation. - DERE-ad2001/Frida-Labs github.com Android NDK(Native Development Kit)를 사용하면 개발자는 C, C++ 언어로 작성된 네이티브 코드를 Android 어플리케이션에 추가할 수 있다. 이러한 네이티브 코드는 라이브러리 또는 공유 라이브러리(.so)와 같은 번들 형태로 제공되므로 성능이 중요한 구성 요소를 최적화하
(Charles) Charles Proxy / iOS 프록시 환경 구성

(Charles) Charles Proxy / iOS 프록시 환경 구성

시작하기에 앞서, 해당 포스트에서 사용할 컴퓨터 및 모바일 단말의 환경은 아래와 같으니 참고 부탁드립니다. PC: MacOS 15 Mobile: Samsung Android 16 개요 Charles Proxy는 클라이언트(웹, 모바일 앱)와 서버 사이에서 HTTP(S) 트래픽을 가로채 분석할 수 있는 웹 프록시 도구이다. 네트워크 요청의 흐름을 이해하거나, API 호출 문제를 추적하거나, 앱의 네트워크 품질 등을 점검할 때 자주 사용되는 도구이다. 주요 기능 자주 사용되는 기능은 아래와 같다. 트래픽 캡처 모든 요청 및 응답을 세부적으로 확인할 수 있다. JSON, XML, HTML 등 다양한 데이터 포맷을 확인할 수 있다. SSL Proxying HTTPS 트래픽도 확인할 수 있도록, Charles가 자체 SSL 인증서를 설치해 암호화된 데이터를 복화하 한다. 앱이나 웹의 HTTPS 요청 내용도 분석할 수 있다. Throttling (네트워크 속도 조절) 3G, LTE, Wi-Fi
(데이터베이스) CASE WHEN

(데이터베이스) CASE WHEN

CASE WHEN CASE WHEN은 SQL에서 조건부 로직을 처리하는 구문이다. if else 문과 유사하다. CASE WHEN의 주요 사용 시나리오 1) 조건에 따른 값 변환 컬럼 값을 조건에 따라 다른 값으로 변환할 때 사용할 수 있다. SELECT user_name, CASE WHEN age < 18 THEN '미성년자' WHEN age < 65 THEN '성인' ELSE '고령자' END AS age_group FROM users; 2) 집계 함수와 함께 사용 조건별 집계를 수행할 때 사용한다. SELECT COUNT(*) AS total, SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count, SUM(CASE WHEN status = 'inactive' THEN 1 ELSE 0 END) AS inactive_count FROM users; 3) ORDER BY 절에서 동적 정렬 조건에 따라 정렬 기준을 변경
(일상정보) 행복주택 당첨 과정 및 예비자 대기기간 유추 방법

(일상정보) 행복주택 당첨 과정 및 예비자 대기기간 유추 방법

행복주택 행복주택은 청년의 주거 안정을 위해 대중 교통이 편리하거나 직주 근접이 가능한 곳에 국가 재정과 국민주택기금을 지원받아 시중 시세보다 저렴하게 공급하는 공공주택이다. 여기서 핵심은 "저렴하게" 인데, 도저히 지방 사람으로써는 이해하기 힘든 서울 및 경기 월세를 보고 행복주택을 보게 되면 저절로 행복해질 수 밖에 없는 가격이기에 반드시 들어가겠다는 일념으로 서울로 상경하고나서부터 계속해서 지원했다. 지원자가 만나게 될 여러가지 케이스들 수없이 많이 지원한 나는 행복주택을 지원하게 되는 사람들이 겪게 되는 거의 대부분의 케이스를 경험한 것 같다. 서류 불합 서류 합 서류 부적격 (서류를 제출하지 않았을 시 포함) 서류 제출 완료 (서류 제출 후 입주 자격 조회) 미선정 예비자 선정(당첨) 신청 방법 https://apply.lh.or.kr/lhapply/apply/wt/wrtanc/selectWrtancList.do?mi=1026 LH청약플러스 LH청약플러스 apply.lh.o
(Charles) Charles Proxy / 안드로이드 프록시 환경 구성

(Charles) Charles Proxy / 안드로이드 프록시 환경 구성

시작하기에 앞서, 해당 포스트에서 사용할 컴퓨터 및 모바일 단말의 환경은 아래와 같으니 참고 부탁드립니다. Host OS: Windows 11, MacOS 15 Mobile: Samsung Android 16 개요 Charles Proxy는 클라이언트(웹, 모바일 앱)와 서버 사이에서 HTTP(S) 트래픽을 가로채 분석할 수 있는 웹 프록시 도구이다. 네트워크 요청의 흐름을 이해하거나, API 호출 문제를 추적하거나, 앱의 네트워크 품질 등을 점검할 때 자주 사용되는 도구이다. 주요 기능 자주 사용되는 기능은 아래와 같다. 트래픽 캡처 모든 요청 및 응답을 세부적으로 확인할 수 있다. JSON, XML, HTML 등 다양한 데이터 포맷을 확인할 수 있다. SSL Proxying HTTPS 트래픽도 확인할 수 있도록, Charles가 자체 SSL 인증서를 설치해 암호화된 데이터를 복화하 한다. 앱이나 웹의 HTTPS 요청 내용도 분석할 수 있다. Throttling (네트워크 속도 조
(iOS) dopamine를 이용한 iOS 탈옥

(iOS) dopamine를 이용한 iOS 탈옥

탈옥 iOS도 안드로이드에서와 마찬가지로 사용자가 임의로 시스템 파일을 건드려서 휴대폰이 벽돌이 되는 것을 막기 위해 루트 권한을 기본적으로 차단한다. 아이폰 탈옥(Jailbreak)은 iOS 기기의 제한을 해제하여 사용자가 시스템의 루트 권한을 획득할 수 있게 해주는 과정을 의미한다. 탈옥 도구의 종류는 아래와 같다. 하드웨어 취약점을 이용한 탈옥 하드웨어(칩셋) 취약점을 이용하여 탈옥을 수행한다. 대표 도구는 아래와 같다. checkera1n checkm8 소프트웨어 취약점을 이용한 탈옥 iOS 시스템(커널, 권한 관리, 코드 서명 등)의 취약점을 이용하여 탈옥을 수행한다. 주로 앱 실행, Safari 웹킷 취약점, 커널 취약점을 이용한다. 대표 도구는 아래와 같다. unc0ver Taurine palera1n Dopamine 필자가 탈옥에 사용한 환경은 다음과 같다. Host OS: MacBook M1 Air Device: iPhone 7 (OS 15.3.1) 탈옥을 하기 전,
(numpy) np.clip

(numpy) np.clip

np.clip numpy.clip(arr, a_min, a_max, out=None) 배열의 값이 지정한 최소값과 최대값을 벗어나지 않도록 잘라내는(clip) 함수이다. 벡터 또는 배열의 각 원소가 주어진 범위 내에 있도록 제한한다. Parameter arr: 입력 배열 a_min: 최소값 (이 값보다 작은 값들은 모두 a_min 값으로 바뀜) a_max: 최대값 (이 값보다 큰 값들은 모두 a_max 값으로 바뀜) out: 결과를 저장할 배열 Example arr = np.array([1, 5, 10, 15]) clipped = np.clip(arr, 3, 12) print(clipped) # [ 3 5 10 12 ]
(javascript) 콜백 함수

(javascript) 콜백 함수

콜백 함수 자바스크립트에서 함수는 객체이다. 그리고 함수의 파라미터로 객체를 전달할 수 있다. 이런 특징 때문에 아래와 같이 함수 내부에서 파라미터로 넘겨받은 다른 함수를 실행할 수 있게 된다. function foo(callback) { callback(); } 자바스크립트에서는 이 방식을 콜백 함수라고 부른다. 콜백 함수의 사용 이유 일반적으로 거의 대부분의 코드는 위에서 아래로 순차적으로 실행된다. 하지만 필드에서는 우리가 원하는 방식처럼 순차적으로 실행되지 않는다. 이처럼 순차적으로 실행되지 않는 것을 고려한 프로그래밍을 비동기 프로그래밍이라고 부른다. 콜백은 비동기 프로그래밍의 핵심이다. 콜백은 특정 Task가 끝나기 전에 함수가 실행되지 않는 것을 반드시 보장한다. function foo(callback) { // 특정 Task 수행 console.log("Task 수행"); // Task 수행 완료 후 callback 함수 실행 callback(); } 이런 특징 덕분에
(javascript) 함수 호출 방식에 따른 this 바인딩

(javascript) 함수 호출 방식에 따른 this 바인딩

함수 호출 방식에 따른 this 바인딩 this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수이다. this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메소드를 참조할 수 있다. 단, this가 가리키는 값(this 바인딩)은 함수 호출 방식에 의해 동적으로 결정된다. 함수 호출 방식 자바스크립트에서 함수는 아래와 같이 주로 4가지 방식으로 호출이 가능하다. 일반 함수 호출 메소드 호출 생성자 함수 호출 Function.prototype.apply/call/bind 메소드에 의한 간접 호출 일반 함수 호출 기본적으로 this는 전역 객체를 바인딩된다. function foo() { console.log('foo의 this: ', this); // window function bar() { console.log('bar의 this: ', this); // window } bar(); } foo(); 하지만 메소드 내에서 정의한 중첩
(pytest) fixture와 conftest

(pytest) fixture와 conftest

fixture와 conftest Fixture Fixture는 다음과 같은 의미를 가지고 있다. 시스템의 필수 조건을 만족하는 테스트 프로세스를 설정하는 것 같은 설정의 테스트를 쉽게 반복적으로 수행할 수 있도록 도와주는 것 요약하자면, 수행할 테스트에 있어 반복적으로 사용하는 부분들을 가지고 있는 코드를 의미한다. 예를들어 다음과 같은 코드가 있다고 해보자. class Calculator(object): """Calculator class""" def __init__(self): pass @staticmethod def add(a, b): return a + b @staticmethod def subtract(a, b): return a - b @staticmethod def multiply(a, b): return a * b @staticmethod def divide(a, b): return a / b 위 클래스의 모든 함수에 대해 테스트 코드를 작성해야 한다면 아래와 같이 작
(vm) Virtual Box Installer Fatal Error

(vm) Virtual Box Installer Fatal Error

간헐적으로 최신 OS(Windows 11)에서 발생하는 것으로 보인다. 이 문제를 해결하기 위해서는 아래 링크에서 Microsoft Virtual C++ 재배포 가능 패키지를 설치하자. 지원되는 최신 Visual C++ 재배포 가능 패키지 다운로드 이 문서에는 최신 버전의 Visual C++ 재배포 가능 패키지에 대한 다운로드 링크가 나열되어 있습니다. learn.microsoft.com 이후 컴퓨터를 재부팅 시킨 후 VirtualBox 재설치를 시도하면 설치가 완료되는 것을 볼 수 있다.
(데이터 과학) MCP 서버 개요 및 Selenium MCP 서버 구축 예제

(데이터 과학) MCP 서버 개요 및 Selenium MCP 서버 구축 예제

Model Context Protocol(MCP) MCP 서버는 인공지능 모델의 컨텍스트(Context)를 관리하고 최적화하는 프로토콜을 구현한 서버를 의미한다. 간단히 말해서, MCP는 AI 모델이 사용자의 일을 도와주는 방식을 표준화한 규칙을 저장 및 제공해주는 서버 정도로 이해하면 될 것 같다. MCP 아키텍처의 주요 구성 요소는 다음과 같다. 어플리케이션(Application): LLM 기반 어플리케이션 Claude, Cursor, Github Copilot... 사용자와 직접 상호 작용 컨텍스트 관리 클라이언트(Client): 서버와 1:1 연결 담당 요청 전송 및 응답 수신 연결 상태 관리 서버(Server): 특정 기능이나 리소스 등을 제공 LLM과의 상호작용을 위한 최적화된 탬플릿 프롬프트 생성 LLM이 작업을 수행하도록 요청 처리 및 결과 반환 MCP 서버를 사용하면 아래와 같은 장점을 얻을 수 있다. 프로젝트 구성원들이 같은 함수 및 탬플릿 프롬프트를 사용하므로 일
(React) useState 개요 및 예시

(React) useState 개요 및 예시

useState 개요 state는 변수 대신 사용하는 React 만의 데이터 저장 공간이며, 문자, 숫자, array, object 모두 저장할 수 있다는 특징을 가진다. 변수 대신 state를 사용하여 데이터를 저장해놓는 이유는 웹이 마치 App과 같이 동적으로 동작하게 만들기 위함이다. state를 사용하지 않는다면 글 제목을 수정하거나 순서를 바꿀 때마다 변경 사항을 임의의 공간에 번거롭게 보관해야 하고, 일일이 반영해야 하는 과정을 거쳐야 하지만 state를 사용하게 된다면 state가 변경될 때 마다 HTML이 자동으로 재 랜더링되어 사용자에게 마치 앱처럼 새로고침 없이도 부드럽게 바뀌는 것과 같은 경험을 줄 수 있다. 이런 특징 때문에 state는 자주 바뀌며 중요한 데이터를 보관해야 할 때 주로 사용한다. useState Hook useState는 React의 기본 Hook 중 하나이다. useState hook은 함수형 컴포넌트에서 상태(state)를 관리할 수 있게
(딥 러닝) Batch Normalization을 사용하는 이유

(딥 러닝) Batch Normalization을 사용하는 이유

Batch Normalization 배치 정규화는 딥 러닝 학습 시 심심치 않게 사용되곤 한다. GELU와 같은 활성 함수에서도 사용되는 것을 볼 수 있고 (딥 러닝) 은닉층 활성 함수 / GELU 함수 기울기 소멸 문제를 해결하기 위해서 깊은 신경망 구조에서는 ReLU 활성 함수를 사용하는 것이 일반적이... blog.naver.com 합성곱 신경망 구현 코드에서도 자주 볼 수 있다. (딥 러닝) 합성곱 신경망 / VGGNet 개요 VGGNet은 2014년 ILSVRC(ImageNet Large Scale Visual Recognition Challenge) 대회... blog.naver.com 배치 정규화(Batch Normalization)의 수학적 정의는 다음과 같이 내릴 수 있다. 수학적으로 뭔가를 하는 것 같은데, 이를 요약하면 2가지 과정을 수행하는 거라고 생각하면 편할 것 같다. normalization (정규화) scale and shift (조정) 배치 정규화를 사
(Jmeter) Apache Jmeter 개요, 환경 구성 및 실행

(Jmeter) Apache Jmeter 개요, 환경 구성 및 실행

Jmeter Jmeter는 웹 어플리케이션이나 API와 같은 시스템의 성능과 부하를 테스트할 때 주로 사용된다. 특히, 어플리케이션이 높은 사용자 트래픽에 대해 얼마나 안정적으로 동작하는 지를 검증할 때 주로 사용된다. 주로 다음과 같은 상황에서 사용된다. 부하 테스트(Load Testing) 시스템에 다수의 사용자가 동시에 접속했을 때 응답 시간이 어떻게 변화하는지 확인할 수 있다. 웹 서버, DB, API 등 다양한 시스템에 부하를 가중하여 시스템의 한계를 확인할 수 있다. 예를 들어, 특정 앱에 10000명의 사용자가 동시에 접속해 결제를 시도할 때 성능이 유지되는 지를 테스트 하는 상황에서 유용하게 쓰일 수 있다. 스트레스 테스트(Stress Testing) 시스템이 평상시 처리량보다 높은 트래픽을 받았을 때 성능이 어떻게 저하되는지, 그리고 어느 시점에서 시스템이 응답을 멈추는지를 확인할 수 있다. 의도적으로 평상시 이상의 부하를 걸어, 시스템의 최대 처리 한계를 테스트하고
(Android) Frida 클라이언트 기본 명령어

(Android) Frida 클라이언트 기본 명령어

Frida Frida는 동적 분석(Dynamic Instrumentation) 도구로, 주로 리버스 엔지니어링, 디버깅, 테스트 등을 목적으로 사용된다. 특히 안드로이드 환경에서 널리 사용되며, 앱의 실행 중인 프로세스에 직접 접근하여 내부 동작을 조작하거나 분석할 수 있다. 주로 어플리케이션의 동작을 실시간으로 모니터링하거나, 특정 기능을 후킹(Hooking)하여 수정하는 데 사용된다. 주요 기능은 다음과 같다. 동적 분석 앱이 실행 중인 동안에 특정 함수나 메소드 호출을 후킹하여, 그 동작을 관찰하거나 변경할 수 있다. 암호화된 데이터를 가로채거나, 네트워크 요청을 변경할 수 있다. 스크립트 작성 기능 JavaScript를 이용하여 어플리케이션의 코드를 동적으로 수정하거나 후킹할 수 있다. API 호출 모니터링 앱이 어떤 API를 호출하는지 실시간으로 모니터링하고 분석할 수 있다. 환경 설정이 아직 안되어 있다면 아래 포스트를 참고하여 구성하고 오도록 하자. https://blo
ⓒ 2022 [우용이 블로그] All rights reserved.
Supported by Keyzard