2024/06 27

리액티브. (2024-06-28)

1. 리액티브 스트림즈의 구현 규칙리액티브 스트림즈 표준 사양에는 리액티브 스트림즈 컴포넌트를 어떻게 구현해야 되는지에 대한 규칙들이 컴포넌트별로 정의되어있다. 우리가 리액티브 스트림즈를 구현해서 직접 라이브러리를 제작하는 것이 아니기 때문에 모든 규칙들을 살펴보진 않는다. 다만 이미 구현된 리액티브 스트림즈 구현체를 올바르게 이해하고 제대로 사용하기 위해서 리액티브 스트림즈의 기본적인 구현 규칙은 알고 있는 것이 좋다. 번호규칙1Publisher가 Subscriber에게 보내는 onNext signal의 총 개수는 항상 해당 Subscriber의 구독을 통해 요청된 데이터의 총 개수보다 더 작거나 같아야 한다.2Publisher는 요청된 것보다 적은 수의 onNext signal을 보내고 onCompl..

TIL(사전캠프) 2024.06.28

리액티브. (2024-06-27)

1. 리액티브 스트림즈 관련 용어 정의리액티브 스트림즈에 대한 이야기를 진행하면서 Publisher, Subscriber, Subscription, Processor, 데이터 통지, 구독 해지 등 리액티브 스트림즈에서 사용하는 다양한 용어들을 언급했다. 이 외에도 자주 사용하는 중요한 용어들이 더 있다. 이 용어들에 대해 간단히 살펴보자 SignalSignal은 우리말로 '신호'라는 의미인데, 리액티브 스트림즈에서 Signal은 Publisher와 Subscriber간에 주고받는 상호작용을 신호, 즉 Signal이라고 표현한다. 리액티브 스트림즈의 인터페이스 코드에서 볼 수 있는 onSubscribe, onNext, onComplete, onError, request 또는 cancel 메서드를 리액티브 ..

TIL(사전캠프) 2024.06.27

리버싱. (2024-06-27)

1. 디버거 좀 더 능숙하게 다루기1.1 디버거 명령어아래의 추가적인 디버깅 명령어를 사용해보자(Code Window에서 동작함)1.2 베이스 캠프디버거를 재실행할 때마다 처음(EP 코드)부터 새로 시작하기 때문에 상당히 불편하다. 그래서 중요 포인트(주소)를 지정해 놓은 후 그 포인트로 빠르게 갈 수 있는 방법을 기록한다. 큰 파일을 분석할 때는 시간이 며칠씩 소요되기 때문에 이러한 캠프를 군데군데 잘 설치해두면 아주 편리하게 디버깅 작업을 할 수 있다. 40104F 주소를 베이스캠프로 설정하겠다. 1. Goto 명령베이스캠프 주소(40104F)를 기억하고 Go to[Ctrl+G] 명령으로 가는 것이다. 그림2.11의 다이얼로그에 40104F 주소를 입력 후 OK 버튼을 누른다.그림2.11 Go to ..

TIL(사전캠프) 2024.06.27

리액티브 스트림즈(2024-06-26)

1. 코드로 보는 리액티브 스트림즈 컴포넌트 1.1 Publisher코드2-1 Publisher 인터페이스코드 2-1은 Publisher 인터페이스 코드인데, 코드 형태는 subscribe 메서드 하나만 구현하면 되는 수준으로 매우 단순하다. subscribe 메서드는 파라미터로 전달받은 Subscriber를 등록하는 역할을 한다. 그런데 Publisher 인터페이스 코드를 보면서 다음과 같은 의문이 들 수 있다. 'Publisher는 데이터를 생성하고 통지하는 역할을 하고, Subscriber는 Publisher가 통지하는 데이터를 전달받기 위해 구독을 한다고 이해했는데, 왜 Subscriber가 아닌 Publisher에 subscribe 메서드가 정의되어 있는가?' Kafka같은 메시지 기반 시스템에..

TIL(사전캠프) 2024.06.26

리액티브 스트림즈(Reactive Streams) (2024-06-25)

