전체 글

데이터엔지니어 / Data Engineer
Operating System/Computer

[Computer] Github Action의 on 이벤트 종류

Github Action의 on 이벤트 종류GitHub Actions의 on 키워드는 워크플로우가 언제(trigger) 실행될지를 정의함.이 필드는 매우 유연하며 다양한 이벤트에 반응하도록 설정할 수 있음.이벤트는 크게 GitHub 이벤트(push, pull_request 등), 배포/릴리스 이벤트(release, deployment, page_build 등), 이슈 관련 이벤트(issues, issue_comment 등), 워크플로우 자체 이벤트(workflow_dispatch, workflow_run 등)로 분류할 수 있음.또한 schedule을 사용하면 정해진 시간 간격(CRON)으로 워크플로우를 실행할 수도 있음. 저장소의 기본 이벤트 (Commit, PR 관련 등)1. push1-1. 설명저장소..

Operating System/Computer

[Computer] Github Action

Github ActionGitHub Actions는 GitHub 저장소(Repository)에 특정 이벤트가 발생했을 때 자동으로 작업(워크플로, workflow)을 수행할 수 있는 자동화/CI/CD 플랫폼임.예전에는 외부 CI/CD 솔루션(Travis CI, Jenkins 등)을 사용하거나, 자신이 직접 CI/CD 파이프라인을 구축해야 했지만, GitHub Actions를 통해 GitHub 자체에서 더 쉽고 유연하게 빌드, 테스트, 배포 등을 자동화할 수 있음. Github Action 주요 특징1. GitHub 에코시스템과 밀접한 통합저장소에서 Issue, Pull Request, Release, Push 등 다양한 이벤트가 발생했을 때 쉽게 Workflow를 트리거(Trigger)할 수 있음. 2...

Database/Redis

[Redis] 인메모리 데이터베이스

인메모리 데이터베이스인메모리 데이터베이스(In-Memory Database)는 말 그대로 주 메모리(RAM)를 주된 저장 매체로 사용하는 데이터베이스를 의미함.전통적인 디스크 기반 데이터베이스가 디스크 I/O에 의존하는 것과 달리, 인메모리 DB는 대부분 또는 전부의 데이터를 메인 메모리에 상주시킴으로써 훨씬 빠른 읽기/쓰기 성능을 제공함.최근에는 메모리 용량과 비용의 변화, 고성능 컴퓨팅(HPC)과 실시간 분석에 대한 요구 등으로 인메모리 DB 기술이 빠르게 발전하고 있으며, 다양한 상용·오픈소스 솔루션들이 시장에서 활발히 사용되고 있음. 인메모리 데이터베이스의 정의와 배경1. 정의인메모리 데이터베이스(In-Memory Database, IMDB)는 모든(또는 주요) 데이터를 휘발성 메모리(RAM)에 ..

Database/Redis

[Redis] 레디스 클러스터

레디스 클러스터Redis Cluster는 여러 개의 Redis 노드로 이루어진 분산 구성(distributed setup)임.자동 샤딩(Sharding)과 고가용성(High Availability)을 제공하는 기술임.단일 인스턴스에서 처리할 수 있는 데이터나 트래픽 규모를 넘어서는 상황에서, 여러 노드로 부하를 분산하고 노드 장애 시 빠르게 복구할 수 있도록 설계됨.즉, 확장성과 가용성이라는 Redis의 핵심 요구 사항을 충족하기 위한 솔루션이라고 할 수 있음. 레디스 클러스터의 주요 개념1. 샤딩(Sharding)Redis Cluster는 키(key) 기반으로 데이터를 여러 노드에 분산하여 저장함.Hash Slot: Redis Cluster는 키를 0부터 16383까지의 해시 슬롯(Hash Slot)에..

Database/Redis

[Redis] 레디스의 보안

