Infra 23

[Docker] potainer (Docker UI) 구축 (3분컷..)

회사의 원격 서버에 구축을 했다. 매번 docker ps로 확인하고, 이미지도 , 네트워크도 일일이 명령어로 하다보니,,,, 아 .. 이거 UI로 보고싶은데.. 라는 생각이 들어 찾아보니 이 좋은게 있었다 ㅠㅠ....  도커 UI!!!!  완전 간단하게 Potainer 를 구축해보자!!   1. 볼륨 생성docker volume create portainer_data 2. 이미지 받고 실행docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --restart=always portainer/portainer  3. 접속IP주소:9000 기본 주소로 접속이 가능하다. 사용자명은 기본으로 a..

Infra/Docker 2024.11.13

[Kafka] Kafka Producer 압축 방법을 어떤 걸 써야할까? (gzip, snappy, lz4, zstd 성능 비교 테스트)

Kafka를 사용할 경우, Producer에서 데이터를 전송할 때 압축률(compression.type)을 지정할 수가 있는데, 자주 쓰는 4가지 압축 방법을 비교하여 포스팅을 해보려고 한다. (매번 헷갈린다..) 자주 쓰는 압축 방법은 gzip, snappy, lz4, zstd 4가지 정도가 있는데, 이 4가지를 테스트해보았다. 파티션이 1개인 Kafka Topic에 건당 10KB 데이터를 전송하여, 압축률 /속도 /CPU 사용량을 비교해보았다.  ※ 테스트 카프카 구성 스펙- 버전 : 3.8.1- 브로커 : 3개- 파티션: 1개 - 카프카 프로듀서 : 자바 API (postman으로 호출)- 사용한 모니터링 도구 : Kafka UI   1. gzip1) 100건 전송 (1MB)Kafka UI에서 좌측..

Infra/Kafka, MQTT 2024.11.07

[MQTT] MQTTX 사용해서 일정한 주기로 웹소켓 메시지 전송하기

MQTT 웹소켓을 사용하는 도중, 프론트엔드 개발자에게서 통신모듈 디버깅이 필요하다고 하며 일정한 주기로 메시지를 보내달라는 요청이 들어왔다. (예를 들어, 2초에 한번씩) 어떻게 할까 알아보던 중에, MQTTX라는 프로그램이 있는 것을 알게되었다. MQTTX는 MQTT 프로토콜을 사용하는 클라이언트 애플리케이션으로, MQTT (Message Queuing Telemetry Transport) 메시지 프로토콜을 통해 메시지를 발행하고 구독하는 기능을 제공한다.  MQTT를 다운받고, 커넥션 설정해주고, 쏴주면 끝이다.  1. MQTTX 다운받기https://mqttx.app/ MQTTX: Your All-in-one MQTT Client ToolboxMQTTX: A powerful, all-in-one ..

Infra/Kafka, MQTT 2024.08.26

[MQTT] Kafka → 웹 소켓 메시지 전송 테스트(Vue3으로 화면 만들어 테스트)

카프카에서 웹소켓으로 메시지를 전송하여 실시간 처리를 해야한다. 지금 나는 백엔드 개발자인데, 프론트에 내가 만든 mqtt 정보 (url, 인증정보, 포트 등) 을 제공해주어야 한다.  백엔드 단에서는 테스트가 모두 완료되었지만, 제공하기 전에, 내가 직접 vue 프론트 프로젝트를 만들어서 내가 보낸 카프카 메시지를 잘 받아오는지 확인하고 싶었다.  백엔드 간단한 코드와 vue 코드를 직접 작성하고, 테스트 하는 과정을 정리했다.    사용한 기술 및 버전 스프링 부트 : 2.5.4자바 : 1.8카프카  : 3.7.0MQTT : 1.2.5 (vue 에서는 5.9.1)vue  : 3.2.13 백엔드 코드1. 차량 ID 별로 MQTT 토픽 생성하여 전송먼저 카프카 컨슈머에서 데이터를 param으로 받고,ob..

Infra/Kafka, MQTT 2024.08.09

[WAS 이중화] 서로 다른 Jar 를 Fail over 하는 방법 (Java 코드 구현/ JSch 라이브러리 사용)

