본문 바로가기

개발

구조 개선을 위한 디자인패턴(2) 장세찬, 『GoF 디자인 패턴! 이렇게 활용한다. : C++로 배우는 패턴의 이해와 활용』, 한빛미디어(2004) 책의 내용을 배끼기보단 제가 이해한 내용을 위주로 작성해서 틀린 부분이 있을 수 있습니다! 5. Facade 패턴 프로그램 설계는 보통 class나 객체를 기준으로 많이 표현하죠. 그런데 클래스가 너어어무 많아지면 설계도도 복잡해지고 이해하기 위해 필요한 시간은 더더욱 길어집니다. 그래서 이런 일을 방지하기 위해 서브시스템이라는 개념이 만들어졌습니다. 정해진 일을 하는 서브시스템을 구현하고, 그 서브시스템과는 하나의 인터페이스로만 이어져있는 방식이죠. 이렇게 서브시스템과 클라이언트 부분을 분리해 구현하는 방식을 Facade 패턴이라고 합니다. 책에 나온 Database를 예로 들어보겠습니다...
구조 개선을 위한 디자인패턴 장세찬, 『GoF 디자인 패턴! 이렇게 활용한다. : C++로 배우는 패턴의 이해와 활용』, 한빛미디어(2004) 책의 내용을 배끼기보단 제가 이해한 내용을 위주로 작성해서 틀린 부분이 있을 수 있습니다! 1. Adapter 패턴 Adapter 패턴은 이미 개발된 API를 제 코드의 인터페이스에 맞게 사용하기 위한 패턴입니다. 세상엔 훌륭한 API가 많이 개발되어있죠. 하지만 그 API의 인터페이스(함수 명, 파라미터 등)는 제 코드와 맞지 않는 경우가 많습니다. 이럴 때, API는 사용하되 인터페이스를 맞추기 위한 코드가 바로 Adapter 패턴입니다. 1) Object Adapter 새로 정의한 클래스에 멤버변수로 API에서 사용하는 클래스 객체를 사용하는 방법입니다. 저는 말보단 코드로 설명하는게 ..
객체 생성 관련 디자인패턴 장세찬, 『GoF 디자인 패턴! 이렇게 활용한다. : C++로 배우는 패턴의 이해와 활용』, 한빛미디어(2004) 책의 내용을 배끼기보단 제가 이해한 내용을 위주로 작성해서 틀린 부분이 있을 수 있습니다! 1. Abstract Factory 패턴 책의 시작부터 좀 어려운 내용이 나와서 힘들었던 부분입니다ㅠㅠ 저는 다형성(Polymorphism)을 활용한 디자인 패턴으로 이해했는데요, 추상 클래스를 상속받는 클래스들을 생성하는 역할의 객체 혹은 함수를 두는 개념입니다. 제가 쓰고도 못알아듣겠으니 그림이 필요하겠네요! AbstractProductA, AbstractProductB가 있고, 사용자가 접근할 수 있지만 객체 생성은 AbstractFactory가 합니다. 이렇게 사용했을 때, client는 객체 ..
CentOS7 NetworkManager 문제 동적 네트워크 환경에서 네트워크 자동 설정 및 구성을 담당하는 데몬. 사용하는 네트워크 환경이 자주 바뀌는 경우(Wifi 연결 등) 바뀔 때마다 네트워크 환경을 바꿔주어야 하는데, 이런 환경에 최적화되어있는 프로그램이 NetworkManager입니다. 리눅스 환경에서 사용하는 데몬이며 노트북이나 스마트폰 등의 환경에서 주로 사용합니다. CentOS 6까지는 이 데몬을 선택적으로 설치해 사용할 수 있었지만, CentOS 7부터는 기본 네트워크 관리 데몬으로 사용합니다. 동적 네트워크 자동 설정, GUI를 사용한 네트워크 설정 및 네트워크 설정 기능 개선 등 장점이 많은 데몬이더라구요. 하지만 이 데몬을 서버에서 사용하기에는 모호한 부분이 많았습다. 서버에서는 다른 여러 패키지를 설치해 함께 사용하는데, 충..
localtime() 사용 시 유의사항 시간관련 작업의 제일 기본 함수인 time()과 localtime() 함수를 사용하다가, 재미있는 사실을 알게 되었습니다. #include struct tm *localtime(const time_t *timep); 함수 원형입니다. time_t 는 1970년 1월1일부터 지금까지 흐른 시간(초)을 나타내는 변수이고, 이 값을 사용해 날짜와 시간을 구하는 함수입니다. struct tm이 날짜와 시간을 갖고 있는 구조체이고 이 구조체 포인터를 반환해줍니다. 이 때 중요한건, 함수 내부적으로 static struct tm 변수가 있고 이 변수의 포인터를 반환한다는 것입니다. 즉 함수를 실행할 때마다 같은 주소값을 받게 되는 것입니다. #include #include int main(int args, char..
mariadb-connector 라이브러리 내부 버그 철썩같이 믿고 사용하던 라이브러리 함수에서 버그를 발견했습니다. 입사하고 첫 업무였는데 상당히 신박한걸 보게되었네요. 요약부터 하자면, 1row에 16MB가 넘는 데이터 호출 시, 무한루프가 발생하는 현상입니다. 사용한 라이브러리는 mariadb-connector_c 1.x.x입니다. 소스를 찾긴 했는데 1버전 소스는 없네요 https://github.com/mariadb-corporation/mariadb-connector-c mariadb-corporation/mariadb-connector-c MariaDB Connector/C is used to connect applications developed in C/C++ to MariaDB and MySQL databases.The client lib..
좀비 프로세스 방지 출처 : 아주대학교 시스템 소프트웨어 보안 강의자료 /* * 공부한거 정리하는거라 틀린게 있을 수도 있어요... * 내용에 틀린게 있으면 알려주세요!! */ 유닉스의 모든 프로세스는 종료 시에 종료 상태를 부모 프로세스에 보낸다. 부모 프로세스는 해당 프로세스를 실행한 프로세스인데, wait함수 또는 waitpid함수를 사용해 자식 프로세스의 종료 상태를 받을 수 있다. 하지만 부모 프로세스가 자식 프로세스를 받아주지 않을 경우, 자식 프로세스는 아무 작업도 하지 않지만 종료되지는 못한 채 남아있게 된다. 이를 좀비 프로세스라고 부른다. wait함수와 waitpid함수의 자세한 설명은 다음과 같다. wait : 자식 프로세스가 종료 상태를 보낼 때까지 대기. 부모 프로세스는 block 함수 원형 pid_..
유닉스 파일 함수 정리 출처 : 아주대학교 시스템 소프트웨어 보안 강의자료 /* * 공부한거 정리하는거라 틀린게 있을 수도 있어요... * 내용에 틀린게 있으면 알려주세요!! */ 파일 핸들링에 자주 사용하는 함수들을 정리해봤습니다. 1. open : 프로세스에서 파일을 사용할 수 있도록 파일을 불러오는 함수 파일 원형 int open(const char *pathname, int flag, /* mode_t mode */ ) 헤더 fcntl.h 반환 파일 디스크립터 값을 반환 실패시 -1을 반환 인수 설명 const char *pathname : 파일의 경로 및 이름 int flag : 파일 열기 옵션. 아래 옵션들 모두 fcntl.h에서 사용 가능 - O_RDONLY : 읽기 전용 - O_WRONLY : 쓰기 전용 - O_..