지식 공유
379개 게시글
[Python] 정규표현식으로 안되는 데이터 RapidFuzz로 매핑하기
개요 최근 사내 서버 비용 관리 대시보드를 만들면서 겪었던 문제를 Fuzz Matching 라이브러리인 rapidfuzz 를 통해 해결한 경험을 공유하려고 합니다. 데이터 정규화 난제 ... 사내 인프라팀에서 관리하는 DB와, 자산팀...
[Jenkins] 젠킨스(Jenkins)와 깃랩(Gitlab) 웹훅(Webhook) 연동하는 방법
개요 팀원이 GitLab에 push 만 하면, 1. GitLab Webhook 이 Jenkins 빌드를 트리거하고 2. Jenkins가 Frontend(Vue3) / API(Flask) Docker 이미지를 빌드하여 GitLab Co...
[Jenkins] SSH Agent 인증 삽질기
개요 Jenkins 파이프라인에서 ssh-agent 를 사용해 원격 서버로 접속하는 작업을 구상하던 중에, Permission denied (publickey) 와 error in libcrypto 에러를 연달아 마주쳤습니다. 문제...
[Jenkins] SSH Agent를 활용한 원격서버 접근 방법
개요 Jenkins에서 원격 서버에 접근하여 명령어를 실행하기 위해서 SSH Agent 를 어떻게 사용하는지, 그 방법을 정리해보려고 합니다. 사전 준비 실습 진행을 위해서 Jenkins가 설치되어 있어야 합니다! Jenkins 도커...
[Linux] Ubuntu 24.04 -> Rocky 10 마이그레이션
개요 기존 홈서버에서 운영 중인 Ubuntu 24.04 서버의 모든 서비스( Docker , Gatsby , 데이터 등등)를 새로운 Rocky 서버로 누락 없이 이관하기 위한 과정을 기록해보려고 합니다. 사전 준비 작업 전에, 양쪽...
[MySQL] API 구현을 위한 SQL 쿼리 작성 연습
들어가며 최근 "월간 서버 입고 현황과 비용을 한눈에 파악할 수 있는 웹 대시보드를 제작하라"는 과제를 부여받았습니다. 처음 이 요구사항을 받았을 때 솔직한 생각은 이랬습니다. "이건 아무리봐도 개발 영역 아닙니까?" 저는 개발자가...
[Python] Redis 캐싱으로 API 성능 향상시켜보기
Redis란 무엇인가? Redis가 왜 필요할까? 상황을 가정해봅시다. 데이터베이스 쿼리: 100ms 소요 하루 API 요청: 10,000회 총 대기 시간: 1,000초 => 16분 이 때 만약 Redis를 도입한다면? 첫 요청: 1...
[Linux] 테스트 서버 디스크 장애 이슈
개요 OS : Rocky 8.10 디스크 구성 /dev/sda : 메인 디스크 /dev/sdb : 백업 디스크 상황 평소에 서버 로그에 READ sda .... , swap 관련 메시지가 간간히 보였음. 어느 날 I/O 관련 로그가...
[Python] ORM 기반 ToDo 프로젝트 만들어보기
개요 만들 것 단일 테이블( Todo )만 사용함. 기본 CRUD만 집중 배울 것 MySQL 연결 설정 ORM 모델 정의 기본 CRUD 작업 API 개발 및 테스트 과정 실습에 사용될 기술 스택 백엔드: Flask , SQLAlche...
[Linux] RHCSA v9 취득을 위한 문제 풀이 정리 #2
24. 웹 서버 설치 및 설정 (Apache) 문제 1: 서버 A에서 다음 작업을 수행하세요. 기본 웹 서버를 설정하여 접속 시 Welcome to the webserver! 라는 메시지를 표시하도록 구성합니다. 방화벽( firewa...
[Linux] 리눅스 서버를 게이트웨이로 만드는 방법 (iptables)
개요 "Main 서버는 외부 인터넷 접속이 가능한데, 이 서버에만 연결된 Sub 서버는 왜 인터넷이 안 될까?" apt 업데이트나 curl 명령어가 동작하지 않는 '오프라인 서버'는 개발 및 운영에 큰 불편함을 줍니다. 이 문제를 해...
[Linux] SSH Keygen으로 원격 접속 키 생성하기
SSH Key 인증? SSH Key 인증은 비대칭 암호화라는 방식을 사용합니다. 한 쌍의 키(Key Pair)를 생성하여 하나는 내가 가지고 있고(개인 키, Private Key), 하나는 서버에 등록(공개 키, Public Key)...
[Linux] Rocky 10 설치 시 biosboot 파티션 설정 경고
개요 Rocky 10 디스크 파티션을 설정하는 도중에 다음과 같은 경고 메세지를 보게 되었습니다. "BIOS 기반 시스템은 GPT 디스크에서 부팅하기 위해 1Mib 'biosboot' 유형의 파티션이 필요합니다." 이 메시지에서 시작...
[Linux / DELL] iDRAC 설정 및 접속 방법
개요 이번 포스팅에서는 DELL 시스템을 관리하기 위해 유용한 원격제어관리 모듈인 iDRAC(Intergrated Dell Remote Access Controller)을 알아보도록 하겠습니다. 테스트 장비 소개 테스트로 사용한 장비...
[Linux] Diskless 기반 PXE 시스템 구축하기
개요 이전 게시글에서 Kickstart 기반의 PXE 시스템을 구축하는 실습을 진행했었습니다 ..! 이번 게시글에서는 디스크리스(diskless) 시스템을 PXE로 어떻게 구축하는지 실습을 진행해보겠습니다. 디스크리스 시스템을 구축하...
[Linux] ext4 -> xfs 파일시스템 전환기
개요 OS: Rocky Linux 현재: 1번 베이 디스크 = 메인 디스크 → /dev/sda (OS 설치됨, ext4) 2번 베이 디스크 = 백업 디스크 → /dev/sdb (OS 설치됨, ext4) 파티션 구조 (예시, 메인 디스...
[Linux] mysql 데이터베이스 마이그레이션(migration) 가이드
개요 데이터베이스 마이그레이션은 시스템 운영자에게 있어서 가장 긴장되는 순간이 아닐까 생각합니다. 특히 운영 서버에서 동작 중인 서비스의 데이터를 옮기는 작업은 단 하나의 데이터도 잃어서는 안 되기에 더욱 신중해야 합니다. 이번 게시...
[Linux] 부팅 가능한 백업 디스크 만들기
개요 이번 게시글에서는 리눅스 시스템의 디스크를 완벽하게 복제하여, 어떤 서버에 꽂아도 바로 부팅이 가능한 백업 디스크를 만드는 방법을 상세하게 다뤄보겠습니다. 예를 들어, 특정 서비스를 위한 리눅스 시스템 데이터를 새로운 서버에 그...
[Linux] 서버 세팅 자동화? 자동 프로비저닝 랩 구축기 - PXE / KickStart
개요 현업에서 서버 담당자로 일하다 보면 "이 단순 반복 작업을 어떻게 자동화할 수 있을까?" 하는 고민, 다들 한 번쯤 해보셨을 텐데요. 특히 Jira 같은 이슈 트래킹 시스템에 서버 구축과 같은 요청이 들어오면, OS 설치부터 초...
[Linux] RHCSA v9 취득을 위한 문제 풀이 정리
개요 인터넷에서 수집한 덤프를 각색하면서 생소한 내용이거나 어려웠던 문제들을 선별해 저만의 풀이법으로 기록하며 RHCSA 취득을 위한 여정에 떠나보겠습니다! 사실 자격증 취득이 급한게 아니기도 하고, 주말을 이용해 여유롭게 공부할 계...
IDC 엔지니어를 위한 OSI 7계층 트러블슈팅 실전 랩!
개요 서버를 설치하고, 인프라를 구축하고, 장애를 해결하는 모든 업무의 근간에는 바로 OSI 7계층 이라는 강력한 나침반이 있습니다. 이른으로만 들었던 OSI 7계층을 실제 업무에서 어떻게 활용할 수 있는지, 두 가지 시나리오를 기반...
[Linux] 리눅스 시스템 부팅 프로세스 정리
개요 컴퓨터 전원 버튼을 누른 후 운영체제(OS) 화면이 나타나기까지, 컴퓨터 내부에서는 순차적인 과정이 일어납니다! 1. 하드웨어 단계 전원 ON! Legacy BIOS UEFI 2. 부트로더 단계 부트로더 위치 찾기 -> 시작하기...
[Linux] 홈서버 VPN은 이제 Tailscale로 종결하겠습니다!
개요 외부에서 집에 있는 내 서버, 내 서비스에 접속하려면 생각보다 할 일이 많습니다. 공유기에서 포트포워딩 설정을 만지고, VPN 서비스도 구축해줘야 하고, 클라이언트 설정 파일도 생성해줘야 하고 .. 사실 초기 구축 시에는 이러한...
[Ansible] Ansible 변수(Variable) 더 자세하게 알아보기 - 인벤토리부터 매직 변수까지 🧙♂️
개요 오늘은 앤서블을 더욱 강력하고 유연하게 만들어주는 핵심 기능, 바로 변수(Variables) 에 대해 깊이 파고드는 시간을 갖겠습니다. 각기 다른 환경과 수많은 서버를 관리해야 할 때, 변수는 우리를 하드코딩의 늪에서 구해줄 동...
[Ansible] 앤서블 기반 Kubespray로 쿠버네티스 정말 간단하게 설치하기!
개요 이전에 저는 앤서블로 쿠버네티스를 설치하는 방법에 대해서 기록하였습니다. 이번 게시글에서는 Kubespray 라는 앤서블 기반의 프로젝트를 활용하여 정말! 간편하게 쿠버네티스를 설치하는 방법에 대해서 기록해보려고 합니다. Kub...
[Ansible] Ansible로 쿠버네티스(k8s) 클러스터 완전 자동 구축하기 (A-Z)
개요 쿠버네티스 클러스터 설치를 Ansible을 사용하여 완전 자동으로 구축하는 방법에 대해서 기록해보려고 합니다. 수동으로 한 단계씩 설치하다보면 실수도 잦고, 여러 노드에 동일한 작업을 반복하는 게 여간 번거로운 일이 아니죠. �...
[Blog] 옵시디언(Obsidian)으로 블로그 만들어보기 (Feat. Quartz)
개요 제가 평소에 자주 사용하는 메모 앱이 옵시디언이라서 이걸 활용해서 블로그로 만들 수 있는 방법이 없을까 찾아보다가 관련된 좋은 도구들을 찾게 되어서 글로 기록해보려고 합니다. 찾은 도구들 제가 검색하며 찾게된 도구들은 다음과 같...
[k8s] 쿠버네티스 클러스터 버전 업그레이드 방법 및 주의사항
k8s 버전 정책 (Skew Policy) 쿠버네티스는 업스트림 마이너 버전을 평균 4개월에 한 번씩 Release 합니다. 그렇기에 새로운 마이너 버전이 Release 되는 시점이 바로 쿠버네티스 버전을 업그레이드하는 적절한 시기가...
[Docker / 모니터링] cAdvisor로 컨테이너 관리하기
혹시! 반쪽짜리 모니터링을 하고 계신가요? 개인 프로젝트나 토이 프로젝트를 위해 홈서버를 운영하시는 분들이라면 한 번쯤 모니터링 시스템 구축을 고민해 보셨을 거에요! 많은 분들이 업계 표준 조합인 Prometheus + Grafana...
[Docker / 모니터링] nginx 메트릭(Metric) 시각화하기
개요 사진 출처: Grafana의 Nginx 대시보드 nginx는 많은 웹 서버 환경에서 필수적으로 사용되죠? 저또한 홈서버 상단에 nginx가 위치해있습니다. nginx를 운영하다보면 nginx 의 상태와 트래픽을 실시간으로 모니터...
[Linux] 클라우드 플레어(Cloud Flare)로 홈 서버 IP 보호하는 방법
개요 홈 서버에서 운영 중인 서비스를 외부로 배포할 때, 가장 꺼림칙한 문제는 "홈서버의 공인 IP 노출" 이겠죠? 홈서버의 IP는 매우 쉽게 노출됩니다. 예를 들어, 제가 example.com 이라는 도메인을 사용하고 있다고 해볼게...
[Linux] endlessh-go로 허니팟 대시보드 만들기
개요 오늘은 endlessh-go라는 오픈소스를 사용해서 허니팟을 구성하고 또 해커들의 공격 로그를 그라파나 대시보드로 시각화해보려고 합니다. Endlessh가 뭔가요? https://github.com/skeeto/endlessh...
[Linux] Fail2Ban으로 경로 기반 스캐닝 대처하는 방법
개요 운영 중인 웹 서버의 서비스 로그를 확인하다가 다음과 같은 경로를 기반으로 API를 요청하는 로그를 확인할 수 있었습니다. 이를 통해 누군가의 악의적인 공격 시도라고 판단하여 이를 막기위한 과정을 글로써 기록해보려고 합니다. 어...
[Linux] systemd 기반 서비스 등록 및 timer 지정해보기
개요 이번 게시글에서는 작성한 쉘 스크립트를 systemd 서비스로 등록하고 timer 예약 도구를 활용하여 자동으로 실행하는 방법에 대해서 기록해보려고 합니다. systemd 는 리눅스 배포판에서 기본적으로 사용되는 초기화 시스템(...
[Arch] Arch Linux(아치 리눅스) 네트워크 인터페이스 수정 일대기
이번 포스팅에서는 아치 OS에서 네트워크 인터페이스 IP를 어떻게 수정하는지에 대해 기록해보려고 합니다. 먼저 저는 NetworkManager 를 기반으로 서버의 네트워크를 관리합니다. 그래서 이번 포스팅또한 NetworkManage...
[Docker / 모니터링] Opensearch 설치 및 대시보드 설정하기
개요 Opensearch는 AWS에서 기존의 ElasticSearch 버전을 포크( fork )하여 개발된 프로젝트입니다. Opensearch가 개발된 배경을 자세하게 알아보고 싶다면 링크를 참고해보세요. 이번 포스팅에서는 Opens...
[Arch] 아치 리눅스(arch linux)의 패키지 매니저 알아보기
1. Pacman pacman 은 Arch linux의 기본 패키지 매니저입니다. 이름은 Package Manager 에서 따왔어요. 주요 역할 공식 저장소에서 패키지를 다운로드하고 설치 패키지 간 의존성 해결 패키지 데이터베이스 관...
[Arch] Arch Linux(아치 리눅스) 설치하기
Arch Linux 아치 리눅스는 데비안 및 레드햇 기반 배포판들과 비교했을 때 몇 가지 독특한 장점이 있다. 이 장점들은 주로 시스템 관리, 사용자 제어, 최신 소프트웨어 제공 등의 측면에서 부각된다. 레드햇 또는 데비안 계열 배포...
[Shell Script] fzf(Fuzzy finder)
fzf fzf 는 명령줄에서 빠르고 효율적으로 파일을 찾거나, 히스토리에서 명령어를 검색하거나, 프로세스를 선택하는 등 퍼지 검색 기능을 제공하는 범용적인 대화형 필터 도구입니다. 주요 특징 특징 설명 ------- --------...
[Linux] 리눅스 서버 부하의 주범, Load Average! 원인 분석부터 해결까지!
개요 시스템 엔지니어로 일하다 보면, 어느 날 갑자기 서버가 느려지고 있다는 연락을 받고는 합니다. 이 때 가장 먼저 uptime 이나 top 명령어로 확인하는 지표, 바로 Load Average 가 하늘 높은 줄 모르고 치솟고 있는...
[OPNsense 가이드] 오픈 소스 방화벽(OPNsense) 가이드 [2] - 고급 규칙 설정
In & Out 방화벽 규칙을 생성할 때 가장 헷갈리는 부분은 단연코 트래픽의 방향일 거라고 생각합니다. In , Out 어디로 설정해야할 지 저도 처음에는 굉장히 헤맸던 적이 있습니다. 사진에 보이는 것처럼 방화벽 규칙 리스트에 화...
[OPNsense 가이드] 오픈 소스 방화벽(OPNsense) 가이드 [1] - 규칙 설정하기
개요 LAN 인터페이스의 초기 방화벽 규칙 내용과, 새로운 인터페이스 생성, 방화벽 규칙을 적용하는 방법에 대해서 기록해보려고 합니다. LAN 인터페이스 살펴보기 OPNsense를 최초로 구축 시 생성되는 기본 LAN 인터페이스에 대...
[PNETLAB] Fortinet으로 Site-to-Site VPN, Remote Access VPN 구축하기!
개요 안녕하세요 ! 오늘은 Fortinet의 FortiGate 방화벽을 사용해서 VPN을 구축하는 방법에 대해 기록해보려고 합니다! 특히 Site-to-Site VPN 과 Remote Access VPN 두 가지 시나리오를 통해 실무...
[Python] ORM 실습으로 깊게 파헤치기!
1. ORM이란? 🤔 ORM (Object-Relational Mapping) 의 핵심 개념 ORM은 객체-관계 매핑 의 약자로, 파이썬의 객체와 데이터베이스의 테이블을 자동으로 연결해주는 기술입니다! 매핑 관계 이해하기! Pyth...
[Linux] 서버 디스크 복제 완벽하게 해내는 방법
개요 시스템 관리자라면 한 번쯤은 이런 생각을 해보셨을 겁니다. "운영 중인 서버랑 똑같은 환경의 테스트 서버가 있으면 딱 좋겠는데..." 새로운 기능을 테스트하거나, 설정을 변경해 보거나, 장애 상황을 시뮬레이션할 때 운영 서버와...
[Linux] HAProxy + Keepalived로 고가용성 웹 서비스 구축해보기
개요 "장애를 견딜 수 있는 고가용성 아키텍처를 직접 설계하고 구축해봤다"라고 자신 있게 말할 수 있도록, 온프레미스 환경에서 무중단 웹 서비스를 만들어 보겠습니다. 작업 순서는 대략 다음과 같습니다. 네트워크 아키텍처 설계 (Pub...
[Python] 파이썬으로 텔레그램(telegram) 봇 만들기 - 텍스트, 이미지, 파일 전송부터 주기적 알림, 명령어 처리까지
개요 오늘은 파이썬 언어로 텔레그램 봇을 만들고, 다양한 메시지를 보내는 방법에 대해 총정리해 보겠습니다. 텍스트는 물론 이미지, 파일 전송과 특정 시간에 맞춰 주기적으로 메시지를 보내는 방법, 그리고 사용자가 명령어를 입력했을 때...
[Python] FastAPI와 SQLite를 활용하여 ORM 기반 인증 서버 구현해보기!
1. 개요 저번주에 요청 받았던 의뢰 작업에 대한 내용을 간단하게 공유해보려고 합니다. 의뢰자분께서는 사내에서 영업부 팀원들이 사용할 수 있는 메일 전송 자동화 프로그램이 필요하다고 하셨어요! 의뢰자님께서 다음과 같은 기능이 필요하다...
[Linux] LXC(Linux Containers)에 대해서 알아보기
개요 이번 게시글에서는 리눅스 컨테이너(LXC)에 대해서 알아보려고 합니다. LXC가 뭐고, 왜 사용하는지, 도커와는 어떻게 다른지, 그리고 실제로 어떻게 구축하는 지 등 모든걸 다뤄봅시다. LXC란 무엇인가? 출처: [https:/...
[Linux] ZFS을 써야하는 이유
ZFS vs ext4 vs xfs 특징 ext4 xfs ZFS --------------- -------------------------- -------------------------------- -------------------...
[PNETLAB] PNETLab 설치 및 ishare2로 장비 이미지 다운로드하기
개요 PNETLAB을 구축하는 방법과 PNETLab에서 장비 이미지(에뮬레이터)들을 준비하고, 이를 이용하여 기본적인 랩 환경을 구성하는 방법에 대한 가이드를 작성해보려고 합니다! PNETLab의 경우 eve-ng와 동일하게 UNET...
[Linux] 리눅스에서 SSL/TLS (HTTPS) 인증서 처리하는 방법 - Let's Encrypt / Nginx
개요 오픈소스 인증서인 Let's Encrypt를 이용해 SSL/TLS를 적용해보고, 특히 여러 서브도메인을 Nginx 리버스 프록시로 운영하며 각각의 서브도메인에 대해 HTTPS를 적용하는 방법에 대해서 기록해보려고 합니다. SSL...
[Docker] wg-easy(wireguard-easy) VPN 도커로 구축하기
VPN ? VPN(Virtual Private Network)는 인터넷을 통해 디바이스 간에 사설 네트워크 연결을 생성해요. VPN은 네트워크를 통해 데이터를 안전하게 익명으로 전송하는데 사용되며, 사용자 IP 주소를 마스킹하고 데이...
[Linux] nmcli로 네트워크 관리, 터미널에서 끝장내기
개요 리눅스 서버를 다루는 엔지니어나 개발자라면 GUI 없이 터미널에서 모든 작업을 처리해야할 때가 많습니다. 특히 네트워크 설정은 서버의 생명줄과 같아서, 빠르고 정확하게 관리하는 것이 필수죠. 이럴 떄 빛을 발하는 도구가 바로 n...
기존에 구축한 가상 서버를 도커 기반으로 구축하는 방법
개요 현대 IT 인프라 환겨에서는 일관성, 효율성, 그리고 관리 편의성을 높이기 위해 다양한 배포 방식이 사용됩니다. 전통적으로는 물리 서버나 가상화 소프트웨어(VMware 등)을 통해 각 서버에 OS를 설치하고, 필요한 패키지 및...
[Linux] 미러(Mirror) 서버 구축하는 방법
미러 서버, 왜 필요할까? 🤔 사내에 수십, 수백 대의 Ubuntu 서버가 있다고 가정해보겠습니다. 각 서버가 패키지를 설치하거나 업데이트할 때마다 공식 Ubuntu 아카이브 서버에 접속해서 파일을 다운로드하겠죠? 물론 공식 Ubu...
[Linux] Nginx FancyIndex를 사용하여 미러(Mirror) 페이지 예쁘게 표시해보기
Nginx FancyIndex Nginx에서는 특정 디렉토리 안에 있는 파일들을 자동으로 정렬해주는 기능이 있어요! 근데 autoindex 는 너무 단조로워요 .. 이러한 단조로움을 nginx-fancyindex 를 사용해서 개선할...
[Python] 서버 상태 리포트 받기
개요 서버를 운영하다 보면 '내 서버가 지금 잘 돌아가고 있나' 하는 궁금증과 불안감이 몰려옵니다. 중요한 순간에 서버가 멈추기라도 하면 끝이겠죠? 매번 터미널에 접속해서 top , df , free 같은 명령어를 입력하는 것도 일이...
[Linux] 시스템 구성 정보 확인하기
개요 이번 게시글에서는 시스템 구성 정보를 확인할 수 있는 여러 명령어를 기록해보려고 합니다! 커널 정보 확인하기 uname (Unix NAME) 운영체제의 정확한 버전을 알고 싶다면 다음과 같이 확인할 수 있습니다! dmesg (D...
[Linux] TCP 통신 구조 파악하기 (feat. Nginx)
개요 이번 게시글에서는 TCP 통신이 어떻게 시작되고 종료되는지, 그 과정에서 왜 TIME WAIT 상태가 필요한지, 그리고 이 상태가 때로는 왜 문제가 되며 어떻게 대처할 수 있는지 Nginx 실습 예제와 함께 이해해보겠습니다! T...
[Linux] wireguard-ui를 활용해 VPN 클라이언트 쉽게 관리하기
[번외] wireguard-ui를 활용해 클라이언트 키 생성하기 https://github.com/ngoduykhanh/wireguard-ui wireguard 설정을 웹 UI로 관리할 수 있는 wireguard-ui를 사용하면, 브...
[Linux] VPN 오픈소스 소프트웨어 Wireguard로 VPN 서버 구축하기
개요 이번 포스팅에서는 Wireguard의 기본 개념, VPN 피어(Peer), 내부 IP 주소에 대해서 간략하게 알아보고, 리눅스 기반의 환경에서 Wireguard를 설치하고 구축하는 방법에 대해서 자세하게 기록해볼겁니다! VPN...
[Linux] VPN 오픈소스 소프트웨어 OpenVPN으로 VPN 서버 구축하기
개요 24시간 돌아가는 Proxmox 운영 서버에 eve-ng 네트워크 랩 서버가 동작하고 있다. 이전까지는 네트워크 관련 실습을 하고 싶을 때마다 집에서 데스크탑 또는 노트북으로 lab 서버에 접근을 해서 사용 중이었는데 이번에 장...
[Linux] 민감한 데이터 시놀로지 나스(Synology Nas)로 백업하기!
개요 데이터베이스를 운용 중이라면 백업은 정말 필수적이라고 할 수 있는데요. 오늘은 많은 분들이 사내 혹은 가정내에서 사용하고 계실 Synology NAS를 활용하여 도커 컨테이너의 DB 데이터를 안정적으로 백업하는 방법에 대해 기록...
[Shell Script] 헷갈리는 If문 대괄호([], [[]]) 문법 이해하기
개요 쉘 스크립트로 자동화 작업을 하다 보면 한 번쯤 마주치는 쉘 스크립트의 기이한 미스터리가 있죠? 바로 if 문을 쓸 때마다 등장하는 대괄호의 사용 방식인데요! "대체 언제 [ .. ] 를 쓰고, 언제 [[ .. ]] 를 쓰는 거...
[네트워크] 서비스 장애 대응: OSI 7계층 모델로 알아보는 트러블슈팅 가이드
개요 어느 날 아침, 모니터링 시스템에서 "서비스 응답 없음" 알람이 발생하고 사용자들의 접속 불가 문의가 빗발치기 시작합니다. 시스템을 총괄하는 엔지니어로서, 이제 차가운 머리와 명확한 절차로 문제의 근원을 빠르게 찾아내야 합니다....
[Linux] IP 포워딩(IP Forwarding), 왜 설정해야 합니까?
🚦 IP 포워딩, 대체 무엇이고 왜 필요한가요? 쉽게 비유하면, 리눅스 서버를 교통경찰(👮♂️)로 만드는 겁니다. 리눅스 서버는 기본적으로 자신에게 온 패킷만 처리합니다. 즉, 목적지 IP 주소가 자기 자신이 아니면 그냥 버려버...
[PySide6] 스레드 일시 중지, 재개, 정지 기능 구현해보기
개요 스레드에서 반복 작업을 수행할 때, 사용자가 "일시 중지" 버튼을 누르면 현재 진행 중인 작업을 멈추고, "재개" 버튼을 누르면 중단한 작업을 계속 진행할 수 있어야 합니다. 또한 "정지" 버튼을 누르면 스레드를 완전히 종료할...
[PySide6] 작업 진행상황을 직관적으료 표시하는 방법 (QProgressBar)
개요 최근에 GUI 애플리케이션을 개발하면서 문득 든 생각인데, 백그라운드에서 시간이 많이 걸리는 작업(예: 웹 스크래핑)을 수행할 때 사용자에게 현재 진행 상황을 실시간으로 보여주는 Progress bar가 UI에 있으면 좋겠다라는...
[PySide6] 프로그램 종료 후에도 설정 값을 유지시키는 방법 (QSettings)
개요 사용자가 만든 GUI 애플리케이션에서, 사용자가 입력한 설정(예: 페이지 수, URL 등)을 프로그램 종료 후에도 자동으로 저장하고, 이를 불러오는 방법에 대해 기록해보려고 한다. PySide6의 QSettings 클래스를 사용...
[PySide6] QTableWidget의 모든 컬럼을 UI 사이즈에 맞춰서 늘리는 방법
개요 PySide6를 사용하여 만든 GUI 프로그램에서 QTableWidget 의 모든 컬럼들이 GUI 화면의 남은 공간을 균등하게 채우도록 설정하는 방법에 대해서 기록해보려고 한다! 문제 상황 보통 QTableWidget 에 데이터...
[PySide6] 다중 QWidget 창 연동 예시
개요 오늘은 여러 개의 QWidget 창을 생성하고, 버튼을 눌렀을 때 특정 QWidget 창을 열리며 로직이 수행되는 코드를 작성해보려고 합니다. 이 코드는 메인 창에서 로그인 창으로 이동 버튼을 클릭하면 로그인 창이 열리고, 새롭...
[PyArmor] Pyinstaller Decompile 방법 및 Pyarmor로 코드 난독화하는 방법
개요 PyInstaller 로 패키징된 .exe 파일을 디컴파일 하는 방법과 Pyarmor 로 코드 난독화를 진행하고 난독화가 된 .exe 파일을 PyInstaller 를 디컴파일 했을 때와 동일하게 진행하면 어떤 결과가 나오는지 기...
[PySide6] 드래그 앤 드랍(Drag and Drop) 기능 구현해보기
개요 PySide6의 QLabel 을 활용하여 Drag and Drop 기능을 구현해보려고 한다. 코드 작성 아래 코드는 PySide6로 Drag-And-Drop을 구현하는 간단한 예제 코드이다. 코드 설명 Drag-And-Drop...
[PySide6] QListWidget의 itemClicked() 시그널 활용해보기!
개요 PySide6를 사용하여 GUI 애플리케이션을 개발할 때, QListWidget 은 목록을 표시하고 관리하는 데 매우 유용한 위젯이다! 종종 리스트 항목에 추가적인 데이터를 함께 저장하고 관리해야 하는 경우가 있는데, 이번 게시...
[PySide6] QFileDialog로 폴더 또는 파일 선택하는 창 띄워보기
개요 PySide6를 활용하여 "폴더 선택" 및 "파일 선택" 기능을 구현하는 방법에 대해 기록해보려고 한다. QFileDialog 주요 메소드 및 예제 폴더 선택 (QFileDialog.getExistingDirectory) PyS...
[PySide6] 지역 선택 기능 구현해보기: 시/도, 시/군/구, 읍/면/동
개요 오늘은 PySide6를 활용하여 시/도 -> 시/군/구 -> 읍/면/동 단계별로 연동되는 지역 선택 기능을 구현해볼거다. 목표 1\. 시/도 선택: 첫 번째 QComboBox 에서 시/도를 선택한다. 2\. 시/군/구 선택: 선...
[네트워크] L2 스위치에서 멀티캐스트(multicast), 브로드캐스트(broadcast) 트래픽은 어떻게 전달될까?
개요 이번 게시글에서는 L2 레이어 단계에서 멀티캐스트와 브로드캐스트의 트래픽 처리 방식이 어떻게 이루어지는지 알아보는 시간을 가져보겠습니다. 멀티캐스트 멀티캐스트는 특정한 그룹에 속한 호스트들에게만 데이터를 전송하는 방식입니다. 이...
[PySide6] QThread에 대해서 알아보자.
QThread를 사용하는 이유 UI 블로킹 방지: 메인 스레드(주로 UI 스레드)를 차단하는 작업을 QThread로 옮겨 실행하면, UI가 멈추지 않고 계속 반응하도록 처리할 수 있다. Qt의 이벤트 루프와 자연스럽게 연동: QThr...
[PySide6] 프로그램 종료 할 때 Selenium(셀레니움) 브라우저 안전하게 닫는 방법
들어가며 PySide6와 Selenium을 함께 사용해 GUI 애플리케이션을 만들 때, 앱이 종료되더라도 셀레니움 브라우저가 종료되지 않아 crashed 문제가 발생하는 경우가 있었다. 이번 글에서는 애플리케이션 종료 시 브라우저를...
[PySide6] GUI 개발 가이드!
개요 PySide6는 파이썬에서 Qt 라이브러리를 사용할 수 있도록 도와주는 도구로, 다양한 플랫폼에서 GUI 애플리케이션 개발이 가능하다. 이번 글에서는 PySide6를 이용해 기본적인 GUI 프로그램을 만드는 법부터 멀티스레딩을...
[Linux] Keepalived를 활용한 고가용성(HA) 경험해보기
Keepalived 출처: navneetnandanjha Keepalived는 리눅스 서버를 위한 고가용성(High Availability) 솔루션입니다. 이름 그대로 '살아있음을 유지한다'는 뜻이죠. 여기서 아주 중요한 개념이 등장...
[Ubuntu] Nginx reverse proxy(역방향 프록시) 서버 구축해보기
사전 학습 해당 포스팅은 프록시 서버에 대해 이해하기, Forward Proxy 구축하기와 이어지기에 해당 내용을 보고 오는 것을 추천합니다! Reverse Proxy Reverse Proxy는 서버 쪽에 위치하여 클라이언트 요청을...
[Ubuntu] Squid forward proxy(정방향 프록시) 서버 구축해보기
사전 학습 해당 포스팅은 프록시 서버에 대해 이해하기와 이어지기에 해당 내용을 보고 오는 것을 추천합니다! Forward Proxy 구성에 앞서, Forward Proxy 는 클라이언트와 인터넷 사이에 위치하여 클라이언트의 요청을 대...
[Linux] 프록시(Proxy)에 대해 이해하기
프록시 서버 프록시 서버는 "클라이언트 요청을 다른 서버로 전달하고 응답 결과를 클라이언트에게 반환하는 중계 역할" 을 수행한다. 즉, 클라이언트와 서버 간에 중계기로써의 역할을 한다고 보면 된다. 특징 그렇다면 중계 역할을 함으로써...
[Docker] 컨테이너(Container)에 할당되는 CPU 제한하기
개요 이번 게시글에서는 도커 컨테이너에서 CPU를 최적으로 활용하는 방법에 대해서 기록해보려고 한다. 호스트 CPU Core 정보 확인 먼저 컨테이너에 CPU를 최적으로 할당하기 위해서는, 현재 호스트 시스템의 CPU 정보에 대해서...
[Linux] iperf3으로 네트워크 대역폭 성능 테스트하기
개요 집에 NAS를 들여오게 되면서 내부망 구조를 조금 바꾸게 되었다. 원래의 구조는 내 방 벽단자에 들어오는 WAN 선을 공유기 WAN 포트에 연결하고, 공유기 LAN 포트에 데스크탑, 서버(X300)가 연결되어 사용 중이었고, 이...
[Linux] rsync 개념, 사용법, 실무 예제로 실습해보기
개요 리눅스 환경에서 파일을 효율적으로 관리하고 전송할 때 rsync 만큼 강력한 도구가 또 있을까요? rsync 는 "remote sync"의 약자로, 이름에서 알 수 있듯이 원격지의 파일과 디렉토리를 동기화하는 데 있어 아주 유용...
[EVE-NG] Fortigate 방화벽 HA 구성 실습
개요 최근 eve-ng에서 Fortinet 방화벽(Fortigate)을 활용해 Active-Passive 형태의 HA(High Availability) 구성을 완료하였습니다. HA는 장비 하나가 고장 나더라도 다른 장비가 바로 역할을...
[EVE-NG] IP SLA를 활용하여 트래픽 우회시키기
개요 IP SLA를 사용해서 방화벽의 Active 상태를 감지하고 트래픽을 우회시키는 방법을 다뤄보려고 합니다! 실습 환경 먼저 제가 구축한 환경을 간단히 소개할게요: 장비: 방화벽 2대(Active-Passive HA), L3 스위...
[Python] 셀레니움(Selenium)과 Requests 연동: 로그인 세션을 쿠키로 관리하는 방법
개요 셀레니움을 통해 로그인하여 로그인된 쿠키 정보를 requests 객체의 인자로 넘기는 방법에 대해서 알아보려고 한다. 이러한 작업을 하는 이유는 웹 크롤링의 효율성을 높이기 위해서이다. 셀레니움을 브라우저를 직접 제어하기 때문에...
[Linux] systemctl 이란?
systemctl systemctl 은 리눅스 시스템에서 systemd 서비스 관리자의 핵심 도구이다. systemd 는 리눅스 초기화 시스템(init system)및 서비스 관리자로서, 시스템 부팅 과정을 관리하고, 시스템의 다양한...
[Python] 셀레니움(Selenium) 네이버 로그인 헤드리스(Headless) 활성화해서 구현하기
개요 셀레니움으로 네이버 로그인을 진행할 때 Pyperclip 을 사용하면 헤드리스(headless)를 활성화할 수 없는 문제가 발생한다. 셀레니움의 headless 모드에서는 클립보드 접근이 제한되기 때문이다. headless 모드...
[Docker Swarm] 실전 연습: 블로그 앱 배포하기 - Feat. Traefik, NFS
개요 도커 스웜(Docker Swarm)을 사용하여 포토 형식의 커뮤니티 서비스 배포 이번 게시글을 통해 기존에 도커 컴포즈로 배포했을 때와 어떤 차이점이 있는지, 컨테이너간 파일 시스템(FS)을 공유를 어떻게 할건지에 대해 기록해보...
[EVE-NG] 소규모 네트워크에서의 스위칭 환경 구축하기 (서버팜 구축)
개요 이번 게시글에서는 소규모 네트워크에서 스위칭 환경을 L2, L3 모드로 구축하는 과정에 대해서 기록해보려고 한다. 백본에서 이중화 구성(VRRP)은 이미 진행되어 있다는 가정하에 밑에 하단 서버팜 환경을 L2 / L3 각각으로...
[Linux] tcpdump로 패킷들을 덤프(dump)하여 와이어샤크로 패킷 분석하기
tcpdump로 패킷을 파일로 저장하기 활용 방법 i [interface name] : 패킷의 내용을 출력하고 싶은 인터페이스의 이름으로 지정한다. w [file name] : 패킷들의 내용을 파일로 저장하고 싶을 때 사용하는 옵션...
[Python] 제너레이터(Generator)와 yield 키워드
Yield 일반적으로 프로그래밍에서의 함수는 어떤 결과 값을 return 키워드를 이용해 값을 반환 한다. 하지만 파이썬에서는 함수에서 yield 키워드를 사용하면 다른 방식으로 값을 반환할 수도 있다. 간단한 예제 코드를 보며 이해...
[Python] any(): 효율적인 조건 검사를 위한 필수 도구
개요 이번 게시글에서는 파이썬에서 조건 검사를 간결하고 효율적으로 처리할 수 있게 해주는 내장 함수인 any() 에 대해 기록해보려고 한다. 1. any() 함수란? any() 함수는 반복 가능한(iterable) 객체 의 요소 중...
[EVE-NG] Proxmox로 EVE-NG 서버 구축 및 장비 이미지 생성
▶ 개요 Proxmox 환경에서 EVE-NG 서버를 구축하는 방법과 장비 이미지를 어떻게 import 하는지 알아보도록 하자. ▶ ISO 다운로드 eve-ng 홈페이지에서 Free EVE Community Edition ISO 이미지...
[Ansible] Ansible, 왜 엉뚱한 계정으로 접속을 시도할까요?
앤서블! 왜 로그인된 계정으로 접속을 시도할까요? Ansible을 설치하고, 설레는 마음으로 관리 서버들과의 연결을 확인하기 위해 첫 명령어를 날려봅니다! 그런데 우리를 반겨주는 것은 초록색 SUCCESS 가 아닌, 빨간색 UNREA...
[Python] openpyxl로 excel 행과 열 크기 조작하기
개요 openpyxl 라이브러리를 사용하여 크롤링된 데이터를 엑셀로 넘기는 작업을 하고 있는데 이 때, 행 높이, 열 너비, 폰트 등을 조작하는 스크립트를 기록해놓으려고 한다. 스크립트 위 스크립트는 openpyxl 을 써서 엑셀 파...
[Ansible] 앤서블 초보 탈출! 2단계: 변수, 조건, 반복문으로 레벨업하기!
개요 안녕하세요! 앤서블 1단계 수업을 무사히 마치고 돌아오신 것을 환영합니다. 🥳 지난 시간에는 nginx를 설치하는 간단한 플레이북을 작성하고 실제로 테스트까지 진행하였습니다. 하지만 실제 업무는 그렇게 단순하지 않겠죠? 서버마...
[Linux] [서버 관리 치트키] nmap, netcat(nc) 실무 명령어 🚀
개요 서버에 서비스를 올리고 방화벽을 열었는데 ... "왜 접속이 안 되지?" 하는 막막한 순간, 경험해보지 않으셨나요? 이때 가장 먼저 해야할 작업은 바로 서버의 포트가 정말 '살아있는지' 확인하는 일입니다. 이번 게시글에서는 서버...
[Ansible] 앤서블 초보 탈출! 1단계: 기본 개념부터 첫 자동화까지 (실습 포함)
개요 매번 반복되는 서버 설정, 여러 대의 서버에 동일한 작업을 하다가 발생하는 실수 때문에 지쳐본 적 없으신가요? Ansible은 그런 고민을 해결해 줄 아주 강력한 도구입니다! 이번 게시글에서는 앤서블의 핵심 개념을 이해하고 직접...
[eve-ng] L2 스위치 관리 IP 통신 불가 트러블슈팅
개요 장비별로 관리 IP를 설정하고, Admin 네트워크 ( VLAN 50 ) 대역의 Admin PC에서 각 장비별 SSH 접속 테스트를 하다가 DMZ 스위치의 SSH 접근이 불가능하여 해당 문제를 해결하는 과정을 기록해보려고 한다....
[Shell Script] 서버 점검을 위한 스크립트 작성하기 #1
시나리오 매일 아침 운영 중인 리눅스 서버의 상태를 체크하는 것은 매우 번거로운 일이다. 서버의 로그를 일일이 확인하거나 시스템의 상태를 점검하는 작업이 수동으로 이루어지면 중요한 이슈를 놓치기 쉽고, 관리자에게는 큰 부담이 된다....
[Shell Script] 서버 점검을 위한 스크립트 작성하기 #2
▶︎ 스크립트 설명 시스템 기본 정보 수집 호스트명, 작동날짜, 시스템 정보 마지막 리부팅으로부터 며칠째 운영인지 확인 크론탭에 등록된 사용자 작업 점검 커널 정보 확인 네트워크 인터페이스 조회 게이트웨이 정보 프로토콜 상태 정보 파...
[Shell Script] 오래된 로그 관리(백업/삭제)하는 스크립트 작성하기
개요 리눅스 서버를 운영하다보면 실행중인 애플리케이션들의 로그 또는 시스템 로그가 점차 쌓이게 된다. 한정된 용량 속에서 시스템 운영을 해야 하는데 로그는 시스템이 시작된 시점부터 종료될 때까지 계속해서 쌓이므로 이것을 정리할 무언가...
[Shell Script] GPG Encrypt + Git 연동 비밀번호 관리 스크립트 작성
개요 GPG 암호화를 사용하여 서버 비밀번호를 통합 관리하고, 이를 Git과 연동해보려고 한다. 이렇게 하면 서버 비밀번호를 안전하게 관리하면서 버전 관리 시스템을 통해 변경 이력을 추적할 수 있게 된다. 관리 방법 GPG 암호화 :...
[Docker] 게임 서버 디도스(DDoS) 예방 캠페인 - NPM(Nginx Proxy Manger)의 Stream 기능 활용기
개요 이번 게시글에서는 홈서버에서 게임 서버를 운영하면서 겪은 DDoS 공격 문제와 이를 해결하기 위해 AWS Lightsail 과 NPM( Nginx Proxy Manager )를 활용한 경험을 기록해보려고 한다. 문제 상황 최근...
[Linux] 네트워크 소켓 정보는 어떤 명령어로 확인할까? - netstat / ss
netstat netstat 명령어는 리눅스 시스템의 네트워크 연결 상태, 라우팅 테이블, 인터페이스 통계 등 다양한 네트워크 정보를 확인하는데 사용되는 도구이다. 최근에는 ss 명령어가 netstat 명령어를 대체하고 있다. net...
[Linux] tar 그게 뭔가요? 먹는건가요?
tar 는 Tape ARchive 의 약자입니다. 이름에서 알 수 있듯이, 원래는 테이프 저장 장치에 데이터를 백업하기 위해 만들어진 오래된 명령어에요. 하지만 지금은 테이프보다 파일을 한데 묶는 아카이빙 기능으로 훨씬 더 많이 사용...
[Docker / 모니터링] PLG(Promtail, Loki, Grafana)로 로그 관리 시스템 구축
개요 바로 이전 게시글에서 ELK + Filebeat로 로그 관리 시스템 구축을 진행했었다. 개인용 서버에서 무거운 ELK 스택을 쓸 이유가 굳이 있을까? 라는 생각이 들었다. 그리고 ELK 스택은 무엇보다 러닝 커브가 좀 있다. 노...
[Docker / 모니터링] ELK + Filebeat로 로그 관리 시스템 구축
개요 최근 운영 중인 리눅스 서버들을 모니터링 하기 위해서 Prometheus와 Grafana를 통해 각 서버들의 메트릭을 수집하고 시각화를 해봤었다. (Prometheus의 node-exporter로 서버 모니터링하기) 이번에는 각...
[Docker / 모니터링] Grafana + InfluxDB + Telegraf로 리소스 모니터링 대시보드 구축하기
개요 이번 게시글에서는 Telegraf 로 서버의 각종 지표(Metric)을 수집하고, InfluxDB 라는 데이터 저장소에 차곡차곡 저장한 뒤, Grafana를 통해 수집한 지표를 직관적인 대시보드로 시각화하는 방법에 대해 기록해보...
[Docker-Compose] 도커 컴포즈(Docker Compose)에서 볼륨을 유연하게 활용하는 방법 - SSHFS / NFS
개요 Docker Compose로 애플리케이션을 구성할 때, 원격 서버의 파일 시스템을 컨테이너에 마운트해야 할 일이 종종 있다. 이를 쉽게 처리할 수 있는 여러 방법 중 SSHFS 와 NFS 을 활용하는 방법에 대해 간단하게 기록해...
[Docker / 모니터링] 서버 리소스 모니터링 스택 구축하기 (prometheus + grafana + node-exporter)
개요 prometheus , node-exporter , grafana 를 사용하여 리눅스 기반 서버들의 리소스를 모니터링할 수 있는 대시보드를 구축해볼 것이다. 대략적인 구성은 다음과 같다. 위 사진을 기반으로 exporter ->...
[Linux] Ubuntu 22.04 Zabbix(자빅스) 설치 가이드
개요 이전에 도커 환경에서 Zabbix를 설치하는 게시글을 작성한 적이 있는데요! (Docker Zabbix로 서버 모니터링하기) 오늘은 Zabbix를 Ubuntu에 직접 설치하고, 추가로 Cisco 네트워크 장비를 SNMP로 감시하...
[Docker / 모니터링] LibreNMS 설치 및 네트워크 장비 등록하기
LibreNMS https://www.librenms.org/ LibreNMS는 강력한 기능과 직관적인 UI로, Cisco 스위치나 라우터 같은 다양한 네트워크 장비를 모니터링하는 데 최적화된 오픈소스 솔루션이다. LibreNMS의...
[Docker] 배그 최고급 꾸러기 시뮬레이터 배포
개요 최고급 꾸러미에 대한 확률 체감을 위한 시뮬레이터 프로그램을 구현하고 도커로 배포하였음. 배포 로직은 AWS EC2 인스턴스에 도커를 사용하여 nginx proxy manager를 배포하고 리버스 프록시로 홈 서버에 있는 시뮬레...
[Shell Script] mysqldump를 사용한 MySQL 백업 및 자동 정리 셸 스크립트 작성하기
개요 집에서만 사용하는 MySQL 데이터베이스가 있는데, 요즘 쌓이는 데이터들이 많아지다보니 외부 저장소나 NAS 등으로 백업을 해야겠다는 생각이 불현듯 들었다. DB 운영 초기에는 삭제되도 상관 없다는 마인드였는데, 파싱된 데이터가...
[Linux] 리눅스(Linux) 시스템 리소스 모니터링 도구 - sar,glances
SAR System Activity Reporter Unix 및 Unix 계열 운영 체제에서 시스템의 활동을 모니터링하고 성능을 분석하기 위한 명령줄 도구 및 유틸리티입니다. sar은 리눅스, BSD, macOS 등 다양한 Unix...
[Proxmox] PBS(Proxmox Backup Server)를 설치하고 시놀로지 NFS와 연동하기
개요 홈서버에서 Proxmox를 운영하게 되면서, VM들에 대한 백업을 어떻게 할 것인가에 대해서 고민해봤다. 찾아보니 Proxmox의 VM들을 백업하는 여러 가지 방법들이 존재했다. 1. Proxmox 내장 백업 기능 ( Vzdum...
[Proxmox] Proxmox의 백업 저장소로 시놀로지의 NFS 사용하기
개요 시놀로지의 NFS를 Proxmox 서버의 백업 저장소로 구축해보자. 시놀로지 NFS 활성화 먼저 시놀로지에서 NFS를 활성해주자. 제어판 -> 파일 서비스 -> NFS -> 서비스 활성화 그리고 Proxmox 서버에서 마운트 할...
[Proxmox] 생성한 VM 디스크의 스토리지를 다른 스토리지로 이전하는 방법
개요 Proxmox에서 생성한 VM 디스크의 스토리지를 다른 스토리지로 이전하는 방법에 대해서 기록해보려고 한다. VM을 사용하다보면 스토리지간 이동이 필요한 경우가 아주 가끔 생긴다(예시. HDD -> SDD, SDD -> HDD)...
[Proxmox] Proxmox HDD(하드) 증설/삭제
개요 운영 중인 Proxmox에 신규 디스크(HDD)를 증설 또는 삭제하는 방법에 대해 기록해보려고 한다. 1. 디스크 증설 1-1. 신규 디스크 포맷 작업 진행 전에 먼저 신규 디스크를 포맷 해주고 시작하자. 만약 하위에 sda1...
[배포] GitLab으로 배포 자동화 파이프라인 구축하기
개요 SSH 원격 배포 방법을 사용하여 배포 자동화 파이프라인을 구축해보려고 한다. CI 파이프라인에서 이미지를 빌드 & 푸시하고, Runner에서 프로덕션 서버로 SSH 접속하여 docker pull && docker-compose...
[Docker-Compose] Extension fields
Docker Compose Extension 도커 컴포즈 버전 3.4부터 추가된 포맷이다. 선언은 .yaml 파일의 맨 위에 선언하며, 접두어로 x- 를 붙인다. 선언시 & 를 사용하며, 호출 시에는 를 사용한다. 사용 예시 위 처럼...
[배포] Github Actions로 Djnago 블로그 배포 자동화하기
💡 개요 Waytothem 이라는 Django 백엔드 기반으로 배포된 블로그가 하나 있다. 해당 블로그의 경우 Lightsail 5달러 Plan 짜리 인스턴스 위에서 거의 1년 6개월 간 운영 중에 있고 하나의 인스턴스에 도커 컴포...
[배포 가이드] Containerize my apps - 내가 만든 앱(서비스) 컨테이너화 하기
Container toplogy 📌 사전 준비 먼저 express 앱의 경우 redis 연동이 필요하니 express 앱을 컨테이너로 기동하기 전에 redis 컨테이너가 먼저 생성되어 있어야 한다. 컨테이너 간은 격리된 네트워크에서...
[배포 가이드] Github Actions를 사용하여 배포 자동화하기 (1인 개발 단위)
📋 Workflow 구성도 ◾️ 배포 준비 이전에 [[Deploy] 가상서버(Virtual Machine)에 node API 배포하기 - AWS Lightsail](https://jaehyojjang.dev/deploy/%EC%A0...
[배포 가이드] Github Actions를 사용하여 배포 자동화하기 (팀 단위)
📋 Workflow 구성도 ◾️ 배포 준비 1. 브랜치 생성 이전에 [[Deploy] 가상서버(Virtual Machine)에 node API 배포하기 - AWS Lightsail](https://jaehyojjang.dev/dep...
[네트워크] 3-Tier 네트워크 정리!
개요 오늘 포스팅에서는 3-Tier 네트워크의 기본 개념부터 실제 가상 시나리오를 통해 어떤 기술이 들어가는지 꼼꼼하게 정리해보려고 합니다! 3-Tier 네트워크란? 3-Tier 네트워크는 네트워크를 세 개의 계층으로 나눠 설계한 구...
[네트워크] VPN에 대한 개념과 종류에 대해 알아보고 구축까지 해보기!
1. 개요 이번 게시글에서 정리할 내용은 다음과 같습니다! VPN의 개념 Site-to-Site VPN vs Remote Access VPN(클라이언트 기반 VPN) 의 차이점 Fortinet 장비 기준으로 eve-ng에서 예시 구성...
[Linux] 클라우드 디스크 추가 (2TB) - fdisk
디스크 추가 기존에 설치된 CentOS 7 머신에 10GB의 디스크를 추가해보자. 1. 디스크 확인 sdb 8:16 0 10G 0 disk sdb라는 이름으로 10G짜리 디스크가 추가된 것을 알 수 있다. 2. 디바이스 찾기 find...
[Linux] 클라우드 디스크 추가 (2TB) - parted
1. 디스크 확인 parted 명령어를 사용하여 GPT 파티셔닝을하고 마운트를 해보도록 하자. 현재 디스크를 확장하려는 서버의 경우 추후 확장 가능성이 높은 서버이고, 2TB는 거뜬히 넘길 수도 있기에 GPT로 파티셔닝을 해보려고 한...
[Linux] Logical Volume Manager(LVM) 설치·구성·확장 해보기
LVM 이란? 여러 개의 물리 디스크를 합쳐서 하나의 파일 시스템으로 구성 서버 운영에 있어서 작은 용량의 HDD를 하나로 합쳐 대용량의 스토리지를 구성할 떄 사용 스토리지 확장 및 변경사항에 있어 유연한 대처 및 관리가 가능해짐 L...
[Dockerfile] 멀티스테이지 빌드(multistage build)로 이미지 최적화하기
개요 도커를 사용하여 애플리케이션을 컨테이너화할 때 이미지의 크기(Size)는 중요한 요소이다. 불필요한 파일이나 종속성이 포함된 거대한 이미지는 배포 속도를 저하시키게 된다. 이런 문제를 해결하기 위해 도커는 멀티스테이지 빌드 라는...
삼바(samba) 서버를 구축하는 방법 (리눅스 - 윈도우)
Samba 요즘 리눅스를 자주 사용하게 되면서 윈도우와 리눅스 간의 파일 전송이 매우 번거롭게 느껴지기 시작했다. 본인의 경우 리눅스에서 작업한 데이터를 윈도우에서 WinSCP 등의 파일 공유 도구를 사용하여 옮기고는 하는데, 매번...
[네트워크] Destination IP NAT 이해하기
개요 Destination IP NAT를 사용하는 이유는 목적지 IP를 변경하여 통신을 원활하게 하기 위함이다. 다시 말해 Destination IP NAT를 실시하지 않으면 제대로 통신이 될 수 없음을 의미한다. Source IP...
[네트워크] Source IP NAT 이해하기
Source IP NAT에 사용되는 IP NAT Device의 Interface IP Source IP NAT를 실시할 때 사용되는 첫 번째 IP는 바로 NAT 장비의 Interface IP이다. 정확히는 Outgoing Interf...
[네트워크] Network Address Translation(NAT) 이해하기
사설망의 탄생 Private Network(사설망)는 IPv4 중 특정 대역을 공인 인터넷이 아닌 가정, 기업 등의 한정된 공간에서 사용하는 네트워크를 의미한다. 사설망에 소속된 IP인 사설 IP 대역은 오로지 사설망(내부망) 에서만...
[Shell Script] 그룹 명령(group command) 살펴보기
그룹 명령 셸 스크립트에서 여러 명령을 중괄호 {} 로 묶어서 리다이렉션을 하나로 처리하는 것을 그룹 명령(Group Command) 라고 한다. 예제 중괄호를 그룹핑하여 리다이렉트를 하나로 넘기기 쓰는 이유 셸 스크립트를 작성하다보...
[k8s] 쿠버네티스에서의 서비스 디스커버리 이해와 구현 예제
개요 쿠버네티스는 마이크로서비스 아키텍처를 운영할 때 필수적인 서비스 디스커버리 기능을 기본적으로 제공합니다! 여러 파드(Pod)가 동적으로 생성되고 소멸되더라도, 서비스(Service) 리소스를 통해 안정적인 네트워크 접근과 통신이...
[k8s] containerd 환경에서 이미지 레지스트리에 배포된 프라이빗 이미지 사용하는 방법
개요 최근 쿠버네티스 클러스터를 구축하면서 CRI(Container Runtime Interface)가 Docker 대신 containerd 기반으로 설정된 경우가 많아졌어요. 이러한 환경에서 Docker hub의 프라이빗 이미지를...
[k8s] 데이터 영속적으로 관리하는 방법 - Persistent Volume / Persistent Volume Claim
개요 웹 서비스와 데이터베이스(DB)를 각각의 Pod로 운영하는 경우, 데이터의 영속성이 매우 중요하다는거 다들 아실텐데요! 만약 DB Pod가 종료되거나 재시작되면, Pod 내부 스토리지에 저장된 데이터가 함께 소실되기 때문에 이를...
[Linux] 리다이렉션 정리하기
💻 리눅스 리다이렉션 완벽 정복: 기본부터 고급까지 (실습 예제 포함) 안녕하세요! 리눅스 환경에서 터미널 작업을 하다 보면 명령어의 결과를 파일로 저장하거나, 파일의 내용을 명령어의 입력으로 사용해야 하는 경우가 정말 많습니다....
[네트워크] 스위치의 맥 주소 학습(Mac address learning) 원리
맥 주소 테이블이란? 스위치 내부에는 맥 주소 테이블(Mac Address Table)이 존재한다. mac 주소 테이블은 스위치의 포트 번호와 해당 포트에 연결되어 있는 컴퓨터(호스트)의 mac 주소가 등록되는 데이터베이스라고 보면...
[네트워크] 스위치(Switch)와 허브(Hub) 각각의 동작 방식 이해하기
허브 허브는 네트워크에서 가장 기본적인 연결 장치로, 여러 대의 컴퓨터를 연결하여 하나의 네트워크를 구성한다. 간단히 말하자면, 허브는 연결된 모든 컴퓨터들에게 데이터를 전달하는 역할을 한다. 하지만, 허브는 데이터 패킷이 어디에서...
[Linux] Here Document, Here Strings, EOF
◾️ Here Document here document 는 특정 command의 표준 입력으로 리다이렉트 되어지는 text block을 의미하며 주로 셸 스크립트에서 사용된다. ▪️ 문법 위와 같이 사용하며, 이는 커맨드라인 상에서...
[네트워크] 맥 주소(mac address) / ARP 프로토콜 동작 원리 이해하기
개요 주소 결정 프로토콜(Address Resolution Protocol,ARP)은 네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응(bind)시키기 위해 사용되는 프로토콜이다. 여기서 물리적 네트워크 주소는 Ethernet...
[네트워크] SVI(Switched Virtual Interface)에 대해 알아보기
SVI (Switched Virtual Interface) SVI는 스위치에서 VLAN(Virtual Local Area Network)에 할당된 논리적 인터페이스를 의미한다. 이는 스위치가 각 VLAN에 대해 Layer 3(IP 기...
[Linux] curl vs wget: 어떤 도구를 써야할까?
개요 오늘은 터미널에서 자주 쓰이는 두 가지 도구, curl 과 wget 에 대해 기록해보려고 합니다! 둘 다 웹에서 데이터를 가져오는 데 유용하지만, 용도와 특징이 조금 달라서 상황에 따라 골라 쓰면 좋아요! curl: 데이터 전송...
[Linux] xargs 명령어 가이드
xargs란? xargs 는 표준 입력(stdin) 으로부터 값을 받아서, 명령어의 인자(argument) 로 넘겨주는 역할을 합니다. 즉, 어떤 명령어가 출력한 리스트를 받아서, 이를 또 다른 명령어에 넘겨주는 중간 역할을 합니다....
[네트워크] 이더넷(Ethernet) 통신에 대해 이해하기
이더넷 이더넷은 컴퓨터나 다른 장치들이 데이터를 주고받기 위해 사용하는 네트워크 기술 중 하나로, LAN(Local Area Network) 즉, 근거리 통신망을 형성하는 주요 방식이다. 쉽게 말하면, 인터넷 회선에 유/무선 통신 장...
[Linux] Ubuntu에서 계정(유저) 생성하기
adduser adduser 명령어를 통해 계정을 생성할 경우 기본 계정 정보,홈 디렉토리,쉘 설정 등 한 번에 진행되며 생성된다 adduser [계정이름] 유저가 정상적으로 생겼는지 확인해보자 useradd useradd 명령어는...
[Linux] ps 명령어로 프로세스 관리 정복하기!
개요 안녕하세요! 리눅스 서버를 운영하다 보면 '대체 어떤 프로세스들이 움직이고 있는 거지?'라는 궁금증이 생길 때가 많으시죠? 시스템이 느려지거나, 특정 서비스가 제대로 동작하는지 확인할 때 등 프로세스 상태를 파악하는 것은 서버...
[네트워크] 서브넷 간 이루어지는 통신 자세하게 파헤쳐보기
개요 이번 게시글에서는 서로 다른 네트워크 대역(서브넷)에 있는 장비 간의 통신이 어떻게 이루어지는에 대해서 자세하게 파헤쳐보겠습니다. 🚀 다른 동네 친구에게 편지 보내기 우리가 오늘 해결할 미션은 바로 이것입니다. A 컴퓨터 :...
[네트워크] 서브넷 계산, 이렇게 쉬울 수가! 초보자도 이해하는 방법
서브넷팅이 뭐야? IP 주소는 네트워크 부분과 호스트 부분으로 나뉘어요. 예를 들어, 192.168.1.0/24 는 네트워크가 24비트라는 뜻이에요 (서브넷 마스크: 255.255.255.0) 서브넷팅은 이 호스트 부분을 빌려와서 더...
[k8s] Ubuntu 22.04 쿠버네티스 클러스터 구축하기
개요 쿠버네티스를 주제로한 온라인 강의들의 대부분은 쿠버네티스를 설치할 때 Vagrant 를 사용하여 설치한다. 수업 환경이 수강생들마다 다르기 때문에 이를 통일해야 원활한 강의 진행이 되기 때문에 이해가 안되는 것은 아니다. 하지만...
[Docker] 도커에서 서비스 디스커버리(Service Discovery)란 무엇일까?
개요 이번 게시글에서는 도커 환경에서 중요한 개념 중 하나인 서비스 디스커버리 에 대해서 자세하게 기록해보려고 합니다. 이 글은 컨테이너 기반 환경에서 서비스 간 통신을 어떻게 효율적으로 관리할 지 고민하는 분들에게 큰 도움이 될 수...
[Docker-Compose] 서비스 컨테이너에 주입되는 환경 변수 다루기
개요 도커 컴포즈(Docker Compose)에서 각 서비스 컨테이너들의 외부 환경변수를 주입하는 방법들을 기록해보려고 한다. 환경변수 삽입 방법 도커 컴포즈에서 환경변수를 주입하는 방법은 크게 네 가지로 구분된다. 1\. Compo...