레디스의 보안Redis(레디스)는 기본적으로 빠른 인메모리 데이터 처리에 초점을 맞춘 소프트웨어이임.최근에는 엔터프라이즈급 사용 사례가 늘어나면서 보안(Security) 요구사항도 크게 중요해졌음.Redis 자체가 초기 버전에는 간단한 패스워드 인증만 제공했으나, 버전 6.0 이후로는 ACL(Access Control List) 같은 고급 기능을 도입하여 보안 수준을 한층 높임.그럼에도 불구하고 운영 환경에서 Redis를 안전하게 사용하기 위해서는, Redis 자체 설정뿐만 아니라 네트워크 및 시스템 레벨에서의 여러 보안 전략이 필요함. 기본 보안 전제: 레디스는 신뢰할 수 없는 네트워크에 직접 노출하지 않아야 함Redis 공식 문서에서는 기본적으로 ‘Redis를 퍼블릭 인터넷에 직접 노출하지 말라’고 ..

Database/Redis

[Redis] 메세지 브로커

메세지 브로커메시지 브로커(Message Broker)는 분산된 애플리케이션 간 데이터를 교환(통신)하기 위한 중간 매개체 역할을 하는 소프트웨어 시스템임.메시지를 송신하려는 프로듀서(Producer)와 메시지를 수신하려는 컨슈머(Consumer) 사이에서 메시지를 안정적으로 주고받을 수 있도록 관리하고, 메시지를 큐(Queue), 토픽(Topic), 스트림(Stream) 형태로 전달/보관/라우팅해줌. 메세지 브로커의 필요성1. 애플리케이션 간 결합도(Dependency) 감소메시지 브로커를 사용하면, 애플리케이션들이 서로 직접 통신하는 대신 브로커를 통해 간접적으로 통신함.이를 통해 애플리케이션 간의 결합도를 낮추고, 각 애플리케이션을 독립적으로 배포·확장·변경할 수 있는 유연성을 확보할 수 있음. 2..

Database/Redis

[Redis] 레디스의 장점

레디스의 장점Redis(REmote DIctionary Server)는 인메모리(In-Memory) 데이터 구조 저장소임.주로 캐시, 메시지 브로커, 세션 저장소, 실시간 분석 등의 다양한 용도로 활용되는 오픈 소스 소프트웨어임.높은 성능과 다양한 자료구조를 지원하는 특징 덕분에 전 세계적으로 널리 사용되고 있음. 인메모리 기반의 높은 성능1. 초당 수십~수백만 건의 요청 처리Redis는 모든 데이터를 메모리에 상주시키고, 네트워크 IO와 CPU 효율을 극대화한 아키텍처를 통해 매우 빠른 응답 속도를 제공함.대부분의 명령에 대해 O(1) 혹은 O(log n) 정도의 시간 복잡도를 갖도록 자료구조를 최적화함.이로 인해 초당 수십~수백만 건의 요청(QPS, TPS)을 처리할 수 있으며, 특히 낮은 지연 시간..

Programming Language/Java

[Java] MVC 패턴

MVC 패턴MVC(Model-View-Controller) 패턴은 대규모 애플리케이션의 복잡성을 줄이고 유지보수성을 향상하기 위해 사용되는 대표적인 소프트웨어 아키텍처 패턴임.“모델(Model)”, “뷰(View)”, “컨트롤러(Controller)”의 세 가지 구성요소를 분리하여 역할을 명확히 함으로써, 코드의 응집도를 높이고 결합도를 낮추는 효과를 얻을 수 있음. MVC 패턴의 기본 개념1-1. Model(모델)애플리케이션의 핵심 비즈니스 로직과 데이터를 관리함.데이터의 상태를 표현하거나, 이를 조작(저장, 수정, 삭제, 조회)하는 메서드를 포함함.DB 연동(DAO, Repository)이나 비즈니스 규칙(도메인 로직)을 담당하는 Service 계층 등도 모델에 속한다고 볼 수 있음. 1-2. Vie..

Operating System/Computer

[Computer] 로드밸런서

