반응형

분류 전체보기 63

State pattern, 스테이트 패턴

State pattern 이란 객체가 상태에 따라 같은 메소드가 다른 행위를 하도록 위임하는 디자인 패턴이다. 공통 메소드의 인터페이스를 통해, 각 상태는 클래스로 분리시켜 표현한다. State pattern 적용 아래 예는 스타크래프트의 시즈탱크의 시즈모드 활성화, 비활성화를 State 패턴을 적용해본 것이다. 시즈탱크의 시즈모드는 멱등성을 가진다. 즉, 시즈탱크는 시즈모드가 활성화 됐을 때 시즈모드를 할 수 없고 시즈모드 비활성화만 할 수 있다. 반대로 비활성화 된 경우 시즈모드 활성화를 할 수 있지만 비활성화는 할 수 없다. 이런 구현을 state 패턴으로 할 수 있다. 또한 같은 공격(attack) 메소드라 할지라도 시즈모드 활성화, 비활성화 상태에 따라 공격하는 방식이 다른데 이런 구현도 가능하..

Design Pattern 2020.04.28

젠킨스 웹훅(Jenkins webhook)으로 깃헙(Github)과 연동하기

Jenkins 설치법에 이어 CI/CD 하기 위해 Jenkins 사용 법을 차근차근 정리할 예정이다. 이번에는 가장 기본인 github에 소스 코드가 push되면 Jenkins가 webhook으로 그것을 받아서 빌드, 테스트 등의 스크립트를 실행하는 방법에 대해 정리한다. 앞으로 NodeJS를 CI/CD하는 방법을 앞으로 정리할 예정이다. 깃헙(Github) 웹훅 키 발급 깃헙 오른쪽 상단 [ 프로필 > Settings > Developer settings > Personal access tokens ] 에서 Generate new token을 눌러서 웹훅 토큰을 생성한다. 이때, Note에는 적당히 이름을 넣어주고 repo와 admin:repo_hook에 대한 권한을 준다. 생성된 토큰은 한 번만 볼 ..

CI-CD 2020.04.22

Command Pattern, 커맨트 패턴

