node.js 기반에 react.js 를 사용하며 워드프레스 REST API(WP API) 로 구동된다.


필요한 DOM 조작 수


TypeScript를 사용하면 Java와 C#을 다루던 사용자에게 생산성을 올려주고 정적 타입 체크 등의 많은 이익이 있습니다. 그러나 모든 사람들이 TypeScript를 사용하려고 하지는 않습니다.

많은 소규모 사례에서 TypeScript를 사용하면 생산성 향상보다 더 많은 오버헤드가 발생할 수 있습니다. 이 경우 TypeScript 없이 Angular를 사용하는 것이 어려울 수 있기 때문에 Vue를 사용하는 것이 좋습니다.




'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

스위프트(Swift)  (0) 2019.02.15
자바스크립트( JAVA script)  (0) 2019.02.15
프레임워크에 대한 이해  (0) 2019.02.14
푸쉬(Push) Service  (0) 2018.11.30
데몬(Daemon)서비스  (0) 2018.11.30

프레임워크에 대한 이해


* 프레임워크 : 작업 속도와 작업 방식을 쉽게 만들어주는 공구 상자와 같은 거라고 생각하면 된다. 

즉, 작업 환경에 따라 어떤 공구 상자를 두느냐가 중요하겠다. 


예를 들면, 나무집을 지을때와 쇠로 지은 집을 지을때에는 공구 상자가 달라져야 할 것이다.

그리고 나무집이라 하더라도 강아지 집을 지을 때와 사람이 살 집을 지을 때에도 공구 상자가 달라져야 할 것이다.


따라서, 작업 환경에 적합한 공구 상자가 선택되어져야 할 것이다. 


그렇다면, 공구 상자에 어떠한 것들이 들어 있는지도 중요할 것이다.

망치가 있을 것이고, 톱이 있을 것이고, 드라이버가 있을 것이고..

그런데 모든 공구 상자에 톱이 있는 것도 잇을 것이고 없는 것도 있을 것이다.


즉, 공구 상자에 어떤 것들이 있는지에 따라 작업 속도도 달라질 것이고, 작업 속도도 많이 올려주게 된다. 


개발 분야로 접근하게 되면 코드를 작성하는데 쓸데없이 여러번 반복작업해야할 내용도 줄여준다. 


게다가 HTML, CSS, 자체 로직 등을 명확히 구분해서, 개발하는 사람이 편리하도록 최대한 노력해놓은 결과물이다. 

'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

자바스크립트( JAVA script)  (0) 2019.02.15
정리 필요  (0) 2019.02.14
푸쉬(Push) Service  (0) 2018.11.30
데몬(Daemon)서비스  (0) 2018.11.30
Jenkins [제킨스]  (0) 2018.11.28


어떤 조건이 만족되었을 때에 지정된 서비스를 제공하는 것


- 특정 위치 기반 이벤트가 발생하였을 때 자동으로 서비스를 제공받는 것.

  즉, 푸시 서비스는 위치 기반 트리거링(Location Triggering) 서비스라 하기도 함(네이버 지식백과)

'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

정리 필요  (0) 2019.02.14
프레임워크에 대한 이해  (0) 2019.02.14
데몬(Daemon)서비스  (0) 2018.11.30
Jenkins [제킨스]  (0) 2018.11.28
빌드란? 그리고 Jenkins(젠킨스)란? 써야 하는 이유  (0) 2018.11.28

- 시스템에 관련된 작업을 수행하는 Background process를 통칭하는 용어

- 부팅 단계부터 지정된 데몬이 동작하며, 서비스의 요청이 없을 때는 유휴 상태를 유지함

예약된 시간이나 이벤트의 요청이 발생했을 때 지정된 서비스가 실행

즉,  처리해야 할 작업 조건이 발생하면 자동으로 작동하여 필요한 작업을 실행



'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