카프카 스트림즈 애플리케이션을 이중화 하기 위해, 원래 자바 프로그램에서 빼고 따로 프로젝트를 만들어서 포트만 다르게 하여 jar 로 만들었다. 운영 시, 부하 문제로 카프카 스트림즈 애플리케이션이 죽을 수도 있을 것 같아서 따로 생성을 했다.  사전 작업으로는  8088, 8089 포트를 지정하여 jar로 만든 후, 원격 서버에 scp 명령어로 전송한 상태이다.  JSch 라이브러리를 사용하여 Java에서 SSH 연결을 설정하여 jar1을 10초에 한번씩 헬스체크하고, jar1이 죽으면 jar2를 원격 서버에서 실행하는 방법으로 코드를 구현했다. 1. 자바 코드 구현1. JSch 라이브러리 추가먼저, Maven을 사용한다면 pom.xml 파일에 JSch 라이브러리를 추가 com.jcraft ..

Infra/리눅스 2024.07.16

[MQTT,Kafka] EMQX 웹 소켓 사용하여 대시보드에 실시간 데이터 보여주기 (Throughput 테스트)

차량의 실시간 위치 데이터 (위도, 경도) 를 MQTT를 사용한 웹소켓으로 대시보드에 실시간으로 변하는 데이터를 보여주었다. 카프카 컨슈머에서 받은 데이터를 바로 MQTT로 메시지 전송하였다. MQTT 프로토콜을 지원하는 메시지 브로커인 EMQX 오픈 소스 브로커를 사용하였다. 실시간으로 데이터를 보여주는 것이 목적이었고, 그 다음으로는 초당 몇건을 보여줄 수 있는지를 테스트 했다.   스프링 부트 버전 : 2.5.4자바 버전 : 1.8카프카 버전 : 3.7.0MQTT 버전 : 1.2.5 pom.xml 의존성을 아래와 같이 받아준다.  org.eclipse.paho org.eclipse.paho.client.mqttv3 1.2.5 org.springframework.integrati..

Infra/Kafka, MQTT 2024.07.11

[Kafka] broker scale out/ scale in (카프카 브로커 스케일 아웃/스케일 인)

