개념 ELK란 Elasticsearch, Logstash, Kibana, Beats 등의 스택들로 구성되어 시너지 효과를 내는 기술스택을 말한다. ElasticSearch 실시간 데이터 검색, 분석을 위한 분산형 데이터 저장/검색 엔진으로, 일종의 데이터베이스 시스템이다. 쉽게 말해서 여러 문서(파일) 등에서 특정 문자열을 검색하는 역할을 한다고도 할 수 있다. rdb와 유사한 역할을 하는데, 데이터를 색인화하여 빠르게 검색, 분석할 수 있도록 도와주며, 실시간 데이터를 처리해주는 역할을 주로 하며, RDB와 다르게 해쉬테이블로 되어있어 O(1)의 조회성능이 나온다. 위 표는 rdb와 elasticsearch의 용어 대응을 보여주는데, 개인적으로는 꽤 많은 차이를 보이지만 조금이라도 이해를 도울 수 있을..
쿠버네티스란?역사 오늘날의 어플리케이션은 하나의 통일체의 형태로 동작하는 것이 아니라, 하나의 어플리케이션의 동작을 위해서 필요한 수많은 컨테이너들이 느슨하게 결합되어 함께 작동하는 형태로 구성되어 있다. MSA환경을 기반으로 만들어진 어플리케이션이 여러 개의 서버로 구성되어 있고, 각 서비스가 독립적으로 개발되고 배포되는 구조로 이루어져 있다는 것을 생각해보면 이해가 쉽다. 위의 그림은 전통적인 배포 환경과, 가상 환경을 이용한 배포, 그리고 컨테이너를 사용한 배포의 차이를 보여준다. 전동적인 배포는 물리적인 컴퓨터 하나와 하나의 운영체제 위에 여러개의 프로그램을 설치하는 방식이었다. 한대의 컴퓨터에서 여러 프로그램을 실행하다 보니 애플리케이션의 개수가 늘어날수록 퍼포먼스 저하와 프로그램 충돌이 일어나..
도커 컨테이너를 실행하면 NAT와 비슷한 환경에서 사용하게 된다. 컨테이너가 실행되는 호스트 시스템에는 이러한 기능이 사용되기 때문에, 외부에서 컨테이너 안에서 실행하는 프로그램에 대한 접근을 위해 포트포워딩이 필요할 수 있다. 한마디로 호스트의 해당 포트를 컨테이너의 대상 포트로 연결해서 컨테이너 외부에서도 접근할 수 있게 된다. docker run -p 8080:80 --name redis_container redis_image 따라서 도커에서는 위와 같이 -p옵션을 통해서 포트포워딩을 설정할 수 있는데, 위와 같이 컨테이너를 실행하면 이 redis 컨테이너의 8080번 포트로 들어오는 모든 호스트 요청은 도커 컨테이너의 80번 포트로 전달된다. 만약 호스트의 8080포트가 이미 사용중인 경우, 80..
간단한 역사 1. Tradition Deployment: 물리적인 컴퓨터 한 대(Hardware)에 하나의 OS를 깔고 그 위에 여러가지 프로그램을 설치하는 방식이다. 한 대의 컴퓨터에서 여러 프로그램을 수행하다 보니 퍼포먼스 저하, 또는 프로그램 충돌이 일어날 수 있다. 2. Virtualized Deployment: VMware, VirtualBox 등.. 리눅스쓸때 지겹게 썼던 그것이다. 1번 방법으로 문제를 해결하기 위해 여러개의 물리적 컴퓨터를 이용하는 방법 대신, Hypervisor를 사용하여 하나의 시스템위에 여러개의 가상 컴퓨터를 올려 구동한다. 각각의 가상머신은 논리적 컴퓨터이므로, CPU, 메모리, 저장장치를 각각 할당할 수 있다 (물론 Hardware의 리소스를 잡아먹는다). 이 방법..
개요 사용자의 인증이 필요한 웹 사이트마다 로그인 기능을 필요로 한다면 민감한 정보에 대한 관리가 필요해지기 때문에 번거로울 수 있고, 보안에 취약해질 수 있다. 따라서 google이나 naver, kakao같은 외부 소셜 서비스를 기반으로 회원가입/로그인 할 수 있는 기능을 많이들 사용하고는 하는데, 이를 위해 접근 권한을 위임받은 것을 OAuth라고 한다. OAuth를 사용하지 않고 소셜 서비스에 인증을 위임하기 위해서는 사용자는 소셜 서비스의 인증을 위한 수단을 서버에 위임해야 했다. 이는 소셜 서비스 외부로 ID/PW(인증)가 노출되게 되는 문제가 있다. 이렇게 서버가 사용자의 인증을 필요로 하는 이유는 소셜 서비스로의 인가를 필요로 하는 것이 목적이므로, 인증은 사용자에 직접 위임하고, 인가는..
개요 CI/CD (Continuous Integration/Continuous Delivery, Continuous Deployment)란 애플리케이션 개발 단계를 자동화하여 애플리케이션을 짧은 주기로 고객에게 제공하는 절차를 말한다. 그 과정에서 코드를 병합하고 build/test하고 서버로 옮기는 과정이 반복되게 되는데, 이러한 반복 작업을 줄이는 것이 CI/CD이다. CI: 지속적인 통합 CI는 애플리케이션 코드의 변경을 정기적으로 build/test하는 과정을 자동화한 것을 말한다. 즉 애플리케이션 코드의 새로운 변경사항이 자동으로 공유 리포지토리에 병합된다.1. 개발자가 구현한 코드를 기존 코드와 병합한다.2. 병합된 코드가 올바르게 동작하고 빌드되는지 검증한다.3. 검증 결과 문제가 있..