프레임워크에 대한 이해  (0) 2019.02.14
푸쉬(Push) Service  (0) 2018.11.30
Jenkins [제킨스]  (0) 2018.11.28
빌드란? 그리고 Jenkins(젠킨스)란? 써야 하는 이유  (0) 2018.11.28
ZooKeeper  (0) 2018.11.21

Jenkins는 Java로 제작된 오픈 소스 CI(Continuous Integration) 서비스를 제공하는 도구이다. 



GIT 개념 : 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해 준다


본래 Hudson이라는 이름의 소프트웨어였으나 오라클과의 상표권 분쟁으로 인하여 

Jenkins라는 이름으로 바꾸었다.


Apache Tomcat 같은 Servlet Container 위에 돌아가는 서버 기반 시스템이다. 


AccuRev, CVS, Subversion, Git, Mercurial, Perforce, Clearcase, RTC와 같은 SCM 툴을 지원한다. 


또한 SonarQube 등의 코드 품질관리 플랫폼과 셸 스크립트, 윈도우 배치 프로그래밍, Ant/Maven/Gradle 기반 프로그램도 지원한다. 



'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

푸쉬(Push) Service  (0) 2018.11.30
데몬(Daemon)서비스  (0) 2018.11.30
빌드란? 그리고 Jenkins(젠킨스)란? 써야 하는 이유  (0) 2018.11.28
ZooKeeper  (0) 2018.11.21
Redis cluster  (2) 2018.11.20

서버에 기능을 추가 하려면 개발자가 개발자 노트북에서 개발을 하고 테스트까지 한 다음에 이상이 없으면 사용자가 사용할 수 있게 수정된 내용을 서버에 반영해야 한다.


빌드는 서버에 올릴 수 있는 상태로 만드는 것을 빌드(Build)라고 한다.

서버에 올려서 사용자가 사용 할 수 있게 하는 것은 배포(Deploy)라고 한다.



Build를 자동화 해야하는 이유

빌드는 하루에 한번을 할 수도 있고 안할수도 있지만 1주일, 1달로 따지면 꽤 많이 한다. 그리고 이게 1년이면 꽤 많은 시간이라고 할 수 있다.


예를들면 옛날에는 자바를 빌드 할 때 javac라는 커맨드를 직접 사용 했지만 지금은 IDEA를 쓰면 main()메소드를 실행하면 javac를 하고 java가 실행이 된다.

이렇게 반복되는 과정은 버튼 하나 또는 단축키로 자동화 시킬 필요가 있다.


왜냐하면 이 작업을 하는데도 집중력, 긴장감 등이 소모 되기 때문이다. 그리고 빌드는 시간이 꽤 걸리는 작업인데(30초 이상 걸림) 빌드를 실행 시키고 나서 빌드가 될 때까지 기다리는 시간도 모아보면 엄청 길 것이다.


개발자의 시간은 소중하기 때문에 최대한 반복작업은 자동화 할 필요가 있다.


암튼 나도 손꾸락으로 빌드를 5개월쯤 하니 자동화를 안시킬 수가 없었다. 수정하고 빌드하고 dev에 올리고 하는데 너무 시간을 많이 잡아먹기 때문이다.



Jenkins란?

위에서 이야기한 빌드를 자동화 해주는 툴이다.


Jenkins는 빌드를 자동화 시키기 위해 사용한다.



Jenkins를 안쓰게 되는 이유

이유1 세팅하기 어렵다
이유2 세팅이 잘 안된다
이유3 세팅이 힘들다

젠킨스를 쓰려면 젠킨스 서버를 띄워야 한다. 그런데 요즘은 그나마 많이 비교적 쉬워져서(비교적 쉬운거지 절대 쉽다는게 아님) 띄울만 해졌는데 전에는 너무 어려웠다.

AWS에 EC2띄우고 젠킨스 받아서 띄우면 되는데 이게 선행 지식이 많이 필요하다.