카프카 브로커를 스케일 아웃 하는 것은 처리량을 늘리기 위한 방법은 아니다. (처리량을 늘리려면 가장 먼저 파티션을 늘려야 한다)카프카는 리더 브로커만 실질적으로 프로듀서와 통신하고 나머지 팔로워 브로커는 복제만 담당하기 때문이다.  하지만 혹시 모를 이슈 상황을 대비해 카프카 브로커를 스케일 아웃 해보았다.현재 카프카 브로커는 3개이며 5개로 스케일 아웃을 하고,  다시 3개로 스케일 인을 해보았다.  카프카 버전 : 3.7.0총 소요시간 : 8시간 (인증세팅이 없으면 1시간도 안걸리는 작업이지만, 카프카 브로커 sasl 인증을 추가해 줄 때 Credential을 자꾸 추가해 주는 실수를 해서... 오래 걸렸다. 한번 주키퍼에 저장된 Credentail은 다시 지정해줄 필요가 없다. 인증 프로세스 숙지..

Infra/Kafka, MQTT 2024.07.01

[Kafka] 카프카 컨슈머에서 받은 데이터 MariaDB로 전송하기

카프카 스트림즈로 필터링된 토픽을 컨슈밍하는 컨슈머를 만들고, 그 컨슈머에서 받은 데이터를 DB로 insert하도록 하는 기능을 구현했다.  카프카 커넥트로 하려고 했으나, 번거로워서 직접 컨슈머 코드 안에서 dao를 사용하여 db에 접근하여 insert 하도록 했다.  전체 코드이다.  프로듀서import org.apache.kafka.clients.producer.*;import java.util.Properties;public class KafkaProducerTest { /** * SASL 인증을 위한 JAAS Template */ private static final String JAAS_TEMPLATE = "org.apache.kafka.common.security.s..

Infra/Kafka, MQTT 2024.06.18

[Kafka] 카프카 브로커 하나씩 다운시킨 후 메시지 전송 테스트 (고가용성 테스트, replication test)

kafka1, kafka2, kafka3 중에 하나씩 브로커를 죽여보고 메시지를 전송해보려고 한다. 업무에 kafka 를 적용하여 운영할 예정이라, 브로커 서버가 죽었을 때 메시지가 정상적으로 전송 되는지 고 가용성 테스트를 해보기로 했다.  목차1. directTest 토픽의 partition 3들의 복제 상태 확인2. 프로듀서 메시지 전송 확인3. 브로커 하나씩 죽여보기4. 브로커 하나씩 다시 살리기 결론 ✅ 1. directTest 토픽의 partition 3들의 복제 상태 확인현재 토픽의 복제 상태를 확인하는 명령어kafka-topics.sh --bootstrap-server kafka1:9092 --topic directTest --describe --command-config /opt/bitn..

Infra/Kafka, MQTT 2024.06.10

[Kafka] 스프링 부트에 Kafka Streams 적용하기

카프카 스트림즈(Kafka Streams)란?  카프카 스트림즈란 연속적인 이벤트 스트림이 들어올때마다 그때그때 처리하고 분석하여 의미있는 정보를 추출하고 실시간으로 작업을 처리하는 자바 라이브러리 기능이다.  이전에는 카프카 컨슈머 및 프로듀서 조합으로 필터링하여 다시 토픽에 넘겨주는 작업을 해주었지만 카프카 스트림즈는 매우 간단한 스트림즈 DSL 이란 기능으로 강력한 필터링 기능을 제공한다.  아래 그림으로 비교를 해보자.   기존의 필터링 방식  카프카 스트림즈를 이용한 필터링 방식또한 내장 DB 인 Rocks DB를 이용하여 key-value Store 기능도 제공한다.   2. 카프카 스트림즈 예제 코드  간단한 스프링부트 코드로 스트림즈 예제를 실습해보았다.  1. 스트림즈 DSL 라이브러리 ..

Infra/Kafka, MQTT 2024.06.07

[CentOS] CentOS8에 JAVA설치하기

CentOS 에는 기본적으로 자바가 깔려있다. 하지만 개발버전이 빠져있다고 한다.java -version으로 하면 기본 jdk가 조회되지만, javac -version 명령어를 쳐보면 나오지 않는다.이제 jdk를 설치해보려고 한다. JDK 설치다운 가능한 JDK 목록 조회yum list java*jdk-devel 나는 java-1.8.0-openjdk-devel.x86_64 를 다운받으려고 한다.   jdk 다운로드 yum install java-1.8.0-openjdk-devel.x86_64 -y java -version, javac-version 으로 확인해보면 이제는 잘 조회되는 것을 확인!! 환경 변수 설정끝이 아니다. 환경변수도 설정해주어야 한다 ㅠㅠ(귀찮) 1) 자바 심볼릭 링크 경로 조회 j..

Infra/리눅스 2024.06.04

[Kafka] 이미 생성된 토픽의 replication factor 변경하기

목차 원래는 토픽 생성 시에 설정 값으로 준다replication-factor를 설정하는 것은 토픽.sh에서 토픽을 생성할 때 설정 값으로 주는 것이다. 아래처럼….$ kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 2 --partitions 10 --topic MyTopic RF를 변경해보자그런데 나는 replication factor를 3으로 변경하고 싶었다. 브로커가 3이기 때문에!일단 토픽을 describe 명령어를 써서 상세 조회 해보자. 1. RF 상세 조회로 현재 RF 값 확인kafka-topics.sh --bootstrap-server kafka1:9092 --topic directTest --d..

Infra/Kafka, MQTT 2024.05.27

[VirtualBox] Rocky8 에 VirtualBox 설치 (CentOS계열)

카프카를 운영할 서버 하나를 할당 받았다. 그 동안은 로컬환경에서 테스트를 했는데, 이제는 실무용 서버에 테스트를 하려고 한다. (카프카 서버가 자꾸 죽는다 ㅠㅠ)  혹시 모르니 업무용 CentOS에도 Virtual Box를 설치해서 안전하게 카프카 운영 환경을 테스트를 해보려고 한다.   1. GPG 키를 시스템에 설치sudo rpm --import https://www.virtualbox.org/download/oracle_vbox_2016.asc 이 명령어를 실행하면 VirtualBox 패키지의 GPG 키를 시스템에 추가하여 VirtualBox 패키지를 설치하거나 업데이트할 때 GPG 키 검사를 통과한다.  설치하지 않으면 GPG 키 에러~~ 하면서 에러가 뜬다. (이 것 때문에 한참 헤맸다 ㅠㅠ)..

Infra/리눅스 2024.05.20

[Grafana] Springboot 서버가 꺼지면 Slack 으로 알림받기

카프카 개발 및 운영을 시작하면서 그라파나와 연동을 하게 되었다. 그라파나의 강력한 기능인 알림기능을 사용하고 싶어서 먼저 스프링부트 서버가 꺼지면 슬랙으로 알림을 받는 과정을 먼저 연습하며 정리해보았다.  목차1. 슬랙 웹훅 URL 생성2. 그라파나 연동   1. Contact points 추가  2. Alert rules 설정  3. Notification policies 설정3. 테스트 1. 슬랙 웹훅 URL 생성 슬랙에 먼저 가입하고 워크스페이스를 생성해준다. (이 과정은 설명 생략) 우클릭 → 채널 세부정보 보기 통합 → 앱 → 앱추가 webhook 검색하여 Incoming WebHooks 설치 Slack에 추가 클릭 아까 만들었던 워크스페이스 명을 선택하고 수신 웹후크 통합 앱 추가 웹후크 U..

Infra/Kafka, MQTT 2024.05.16

[Docker] Docker 기초 정리

생활코딩의 Docker 입문수업을 정리한 자료입니다.목차1. 도커 기초 명령어 정리1. 이미지로 컨테이너 만들기2. 컨테이너 중지/재실행 시키기3. 컨테이너 로그 확인하기4. 컨테이너 삭제하기5. 이미지 삭제하기2. 네트워크1. 컴퓨터에 직접 웹서버를 설치했을 경우2. 도커로 웹서버를 설치했을 경우3. 포트포워딩 하기3. 호스트와 컨테이너의 파일시스템 연결1. 호스트와 컨테이너가 연결되지 않았을 때의 문제2. 볼륨 옵션을 주고 컨테이너 생성하기 1. 도커 기초 명령어 정리도커를 사용할 때 매우 자주 사용하는 명령어이다.1. 이미지로 컨테이너 만들기docker run httpd // httpd 이미지를 실행시켜서 컨테이너를 만들어라docker run --name ws2 httpd // httpd 이미지를 ..

Infra/Docker 2024.05.15

로컬 VM에 Docker 및 Kafka 설치 (docker-compose.yml작성)

로컬 VM에 Docker를 설치하고, 그 안에 카프카를 설치해서 콘솔 테스트까지 해보는 과정을 정리했다.  목차1. Docker 설치  1) yum 패키지 설치 2) 도커 설치 3) 도커 실행 4) docker-compose 설치 2. Docker Hub에서 카프카 및 카프카UI 이미지 내려받기 1) 카프카 이미지 내려받기 2) 주키퍼 이미지 내려받기 3) 카프카 UI 이미지 내려받기 3. docker-compose.yml 설정 1) docker-compose.yml 작성 2) VM에서 포트포워딩 해주기 4. Kafka Cluster 실행 1) docker-compose 실행 2) docker-compose 실행 확인 5. Kafka Console Test 1) Container 내부 쉘 접속 2) To..