1. 리액티브 스트림즈(Reactive Streams)란?개발자가 리액티브 코드를 작성하기 위해서는 이러한 코드 구성을 용이하게 해주는 리액티브 라이브러리가 있어야 한다. 이 리액티브 라이브러리를 어떻게 구현할지 정의해 놓은 표준 사양을 바로 리액티브 스트림즈라고 한다.  리액티브 스트림즈는 '데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하기 위한 리액티브 라이브러리의 표준 사양'이라고 표현할 수 있다.2. 리액티브 스트림즈 구성요소리액티브 스트림즈를 통해 구현해야 하는 API 컴포넌트에는 Publisher, Subscriber, Subscription, Processor가 있다. 그림 2-1을 통해 컴포넌트들이 구체적으로 어떻게 동작하는지 진행 과정을 살펴보자(Processor는..

TIL(사전캠프) 2024.06.25

1. 리액티브 시스템과 리액티브 프로그래밍 (2024-06-25)

1. 리액티브 프로그래밍 코드 구성우리가 실제로 작성하는 리액티브 프로그래밍 코드는 크게 Publisher, Subscriber, Data Source, Operator 등으로 구성된다. - Publisher : 발행자, 게시자, 생산자, 방출자 등 여러 가지 용어를 사용하지만 공통점은 입력으로 들어오는 데이터를 제공하는 역할을 한다는 것이다. - Subscriber : Publisher가 제공한 데이터를 전달받아 사용하는 주체이다. 구독자라고도 불리며 생산자의 반대 의미로 데이터를 소비하는 소비자라고도 불린다.  - Data Source : Publisher의 입력으로 들어오는 데이터를 대표하는 용어이다. 리액티브 프로그래밍에서는 Data Stream이라고도 표현한다. 엄밀히 따지면 둘의 의미는 조금 ..

TIL(사전캠프) 2024.06.25

리액티브 시스템 (2024-06-24)

1. 리액티브 시스템이란?1. 리액티브 시스템은 반응을 잘하는 시스템이다. 2. 리액티브 시스템에서 반응을 잘한다는 것은 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화한다는 것이다.2. 리액티브 선언문으로 리액티브 시스템 이해하기1. 리액티브 선언문은 리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징이다. MEANS : 리액티브 시스템에서 주요 통신 수단으로 무엇을 사용할 것인지 표현한 것이다. 그림에 나와 있는 비동이 메시지 기반의 통신을 통해 구성요소들 간의 느슨한 결합, 격리성, 위치 투명성을 보장한다. FROM : 메시지 기반 통신을 통해서 어떠한 형태를 지니는 시스템으로 형성되는지를 나타낸다. 그림에서는 리액티브 시스템이 비동기 메시지 통신기반하에 탄력성과..

TIL(사전캠프) 2024.06.24

리버싱2. 20~22(2024-06-21)

1. main() 함수 찾기F7 명령으로 한 줄씩 내려오다보면 또 402524주소의 어떤 함수를 호출한다.(빨간색 표시) F7로 들어가보자  402524 함수는 main()가 아닐것이다. 왜냐하면 MessageBox() API 호출 코드가 보이지 않기 때문이다. 다시 Ctrl+F9으로 함수탈출을 하자 지금부터 쭉 F7로 한 줄씩 실행하며 함수를 호출할 경우 들어가보고 main()인지 판단하고 아니면 다시 나가는 패턴을 계속해보자 계속 내려가다보면 4010E4 주소의 CALL 명령이 보인다. 이 명령어는 Win32 API 호출코드이다. 지금 단계에서는 따라 들어갈 필요가 없으니 넘어간다.계속 실행하다 보면 401144 주소에 CALL HelloWor.00401000 명령이 있다. 여기를 실행해보자 Mes..

TIL(사전캠프) 2024.06.21

SQL 코드카타. 개와 고양이는 몇 마리 있을까(2024-06-20)

문제 요약 : 고양이와 개 각각의 숫자를 조회한다. 그리고 고양이를 개보다 먼저 조회한다. 문제 풀이) 기본적인것은 생략하겠다. 1. ANIMAL_TYPE과 개 고양이 각각의 숫자를 출력해야 한다.2. count(*)는 레코드의 개수를 구하는 함수이다. 개와 고양이별로 구해야 하므로 GROUP BY 를 통해 동물 그룹중에서 count를 한다.3. ORDER BY CASE WHEN은 ANIMAL_TYPE이 'Cat'이라면, 즉 고양이라면 1첫번째로 아니면 후순위로 출력하게 하였다.

TIL(사전캠프) 2024.06.20

리버싱1. 13 ~ 20(2024-06-20)

1. Hello World! 프로그램Hello World! 프로그램으로 첫 디버깅 실습을 한다. 먼저 실습예제의 코드는 이렇게 되어있다.이 코드를 실행파일로 만든다. 실행파일을 만든다는 것은 사람이 이해하기 쉬운언어인 C언어(HelloWorld.cpp)를 컴퓨터가 이해하기 쉬운 언어인 기계어(HelloWorld.exe)로 변환하는 것이다. 기계어는 사람이 알아보기 어렵기 때문에 디버거(Debugger) 유틸리티를 사용한다. 디버거에 탑재된 디스어셈블러(Disassembler) 모듈은 이 기계어를 어셈블리(Assembly) 언어로 번역해서 보여준다. * 어셈블리 언어는 CPU에 종속되어 있다. Intel x86 계열의 CPU와 ARM 계열의 CPU는 서로 어셈블리 명령어의 형태가 다르다.1. 디버깅 목표H..

TIL(사전캠프) 2024.06.20