AWS에 띄울려면 VPC, Security Group, IAM등에 대해 알아야 서버가 띄워도 접근을 못ᅥᆻ하는 안타까운 일이 벌어지지 않는다.

나도 이걸 해볼려고 매년 시도는 했었는데 6년차가 된 지금에야 겨우 git pull받고 build하기까지가 너무 어려웠다.

이런 어려움에도 불구하고 젠킨스를 도입하려고 문서 찾아보고 시간쓰고 하는 이유는 손빌드가 너무 심적으로 힘들기 때문이다.

그러니 부디 자동화를 미리 해놓는게 가장 시간을 아끼는 길이다.



https://namu.live/b/live?p=5


'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

데몬(Daemon)서비스  (0) 2018.11.30
Jenkins [제킨스]  (0) 2018.11.28
ZooKeeper  (0) 2018.11.21
Redis cluster  (2) 2018.11.20
DB 분류 및 종류  (0) 2018.11.20

분산 시스템을 설계 시 발생되는 문제점

- 분산된 시스템간의 정보를 어떻게 공유할것이고, 

- 클러스터에 있는 서버들의 상태를 체크할 필요가 있으며 

- 분산된 서버들간에 동기화를 위한 락(lock)을 처리하는 것



=> 이러한 문제를 해결하는 시스템을 코디네이션 서비스 시스템 (coordination service)라고 하는데, 

Apache Zookeeper가 대표적

- Zookeeper는 자체적으로 클러스터링을 제공하며, 장애에도 데이타 유실 없이 fail over/fail back이 가능.



코디네이션 서비스는 분산 시스템 내에서 중요한 상태 정보나 설정 정보 등을 유지하기 때문에, 

코디네이션 서비스의 장애로 인한 전체 시스템의 장애를 유발하는 경우

이중화 등을 통하여 고가용성을 제공해야 함



ZooKeeper는 이러한 특성을 잘 제공하고 있는데, 

그런 이유로 이미 유명한 분산 솔루션에 많이 사용되고 있다. 

NoSQL의 한종류인 Apache HBase, 대용량 분산 큐 시스템인 Kafka등이 그 대표적인 사례.


분산 시스템을 코디네이션 하는 용도로 디자인이 되었기 때문에, 

- 데이타 엑세스가 빨라야 하며, 

- 자체적으로 장애에 대한 대응성을 가져야 함



Apache Zookeeper의 기능

- 디렉토리 구조기반으로 znode라는 데이타 저장 객체를 제공하고, (key-value식). 

 . 이 객체에 데이타를 넣고 빼는 기능만을 제공

 . 디렉토리 형식을 사용하기 때문에 데이타를 계층화된 구조로 저장하기 용이.




데이타 모델

- 디렉토리 구조의 각 노드에 데이타를 저장




노드는 아래와 같이 기능에 따라 몇가지 종류로 나뉘어 지는데 



Persistent Node : 노드에 데이타를 저장하면 일부러 삭제하지 않는 이상 삭제되지 않고 영구히 저장된다.


Ephemeral Node : 노드를 생성한 클라이언트의 세션이 연결되어 있을 경우만 유효하다. 즉 클라이언트 연결이 끊어지는 순간 삭제 된다. 이를 통해서 클라이언트가 연결이 되어 있는지 아닌지를 판단하는데 사용할 수 있다. (클러스터를 구성할때 클러스터내에 서버가 들어오면, 이 Ephemeral Node로 등록하면 된다.)


Sequence Node : 노드를 생성할때 자동으로 sequence 번호가 붙는 노드이다. 주로 분산락을 구현하는데 이용된다.



Watcher

Watch 기능은 ZooKeeper 클라이언트가 특정 znode에 watch를 걸어놓으면, 해당 znode가 변경이 되었을때, 클라이언트로 callback 호출을 날려서 클라이언트에 해당 znode가 변경이 되었음을 알려준다. 그리고 해당 watcher는 삭제 된다. 



