전체 글

·Project/ST00CK
순서상 Jenkins Pipeline 에 관해서 작성할 때 Dockerfile 에 관해서도 작성했어야 했는데 다 작성하고 보니 생각나서 부연설명으로 작성해보도록 한다.1. Dockerfile 이란 ?Dockerfile 은 Docker 컨테이너를 생성하기 위한 설정 파일로, 컨테이너를 실행하기 위한 환경을 자동으로 구성하는 명령어의 모음이다. 이를 통해 일관된 환경에서 애플리케이션을 실행하고 배포할 수 있다. 그렇기 때문에 모든 서비스마다 Dockerfile 은 다르게 구성되어 있으며, 해당 설정 파일을 제대로 작성해야 Jenkins Pipeline 에서 제대로 된 이미지가 빌드되어질 수 있다. 1.1 Dockerfile 의 주요 역할이미지 자동화 → 매번 수동으로 환경을 설정할 필요 없이 Dockerfi..
·Project/ST00CK
저번 글에서는 Jenkins Pipeline 설정에 관해 작성하였다. 이번 글에는 나머지 deployment.yaml 와 ArgoCD 의 배포 과정에 대해서 작성해보도록 한다.1. ArgoCD 사용 이유ArgoCD 는 기본적으로 OKD/Kubernetes 의 배포(Deployment) 관리를 쉽게 하기 위해 사용하는 GitOps 기반의 CD 도구이다. 따라서 CD 를 위해 반드시 사용해야 하는 도구는 아니다. 즉, 실제 Pod 의 배포 및 관리는 OKD 가 담당하지만, ArgoCD 를 활용하여 이를 더 쉽게 관리하고 자동화할 수 있기 때문에 사용하게 되었다.조금 더 쉽게 이해하기 위하여 굳이 비유하여 표현하자면 OKD 는 Docker 와 비슷하고, ArgoCD 는 Docker Compose 와 비슷한 맥..
·Project/ST00CK
채팅서비스가 얼추 완성되어 프론트에서 추가 요청사항이 있거나 버그 수정을 요청하기 전까지 시간이 조금 비어 DevOps 를 진행해보기로 하였다. 현재 외부로 배포되어진 API 는 User 와 Chat 서비스 이고, 계속해서 배포해야 할 서비스는 alert, frined, front 등의 서비스이다. 따라서 기존 설정되어 있는 deployment 와 Jenkins Pipeline 을 수정하여 배포하기를 담당하였다.1. 프로젝트 아키텍쳐현재 필자의 프로젝트는 MSA 로 구성되어 있으며, OKD(Openshift Kubernetes Distribution), Kubernetes 기반의 컨테이너 오케스트레이션 플랫폼을 사용중에 있다. API Gateway 로는 ApiSix 를 사용중이고, 내부통신을 위한 Ser..
·Project/ST00CK
현재 나의 코드에서는 KafkaJS 를 활용한 Consumer 및 Producer 를 구성하고 있지만, 직접적으로 파티셔닝 기능을 활용하지 않고 작동시켰다. 하지만 KafkaJS v2.0.0 에서는 새로운 기본 파티셔너 적용으로 인해 경고가 발생하고 있다. 경고문은 다음과 같다.{"level":"WARN","timestamp":"2025-02-09T11:21:23.271Z","logger":"kafkajs","message":"KafkaJS v2.0.0 switched default partitioner. To retain the same partitioning behavior as in previous versions, create the producer with the option \"createPa..
·개인공부
1. UML 의 개요시스템 분석, 설계, 수현 등 시스템 개발 과정에서 시스템 개발자와 고객 또는 개발자 상호간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어이다.구성 요소 : 사물(Things), 관계(Relationship), 다이어그램(Diagram) 2. 사물(Things)모델을 구성하는 가장 중요한 기본 요소로, 다이어그램 안에서 관계가 형성될 수 있는 대상들을 말한다.구조 사물(Structual Things)시스템의 개념적, 물리적 요소를 표현클래스, 유스케이스, 컴포넌트, 노드 등행동 사물(Behaviroal Things)시간과 공간에 따른 요소들의 행위를 표현상호작용, 상태 머신 등그룹 사물(Grouping Things)요소들을 그룹으로 묶어서 표현패키지주해 사물..
·Project/ST00CK
TLS 설정을 마치고 재배포 후에 생긴 새로운 이슈와 해결방법에 대해 작성한다. 1. 이슈TLS 설정 이후 Socket.IO 가 정상적으로 작동하는가 싶었지만, 간헐적으로 연결이 끊겼다가 다시 붙는 이슈가 발생했다. 발생할 수 있는 원인은 크게 다음과 같다.1.1 네트워크 및 환경적 요인WebSocket 업그레이드 확인 : HTTP → WebSocket 프로토콜 업그레이드가 정상적으로 이루어지는지 확인네트워크 안정성 : 클라이언트와 서버 간 네트워크에서 패킷 손실이나 지연이 발생하지 않는지 확인방화벽 및 NAT 설정 : WebSocket 트래픽 방화벽이나 NAT 에서 차단되거나 변조되지 않았는지 확인리소스 문제 : 서버의 cpu, ram 등의 리소스 문제가 없는지 확인Kafka 연결 전 기본 Sockek..
·Project/ST00CK
Socket.IO 와 Kafka 설정을 마치고 배포 하여 테스트를 진행하였다. 해당 과정에서 TLS 설정 문제로 인해 Socket.IO 연결이 계속해서 끊기는 현상이 발견하였다. 따라서 이번 글에서는 원인 규명과 해결 방법에 대한 과정을 적는다. 1. 배포환경에서 난 오류1.1 Kafka 연결 오류이전에 KafkaConsumer.js 에서 Consumer 연결을 시도하는 코드가 있다. 리소스 누수를 방지하기 위하여 Consumer 가 최대 다섯번 동안 연결을 시도하고 안되었을 경우 연결을 취소하고 로그를 띄우게 구현하였다. 해당 로그를 보게 되면 현재 다섯번 시도하였고, 연결 상태가 끊어졌다는 오류를 배출하고 있다. 로컬환경에서는 정상적으로 작동하지만 배포환경에서 작동하지 않는 것을 보니 TLS/SSL ..
·Project/ST00CK
순서가 조금 바뀌었긴 했지만 어쨌든 gRPC 설정을 마칠 무렵 Kakfa 세팅이 되어서 node 와 Kafka 를 연결한 과정에 대하여 작성한다.  1. 디렉토리 구조필자의 디렉토리 구조는 다음과 같다. 설정 파일을 작성하는 Config, Producer, Consumer 를 나누었고, 환경변수의 경우 .env 를 활용하였다.chat/├── src/│ ├── config/│ │ ├── kafkaConfig.js ---> Kafka 설정 파일 (Kafka 브로커, 토픽 등 설정)│ ├── grpc/│ ├── routes/│ ├── services/│ │ ├── KafkaConsumer.js ---> Kafka Consumer 관련 로직│ │ ├── ..