전체 글 (69) 썸네일형 리스트형 RabbitMQ 기초 : Exchange, Queue, Routing Key와 ACK RabbitMQMessage Queue는 메시지를 일시적으로 저장하여 송신자(Producer)와 수신자(Consumer) 사이의 비동기 통신을 가능하게 하는 미들웨어이다.RabbitMQ에서 Producer는 메시지를 Queue에 직접 전달하는 대신 Exchange로 발행한다. Exchange는 설정된 규칙에 따라 메시지를 하나 이상의 Queue로 전달하고, Consumer는 Queue에 저장된 메시지를 가져와 처리한다.하나의 Queue를 여러 Consumer가 구독하는 경우, Queue의 메시지는 일반적으로 Consumer 중 한 곳에만 분배된다. Consumer는 메시지를 정상적으로 처리한 후 ACK를 보내 처리 완료를 알릴 수 있다.Producer → Exchange → Queue → Consumer.. Kubernetes Makefile을 읽으며 배우는 GNU make GNU makeGNU make는 복잡한 빌드 과정을 하나의 진입점(entry point)으로 관리하는 도구이다.make 명령을 실행하면 현재 디렉터리의 Makefile(또는 makefile)을 읽고, 정의된 규칙에 따라 필요한 명령을 실행한다. 실습"Hello, World"를 출력하는 간단한 Go 프로그램을 작성한다.다음과 같은 Makefile을 작성한 후 make를 이용하여 프로그램을 실행하고 빌드해본다.https://github.com/vvalvvizal/Go_study/tree/master/makefilerun: go run main.gobuild: go build -o bin/main main.goclean: rm -rf bin 실행 결과$ make rungo run main.goHello, Wo.. NestJS에서 Interface 주입 대신 추상 클래스 Interface DI지난 글에서 NestJS에서 interface는 런타임에서 사라지기 때문에 DI Token으로 사용할 수 없다는 내용을 정리했다.https://mmalmmizal.tistory.com/79 NestJS로 보는 객체 간의 의존 관계와 의존성 주입 (DI)https://mmalmmizal.tistory.com/62 TS의 런타임과 interface type 다음과 같은 인터페이스가 존재한다.인터페이스 IExchangeRepositoryexport interface IExchangeRepository { getList(): Promise>;} Spring에서는 Java의 interface가 런타임에도 유지되므로 구현체를 찾아 interface 타입으로 바로 주입할 수 있다. 반면 T.. ERC-1167 minimal Proxy Factory 패턴, CREATE2, 업그레이드 한계 ProxyProxy의 본질은 delegatecall을 이용하여 다른 컨트랙트의 코드를 실행하는 것에 있고, 오늘 살펴볼 ERC-1167도 Proxy Contract의 한 종류이다. 다만 ERC-1167은 업그레이드를 위한 Proxy가 아니라 배포 비용 절감을 목적으로 등장한 표준이다. 지난 글에서 Implementation Contract와 Proxy Contract 간의 기본 동작 원리를 조금더 자세하게 설명하고 있다.https://mmalmmizal.tistory.com/64 업그레이드 가능한 contract (Proxy 패턴)있는 기술을 배우지 않는 것은 죄악이다 왜냐면 재배포하느라 너무 고생했다 - vvalvvizal-스마트계약 업그레이드Proxy 패턴스마트 계약이 주소를 변경하지 않고도 업데이트.. Go의 표준 라이브러리와 테스트 『Go in Action』의 내용을 기반으로 학습 및 정리했습니다. 로깅(Logging)로깅은 프로그램 실행 중 발생하는 이벤트, 상태 정보, 오류 등을 기록하는 작업이다.log 패키지Go 표준 라이브러리에서 제공하는 기본 로깅 패키지이다.주요 기능Println() : 일반 로그 출력Fatal() : 로그 출력 후 프로그램 종료Panic() : 로그 출력 후 panic 발생로그 포맷(날짜, 시간, 파일명 등) 설정 가능사용자 정의 로거(Custom Logger)실제 서비스에서는 기본 로거보다 사용자 정의 로거를 사용하는 경우가 많다.주요 목적로그 파일 저장콘솔과 파일 동시 출력로그 레벨 구분로그 형식 통일Go에서는 log.New()를 이용해 별도의 로거 인스턴스를 생성할 수 있다.HTTP 요청Go는 표준.. PM2 로그 폭증으로 디스크 100% 장애가 발생한 원인과 해결 (pm2-logrotate) PM2 로그 폭증 요약PM2 로그 증가 디스크 사용량 100% PM2 데몬 동작 실패 프로세스 재시작 실패 운영 중 PM2로 관리하던 프로세스의 상태가 반복적으로 errored 상태로 변경되며 정상적으로 재시작되지 않는 문제가 발생했다.처음에는 애플리케이션 자체의 오류를 의심했지만, 로그를 확인해도 특별한 에러는 발견되지 않았다. 디스크 사용량을 확인하기 위해 다음 명령어를 실행했다.df -h 리눅스의 디스크에 대한 기본적인 이해는 지난 글을 참고하면 좋다. https://mmalmmizal.tistory.com/89 Filesystem Size Used Avail Use% Mounted ondevtmpfs 4.0M 0 4.0M 0% /devtmpfs 1.9G 0 1.9G 0% /dev/s.. PM2 Cluster Mode https://mmalmmizal.tistory.com/73 PM2 (Process Manager 2)와 ecosystempm2는 Node.js 애플리케이션을 위한 프로덕션 프로세스 매니저이다.주요 특징으로는 크래시 발생 시 자동으로 앱 재시작, 실시간 CPU/메모리 사용량을 모니터링 할 수 있고, 로그 관리, 로드 밸런싱mmalmmizal.tistory.com 지난 글에서 pm2의 정의와 여러 애플리케이션을 관리할 수 있는 ecosystem파일 등 실제로 어떻게 쓰고 있는지에 대한 기초적인 내용을 담았다. 이번 글에서는 실제 운영 환경에서 사용했던 PM2의 Cluster Mode, 로그 관리, 프로세스 모니터링 기능을 살펴보고 로그 파일 폭증으로 인해 디스크 사용량이 100%에 도달했던 사례와 이를 .. 리눅스 파일 시스템과 디스크 구조 (파티션, Swap, Mount) 리눅스 파일시스템 File System은 운영체제가 데이터를 저장하고 관리하는 방식이다.운영체제는 디스크에 저장된 데이터를 파일, 디렉토리 형태로 관리하며 사용자는 파일 시스템을 통해 데이터를 읽고 쓴다. 리눅스는 모든 파일과 디렉토리를 하나의 트리(Tree) 구조로 관리한다.Linux 디렉토리 구조 (Tree) 최상위 디렉토리인 / 를 Root Directory라고 부른다. /home 사용자 홈 디렉토리/root root 사용자의 홈 디렉토리 /etc 시스템 설정 파일/var 변경이 자주 발생하는 데이터/tmp임시 파일 저장소/proc프로세스와 커널 정보를 제공하는 가상 파일 시스템/usr실행 파일, 라이브러리, 매뉴얼/dev장치(Device)를 파일처럼 표현 디스크와 파티션 디스크 (Disk)L.. 이전 1 2 3 4 ··· 9 다음