디자인패턴 공부하기 - 부록1.2. SOLID, 계방폐쇄원칙(OCP)

소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. 개방-폐쇄 원칙(OCP, Open-Closed Principle)은 새로운 요구사항이 추가되었을 때, 어떻게 코드를 작성해야하는지 그 가이드라인을 제시하고 있습니다. “확장에는 열려 있다”는 것은 추가 기능이 필요하면 해당 동작만을 확장하라는...

디자인패턴 공부하기 - 부록1.1. SOLID, 단일책임원칙(SRP)

객체지향에서 가장 모호한게 클래스의 크기를 규정하는 일입니다. 단일 책임 원칙(SRP, Single Responsibility Principle)은 이 문제를 해결 할 수 있도록 가이드라인을 제시합니다. 한 클래스는 하나의 책임만 가져야 한다. 이 정의는 명확해보이지만, 생각하기에 따라서 굉장히 애매한 문제가 될 수 있습니다. 예를 들어봅시다....

발표, Vue SSR vs Prerender

PHP서비스를 Vue로 리팩토링 하면서 발생한 SEO 문제를 해결하는 내용입니다. SSR과 Prerender를 고민하였고, 최종적으로 Prerender를 사용하였습니다. 2017년 10월 GDG 인천에서 발표한 내용입니다.

디자인패턴 공부하기 - 3. 추상팩토리 (Abstract Factory)

그동안의 팩토리 패턴들은 일반 객체를 생성했습니다. 그런데 만약에 생성해야 하는 객체가 특정 인터페이스를 구현하고 있는 클래스라면 어떻게 되어야 할까요? 서비스에서 Cache를 사용한다고 가정합시다. <?php class ArrayCache { protected $caches; public function get(string $key, $default = null) { return $this->caches[$key] ??...

디자인패턴 공부하기 - 2. 정적팩토리 (Static Factory)

정적팩토리(Static Factory)의 경우 단순팩토리를 그저 정적함수(static method)를 통해서 호출하는 것 뿐이기 때문에 아주 간단합니다. <?php class User { /* ... */ } class UserFactory { public static function factory(): User { return new User(); } } 그리고 사용할 때는 다음과...

디자인패턴 공부하기 - 1. 단순팩토리 (Simple Factory)

일반적인 팩토리 패턴은 무언가 객체를 생성하고자 할 때 사용하는 패턴입니다. 특히나 이 중, 단순팩토리(Simple Factory)는 그 중 가장 기본이 됩니다. 표현하면 다음과 같습니다. classDiagram UserFactory --> User : create user UserFactory : +factory() <?php class User { /* ... */...

디자인패턴 공부하기 - 0. Intro

프레임워크를 작업하면서 두루뭉술하게 알고 있던 디자인 패턴들을 최근에 다시 복습겸 공부하기 시작하였습니다. 예전에 학부시절에 수업으로 한번 공부했었던 내용이지만, 이제와서 보니 더 새로운 부분이 많고, 그때는 이해가지 않았던 내용들도 있어서 다시한번 정리할겸 글을 작성해보려고 합니다. 아무래도 제가 이해한 내용을 기반으로 작성한...

yarn global 설정하기

요즘 Node.js 쪽 패키지 관리자는 Yarn을 사용하고 있습니다. 메모리나 속도면에서 npm보다 우수하기 떄문입니다. 전에 npm을 사용할 때는 global 설치가 크게 어렵지 않았습니다. 기본적으로 node를 설치할 때 같이 따라오기 때문에 bin 디렉토리들이 알아서 설정되어있기 때문입니다. 하지만 yarn의 경우는 바로 사용되지 않았습니다....

우분투 resolv.conf 세팅 정리

서버는 AWS EC2(Ubuntu 16.04) + RDS 를 사용하고 있습니다. 일단, 문제의 발단은 다음 에러였습니다. SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known PDO쪽에서 Exception이 발생했는데 처음보는 메시지였습니다. 네트워크 쪽에 능통하신 분들이라면 아마도 쉽게 해결하셨겠지만 네트워크를 눈대중으로 배운 저에게는...

MinHash란?

MinHash 알고리즘을 이해한 만큼 적어보려고 합니다. 요즘, 회사에서 사용할 봇을 제작하고 있는데요, 약간의 자연어 처리 기능을 넣어보려고 했습니다. 어떻게 하면 효율적으로 처리가 가능할까 하다가 MinHash 라는 Collaborative Filtering에서 사용하는 알고리즘을 찾게 되었습니다. 활용 할 수 있을 것 같아서 일단 뜯어보기로...