전체 글323 클러스터(Cluster) 정의 - 여러 컴퓨터 또는 서버가 네트워크를 통해 상호 연결되어 작동하는 컴퓨터 시스템의 집합 - 노드(Node) = 클러스터를 구성하는 각 컴퓨터 또는 서버 장점 웹 기반의 중앙 집중 관리 멀티 마스터 클러스터로 각 노드가 모든 관리 작업을 수행할 수 있음 구성 파일을 데이터베이스 기반 파일 시스템으로 저장하고 Corosync로 모든 노드에 실시간 복제 가능 물리적 호스트 간에 가상 머신과 컨테이너의 손쉬운 마이그레이션 가능 빠른 배포 가능 방화벽 및 HA와 같은 클러스터 전체 서비스를 활용할 수 있음 단점 복잡성과 관리 어려움: 클러스터를 설치하고 유지보수하기 위해서는 고급 기술 및 전문 지식이 필요합니다. 복잡한 환경에서 여러 노드를 관리하고 상호 작용하는 것은 도전적일 수 있습니다. 고가의 하드웨.. 2023. 12. 13. CLI vs REST 비교 CLI(Command Line Interface) REST(Representational State Transfer) 프로토콜 다양한 프로토콜 사용 가능 HTTP 환경 주로 로컬에서 실행하므로 외부 요인 영향 X 네트워크를 통해 통신하여 외부 요인 영향 O 비동기 기본적으로는 동기적 기본(Default) 없이 동기 / 비동기 가능 데이터 크기 주로 작은 사이즈 대량 사이즈 가능 속도 비교 - 로컬에서는 일반적으로 CLI 방식이 빠를 수 있지만 다루는 데이터의 크기와 네트워크 환경에 의해서 REST 방식이 더 빠를 수 있는 가능성이 존재함 2023. 12. 13. Ceph 정의 - 여러 스토리지들을 클러스터로 묶어 하나로 보이게 하는 객체 기반 분산형 스토리지 - Ceph 하나로 Object Storage, Block Storage, File Storage 인터페이스를 모두 제공함 - Ceph 클러스터에 저장된 모든 데이터는 객체(RADOS → 객체 기반)로 표현 RADOS(Reliable Autonomic Distributed Object Store) - Ceph의 데이터 접근에 대해 근간을 이루는 서비스 - 객체 기반으로 설계됨 - Object Storage(LIBRADOS, RGW), Block Storage(RBD), File Storage(Cephfs) 인터페이스를 모두 제공 - 인터페이스의 종류와 상관없이 데이터는 RADOS Object 포맷으로 변환되어 Cep.. 2023. 12. 11. Socket.io와 WebSocket 비교 공통점 - 이벤트 기반의 실시간 양방향 통신 차이점 1. Socket.io는 웹 소켓 외에도 폴링 등 다양한 트랜스포트를 지원. 이로 인해 다양한 환경에서도 동작할 수 있으며 이벤트 기반의 통신을 간편하게 구현할 수 있는 방법을 제공 2. socket.io는 연결이 끊겼을 때 자동으로 재연결을 시도하고, 유실된 패킷을 처리함 3. WebSocket은 오래된 버전의 웹 브라우저는 미지원하지만 Socket.io는 상관 X 4. WebSocket은 HTML 5 표준기술이며 Socket.Io는 라이브러리 5. WebSocket에는 room 개념 존재 X (Socket.io는 room 개념이 있어 일부 클라이언트들에게만 데이터를 전송하는 브로드캐스팅 가능) 6. WebSocket은 더 가벼우며(빠르며) 순수한 웹.. 2023. 11. 27. java.util.HashSet - java.util 패키지로 set을 다루기 위한 다양한 메소드들이 포함되어 있음 - Set(인터페이스) → HashSet(구현체) CRUD 메소드 - HashSet.add() = 원소 하나 추가 - HashSet.addAll() = 모든 원소 추가 - HashSet.clear() = 모든 원소 삭제 - HashSet.remove() = 해당 원소 삭제 - HashSet.removeAll(배열) = 해당 배열에 있는 원소들을 지정한 HashSet에서 삭제 - HashSet.removeIf(조건) = 해당 조건(람다식)을 만족하는 원소 삭제 - HashSet.clone() = 지정한 HashSet 복사 - HashSet.get() = 지정한 인덱스에 있는 원소 반환 - HashSet.forEach() =.. 2023. 11. 14. Kafka 정의 - 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼 - Pub-Sub 모델의 메시지 큐 형태로 동작하며 분산환경에 특화 기본 구성 - Cluster = 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합 - Producer = 데이터를 만들어내어 전달하는 전달자 - Consumer = 프로듀서에서 전달한 메시지를 브로커에 요청하여 소비하는 소비자 - Broker = Producer와 Consumer 사이의 중재자 (kafka에 설치되어 있는 일종의 서버 단위 => 보통 3개 이상으로 권장) - Topic = 보내는 메시지(데이터)를 구분하기 위한 카테고리 - Partition = 토픽을 구성하는 데이터 저장소(메시지 큐) 작동 방식.. 2023. 9. 21. Message Broker MOM(메시지 지향 미들웨어, Message Oriented Middleware) - 어플리케이션들의 메시지를 중간에서 관리해주는 시스템 장점 - 여러 클라이언트 시스템간에 메시지 통신을 중간에서 관리 => 클라이언트 시스템 간의 종속성 및 결속성 ↓ - 수신자의 주소를 몰라도 송신 가능 - 백업 지원 => 안정성 ↑ - 라우팅 규칙을 활용하여 하나의 메시지로도 여러 클라이언트가 받을 수 있도록 해줌 ※ 메시지(Message) = 다양한 형태와 형식을 가질 수 있는 데이터 단점 - 메시지 전체를 관리하는 시스템이 따로 필요 - 시스템 구조가 복잡해지고 이에 대한 오버헤드 발생 가능성 존재 메시지 큐(Message Queue) - 분산 시스템에서 비동기 메시지를 저장하고 전달하는 컴퓨팅 컴포넌트 중 하나 .. 2023. 9. 20. log4jdbc 정의 - Java 애플리케이션에서 DB 쿼리를 로깅하기 위한 도구 중 하나 - 설정 시 SQL 문장과 DB 연결 관련 정보가 Spirng Boot의 로그로 출력 특징 SQL 추적: log4jdbc는 JDBC 드라이버를 래핑하여 모든 SQL 문장을 추적하고 로그로 기록합니다. 이를 통해 애플리케이션이 데이터베이스와 어떻게 상호작용하는지를 상세하게 파악할 수 있습니다. 파라미터 바인딩 추적: log4jdbc는 SQL 파라미터 바인딩도 추적하고 로그로 기록합니다. 따라서 SQL 문장에 전달된 파라미터 값도 확인할 수 있습니다. 다중 데이터베이스 지원: log4jdbc는 다양한 데이터베이스에 대한 JDBC 드라이버를 지원합니다. 따라서 여러 종류의 데이터베이스에서도 사용할 수 있습니다. 사용 방법 1. 의존성 .. 2023. 9. 14. logback-spring.xml 로그 파일 level별 설정 문제 문제 - logback-spring.xml를 통해 레벨 INFO 이상의 모든 로그를 저장하는 total.2023-09-13_0.log와 레벨 ERROR에 대한 로그만을 저장하는 error.2023-09-13_0.log를 생성하도록 의도하였지만 error.2023-09-13_0.log도 total.2023-09-13_0.log와 같이 INFO 이상의 모든 로그를 저장 logback-spring.xml 코드 ERROR UTF-8 ${LOG_PATTERN} ${LOG_PATH}/error.%d{yyyy-MM-dd}_%i.log 30 10MB 1GB INFO UTF-8 ${LOG_PATTERN} ${LOG_PATH}/total.%d{yyyy-MM-dd}_%i.log 30 10MB 1GB 원인 - File-Err.. 2023. 9. 13. Logback 정의 - Java 기반 오픈 소스 로깅 라이브러리 ⇒ Java 애플리케이션에서 로그 기록 및 관리를 위한 도구 - SLF4J의 구현체이자, Spring Boot의 기본 로깅 프레임워크 ※ SLF4J(Simple Logging Facade for Java) = Java 애플리케이션에서 로깅을 추상화하기 위한 인터페이스 ※ Spring Boot는 내장 Tomcat의 로그와 애플리케이션의 로그를 분리하여 관리하기 때문에 두 로깅 시스템 간의 중복 로그 출력은 발생하지 않아 Spring Boot의 로깅 설정을 변경하더라도 내장 Tomcat의 로깅에는 영향을 미치지 않고 그 반대의 경우에도 영향을 미치지 않음. 사용 예시 코드 import org.slf4j.Logger; // 실제 로그 메시지를 생성하고 출력하는.. 2023. 9. 12. Docker Volume 정의 - 호스트 머신의 폴더 (로컬 컴퓨터 폴더) - 컨테이너 내부 폴더와 컨테이너 외부 폴더를 서로 연결해주는 역할 종류 익명 볼륨(Anonymous Volumes) - 도커 엔진 내부에 익명으로 새로운 볼륨을 생성하여 해당 볼륨과 지정한 컨테이너 디렉터리를 마운트 - 컨테이너가 존재하는 동안에만 존재 - 컨테이너 실행 시 -v 컨테이너 경로 옵션을 적용하면 생성 - docker-compose.yml에서는 volumes에 컨테이너 디렉터리 경로만 입력 - type = volume 명명 볼륨(Named Volumes) - 도커 엔진 내부에 지정한 볼륨명으로 새로운 볼륨을 생성하여 해당 볼륨과 지정한 컨테이너 디렉터리를 마운트 - 컨테이너가 종료된 후에도 유지 - 컨테이너 실행 시 -v [볼륨명:컨테이너 .. 2023. 9. 12. HTTP 정의 - HyperText Transfer Protocol의 약자로 웹 상에서 Server와 Client 간의 데이터 전송을 위한 프로토콜 - TCP/IP 기반 프로토콜 - Request/Response 구조로 구성 (Client: HTTP Requset Server: HTTP Response) HTTP Request - Request Line, Header, Empty Line, Message Body로 구성 Request Line [HTTP Method] [Request target] [HTTP version] - HTTP 메소드, 전송 목표 주소, HTTP 버전으로 구성 ex) POST /test.html HTTP/1.1 Header - Request에 대한 추가 정보를 담고 있는 부분 ※ 주요 파.. 2023. 9. 10. nginx.conf 작성법 예시 user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80; server_name nginx-test; root /usr/share/nginx/html; index index.html; location / { try_files $uri $uri/ /index.html; } } log_format main '$remote_addr - $remote_u.. 2023. 9. 8. Flutter Web 배포 (With docker-compose & nginx) 방법1 docker-compose.yml(Flutter) + Dockerfile을 통해 Flutter Web build 후 Nginx에 올려 배포 (빌드 후 배포) docker-compose.yml version: '3' services: flutter: build: context: . # Dockerfile 상대 경로 (docker-compose.yml 기준) ports: - "80:80" environment: - TZ=Asia/Seoul restart: always networks: - test_network networks: test_network: driver: bridge Dockerfile - flutter 설치 => flutter web build => nginx로 배포 # 이미지의 기반이.. 2023. 9. 5. Node.js로 Redis 연결 const express = require("express"); const app = express(); const redis = require("redis"); const http = require("http"); const server = http.createServer(app); const { Server } = require("socket.io"); const Subscriber = redis.createClient({url: "redis://redis-server:6379"}); // Redis 연결 성공 시 Subscriber.on('connect', () => { console.info('Redis Sub connected!'); }); // Redis 연결 실패 시 Subscriber.on.. 2023. 9. 5. 이전 1 ··· 3 4 5 6 7 8 9 ··· 22 다음