커맨트 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용할 때 유용하다. 아래 타입스크립트 코드를 보자. 예를 들어, 스타크래프트에서 attack 버튼과 move 버튼이 있을 경우, attack, move 등의 기능을 수정하기 위해 button 클래스를 직접 수정해야 해서 즉, onPressed 메소드를 수정해야 하므로 OCP를 위반하게 되는 것이다. type Command = 'attack' | 'move'; class Button { private attack: Attack; private move: Move; private command: Command; constructor(command: Command) { this.a..

Design Pattern 2020.04.13

Singleton pattern, 싱글톤 패턴

싱글톤 패턴이란 Singleton pattern(싱글톤 패턴)은 인스턴스가 오직 하나만 생성되고, 어디서든지 이 인스턴스에 접근할 수 있게 하는 디자인 패턴이다. 객체를 생성하는 과정 없이 static method인 getInstance로 인스턴스를 바로 사용한다. 스타크래프트의 SCV가 Mineral, Gas를 수집하고, 사용하는데 전역적으로 사용되는 객체인 자원 Mineral과 Gas는 Singleton pattern으로 표현될 수 있다. 이를 다음과 같이 표현할 수 있겠다. 클래스 다이어그램 Resource를 추상클래스로 두고 Mineral과 Gas는 상속 받는다. 메소드의 행위는 같고 자원의 속성 값(amount)만 다르기 때문이다. 코드 타입스크립트 코드로 나타내면 다음과 같다. Main 함수에..

Design Pattern 2020.04.02

Strategy pattern, 스트레이티지 패턴

Strategy pattern 이란 컴퓨터 프로그래밍에서 Strategy pattern(스트레이티지 패턴) 혹은 Policy pattern은 런타임에 알고리즘을 선택할 수 있는 behavioral(행위) 소프트웨어 설계 패턴이다. 코드에 알고리즘을 직접 구현하지 않고, 사용할 알고리즘을 런타임에 수신되도록 한다. Strategy는 알고리즘을 사용하는 클라이언트와 독립되도록 한다. Strategy pattern을 스타크래프트의 테란 유닛을 typescript로 구현 하는 예로 설명한다. 간단히 설명하기 위해 공격 가능한 유닛 'Marine'과 'Ghost'를 구현해볼 예정이다. 'Marine'은 체력이 40, 크기는 소형, 공격형은 일반형이다. 'Ghost'는 체력이 45, 크기는 소형, 공격형은 진동형이..

Design Pattern 2020.04.01

Transaction & Locking (트랜잭션과 로킹)

RDB의 특징 중 하나는 트랜잭션이다. 흔히 트랜잭션이 ACID 특성을 가진다고 하는데, ACID는 Atomic(원자성), Consistency(일관성), Isolation(고립성) 그리고 Durability(지속성)을 일컫는다. 즉, 여러 SQL문이 로직에 의해 조합되어 실행되는 경우 하나의 단위처럼 취급해야 함을 뜻한다고 해석해도 될 듯 싶다, ACID에 대한 자세한 설명은 위키를 참조하자. https://en.wikipedia.org/wiki/ACID ACID - Wikipedia Set of properties (atomicity, consistency, isolation, durability) of database transactions intended to guarantee validity e..

MySQL 2020.03.02

Dockerized Node.js for development

도커라이징(dockerize)의 장점 중 하나는 개발/배포시 환경에 신경을 덜 쓰면서 앱 개발에만 신경쓸 수 있다는 점이라고 생각한다. 윈도우 랩톱에서 개발된 웹 어플리케이션이 리눅스 서버에서 정상적으로 동작한다는 것을 장담하기가 매우 어렵다. 물론 docker가 윈도우나 Mac 상에서 리눅스 가상머신을 사용하기 때문에 리눅스와 100% 동일한 환경에서 동작할 것이라고 장담하기는 어렵지만, 그래도 전자의 경우보다는 정상적으로 동작활 확률이 더 높다고 본다. Node.js 앱을 개발할 때도 배포환경과 유사하게 도커라이징하면, 개발/배포 환경 간의 간극을 줄일 수 있지 않을까 고민이 들어서 오늘은 개발 환경을 위한 Node.js 도커라이징 방법을 소개한다. Node.js 앱 프로젝트 디렉토리를 적당히 하나 ..

NodeJS 2019.12.29

Elasticsearch, Cluster는 어떻게 구성돼 있을까?

Elasticsearch를 처음 접했을 때 이해하가 어려웠던 것 중 하나는 Elasticsearch cluster는 어떻게 구성돼 있는지였다. 오늘은 Elasticsearch cluster가 어떻게 구성돼있고, 각각 구성에 대해 살펴보자. Elasticsearch Cluster 구성 ElasticSearch cluster는 하나 이상의 node, node는 하나 이상의 index, index는 하나 이상의 shard로 구성돼있다. 다시 말해, 여러 shard가 모여서 index를 구성하고, 즉, index는 물리적으로 나뉘어진 shard 조각들의 논리적인 집합이고, 이 shard 조각들이 여러 node에 균등하게 저장된다. 이 여러 node가 보여 군집을 이룬 것을 cluster라 부른다. 1. node..

Elastic Stack 2019.12.27

젠킨스(Jenkins) 설치하기(with Nginx on Docker container)

Jenkins는 빌드, 테스트, 배포 과정을 자동화 해주는 강력한 CI(Continuous Intergreation)/CD(Coutinuous Deployment) 도구이다. 웹 프로젝트를 진행하기 위해 CI/CD 환경이 필요해서Jenkins를 설치하게 되었고 관련된 내용을 여기에 정리해본다. 어떤 구조로 설치할까? 아래 그람과 같이 https://jenkins.example.com 으로 요청이 들어오면 http://jenkins:8080으로 리버스 프록시하는 구조로 설치하기로 결정했다. 이 구조를 어떻게 쉽게 설치할 수 있을까 고민하다가 docker swarm을 통해 docker stack을 deploy하는 방식을 택했다. 우선 직접 설치하지 않고 docker container 환경을 사용한 이유는 S..

CI-CD 2019.12.22

Elasticsearch, 효율적인 index 보관을 위해 Hot-Warm architecture 도입

서론 Elasticsearch를 처음 도입해야 하는 경우, 클러스터가 기존보다 더 좋은 성능이 나오게 하고 싶은 경우, index를 더 효율적으로 보관하고 싶은경우, 또는 여러가지 이유 등으로 Elastissearch를 사용하는 엔지니어라면 node 구성을 어떻게 하는 것이 좋을지를 한 번쯤은 고민해봤을 것이다. 최근 Elasticsearch의 클러스터 성능을 높이고 index를 더 효율적으로 보관하기 위해 여러가지 방법을 리서치를 했는데 이에 관한 내용을 게재해볼 예정이다. 이번에 게재할 내용은 Hot-Warm architecture로 index를 효율적으로 오래 보관하는 방법을 소개하고자 한다. 시계열성 index라면 도입해볼만 하다 Hot-Warm architecture를 테스트 해보고 싶다면 ht..

Elastic Stack 2019.12.20
반응형