Infra/Kafka, MQTT 2024.04.22

[Virtual Box] Virtual Box에 SSH 설치 + MobaXterm으로 원격 접속하기

VirtualBox에서 작업하다 보면 호스트 키, 복사/붙여넣기 등 불편한 부분이 많아서, SSH를 통해 접속 프로그램(MobaXterm 등)으로 원격 접속해서 편하게 작업하려고 한다. ​1. VM에 SSH 설정접속 프로그램인 MobaXterm 사용을 위해 로컬 CentOS 7에 SSH 설정을 하려고 한다. which sshd 명령어를 사용해 현재 로컬 Rocky Linux에 SSH가 설치되어 있는지 확인한다.   경로가 /usr/sbin/sshd 에 있다고 나타났다.  1) port 설정  port 설정을 해주어야 한다. vi /etc/ssh/sshd_config #Port 22 라고 되어있는 부분을 주석을 풀어준다. 만약 22번 말고 다른 포트번호를 사용하고 싶다면 변경해주어야 한다! 2) 로그인 제..

Infra/리눅스 2024.04.17

[Rocky Linux] Virtual Box에 Rocky Linux 9 설치하기

앞 포스팅에서 Virtual Box 설치를 해보았다. ↓ Virtual Box 설치 포스팅 https://yeees.tistory.com/453 [Virtual Box] window10에 Virtual Box 설치회사에서 신규프로젝트를 시작하는데, 백엔드와 Kafka를 담당하기로 했다. 그래서 회사 서버에 Kafka를 설치하기 전에 가상머신에 먼저 설치를 해보려고 한다. 1. Virtual Box 설치하기 https://www.virtualbyeees.tistory.com 1. Locky Linux 다운로드 이제 이 곳에 우리 회사에서 사용 중인 CentOS와 유사한 (무료인) Locky Linux를 설치해볼 예정이다. 회사 서버에 바로 하기가 겁이 나기 때문에. ...  Locky Linux는 아래 공..

