전체 글 211

[Docker Swarm] 도커 스웜으로 만드는 컨테이너 클러스터

단일 노드 환경에서 도커를 운영하면 설정은 간편하지만 분명한 한계가 있다.특정 노드의 하드웨어(CPU, RAM, HDD) 자원이 고갈되거나 노드 자체가 다운될 경우, 해당 노드에서 실행 중인 모든 컨테이너 서비스가 중단되기 때문이다.이러한 단일 장애점(SPOF, Single Point of Failure) 문제를 해결하고 서비스의 지속성을 보장하기 위해 여러 대의 서버를 하나의 자원 풀로 묶어 관리하는 기술이 필요하다.도커 스웜(Docker Swarm)은 이를 가능하게 하는 대표적인 컨테이너 오케스트레이션 도구이다.1. 도커 스웜의 핵심 개념과 구조도커 스웜은 여러 대의 도커 호스트를 하나의 가상 호스트로 추상화하여 관리한다.이를 클러스터(Cluster)라고 부르며, 구성 요소는 크게 매니저 노드와 워커..

우분투에서 도커로 MySQL 서버 구동하고 DBeaver로 실행하기

이번에는 도커를 이용해 MySQL 서버를 구동하고, GUI 툴인 DBeaver를 연동하여 데이터를 쉽게 관리하는 방법을 알아본다.1. Docker를 이용한 MySQL 컨테이너 구동가장 먼저 우분투(Ubuntu) 환경에서 도커를 사용하여 MySQL 데이터베이스 서버를 컨테이너 형태로 실행한다.docker run -p 3307:3306 --name my_db \-e MYSQL_ROOT_PASSWORD=1234 \-e MYSQL_DATABASE=my_db \-e MYSQL_USER=snowman \-e MYSQL_PASSWORD=snowman \-d mysql:5.7 -p 3307:3306: 호스트 머신의 3307 포트와 컨테이너 내부의 3306(MySQL 기본 포트) 포트를 연결(Port Forwarding..

도커 컨테이너 리소스 제한하기: 메모리, CPU, Block I/O 제어

도커 컨테이너는 호스트 OS의 커널을 공유하며 프로세스 단위로 격리되어 실행된다.리소스를 제한하지 않고 실행할 경우, 하나의 컨테이너가 호스트의 모든 자원을 독점하여 시스템 전체의 불안정성을 초래할 수 있다.따라서 안정적인 시스템 운영을 위해 컨테이너별로 CPU, 메모리, 디스크 I/O 사용량을 제어하는 방법과 원리를 알고 있어야 한다. 0. 사전 준비: 커널 파라미터 설정도커의 리소스 제한 기능은 리눅스 커널의 Cgroups(Control Groups) 기술을 기반으로 한다.특히 메모리 스왑(Swap) 제한 기능을 활성화하기 위해서는 부트로더 수준에서의 설정이 필요하다.# GRUB 설정 파일 수정sudo nano /etc/default/grub# 기존 설정에 cgroup_enable=memory swa..

우분투에 FTP 클라이언트 파일질라(FileZilla) 설치하고 실행해보기

지난 글에서 도커로 FTP 서버를 구축하고 테스트 파일을 업로드 해봤다.이번에는 리눅스(우분투) 환경에서 FileZilla를 설치하고, 로그를 검증해 본다.1. FileZilla란?FileZilla는 FTP, FTPS 및 SFTP 프로토콜을 지원하는 오픈 소스 기반의 크로스 플랫폼 GUI FTP 클라이언트이다. 터미널에서 ftp 명령어로도 접속이 가능하지만 FileZilla를 사용하는 이유가 있다.GUI: 내 컴퓨터(로컬)와 서버(리모트)의 파일 시스템을 좌우로 나란히 놓고 볼 수 있다. (아래 스크린 캡처 참고)Log: FTP 프로토콜이 오고 가는 과정을 실시간으로 상세하게 보여준다.Cross-platform: 오픈 소스로 윈도우, 맥, 리눅스를 모두 지원하는 FTP 클라이언트의 사실상 표준이라 할 수..

[Docker] 도커 환경에서 FTP 서버 구축하기 (Pure-FTPd)

리눅스 환경에서 서비스를 운영하다 보면 환경에 따라 선호되는 소프트웨어 스택이 달라진다.예를 들어, 일반적인 리눅스(Bare Metal) 환경에서는 웹 서버로 Apache2를, FTP 서버로는 vsFTP를, 데이터베이스로는 PostgreSQL이나 MariaDB를 주로 사용한다.하지만 컨테이너 기반인 Docker 환경에서는 조금 다르다.웹 서버는 가벼운 Nginx가, FTP 서버는 설정이 간편하고 가벼운 Pure-FTPd나 wuFTP가, 데이터베이스는 MySQL이 주로 사용된다. 이번에는 Docker 환경에 최적화된 Pure-FTPd를 사용하여 FTP 서버를 구축하는 과정을 알아보자.특히 FTP의 동작 원리인 Passive Mode를 이해하고 이를 Docker 네트워크 설정에 반영하는 과정이 중요하다. 1..

[Docker] Nginx 로그를 Fluentd를 통해 MongoDB에 저장하기 (중앙 집중형 로그 관리)

도커 컨테이너는 기본적으로 휘발성을 가진다.컨테이너가 삭제되면 내부의 로그 파일도 함께 사라지기 때문에, 운영 환경에서는 로그를 외부 저장소에 영구적으로 보관할 방법이 필요하다. 이러한 로그 수집의 예시로 웹 서버(Nginx)에서 발생하는 로그를 수집기(Fluentd)를 거쳐 데이터베이스(MongoDB)에 중앙 집중적으로 저장하는 파이프라인을 구축해 보자.1. 전체 아키텍처 및 데이터 흐름시스템의 전체적인 로그 데이터 흐름은 다음과 같다. Nginx: 클라이언트 요청을 처리하고 표준 출력(Stdout)으로 로그를 뱉는다.Docker Log Driver: 컨테이너의 로그를 받아서 파일로 쌓는 대신 Fluentd로 전송한다.Fluentd: 수신한 로그를 버퍼링하고 MongoDB가 이해할 수 있는 포맷(js..

[k8s] NestJS 앱을 도커라이징해서 Pod로 띄우기

로컬 환경에서 개발한 애플리케이션을 컨테이너화하고, 이를 쿠버네티스 클러스터 위에서 실행시키는 것은 클라우드 네이티브 개발의 기초가 되는 과정이다. 이번에는 NestJS 프레임워크로 간단한 백엔드 서버를 만들고, 이를 도커 이미지로 빌드한 뒤 쿠버네티스 파드(Pod)로 배포하여 접속하는 전체 워크플로우를 정리해보자.1. NestJS 프로젝트 생성 및 로컬 테스트가장 먼저 컨테이너에 담을 앱이 필요하다.Node.js 기반의 프레임워크인 NestJS를 사용하여 기본 서버를 생성한다.프로젝트 생성NestJS CLI를 전역으로 설치하고 새로운 프로젝트(nest-server)를 생성한다.# NestJS CLI 설치sudo npm i -g @nestjs/cli# 프로젝트 생성cd ./Documentsnest new..

Spring Boot와 NestJS를 비교해보자

이번 포스팅에서는 백엔드 개발 생태계의 두 프레임워크, 자바 진영의 스프링부트와 노드(Node.js) 진영의 NestJS의 구조적 차이를 알아보고, 각각의 네트워크 처리 방식과 보안적 관점을 알아본다. 1. 언어 및 런타임 환경우선 사용하는 언어와 실행 기반부터 차이가 있다.Spring Boot: Java(or Kotlin)를 기반으로 하며 JVM(Java Virtual Machine) 위에서 동작한다. 강력한 정적 타입 시스템과 객체 지향 프로그래밍(OOP)을 강제하여 대규모 프로젝트의 유지보수성과 안정성을 보장한다.NestJS: TypeScript를 기반으로 Node.js 런타임 위에서 동작한다. 자바스크립트의 유연함에 타입의 안정성을 더했으며, 프론트엔드(React, Vue 등)와 언어를 통일할 ..

Journey to CS/웹 2026.01.10

IP 주소와 서브넷 마스크: 클래스 기반에서 클래스리스 기반으로...

네트워크를 공부할 때 반드시 알아야 하는 개념이 바로 IP 주소 할당 방식이다.초기 클래스 기반의 비효율적인 방식에서 현재의 효율적인 클래스리스 체계로 어떻게 변화해 왔는지, 그리고 실무에서 필수적인 서브넷 계산법까지 알아보자. IP 주소 체계를 이해하려면 먼저 서브넷 마스크를 알아야 한다.IP 주소는 하나의 덩어리가 아니라, '어느 동네(네트워크)'의 '어느 집(호스트)'인지를 나타내는 두 부분으로 구성된다. 1. 서브넷 마스크(Subnet Mask)란?마스크(Mask)는 '가린다'는 뜻이다.서브넷 마스크는 총 32비트의 연속된 1과 연속된 0으로 이루어져 있다. 1로 표시된 부분은 네트워크 영역, 0으로 표시된 부분은 호스트 영역을 의미한다.따라서 32비트로 이루어진 IPv4 주소에 32비트 서브넷 ..

[Docker] 리소스 모니터링 도구 - events, stats, system, cAdvisor

도커 환경을 운영하다 보면 단순히 컨테이너를 실행하고 종료하는 것을 넘어, 현재 시스템 내부에서 어떤 일이 벌어지고 있는지, 리소스는 얼마나 사용되고 있는지 파악해야 할 때가 있다.특히 다수의 컨테이너를 관리하거나 성능 최적화가 필요할 때 모니터링은 필수다. 도커 기본 모니터링 명령어(events, stats, system)와 구글이 만든 컨테이너 모니터링 도구인 cAdvisor를 활용하는 방법을 알아보자. 1. 실시간 이벤트 스트림 확인: docker events도커 데몬은 컨테이너의 생성, 시작, 정지, 삭제 등 모든 생명주기 변경 사항을 '이벤트(Event)'로 처리한다. docker events 명령어는 이러한 이벤트를 실시간 스트림으로 보여주는 도구로, 윈도우 서버의 '이벤트 뷰어'와 유사한 역..