CI/CD : 자동화된 통합(협업하는 프로젝트의 개발 테스트 등)과 자동화된 배포. Devops를 위한 개념. 기존에는 각자 Build하고 Test했다가 한번에 Commit하고 충돌나는 거 빼고 다시 테스트하고.... 하는 과정이 있었다고 한다. (그런 과정에서 보통 밤에 업로드하기 때문에 Nightly-Build라고 부르고, 소프트웨어 버전에서 Nightly라하면 실시간으로 업데이트 되는, 개발팀이 쓰는 최신 버전이라고 한다.) 그러다 Jenkins 같은 테스트 자동화, 배포 자동화를 한번에 관리해주는 툴들이 나오고, 많은 프로젝트와 서버에 관해 환경적인 다양성이 생기자 Docker같은 툴이 생겨났다.

Jenkins : 실시간으로 빠르게 개발, 테스트, 반영을 하려다 보니 각각 build하고 테스트하고 해서는 생산성이 나지 않게 되었다. 즉, 이런 프로세스 자체가 체계화되고 자동화될 필요가 생겼고 이를 위한 시스템이 Jenkins이다. 원래는 허드슨이라는 이름으로 먼저 생겼으나 그놈의 오라클이 인수해 버리면서, Jenkins로 독립해 오픈소스로 유지되고 있다. 테스트가 자동화 됐다고 하지만 테스트를 위해선 먼저 테스트 코드를 작성할 필요가 있다. 다만 그렇게 작성만 해놓으면 새롭게 Git 같은 곳에 commit이 쳐졌을 때 기능테스트를 거쳐 오류가 나면 오류가 났다 오류가 없으면 배포를 자동적으로 해주는 식이다. 개발자에따라 배포를 여러 서버에 해야 돼서 귀찮으니까 배포만 자동화하고 싶어서 쓰는 케이스도 있다.

docker : 테스트를 위해 각 서버의 환경(OS, 환경변수, 패키지, 라이브러리 등)을 각각 세팅하려다 보니 Host OS에서 중복되는 리소스들을 각 Guest OS에 세팅하고 각자 구동해야 하는 경우가 빈번했다. 그러다보니 테스트 자체의 속도도 느리고 테스트 환경을 새로 구축하는 것도 느렸다. 이때 고급 개발자들은 각 테스트를 할 수 있는 Container(일종의 정형화된 테스트베드)를 만들어 썼는데 이런 Container들을 비교적 쉽게 각 Layer로 모아 환경을 구축할 수 있는 것이 Docker이다. 그렇게 리소스를 같이 쓰게 되면서, 각자 Guest OS를 구동하고 돌렸던 hypervisor 방식보다 훨씬 효율적으로 테스트 환경을 구현할 수 있게 되었다.

TSDB : 시계열 데이터베이스. 기존 관계형 DB와의 차이점은 다른 key값을 거의 포기하고 timestamp 위주로 무조건 데이터를 쌓아버린다. 따라서 기존 관계형 DB처럼 예전 자료를 update하고 특정 자료를 찍어 Delete하는 데엔 약하지만 Select하고 새로운 자료를 Insert하는 데는 매우 빠르다. 즉, 실시간 데이터들(센서로부터 들어오거나 시계열 통계값을 바로바로 때리는 경우)을 처리하는 데 있어 강한 모습을 보인다. 또, 계속 병렬적으로 쌓아버리기 때문에 데이터가 방대해질수록 느려지는 관계형 DB와 달리 성능이 일률적이라고 한다. 대표적으로 2013년에 나온 InfluxDB가 있다. 자세한 구조는 따로 글 작성 예정.

NoSQL : 기존 관계형DB의 제약을 풀고 특정 데이터 형태에서 성능에 치중하기 위해 고안된 DB. TSDB도 NoSQL의 일종. NoSQL이라고 해서 SQL 언어를 아예 쓰지 않는 게 아니라서 Not only SQL이라고 하기도 한다. RDB의 수많은 규약들 중에 몇몇을 엄격하게 지키지 않거나 데이터의 분류를 다르게 하고 스키마가 없이 데이터를 Insert하는 등의 방식으로 성능을 극대화시킨다. 예를 들어, InfluxDB 같이 키-값으로 컬럼을 분류하고 데이터를 무조건 시간 순으로 찍어 넣는다든가, MongoDB처럼 정형화되지 않은 데이터(이미지, 테이블 등등)을 Document로 분류해서 넣어버린다든가, 혹은 Node, Label, Edge 등의 데이터 형태로 저장하는 Neo4J(그래프 데이터베이스) 등이 있다.

+ Recent posts