출처: http://bcho.tistory.com/1016 [조대협의 블로그]

'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

Jenkins [제킨스]  (0) 2018.11.28
빌드란? 그리고 Jenkins(젠킨스)란? 써야 하는 이유  (0) 2018.11.28
Redis cluster  (2) 2018.11.20
DB 분류 및 종류  (0) 2018.11.20
REDIS( REmote DIctionary Server)  (0) 2018.11.20

Redis 클러스터는 여러개의 Redis 노드들에 데이타를 자동으로 분배가 가능하도록 설치할수 있는 몇가지 방법을 제공 하며 또한 효율적인 파티션의 분활 방식을 제공
-> 어떤 노드들이 실패가 발생해서 통신을 할수 없는 경우에도 작업이 계속될 수 있는 기능

데이타들을 여러 노드에 자동으로 분배해 주는 기능
-> 일부 노드들이 실패하는 경우, 다른 클러스터들과 통신이 불가능 해도 운영을 계속할수 있는 기능

DBMS는 데이터 저장 구조와 모델을 기준으로 일반적으로 분류하는데 이 경우 RDB, ORDB, OODB, HDB, NDB
그리고 Document DB, KeyValue DB, ColumnFamily DB, Graph DB라고 분류합니다.
데이터 구조와 모델과 관계없이 File기반 DBMS와 In-Memory 기반 DBMS로 분류할 수 도 있는데 이것은
데이터 저장 방법 및 운영 방법에 따른 분류 방법이라고 말할 수 있습니다.


'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

ZooKeeper  (0) 2018.11.21
Redis cluster  (2) 2018.11.20
REDIS( REmote DIctionary Server)  (0) 2018.11.20
CI/CD(Continuous Integration / Continuous Deployment)  (0) 2018.11.20
멀티테넌시(Multitenancy)  (0) 2018.11.20

Redis DB는 대표적인 KeyValue Database 제품 중에 하나이며, 

또한 Pure In-Memory DBMS(In-Memory DB는 잘못된 표현임)

Redis는 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어임
즉, 키 값에 매핑하는 값에 다양한 데이터 타입을 매핑시키는 구조임

Redis는 다양한 인 메모리 데이터 구조 집합을 제공하므로 다양한 사용자 정의 애플리케이션을 손쉽게 생성. 
주요 Redis 사용 사례로는 캐싱, 세션 관리, pub/sub 및 순위표를 들 수 있음

Redis는 속도가 빠르고 사용이 간편하여 최고의 성능이 필요한 웹, 모바일, 게임, 광고 기술 및 IoT 애플리케이션에서 널리 사용되고 있음

순수 In-Memory 기반 DB인 Redis를 데이터 통계,집계용으로 활용함으로써 시스템 성능 개선를 위해 사용





위 Redis 아키텍처는 다음과 같은 구성요소를 가짐

1)프로세스 :
  - Redis-cli.exe        : Redis 서버에 접속하기 위해 요구되는 Client용 SW  
  - Redis-Server.exe   : Redis 서버 인스턴스를 시작할 때 사용되는 SW
  - Redis-sentinel.exe  : 복제 서버를 구축할 때 Master와 Slave 간에 Fail-Over와 Load-Balance를 담담하는 SW
  
2) 메모리  : 
  - Residence-영역    : 데이터를 처리할 떄 실제 사용되는 메모리 영역
  - Data Structure 영역: 데이터 처리시 관련 메타 정보를 저장, 관리하는 메모리 영역 

3) 파일    : 
  - dump 파일, aof 파일 : 사용자 데이터의 일부 또는 전체를 필요에 따라 디스크 상에 파일로 저장할 때 사용되는 파일


