개인학습
GZIP의 압축 방식
GZIP리눅스에서 주로 사용되는 압축 방식으로 HTTP 요청을 주고 받는과정에서도 gzip 알고리즘을 사용하여 그 size를 줄이기도 한다.이러한 GZIP의 알고리즘에는 LZ77 알고리즘과 Huffman Coding 이 사용된다.LZ77 알고리즘문자열에서 반복되는 패턴을 찾아서 Back Reference 형태로 저장하여 중복을 제거하는 알고리즘이다. LZ77은 원본 데이터를 offset, length, next char이라는 세 가지 요소로 구성된 형식의 토큰으로 변환한다. 변환 과정에서는 Sliding Window 기법을 사용하는데, 해당 기법을 사용하면서 동시에 과거의 문자열을 저장하는 Search Buffer와 현재 읽을 데이터를 저장하는 Lookahead Buffer를 사용한다. ABABBCABA..
OAuth
OAuth가 정의하는 4가지 Roles Resource Owner Protected Resource로 접근할 수 있는 entity를 말한다. 즉 보호된 자원 또는 데이터에 대한 소유자 혹은 사용자를 의미한다. 현재 프로그램을 개발중이고, OAuth를 해당 프로그램에 적용하는 중이라면, Resource Owner는 프로그램을 사용하는 유저라고 생각하면된다. Resource Server Server는 protected resource 를 호스팅하며 protected resource로의 접근을 돕는 역할을 한다. 트위터 서버가 사용자의 트윗과 프로필 정보와 같은 자원을 호스팅하는 것을 그 예시로 들 수 있다. Client protected resource request를 생성하며, 사용자 혹은 자원 소유자의 ..
MVC 패턴
MVC 패턴이란 MVC 패턴은 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나를 의미한다. Model - View - Controller의 약자이며 기능 별로 코드를 분리하여 유지보수를 쉽게 하고 확장성과 재사용성을 강화할 수 있다는 장점을 가지고 있다. 각 모듈들의 상관관계를 그림으로 나타내면 아래와 같다. Model 모델은 `데이터를 저장, 검색, 업데이트`하고 변경 사항을 관리하는 역할을 한다. 일반적으로 `View나 Controller에 대한 직접적인 참조를 가지지 않아야` 한다. View `사용자의 인터페이스`를 담당하며, 데이터를 시작적으로 표현하는 기능을 한다. 사용자가 정보를 보고 상호작용을 하는 부분으로, 데이터를 `모델에서 가져와 표시`하는 역할을 한다. View는 `사용자가 입력한 ..
Linear-time Temporal Logic guided Greybox Fuzzing 정리
이 글은 Linear-time Temporal Logic guided Greybox Fuzzing 논문을 바탕으로 정리한 것입니다. Abstract 소프트웨어 모델 체킹 및 런타임 체킹은 소프트웨어 시스템의 시간적인 속성을 확인하기 위해 널리 사용되는 기술이다. 이러한 기술은 주로 '버그 찾기' 즉, 시간적인 속성 위반을 찾는 실제 응용에서 주로 사용된다. 이 논문은 선형 시간 시계열 논리, 즉 LTL 속성 위반을 찾기 위한 그레이박스 fuzzing framework에 대해 소개하고 있다.해당 프레임워크는 C/C++ 로 작성된 순차 프로그램과 LTL 속성을 입력으로 받는다. 이후 상태를 가진 소프트웨어 시스템에서 LTL 속성 위반 또는 counterexample trace를 찾는다. 하지만 이 자체로 검..
(TIL) Model Checking
이 게시글은 크티스텔 바이어의 Principles of Model Checking을 학습한 내용을 정리한 것입니다. 소프트웨어 검증의 필요성 소프트웨어를 개발할 때, 30~50%의 비용은 소프트웨어를 테스트하는데 소모된다. 그만큼, 소프트웨어가 버그가 없는지 확인하는 과정은 제품을 출시함에 있어 매우 중요한 과정이다. 왜냐하면, 소프트웨어에서 버그는 빨리 찾을 수록 미래에 발생할 수 있는 어마어마한 비용을 절감할 수 있기 때문이다. 실제로 소프트웨어의 결함을 고치는데 사용되는 비용은 maintenance 과정에서 버그픽스가 이루어질 경우 design phase에서에 비하여 약 500배의 비용이 소모된다고 한다. 이러한 비용적 측면에서, 소프트웨어를 미리 철저하게 검증하는 과정이 중요함은 너무나 명실상부하..