DevOps

    도커 볼륨은 Commit 했을 때 이미지에 반영될까?

    도커 Volume을 사용하면 도커가 관리하는 호스트 파일 시스템의 일부에 데이터가 저장된다. 볼륨용 컨테이너를 사용해도 되고, 직접 호스트의 디렉토리와 매핑해서 볼륨으로 사용해도 된다. 도커 이미지에서의 볼륨을 사용해도 된다. 이때는 자동으로 호스트의 임시 디렉토리와 매핑된다. 어떤 디렉토리와 매핑되는지는 알 필요 없다. 자세한 내용은 5. Docker Volume 사용 - OpenShift - rockPLACE Wiki 여기에도 나와있다. 그렇다면, 오늘의 궁금증인 도커 볼륨은 Commit을 했을 때 변경사항이 이미지에 반영될까? Docker Container에서 Volume으로 지정된 영역에 저장된 데이터는 Docker Commit을 이용하여 변경된 부분을 새로운 이미지로 저장하여도 이미지에 반영되지..

    무중단 배포 적용하기

    목차 무중단 배포란? 프로젝트의 기존 Infra 구조 프로젝트의 기존 배포 흐름 기존 배포 흐름의 문제점 Rolling Update 배포 Blue-Green 배포 프로젝트에 무중단 배포 적용하기 프로젝트의 기존 Infra 구조 현재 보고 또 보고 서비스는 다음과 같은 구조로 구성되어있다. Reverse Proxy — WAS1 —— DB \— WAS2 —/ ㅋㅋ.. 조금 빈약한 그림이지만 말로 설명해보자면 앞단에 웹 서버로 Nginx를 두어 리버스 프록시의 역할을 수행하고 있으며 뒤에 WAS가 2대 띄워져있는 상황이다. (DB Replication 구조는 나타내지 않았다.) 리버스 프록시는 두 인스턴스를 upstream 서버로 보고, 요청을 보낸 클라이언트의 ip를 hashing하여 두 서버로 적절히 요청..

    도커의 구조를 간략하게 알아보자

    다섯줄 요약 도커의 구조는 크게 클라이언트/서버 두가지로 나뉜다. 사용자가 docker version과 같은 도커 명령어를 입력하는 것은 도커 클라이언트를 이용하는 것이다. 입력한 도커 명령어는 소켓을 이용해 도커 데몬(도커 서버)에게 명령어를 전달한다. 도커 데몬은 명령어를 파싱해 해당하는 작업을 수행하고, 도커 클라이언트에게 결과를 반환한다. 도커 클라이언트는 전달받은 결과를 사용자에게 출력한다. 도커는 클라이언트로서의 도커와 서버로서의 도커로 나뉜다. 실제 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체는 도커 서버이고, 이는 dockerd 프로세스로서 동작한다. dockerd: docker daemon 도커 데몬은 API 입력을 받아 도커 엔진의 기능을 수행한다. 이 때, 사용자가 이 API를..

    Cloudwatch 이상 지표를 슬랙 알람으로 받기

    이 글에서는 Cloudwatch 이상 지표를 슬랙 알림으로 받는 것을 설정하면서 얻었던 팁 및 주의점을 작성하기 위한 포스팅이므로, 실제 연동하는 방법은 jojoldu님의 블로그 링크로 대체한다. (jojoldu 님의 블로그에 매우 자세히 나와있다.) 블로그 링크는 글 하단 레퍼런스에 작성해두었다. jojoldu님의 블로그를 읽으면서 사소한 부분이나 놓칠 수 있는 부분을 주의점으로 남겨놓았기에 글 맨 아래 레퍼런스를 읽기 전 미리 확인하고 가면 도움이 될 것이라고 생각한다. Cloudwatch 이상 지표를 슬랙 알림으로 전송 시 주의할 점 Lambda 권한이 있거나, IAM 권한이 있는 경우에만 가능하다. 이 권한이 없으면 EMAIL 알림만 가능하다. (SNS를 표준으로 생성하여) 권한이 없다면 개인 계..

    용어 정리

    NAT란? NAT (Network Address Translation) IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술 왜 NAT를 이용할까? 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP 주소를 사용해서 인터넷에 접속하기 위함 IPv4의 주소 부족 문제를 해결하기 위한 방법으로 고려되었으며, 주로 사설 네트워크 주소를 사용하는 망에서 외부의 공인망과의 통신을 위해서 네트워크 주소를 변환하는 것 공인망과 사설망 사이에 방화벽을 설치해 외부 공격으로부터 사용자의 통신망을 보호하는 기본적인 수단으로 활용할 수 있다. 왜? 외부와 연결하는 라우터에 NAT를 설정할 경우 라우터는 자신에게 할당된 공인 IP 주소만 ..

    내도메인.한국을 사용할 때 유의할 점

    할당된 도메인은 3개월간 사용 가능하다. 3개월이 지나면 새로운 도메인을 발급받아야한다. 따라서 기간에 유의하여 사용해야한다. kro.kr을 사용할 때 letsencrypt 발급 관련 오류가 발생하는 경우가 있다. 이 때, 저녁/새벽 시간에 하면 될 때도 있다.. A레코드에 연결할 IP를 작성하면 DNS에 해당 도메인과 ip의 정보가 등록되어, 도메인으로 접속이 가능해진다. TLS 관련 설정을 할 때, TXT란을 이용하여 사용할 수 있다. TXT는 또한 구글 검색에 노출되는 용도로서 발급받은 값을 작성하여 식별값으로 이용할 수 있다. CNAME은 말그래도 별칭을 나타낸다. 해당 무료 도메인과 연결될 또다른 도메인이나 ip를 입력할 수 있다. 추가적으로 A레코드는 여러개를 등록할 수 있다. 서브도메인과 관..

    [Letsencrypt] 인증서 갱신 에러

    계기 letsencrypt 인증서는 3개월 단위로 만료되기 때문에 재발급을 필요로한다. 따라서 letsencrypt를 사용하고 있는 프로젝트의 인증서를 정기적으로 재발급해주기 위해 crontab과 certbot을 이용하려 한다. 인증서 갱신을 하려고 하는데, 다음과 같은 문구가 뜨면서 인증서 갱신이 실패한다. Attempting to renew cert (cert-test.p-e.kr) from /etc/letsencrypt/renewal/cert-test.p-e.kr.conf produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration. The erro..

    [Spring boot] AWS S3 연동 관련 에러 해결 모음

    CloudFormation 관련 에러 에러 내용 요약: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cloud.aws.core.env.ResourceIdResolver.BEAN_NAME' ~ cloudformation ~ spring-cloud-starter-aws 의존성을 사용해서 연동하게 되면 프로젝트 실행 시 기본으로 CloudFormation 구성을 시작한다. 따라서 설정한 CloudFormation이 없으면 프로젝트 실행이 되지 않아서 발생하는 에러이다. 해결책 // .properties cloud.aws.stack.auto=false // .yml..

    CI/CD란?

    CI (Continuous Integration) 지속적 통합은 구성원들이 작업한 코드를 통합하는 것을 의미한다. 예를 들어 Git과 같은 형상 관리 시스템에 구성원들로부터 approve된 소스코드들을 정기적으로 통합하는 것을 CI라고 하고, 이를 시행해주는 도구를 CI tool이라고 한다. CI 시스템을 구축하지 않은 경우 개발된 소스코드를 형상관리 서버에 커밋하면 별도의 품질관리를 거치지 않고, 막바지에 통합하여 테스트를 진행하게 된다. 하지만 CI 시스템을 구축하면 CI 서버는 형상관리 서버의 통합된 소스코드를 테스트하고, 코드 스멜이 없는지 Code Inspection을 수행하는 등 지속적으로 코드의 결함 여부를 검증할 수 있다. ex. Jenkins, Github Actions CD (Conti..

    정적 분석 도구 Sonarqube 도입하기

    SonarQube Overview 소나큐브는 프로그래밍 언어의 버그, 코드 스멜, 보안 취약성과 같은 정적 분석과 자동화된 리뷰를 수행하여 코드 품질의 지속적인 인스펙션을 지원하는 플랫폼이다. 정적 분석이란? 프로그램의 실행 없이 코드를 분석하는 것. 테스트 커버리지를 확인할 수 있는 Jacoco도 정적 분석 도구라고 불린다. 코드 스멜이란? 프로그래밍 코드에서 더 심각한 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징을 말한다. Why SonarQube? 레퍼런스가 많다. Github이나 Jenkins와의 연동을 통해 자동 정적 코드 분석을 구성할 수 있다. 소나 큐브 적용까지의 대장정에 앞서 코드 커버리지에 대해서 알아보자. 코드 커버리지에 대해서 알아보기 Jacoco에 대해서 알아보기 소나큐..