본문 바로가기

전체보기141

[2] Observer Pattern 옵저버 패턴이란 "자신의 상태"가 변했을 때 다른 Observer (Listener) 들에게 notify 할 수 있는 객체(주제)를 정의합니다. 한 객체의 상태가 바뀌면, 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 "일대다" 의존성을 정의합니다. 제가 처음에 이 옵저버 패턴을 공부했을 때 어려웠던 점이 옵저버 라는 이름에 너무 집착해서 어떤 대상이 다른 대상을 Observe, 즉 관찰하고 있어야 하는 것 아닌가? 라는 생각에 구독 주제가 되는 대상이 실제로 다른 대상들에게 알리는 메소드를 가지고 있는 것이 잘 이해가 되지 않았습니다. 각 객체간 소통을 할 때 객체에 정의되어 있는 메소드를 이용하는데, 옵저버 패턴에서는 "알리는 객체" 가 "구독하는 객체"의 메소드 하나만 알.. 2020. 10. 22.
[3] 스택 스택 자료구조에 대해 알아보고, 이를 직접 구현하며 자세히 알아보겠습니다. 스택은 자료구조의 한 종류로, 나중에 입력한 정보를 가장 먼저 꺼낼 수 있는 구조를 갖는 자료구조입니다. 이러한 구조를 LIFO (Last In First Out) 라고 합니다. 항상 넣은 순서의 반대로 꺼낼 수 있게 한쪽 방향이 막혀있습니다. Stack의 의미를 생각해보면, 무언가가 쌓여있는 것을 생각하게 되는데, 쌓여있는 것의 맨 마지막 것 부터 뺄 수 없는것과 같은 이치입니다. 스택을 구현한다는 것은, 한쪽으로만 꺼낼 수 있는 구조를 만들어 주는 것이라고 볼 수 있겠습니다. 구현 구현은 Array로 해도 되고 Linked List로 해도 되지만, 이 글에선 Linked List를 이용하여 구현합니다. typedef struc.. 2020. 10. 20.
[1] SQL 처리 과정과 I/O 이 글은 [친절한 SQL 튜닝] 을 학습하고 정리한 글입니다. 1.1 SQL 파싱과 최적화 SQL은 집합적이고 선언적인 질의 언어이기 때문에, 질의를 통해 결과 집합을 얻게 됩니다. 그런 결과 집합을 얻기 위해서는 절차적인 과정이 필요한데, 이 과정을 SQL 옵티마이저가 대신해줍니다. "SQL 최적화" 란 DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정을 의미합니다. 실제 최적화 과정을 세분화 하면 다음과 같습니다 1. SQL 파싱 - SQL Parser가 파싱을 수행합니다 2. SQL 최적화 - Optimizer가 미리 수집한 시스템 및 오브젝트 통계정보를 바탕으로 다양한 실행경로를 생성한 후 비교하여 가장 효율적인 방식을 선택합니다. (데이터베이스 성능의 핵심) 3.. 2020. 10. 20.
[1] Reactor Pattern 리액터 패턴이란 동시적으로 발생하는 I/O 혹은 이벤트들을 서비스 핸들러를 통해 Demultiplexing하고 그 결과들을 각각의 할당된 Request Handler 를 통해 수행하는 패턴입니다. 우선 이 패턴에 대해서 알아보기 전에, 필요한 사전 개념들과 시나리오에 대해 이야기 해봅시다. Blocking I/O 일반적인 Blocking I/O 에서는 해당 작업이 수행될때까지 프로세스나 쓰레드가 작업을 멈추고 기다립니다. 그러다보니, Blocking I/O로 구현된 웹 서버는 여러 요청을 하나의 쓰레드에서 수행할 수 없게 됩니다. 대표적인 예로 버전 2.x Django가 있습니다. (3.0부터는 코루틴 방식으로 비동기 프로그래밍이 가능하다고 합니다) Blocking I/O를 사용한 채로 여러 요청들을 동.. 2020. 10. 19.