Infra/리눅스 2024.04.17

[Virtual Box] window10에 Virtual Box 설치

회사에서 신규프로젝트를 시작하는데, 백엔드와 Kafka를 담당하기로 했다. 그래서 회사 서버에 Kafka를 설치하기 전에 가상머신에 먼저 설치를 해보려고 한다. 1. Virtual Box 설치하기 https://www.virtualbox.org/ Oracle VM VirtualBox Welcome to VirtualBox.org! News Flash Notice March 21th, 2024Change of login server. Starting today, Oracle Single Sign On will ask for your account credentials at signon.oracle.com and the username and password are now have to be entered ..

Infra/리눅스 2024.04.16

파크골프 젠킨스 구축..

아이템 생성  기존처럼 pom.xml 로 작성했다가 , 아래와 같이 pom.xml 을 찾지 못하고 빌드를 실패했다.    서버에서 pom이 어디있는지 찾아보니,  /var/lib/jenkins/workspace/park-golf/parkGolf/pom.xml 이 경로에 있었다.  그래서 상대경로인 parkGolf/pom.xml 로 수정해주었다.  빌드 성공!!  빌드 콘솔 창을 보니, target 폴더가 생성이 되고, 그 안에 jar파일이 잘 떨어졌다. cd var/lib/jenkins/workspace/park-golf/parkGolf/targetjava -jar parkGolf-0.0.1-SNAPSHOT.jar 더보기java -jar 로 실행해보니, 로깅파일 권한이 없다는 에러가 나오면서 빌드가 실패..

Infra/Jenkins 2024.02.07

자주쓰는 리눅스 명령어 알파벳 순서로 정리 / 명령어 옵션 정리

리눅스 명령어 정리 awk 텍스트 데이터를 조작하고 보고서를 생성하는데 사용되는 강력한 패턴 스캐너 및 처리기. bg 작업을 백그라운드에서 실행하도록 하는 명령어. bzip2 파일을 Bzip2 형식으로 압축하거나 해당 형식에서 압축을 해제하는데 사용되는 명령어. cat 파일의 내용을 화면에 출력하는 명령어. cd 디렉토리 변경을 위한 명령어. chgrp 파일이나 디렉토리의 소유 그룹을 변경하는 명령어. chmod 파일이나 디렉토리의 권한을 변경하는 명령어. chown 파일이나 디렉토리의 소유자나 소유 그룹을 변경하는 명령어. clock CMOS 시간을 조절하는 명령어. cp 파일을 복사하는 명령어. crontab 주기적으로 실행되는 작업을 설정하는데 사용되는 명령어. date 시스템의 현재 날짜와 시간을..

Infra/리눅스 2024.01.12

[리눅스]MobaXterm 설치

신규 프로젝트에 젠킨스를 구축해보라는 팀장님의 명이 있어서 서버에 접속을 시도했다. git bash로만 리눅스 서버를 다루다가 회사 선임님께서 좋은 툴을 알려주셨다. MobaXterm 이라는 툴인데 더 편하다고 한다. 아래 사이트에서 무료다운로드 하면 된다. https://www.softonic.kr/download/moba/windows/post-download Download MobaXterm 23.1 - free - latest version STG Cache Audit Internet Explorer 캐시에서 사이트, URL, 쿠키 및 방문 기록 목록을 쉽게 볼 수 있습니다. www.softonic.kr 다운로드가 다 되면 창을 열고, 왼쪽 상단 Session 클릭 Bookmark settings..

Infra/리눅스 2024.01.09

[Docker] 도커의 개념과 구조 및 명령어

1. Docker란 Docker는 가상 머신처럼 독립된 실행환경을 만들어주는 것으로, 운영체제를 설치한 것과 유사한 효과를 낼 수 있지만, 실제 운영체제를 설치하지 않기 때문에 설치 용량이 적고 실행 속도 또한 빠르다. 예전에는 윈도에 VM Ware와 같은 가상 머신을 설치하였으나 최근에는 리눅스 계열에서 Docker가 그 역할을 대신한다. 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다. 2. Docker image 와 container docker Images(read..

Infra/Docker 2022.12.30