분류 전체보기
-
Ansible: 앤서블을 이용한 Nginx TLS 자동화 (feat. Vagrant)Ansible 2021. 9. 23. 13:11
이번 포스팅은 vagrant를 이용해서 vm을 생성한 후, 앤서블을 이용해서 nginx를 https로 배포합니다. 환경은 다음과 같습니다. - ansible core : ubuntu 18.04 로컬에서 진행합니다. - virtual box에서 ubuntu 18.04 이미지를 사용합니다. 최종 디렉토리 구조는 다음과 같습니다. seung@seung-15Z990-VR5DK:~/vagrant/nginx$ tree . . ├── ansible.cfg ├── files │ ├── nginx.crt │ └── nginx.key ├── hosts ├── templates │ ├── index.html.j2 │ └── nginx.conf.j2 ├── ubuntu-bionic-18.04-cloudimg-console.l..
-
캐시(Cache)와 CDN(Content Delivery Network) 정리시스템 설계 2021. 9. 21. 13:16
애플리케이션은 데이터베이스 쿼리를 통해 필요한 데이터를 가져온다. 하지만 빈번한 데이터베이스 호출은 성능 문제를 야기할 수 있으며 이는 캐시를 통해서 문제를 완화할 수 있다. 1. 캐시 계층 데이터가 잠시 보관되는 곳으로 데이터베이스보다 훨씬 빠르다. 캐시 계층을 둠으로써 성능을 개선시킬 수 있고, 데이터베이스로 가는 부하도 줄일 수 있다. 캐시계층은 다음과 같은 방식으로 동작한다. 클라이언트에서 요청을 받으면 요청을 받은 웹서버는 캐시에 응답이 저장되어 있는지 보고, 저장되어 있으면 클라이언트에게 반환하고, 없다면 데이터베이스에 쿼리를 보내 데이터를 찾은 후 반환한다. 대표적인 캐시 오픈소스로 memcached와 redis가 있다. 2. 캐시 사용의 유의점 - 데이터 갱신은 ..
-
Ansible: 디렉토리 구조와 커맨드 정리(feat. Vagrant)Ansible 2021. 9. 18. 19:51
이번 포스팅은 ansible을 설치하고 inventory와 ansible.cfg 파일을 구성합니다. 마지막에는 ansible을 이용해 간단한 커맨드를 사용해 봅니다. 최종 디렉토리 구조는 다음과 같습니다. seung@seung-15Z990-VR5DK:~/vagrant/testserver$ tree . . ├── ansible.cfg ├── hosts ├── ubuntu-bionic-18.04-cloudimg-console.log └── Vagrantfile 다음 환경에서 실습합니다. - 로컬 = ubuntu 18.04 (ansible core로 사용합니다) - virtual box 사용 (ansible node로 사용합니다) - ubuntu/bionic64 이미지 사용 1. A..
-
RDB와 NoSQL 간단 비교데이터베이스 2021. 9. 17. 23:29
1. 관계형 데이터베이스(RDB) 대표적인 RDBMS로 오라클 DB, MySQL, PostgreSQL가 있다. 정형성 있는 데이터를 스키마 형태로 저장하며 조인을 통해 합칠 수 있다. 2. 비관계형 데이터베이스(NoSQL) 대표적으로 카산드라, AWS 다이나모 DB, MongoDB등이 있다. NoSQL은 주로 정형성이 없는 데이터를 저장하며 스키마가 없기 때문에 조인 연산을 지원하지 않는다. 어떤 데이터를 저장하는지에 따라 4가지 종류로 나뉜다. 1) 키-값 저장소 2) 그래프 저장소 3) 칼럼 저장소 4) 문서 저장소 대부분의 레거시는 RDB를 사용한다. ☞ 질문 그렇다면 언제 비관계형 데이터베이스를 사용하는게 적합할까? - 업데이트가 자주 이루어지지 않고, 읽기가 자주 사용될때 - 다루는 데이터가 비..
-
K8S 설계 개념(Kubernetes Design Concept)K8S 2021. 9. 15. 14:43
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 이번 포스팅은 K8S가 어떤 설계 개념을 토대로 디자인 되었는지 알아본다. Saad Ali라는 구글 개발자는 다음 규칙을 바탕으로 K8S를 설계했다. 1. Kubernetes APIs are declarative rather the imperative 2. No hidden internal APIs 3. Meet the user where they are: Remote storage 4. Workload portability 1. Kubernetes APIs are declarative rather the imperative 1) Imperative way 이전에는 시스템에 명령어를 직접 입력해서 시스템을 desire..
-
K8S + Istio 환경에서 Nginx Proxy 설정하기K8S 2021. 9. 13. 12:36
틀린 내용이 있을 수도 있습니다! 틀린 내용이 있다면 댓글로 달아주시면 감사하겠습니다! 이번 포스팅은 K8S + 이스티오 환경에서 Nginx로 proxy를 만들고, API 서버들의 엔드포인트를 단일화하여 API Gateway로 사용하기 위한 Nginx Configuration에 대한 정리다. 그냥 nginx를 프록시로 만들어서 클러스터에 올리면 되지 않냐 왜 굳이 K8S + Istio를 명시하여 포스팅하냐고 생각할 수도 있는데... Istio는 envoy proxy를 기반으로 하기 때문에 nginx로 요청이 들어오기 위해선 envoy를 거쳐서 들어와야 한다. 따라서 나의 경우, Local 환경에서 테스트할때 정상이였던 nginx proxy는 클러스터 내부에서는 잘 동작하지 않았다. 그래서 이번 포스팅은 ..
-
Nginx Configuration 정리메모 및 기타 2021. 9. 10. 19:35
1. nginx의 역할 - 정적인 리소스를 처리 - 리버스 프록시로 사용 - 로드밸런싱 2. nginx command nginx -s [signal] signal에는 다음과 같은 커맨드가 들어갈 수 있다. - reload: 설정 파일을 reload한다. - stop: nginx을 stop한다. - reopen: 로그 파일 재오픈한다. 변경한 configuration을 적용해야하므로 nginx -s reload 커맨드를 사용한다. 참고로 필자는 docker의 nginx이미지를 이용해서 nginx를 동작시켰는데 이때 configuration 파일의 위치는 /etc/nginx/nginx.conf에 위치한다. 3. Directives nginx는 여러 모듈들로 구성되며 이러한 모듈들은 configuration파..
-
Nodejs: 테스트 코드 작성하기(feat. Jest)Nodejs 2021. 9. 8. 01:30
이번 포스팅은 테스트 코드의 원칙과 Jest를 이용한 단위 테스트 코드 작성에 대해 포스팅한다. 1. 테스트 코드란 무엇일까? 테스트 코드는 말 그대로 우리가 작성한 코드에 문제가 없는지 테스트하기 위해 작성하는 코드다. 올바른 테스트 코드 작성을 위해선 흔히 기본 원칙이라 불리는 일곱 테스트 원칙을 따르는게 좋다. 1. 테스팅은 결함의 존재를 보여주는 것이다. 2. 완벽한 테스트는 불가능하다. 3. 테스트 구성은 가능한 빠른 시기에 시작한다. 4. 결함은 군집되어 있다. 5. 살충제 역설 - 비슷한 테스트가 반복되면 새로운 결함을 발견할 수 없다. 6. 테스팅은 정황에 의존적이다. 7. 오류 부재의 오해 - 사용되지 않는 시스템이나 사용자의 기대에 부응하지 않는 기능의 결함을 ..