콘텐츠로 이동

Blog

VPC Endpoint with Role

목표


  • Bastion Host를 이용한 Private Network의 웹 서버 접속
  • Endpoint를 이용해 게이트웨이 없이 VPC에서 S3, DynamoDB 접속
  • Credential이 아닌 Role을 이용한 권한적용으로 보안성 확보

구성도


VPC Endpoint with Role/Untitled.png

CICD on Single container

CICD on Single container/Untitled.png

목표


  1. 도커, 도커컴포즈를 이용한 테스트베드, 운영환경 실행환경 구성
  2. Travis CI를 이용해 Github → Travic CI → AWS Beanstalk 파이프라인 구현
  3. CICD 체험이 목적이기 떄문에 Nginx, 리액트는 작업하지 않습니다

Multi container CICD

구성도

  • DEV Flow chart

    Multi container CICD/Untitled.png

  • Service ENV

    Docker-compose를 사용해 모든 컨테이너 환경을 제어합니다

    Multi container CICD/Untitled%201.png

요약


  1. 멀티컨테이너를 이용해 개발환경과 운영환경을 구축합니다
  2. nodeJS백엔드 ↔ reactJS프론트엔드 간에 REST API 구조로 데이터를 전달합니다(axios)
  3. Nginx의 라우팅을 활용하여 URI가 /api 로 시작하면 백엔드(NodeJS)로, 나머지( / )는 프론트(ReactJS)로 보내도록 설정합니다
  4. Docker Compose를 사용해 컨테이너간의 통신 등 개발환경을 구축합니다
  5. 깃헙에 푸시하면 → Travis CI 테스트→ Docker Hub로 이미지를 전달하고 Beanstalk이 ECS를 이용해 이미지를 pull하고 ECS를 이용해 컨테이너를 Deploy하도록 합니다

Docker Proxy Layer for MySQL

Proxy Layer의 필요성


  • 외부(어플리케이션)에서 접속 시 3306포트의 MASTER DB가 에러가 발생했을 때, FailOver가 구현되어 SLAVE DB(3307)가 MASTER로 승격되더라도 3307포트로 자동으로 변경되지 않기 떄문에 사이에서 중재해줄 Layer가 필요합니다.
  • ex>Nginx with Proxy

    Docker Proxy Layer for MySQL/Untitled.png

  • ex)Nginx without Proxy

    Docker Proxy Layer for MySQL/Untitled%201.png

목표


  • ProxySQL을 이용해 Proxy Layer를 구현합니다
  • READ, WRITE작업을 수행하는 호스트그룹과 Read작업만 수행하는 호스트 그룹을 생성합니다

Docker basics

목표


  1. 도커를 복습 겸 간단하게 한 번 훑어봅니다
  2. 간단한 node 백엔드를 작성하고 도커 이미지를 생성합니다
  3. Working Directory를 설정합니다
  4. node 종속성을 수정해 이미지 빌드 속도를 높여봅니다
  5. 개발일을 할 떄 docker volume을 어떻게 활용할 수 있는지 한 번 살펴봅니다
  6. compose를 이용해 간단한 페이지를 만들어봅니다

Docker compose and web GUI

작업요약


  • Docker를 설치하는 과정에 필요한 파라미터 변수에 대해 알아봅니다
  • 빠른 이해와 편리한 사용을 위해 Portainer를 설치합니다
  • Docker-Hub에서 컨테이너를 찾고 DVWA 컨테이너를 로드해봅니다
  • YAML + Docker Compose를 이용해 코드로 관리하는 법을 알아봅니다

Docker volume with MySQL

목표


  • CentOS8에 도커를 설치하고 MySQL 컨테이너를 로드합니다
  • 컨테이너를 종료하고 외부에서 접속하도록 다시 로드합니다
  • 컨테이너를 삭제해도 이전 데이터를 그대로 유지하는 stateful한 상태를 구현합니다
  • Stateful 상태는 Volume설정을 통해 구현합니다

K8S에 배포된 JVM Heap Dump 생성

  • 명령어
    kubectl exec <pod_name> -- jmap -dump:live,format=b,file=/tmp/heapdump.hprof 1234
    kubectl cp <pod_name>:/tmp/heapdump.hprof heapdump.hprof
    
  • 옵션 설명
    • kubectl exec : 특정 파드에 접근하고 명령을 실행
    • --: kubectl exec 명령어 옵션과 파드 내에서 실행할 명령어를 구분
    • jmap: JVM memory map tool name
    • -dump: jmap의 heap dump 생성 옵션
    • live: GC에 의에 회수되지 않은 live object'만' 포함해서 덤프 생성. memory leak 분석에 용이해짐.
    • format=b: dump file format을 binary로 설정. 어차피 다른 선택지가 없다.
    • file=/tmp/heapdump.hprof: 파드의 /tmp 디렉토리에 heapdump.hprof 힙덤프 파일 생성
    • 1234: jmap으로 덤프 생성할 PID 입력