특징 (출처 : https://aws.amazon.com/)

놀라울 정도로 빠른 성능
데이터를 디스크 또는 SSD에 저장하는 대부분의 데이터베이스 관리 시스템과는 달리 모든 Redis 데이터는 서버의 주 메모리에 상주합니다. Redis와 같은 인 메모리 데이터베이스는 디스크에 액세스해야 할 필요를 없앰으로써 검색 시간으로 인한 지연을 방지하고 CPU 명령을 적게 사용하는 좀 더 간단한 알고리즘으로 데이터에 액세스할 수 있습니다. 일반적으로 작업을 실행하는 데 1밀초 미만이 소요됩니다.

인 메모리 데이터 구조
Redis를 사용하면 사용자가 다양한 데이터 유형에 매핑되는 키를 저장할 수 있습니다. 기본적인 데이터 유형은 String으로서, 텍스트 또는 이진 데이터가 이에 해당하며 최대 크기는 512MB입니다. 또한, Redis는 문자열이 추가된 순서대로 유지되는 Lists of Strings, Sets of unordered Strings, 점수에 따라 정렬되는 Sorted Sets, 필드와 값 목록을 저장하는 Hashes, 데이터 세트에서 고유한 항목을 세는 HyperLogLogs를 지원합니다. 거의 모든 유형의 데이터가 Redis를 사용하여 인 메모리에 저장될 수 있습니다.

다양성과 사용 편의성
Redis는 개발과 운영을 좀 더 쉽고 좀 더 빠르게 수행할 수 있는 여러 가지 도구를 제공합니다. Pub/Sub는 메시지를 채널에 게시하며, 채널에서 구독자에게 전달됩니다. 채팅과 메시징 시스템에 매우 적합합니다. TTL 키는 해당 기간 후에는 스스로를 삭제하는 지정된 Time To Live 값을 가질 수 있습니다. 데이터베이스를 불필요한 데이터로 채우지 않도록 하는 데 유용합니다. 원자성 카운터는 경합 상태가 일관성 없는 결과를 생성하지 않도록 합니다. Lua는 강력하지만 간단한 스크립팅 언어입니다.

복제 및 지속성
Redis는 마스터-슬레이브 아키텍처를 사용하며 비동기식 복제를 지원하여 데이터가 여러 슬레이브 서버에 복제될 수 있습니다. 이렇게 하면 주 서버에 장애가 발생하는 경우 요청이 여러 서버로 분산될 수 있으므로 향상된 읽기 성능과 복구 기능을 모두 제공할 수 있습니다.

Redis는 안정성을 제공하기 위해 특정 시점 스냅샷(Redis 데이터 세트를 디스크로 복사)과 데이터가 변경될 때마다 이를 디스크에 저장하는 Append Only File(AOF) 생성을 모두 지원합니다. 두 방법 모두 모두 장애 발생 시 Redis 데이터를 신속하게 복원할 수 있습니다.

선호하는 개발 언어 지원
Redis 개발자는 백 개가 넘는 오픈 소스 클라이언트를 사용할 수 있으며, Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, R, Go를 비롯한 다수의 언어가 지원


Redis 사용 사례(출처 : https://aws.amazon.com/)


캐싱

 

 


다른 데이터베이스 "앞"에 배치된 Redis는 성능이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여줍니다.

 

 

 

 

 

 

 

 






Redis는 세션 관리 작업에 매우 적합합니다. Redis를 세션 키에 대한 적절한 TTL과 함께 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있습니다. 세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요합니다.

Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됩니다. 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있습니다.

Redis는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있습니다. 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있습니다. 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용됩니다.

Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있습니다. Redis List는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합합니다.

Redis에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원합니다. 따라서 Redis를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다. 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.




'정보관리기술사 도전 > 용어 정의' 카테고리의 다른 글

Redis cluster  (2) 2018.11.20
DB 분류 및 종류  (0) 2018.11.20
CI/CD(Continuous Integration / Continuous Deployment)  (0) 2018.11.20
멀티테넌시(Multitenancy)  (0) 2018.11.20
DC/OS(Data Center Operating System)  (0) 2018.11.20

+ Recent posts