본문 바로가기

분류 전체보기381

POSA2, Double-Checked Locking Optimization 패턴 이 녀석도 그렇게 대단한 놈은 아니지만, 멀티 스레드 환경에서 Singleton 을 사용하는 경우라면 꼭 기억해 둘 필요가 있겠다. 내 경우 Delphi 에서 보통 다음처럼 Singleton 을 작성한다. TSingleton = class protected class var Instance: TSingleton; constructor Create; destructor Destroy; override; public class function GetInstance: TSingleton; class procedure ReleaseInstance; end; { TSingleton } constructor TSingleton.Create; begin inherited; end; destructor TSinglet.. 2012. 4. 9.
POSA2, Scoped Locking, Strategized Locking 패턴 POSA2 의 동기화 관련 패턴들 중 가장 기본이라고 할 수 있는 Scoped Locking 은 사실 별 거 없다. 이런걸 굳이 패턴으로 불러야하나....싶은 부류 중 하나이다. 닥치고 소스~ TGuard = class protected FLock: TSynchroObject; FOwner: Boolean; public constructor Create(ALock: TSynchroObject); destructor Destroy; override; procedure Acquire; procedure Release; end; { TGuard } procedure TGuard.Acquire; begin if Assigned(FLock) then begin FLock.Acquire; FOwner := True.. 2012. 4. 5.
Proactor with EPOLL, SELECT IOCP 를 사용한 Proactor 구현( 2012/02/13 - [프로그래밍/OOP] - Proactor with IOCP )은 비교적 많은 곳에서 소개가 되고있지만, EPoll 과 같은 놈을 Proactor 로 구현하는 경우는 거의 없어 보인다.;; 아무튼 앞으로 사용할 통신 프레임워크에 멀티플랫폼이라는 사치품(?)을 달 계획을 추가하다보니 EPoll 이나 KQueue 혹은 기존 POSIX 류의 Select 디스패치도 같은 구조 속에 녹일 필요가 생겼다. Proactor 냐? Reactor 냐? 잠시 고민했지만~ 아무래도 개인적으로 아직까지 메인 개발은 윈도우즈인지라 IOCP 와 최고의 궁합을 보여주는 Proactor 기반으로 설계해보았으며~ 개발 작업은 기본적인 에코 서버를 구현 & 테스트하는 형태.. 2012. 3. 15.
Delphi 에서 Leader-Follower 패턴 구현 POSA2 에서 Leader-Follower 패턴의 경우 pthread 기반으로 구현하여 설명하고 있다.( 2012/03/09 - [프로그래밍/Lazarus] - FPC 에서 Leader-Follower 패턴 구현 ) 이를 Windows 기반으로 작성해보았다. unit DLNA.Thread; interface uses Winapi.Windows, System.SysUtils, SyncObjs; const NO_CURRENT_LEADER = 0; type TGuard = class protected FMutex: TMutex; FOwner: Boolean; public constructor Create(AMutex: TMutex); destructor Destroy; override; procedure A.. 2012. 3. 14.
FPC 에서 Leader-Follower 패턴 구현 FPC 에서 pthread 기반 Leader-Follower 패턴을 구현하였다. Unbound thread set 이며, 사용 용도는 Worker Thread Pool 정도~ 예외 처리 등 많이 다듬어야하지만~ 일단 관련 소스 첨부~ unit DLNA_Thread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, BaseUnix, pthreads; const NO_CURRENT_LEADER = 0; type TPThreadParameter = record Mutex: ppthread_mutex_t; Condition: ppthread_cond_t; Terminated: Boolean; Suspended: Boolean; Owner: TObject; end;.. 2012. 3. 9.
인천 연수 둘레길 1구간 최근 제주 올레길 이후로 전국에서 다양한 도보 구간이 형성되고 있다. 인천도 둘레길이라는 이름으로 여러 구간이 개발되고 있는데, 그외 인천내 연수구에서도 독자적으로 연수동 둘레길을 3구간으로 나누어 정비해 두었다. 일단 집과 가깝고해서 연수 둘레길을 찾아보았다. 먼저 시작점이라고 할 수 있는~ 인천 1호선의 선학역이다. 지도를 잘 살펴보고 어느 지점까지 가볼지 생각해보았다. 처음이고하니 1구간만 산행해보기로하고 지하철 3번 출구로 나온 후 문학산쪽으로 걸음을 옮겼다. 본격적으로 시작하기 전 가까운 마켓에서 마른목을 축일겸 간단한 스포츠 음료와 초코릿 비스켓을 하나 구입하였다. 조금 더 올라가니 바로 시작 지점과 함께 둘레길 안내 표지판을 만날 수 있었다. 그리고 방향을 잃지 않게 가는길 중간중간 확인할 .. 2012. 3. 3.
인천 차이나타운을 가다 지난 토요일 인천 차이나타운을 갔다왔다. 그후 때아닌 몸살로 지금까지 골골한 상태다. ㅠㅠ 그런데 찍어온 사진을 살펴보니 차이나타운과 관련한 사진은 이거 한장 밖에 없었다.;; 중국성에서 먹은 짜장면인데... 여느 짜장면집 짜장과 크게 달라보이지 않는 외모이지만 확실히 맛있었다. 고기가 좀 많은 듯~ 그 후 바로 근처 십리향에서 화덕만두를 먹기 위한 긴 행렬에 합류하였다. 10분~20분 정도 기다린 듯 한데... 중간에 먹은 양꼬치는 특유의 냄새 때문에 토할뻔했고... ㅠㅠ 긴 기다림 끝에 먹은 화덕만두는 맛이 없다고 할 수는 없겠지만... 다시 줄 서서 먹고 싶은 생각은 안들 정도의 맛이었다. 중간중간 삼국지 벽화라든지 중국 지자체에서 기증하였다는 페루라든지 공자상이라든지... 솔직히 요즘은 제주도 갈.. 2012. 2. 20.
윈도우에서 X-Window 연결하기(Xming) 먼저, Xming 및 Xming font 를 다운로드하여 설치한다. 그런 후, XLaunch 를 실행한다. 이후 편한대로 설정하면 되는데, 일단 타이틀바가 있는 단일 윈도우로 설정한다. SSH 를 통하여 X-Window 를 연결할 것이기 때문에 Start a programe 을 선택한다. 데스크탑이 그놈기반이라 gnome-session 을 입력하고, 이후 SSH 접속 관련 정보를 입력한다. 이때 SSH 포트를 임의의 값으로 변경한 상태라면 이후 과정에서 설정하면 된다. 실행시 화면 해상도 설정과 SSH 포트 설정을 입력한다. 만약, 기본 포트라면 그냥 비워두면 된다. 참고로 P 는 대문자로 입력하여야한다. 지금까지의 설정을 저장하고싶으면 Save configuration 버튼을 누른다. 만약, 비밀번호까.. 2012. 2. 15.
Cent OS X-Window 한글 깨짐현상 locale 설정 등에 이상이 없으면, 다음과 같이 한글 관련 파일들을 설치한다. # yum groupinstall korean-support -x xorg-x11-server-Xorg # fc-cache 참고로 로케일은 다음과 같은 상황~ [root@logy ~]# locale LANG=ko_KR.UTF-8 LC_CTYPE="ko_KR.UTF-8" LC_NUMERIC="ko_KR.UTF-8" LC_TIME="ko_KR.UTF-8" LC_COLLATE="ko_KR.UTF-8" LC_MONETARY="ko_KR.UTF-8" LC_MESSAGES="ko_KR.UTF-8" LC_PAPER="ko_KR.UTF-8" LC_NAME="ko_KR.UTF-8" LC_ADDRESS="ko_KR.UTF-8" LC_TELE.. 2012. 2. 15.
POSA, 패턴 시스템 패턴 시스템에 대하여 마인드 맵으로 정리해보았다. 패턴 분류와 관련하여 GoF 디자인 패턴의 목적(purpose)과 범위(scope) 분류에 대한 부정적 서술이 눈에 띈다. 게다가 이 글을 작성한 사람은 GoF 패턴 집필진 중 한명인 Richard Helm 이다. 아울러 패턴 분류를 위한 분류 스키마를 제안하고 있는데 꽤 괜찮아보인다.(도입해야지~^^) 아키텍처 패턴 디자인 패턴 이디엄 혼돈에서 질서로 from mud to structure Layers Pipes and Filters Blackboard Interpreter 분산 시스템 distributed system Broker Pipes and Filters Microkernel 상호작용 시스템 interactive system MVC PVC 적응.. 2012. 2. 14.
Proactor with IOCP 그간 네트워크 관련 작업은 인디(Indy)에 의존하고 있었다. 하지만, 멀티플랫폼 환경(Android, Bada, iOS 등)에서 이식성을 생각하자면 아무래도 부족한 점이 많다. 하여 개인적으로 사골처럼 우려먹을 수 있는 네트워크 프레임워크를 구현하기로 마음 먹었다. 일단, 1차 결과물로 기본적인 뼈대 정도를 뽑아보았다.(델파이의 내장된 투게더의 결과물이 마음에 들지않아 자바용 UML 툴로 다이어그램을 그렸다. ㅠㅠ 덕분에 Object Pascal 과 Java 가 뒤섞인 다소 이상한 형태의 클래스 다이어그램이다.) 최초 작업은 Delphi XE2 로 윈도우즈 기반 환경이다. 대용량 접속 처리를 위해 IOCP 기반으로 하였고 demulitiplexing 및 dispatch 처리를 위하여 Asynchrono.. 2012. 2. 13.
POSA2, ACT 패턴 Asynchronous Completion Token 패턴의 마인드맵을 그려보았다. 개인적으로 정리한 것이고 추후 적용 과정에서 갱신해 나갈 생각이다. 클래스 다이어그램으로 표현하면, ACT 를 Command 패턴(2012/02/08 - [프로그래밍/OOP] - GoF, Command 패턴)으로 적용한다면, TCompletionHandler 가 TReceiver 에 해당하고 TACT 는 TCommand 가 된다. 이때 TInitiator 가 TInvoker 가 된다. 2012. 2. 8.
GoF, Command 패턴 책의 내용을 요약하여, Command 패턴의 마인드맵을 그려보았다. 클래스 다이어그램으로 표현하면, 만약, 어떤 기능을 수행하는 클래스 TReceiver 가 있다고 하자, 해당 기능을 사용하기 위하여 인스턴스를 생성하고 메소드 ActionA, ActionB 등을 호출할 것이다. 헌데, 이 기능들을 좀 더 복잡하게 사용(여러 UI 에서 접근, 기능의 조합, 매크로 기능, UnDo 기능 등..)해야하는 경우가 발생한다면 어떻게 해야할까? 애초 기능 그 자체를 클래스로 설계하거나, 기능 클래스를 정의한 뒤 실제 동작은 기존 기능을 처리하던 클래스에 위임해버리는 방법이 있을 것이다. 이때 후자를 Command 패턴이라고 한다. TInvoker 라는 놈은 기능 클래스들을 소유하고 호출하는 것으로 논리적인 개념으로.. 2012. 2. 8.
POSA, Forwarder-Receiver 패턴 POSA 의 통신관련 대표적인 패턴으로, 분산 시스템의 컴포넌트와 통신을 위해 사용하는 메커니즘 간 결합도(coupling)를 줄이는 방법 중 하나이다. 결합도를 낮추기 위하여 캡슐화와 위치 투명성을 고려하여야하는데 Forwader-Receiver 패턴은 캡슐화의 역할을 한다. 전체적인 구조에서 보았을 때, Peer 와 Peer 간의 통신을 나타내며 직접적인 송수신 파트는 Forwader 와 Recevier 가 담당한다. DCOM 이나 CORBA 관련 자료를 본 적이 있다면 마샬링이나 언마샬링 등이 익숙할 것이다. Peer : 어플리케이션 서비스를 제공한다. 다른 피어들과 통신한다. Forwarder : 메시지를 보내기 윈한 일반적인 인터페이스(SendMsg)를 제공한다. 원격 수신기에 보내는 메시지를 .. 2012. 1. 31.
POSA, Whole-Part 패턴 GoF 의 디자인패턴이 상당히 구체적이라면, POSA 의 디자인패턴은 좀 더 범위가 두루둥실하다. 사실, 이 Whole-Part 패턴의 경우 어느 정도 OOP 를 해온 경험이있다면 당연한 이야기에 이름을 붙인 정도라고 볼 수 있다. 가령, 인터페이스 혹은 추상화된 기능을 정의(클래스)하고 각 기능의 위임 역할을 하는 클래스들을 결합하여 사용하는 것은 상식에 가까운 설계이지 않을까? 여기서 추상화된 기능을 정의한 클래스가 Whole 이 되고 위임을 하게된 클래스들이 Part 가 된다. 아울러 GoF 의 디자인패턴에 비해 좀 더 범위가 크다고 했는데, Composite 패턴이 이러한 Whole-Part 패턴의 일종으로 설명되고 있다. 이때, TComposite 가 Whole 이 될 것이고 TLeaf 가 Pa.. 2012. 1. 30.