로드밸런서로드 밸런서(Load Balancer)는 네트워크나 애플리케이션 레벨에서 들어오는 트래픽(요청)을 여러 서버(또는 서비스 노드)로 효율적으로 분산하여, 전체적인 성능과 가용성을 높이고 장애나 과부하를 방지하는 핵심 인프라 컴포넌트임.서버나 서비스 노드가 여러 대일 때, 단일 서버에만 부하가 집중되지 않도록 트래픽을 자동으로 분산함으로써 서비스 안정성과 확장성을 확보하는 것이 주된 목적임. 로드 밸런싱의 필요성1. 가용성(Availability) 보장하나의 서버에 장애가 발생하더라도, 로드 밸런서는 나머지 서버로 트래픽을 자동으로 우회시켜서 서비스 다운타임을 최소화함.시스템 전체의 고가용성(High Availability, HA)을 위해 필수적인 구성 요소임. 2. 확장성(Scalability)트..

Operating System/Computer

[Computer] 프로세스의 문맥 교환

프로세스의 문맥 교환프로세스의 문맥 교환(context switch)은 운영체제(Operating System)에서 프로세스(또는 스레드) 간 CPU 사용권을 전환하는 핵심 메커니즘임.여러 프로세스가 동시에 존재하고, 제한된 수의 CPU 코어(또는 실제로 단 하나의 CPU 코어만)가 있을 때 운영체제는 시간 분할(time-sharing) 기법이나 우선순위 기반 스케줄링, 멀티태스킹 환경을 제공하기 위해 문맥 교환을 수행함. 문맥 이란?문맥(context)이란 현재 수행 중인 프로세스(또는 스레드)의 상태를 의미함.구체적으로는 다음과 같은 정보가 포함됨. 1. CPU 레지스터 상태(Register set)일반 레지스터(General-purpose registers): EAX, EBX, ECX ... (x8..

Operating System/Computer

[Computer] 멀티프로세싱 및 멀티스레딩

멀티프로세싱과 멀티스레딩멀티프로세싱(Multiprocessing)과 멀티스레딩(Multithreading)은 현대 소프트웨어에서 동시에 여러 작업을 수행하기 위한 대표적인 두 가지 병렬(또는 병행) 처리 기법임.CPU 코어가 늘어나고 고성능 환경이 요구됨에 따라, 이 두 방식을 적절히 활용하는 것은 프로그래밍과 시스템 설계에서 매우 중요한 주제가 됨. 기본 정의와 개념 : 멀티 프로세싱1. 정의물리적으로 여러 개의 프로세스를 동시에 실행하는 것을 말함.여러 프로세스를 활용해 병렬 처리를 수행하고, 각각의 프로세스는 운영체제로부터 독립된 자원(메모리 공간, 파일 디스크립터 등)을 할당받음. 2. 운영체제 레벨에서의 특징운영체제마다 약간씩 다르지만, 보통 각 프로세스는 별도의 주소 공간을 가짐.프로세스 간 ..

Operating System/Computer

[Computer] 프로세스와 스레드의 차이

프로세스와 스레드의 차이프로세스(Process)와 스레드(Thread)는 현대 운영체제(특히 멀티태스킹 OS)에서 중요한 개념임.서로 긴밀히 연관되어 있으면서도 메모리 구조, 생성 및 종료 오버헤드, 자원 공유 방식 등에 있어 차이를 가짐. 정의1. 프로세스(Process)프로그램(코드)이 메모리에 적재되어 실행 중인 상태를 가리킴.독립된 실행 흐름을 갖고, 운영체제로부터 자원을 할당받아 구동되는 하나의 작업 단위임. 2. 스레드(Thread)프로세스 안에서 실행되는 가장 작은 실행 흐름 단위임.한 프로세스 내부에 여러 스레드가 존재할 수 있으며, 각각 병렬적(또는 병행적)으로 작업을 수행함. 주소 공간과 자원 관리1. 프로세스각 프로세스는 독립된 메모리 공간(코드 세그먼트, 데이터 세그먼트, 힙, 스택..

Operating System/Computer

[Computer] CPU 스케줄링 알고리즘

CPU 스케줄링 알고리즘운영체제에서 CPU 스케줄링(CPU Scheduling)은 여러 프로세스(또는 스레드)가 제한된 CPU 자원을 효율적으로 공유할 수 있도록, 어느 시점에 어떤 프로세스에 CPU를 할당할지를 결정하는 핵심 기법임.스케줄링 알고리즘은 다양한 시스템 목표(처리량, 응답 시간, 공정성, 실시간성 등)를 최대화 또는 최적화하기 위한 전략을 제시함. CPU 스케줄링 개념과 배경1. 프로세스 상태와 준비 큐(Ready Queue)프로세스(또는 스레드)는 Running, Ready, Waiting 등의 상태를 가짐.CPU 스케줄러는 주로 Ready 상태에 있는 프로세스 중 하나를 선택하여 CPU를 할당함. 2. 선점(Preemption) vs 비선점(Non-preemptive)비선점(Non-pr..

Operating System/Computer

[Computer] 자바 표준 스펙

자바 표준 스펙자바(Java)는 단순히 하나의 프로그래밍 언어가 아니라, 언어 사양과 가상 머신 사양, 그리고 방대한 표준 라이브러리로 구성된 플랫폼임.자바 ‘표준 스펙(사양)’이란 이러한 자바 플랫폼을 정의하는 일련의 공식 문서를 가리키며, 일반적으로 다음과 같은 세 가지 주요 축으로 나누어 설명함. 1. 자바 언어 명세서 (Java Language Specification, JLS)2. 자바 가상 머신 명세서 (Java Virtual Machine Specification, JVMS)3. 표준 라이브러리(API) 명세 (Java SE API Specification) 이 세 요소는 자바가 어떤 문법과 특징을 가진 언어이고, 그 프로그램을 어떻게 실행하며, 어떤 표준 라이브러리를 제공하는지를 정의함.또..

Operating System/Computer

[Computer] 운영체제의 PCB

운영체제의 PCB운영체제(Operating System)에서 프로세스(Process)는 프로그램이 실행 중인 ‘실체’를 의미함.이때 OS는 프로세스의 상태, 스케줄링 정보, 자원 할당 정보 등을 체계적으로 관리해야 하는데, 이를 위해 사용하는 핵심 자료구조가 바로 PCB(Process Control Block)임.PCB는 운영체제 커널이 프로세스를 식별하고 제어하기 위해 유지하는 정보의 집합임. PCB의 개념과 역할1. 프로세스 식별 및 관리운영체제가 여러 프로세스를 동시에(시분할, 멀티태스킹) 관리하기 위해서는 각 프로세스를 ‘고유하게 식별’해야 함.PCB에는 프로세스 식별자로 불리는 PID(Process ID)를 비롯한 여러 정보를 저장하여 운영체제가 프로세스를 구분, 추적, 제어할 수 있도록 함. ..

Operating System/Computer

[Computer] 메모리 계층

메모리 계층컴퓨터 메모리 계층 구조(Memory Hierarchy)는 프로세서가 데이터를 저장하고 접근하는 데 필요한 다양한 저장 매체들을 ‘속도와 비용, 용량’ 등의 여러 측면에서 계층적으로 배치한 것을 의미함.일반적으로 가장 빠르지만 용량은 작고 가격이 비싼 매체부터, 상대적으로 느리고 용량이 크며 가격이 저렴한 매체까지 층을 이루게 됨. 계층적 구조의 필요성1. 속도 vs 비용의 Trade-off반도체 기반의 초고속 메모리는 매우 빠르지만 단가가 높고, 대규모로 확장하기 어려움.느리지만 대용량 저장이 가능한 장치는 저렴하므로 데이터를 많이 저장할 수 있지만 속도가 상대적으로 낮음. 2. 지역성(Locality) 원리 활용시간적 지역성(Temporal Locality): 최근에 사용된 데이터나 명령어..

Operating System/Docker

[Docker] 도커의 파일시스템

도커의 파일시스템도커(Docker)은 컨테이너 기술을 제공하는 플랫폼으로, 핵심적인 특징 중 하나가 바로 레이어(layer) 개념과 유니온 파일시스템(Union Filesystem)을 활용한 독특한 파일시스템 구조임.도커 파일시스템 구조를 정확히 이해하면 도커 이미지가 어떻게 구성되는지, 컨테이너 내부에서 파일 변경이 어떻게 처리되는지, 다양한 스토리지 드라이버는 어떤 방식으로 동작하는지 등을 심도 있게 파악할 수 있음. 도커 이미지와 레이어도커 이미지는 여러 개의 읽기 전용 레이어(읽기 전용 파일시스템)를 유니온 파일시스템으로 합쳐서 하나의 논리적인 파일시스템을 구성한 형태임.도커 이미지는 전통적인 VM 이미지를 생각했을 때와 달리 매우 가볍고, 변경점만을 새로운 레이어로 관리함으로써 이미지를 효율적으..

Operating System/Docker

[Docker] 도커 볼륨 구조

도커 볼륨 구조도커(Docker) 볼륨(Volume)은 컨테이너의 파일시스템 외부에 위치하는, 데이터를 영구적으로 저장하기 위한 특별한 메커니즘임.도커 볼륨은 컨테이너가 재시작되거나 삭제되더라도 데이터를 유지할 수 있고, 여러 컨테이너 간에 손쉽게 데이터 공유도 가능함. 도커의 파일시스템1. 레이어(Layer) 기반 이미지 구조도커 이미지는 여러 읽기 전용 레이어(RO layer)의 합으로 이루어지며, 컨테이너를 실행할 때 읽기/쓰기(RW) 레이어가 추가됨.컨테이너 내부에서 파일이 변경되면 RW 레이어에만 해당 변경 사항이 저장되고, 원본 이미지는 변경되지 않음.이 RW 레이어는 일반적으로 일시적(휘발성)이기 때문에 컨테이너가 삭제되면 데이터도 함께 삭제됨. 2. 영속 데이터 문제데이터베이스나 로그, 업..

Operating System/Docker

[Docker] 컨테이너 실시간 모니터링 방법

컨테이너 실시간 모니터링 방법도커 컨테이너가 사용하는 CPU, 메모리와 같은 자원 사용량은 운영 환경에서 중요한 지표임.이 지표를 실시간으로 모니터링하여 병목 현상을 사전에 파악하거나, 장애 상황을 빠르게 진단할 수 있음. docker stats 명령어 활용1. 개요도커는 기본적으로 docker stats라는 CLI 명령을 제공함.이 명령을 사용하면 실행 중인 모든 컨테이너의 CPU, 메모리, 네트워크, 블록 I/O 사용량을 실시간으로 볼 수 있음. 2. 사용 방법docker stats별다른 인자가 없으면, 모든 컨테이너의 상태를 실시간으로 표시함.특정 컨테이너만 보고 싶으면, 컨테이너 이름이나 ID를 지정함.docker stats ... 3. 출력 정보CONTAINER ID: 컨테이너 IDNAME: ..

Operating System/Docker

[Docker] 도커 컨테이너 자원과 로컬의 자원

도커 컨테이너의 자원과 로컬의 자원도커(Docker) 컨테이너는 가상머신(VM)과 달리 호스트 OS의 커널을 직접 공유하면서 애플리케이션을 격리하는 방식으로 동작함.이로 인해 가볍고 빠른 실행 환경을 제공하지만, 동시에 호스트 머신(로컬) 자원과 긴밀히 연결되어 있음. 도커 컨테이너의 기본 아키텍처1. 호스트 커널 공유컨테이너는 호스트 OS(또는 VM 내부)의 커널을 그대로 공유함.가상머신(VM)처럼 별도의 OS 커널을 갖지 않으므로, 프로세스 수준에서 격리가 이루어짐.이를 통해 오버헤드가 적고, 리소스를 효율적으로 사용할 수 있음. 2. Namespaces (네임스페이스)리눅스 커널의 네임스페이스 기술을 활용해 프로세스, 네트워크, 파일시스템, 사용자, IPC, UTS 등을 격리함.예를 들면,PID N..

박경태
과거의 나를 위해