DevOps

    [Terraform] 테라폼의 개념

    IaC 란 코드형 인프라(Infrastructure as Code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말한다. IaC를 사용하면 인프라 사양을 담은 구성 파일이 생성되므로 구성을 편집하고 배포하기가 더 쉬워진다. 또한 IaC는 매번 동일한 환경을 프로비저닝하도록 보장하고, 구성 사양을 코드화하고 문서화함으로써 구성 관리를 지원합니다. 따라서 구성 변경 사항을 문서화하지 않고 임시로 변경하는 일을 막을 수 있다. 버전 제어는 IaC의 중요한 부분이다. 다른 소프트웨어 소스 코드 파일과 마찬가지로 구성 파일도 소스 제어가 필요하다. 다른 소프트웨어 소스 코드 파일과 마찬가지로 구성 파일도 소스 제어가 필요하다. 코드로 인프라를 배포한다는 것은 인프라를 모듈식 ..

    [Linux] 리눅스 네트워크 네임스페이스

    네트워크 네임스페이스는 Linux 시스템 내에서 가상화된 네트워크 스택을 생성할 수 있는 Linux 커널 기능이다. 각 네트워크 네임스페이스는 네트워크 인터페이스, 라우팅 테이블, 방화벽 규칙, IP 주소 및 기타 네트워크 관련 설정을 포함하여 고유한 별도의 네트워크 구성을 제공한다. 이를 통해 단일 Linux 호스트 내에서 여러 개의 격리된 네트워크 스택을 실행할 수 있으며 다음과 같은 다양한 사용 사례에 유용할 수 있다. 서로의 네트워크 트래픽을 방해할 수 없도록 컨테이너 또는 가상 머신을 서로 격리한다. 테스트 또는 개발 목적으로 가상 네트워크를 생성한다. 인프라의 다른 부분을 별도의 네트워크 네임스페이스로 격리하여 네트워크 수준 보안을 구현한다. 명령어를 사용하여 네트워크 네임스페이스를 생성하며 ..

    [AWS] SAM으로 API Gateway와 lambda, dynamoDB 배포

    이번 포스팅은 aws cli와 aws configure가 미리 준비되어있다는 가정하에 진행하겠다 진행하기 앞서 실습 내용으로는 API Gateway로 POST요청을 보내게된다면 API Gateway를 트리거로 Lambda 함수를 깨워 받은 요청을 DynamoDB로 저장하게된다 또한 API Gateway를 이용해 api-key로 인증하는 방법과 권한을 부여자를 이용해서 인증부여해보겠다 SAM 배포 SAM으로 배포 하기위해 템플릿을 준비해보자 이링크를 들어가서 깃클론을 하자 간단하게 확인해보면 미리 람다와 DynamoDB와 세팅이 되어있는걸 확인할수있는데 SAM은 AWS콘솔이 아닌 인프라가 코드화되어있어서 복잡한 콘솔을 클릭하지않고 손쉽게 프로비저닝 할수있다 다운로드 부분에 명령어를 복사하고 터미널에 입력했..

    [DevOps] 메시지 브로커 개념과 종류

    Tightly coupled System 왼쪽 그림에서 클라이언트가 server1에게 요청을 보내고 다시 server1은 server2에게 요청을 보내서 server2가 로직을 수행하고 응답을 다시 반환하는 시스템이 있다고 가정해보겠다. 흔히 사용하고있는 MSA나 모놀리식등 이러한 방식들을 많이사용하고있다. 하지만 이러한 구조에서 server2에서 장애가 일어나게된다면 server2는 로직을 수행하지못하고 에러가 발생하기 때문에 server1까지 연쇄적으로 에러가 발생하게되면서 서비스가 불가능한 상태가된다 바로 이런상태를 Tightly coupled라고한다 Loosely coupled System 누구나 알듯 한곳에서 발생한에러는 다른 시스템에서 영향을 주지 않도록 하는게 좋다는건 다 알고있는얘기이다. ..

    [DevOps] 마이크로서비스의 DB설계 사례

    서비스별로 데이터베이스를 사용하면 다음과 같은 이점이 있다. 서비스가 느슨하게 결합되도록 합니다. 한 서비스의 데이터베이스를 변경해도 다른 서비스에는 영향을 미치지 않는다. 각 서비스는 필요에 가장 적합한 데이터베이스 유형을 사용할 수 있다. 예를 들어 텍스트 검색을 수행하는 서비스는 ElasticSearch를 사용할 수 있습니다. 소셜 그래프를 조작하는 서비스는 Neo4j를 사용할 수 있다. 서비스별로 데이터베이스를 사용하면 다음과 같은 단점이 있다. 여러 서비스에 걸쳐 있는 비즈니스 트랜잭션을 구현하는 것은 간단하지 않다. 분산 트랜잭션은 CAP 정리 때문에 피하는 것이 가장 좋다. 게다가 많은 최신(NoSQL) 데이터베이스는 이를 지원하지 않는다. 현재 여러 데이터베이스에 있는 데이터를 조인하는 쿼..

    [DevOps] 마이크로서비스와 서버리스의 관계

    서버리스란 서버리스(serverless)란 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다. 서버리스 모델에도 서버가 존재하긴 하지만, 애플리케이션 개발에서와 달리 추상화되어 있다. 클라우드 제공업체가 서버 인프라에 대한 프로비저닝, 유지 관리, 스케일링 등의 일상적인 작업을 처리하며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 된다. 서버리스 애플리케이션은 배포되고 나면 필요에 따라 자동으로 스케일 업되거나 스케일 다운된다. 퍼블릭 클라우드 제공업체의 서버리스 오퍼링은 일반적으로 이벤트 기반 실행 모델을 통해 온디맨드로 미터링된다. 그러므로 서버리스 기능이 유휴 상태일 때는 아무런 비용도 들지 않는다. 서버리스 컴퓨팅 서비스..

    [DevOps] 마이크로서비스 아키텍쳐란

    이 포스팅은 마이크로서비스 아키텍쳐를 공부하면서 도움이되었던 글로써 마이크로서비스 아키텍쳐를 공부하는데 도움이 되었으면하는 마음으로 번역을 해봤다 먼저 마이크로서비스 아키텍쳐를 알아보기이전 모놀리식 아키텍쳐부터 알아가보자 모놀리식 어플리케이션은 어플리케이션의 모든 소프트웨어 컴포넌트가 조립되어 촘촘히 패키지화된 큰 컨테이너이다. 레거시 애플리케이션의 경우 대부분의 레거시 애플리케이션이 주로 단일 아키텍처 로 구현된다고 말할 수 있다. 프로젝트의 모든 기능이 단일 코드베이스 에 존재하는 경우 해당 애플리케이션을 모놀리식 애플리케이션이라고 말한다. 모노리식 아키텍처에서는 사용자 인터페이스, 비즈니스 코드 및 데이터베이스 호출의 모든 것이 동일한 코드베이스에 포함된다.모든 애플리케이션 관련 사항은 단일 대규모..

    [Docker] docker-compose의 docker 네트워크

    이번 포스팅을 쓴 이유로는 docker compose를 사용하면서 생겼던 트러블 슈팅 때문에 이 글을 쓰게 됐다 필자는 docker compose로 was 이미지와 데이터베이스 mongodb 이미지를 사용해서 컨테이너를 띄웠는데 아무 이상 없이 둘이 통신이 가능했다 하지만 개발 환경에서 계속 was의 코드를 변경하고 이미지로 build 해서 또다시 docker compose로 띄운다면 엄청난 시간 낭비일 것이다 그래서 docker-compose.yaml에 was와 관련된 건 주석을 하고 mongodb만 환경변수를 세팅하고 컨테이너로 띄우고 was는 그냥 로컬에서 실행시켜도 사실 둘 사이에 문제없이 통신이 가능할 것이다 여기까지도 문제없었다 통신하는데 문제가 없어서 이제 was를 빌드하고 docker ru..