본문 바로가기

전체 글34

Kubernetes 소개 및 아키텍쳐 목표Kubernetes가 무엇이고 왜 필요한지, 핵심 아키텍처를 깊이 있게 이해 할 수 있음Kubernetes 필요성 이해Docker만 사용할 때의 문제점 (Kubernetes의 필요 이유)자동 복구 없음 컨테이너가 죽으면 수동으로 직접 컨테이너를 재시작 해야한다. 만약 야간에 장애가 발생한다면? 대응이 바로 되지 않을 수도 있다.Kubernetes는 선언적 상태관리로, 반대되는 개념은 명령적 상태관리다.명령적 상태관리는 직접 어떤 명령을 내리는 것이며, 선언적 상태관리는 원하는 상태를 정해두고 Kubernetes의 Controller Manager가 원하는 상태를 유지할 수 있도록 명령한다.선언적 상태는 API Server 내의 etcd (클러스터 상태 저장소) 에 저장되며, 각 리소스에 대한 선언적 .. 2026. 1. 17.
디스크 I/O 분석 (iostat, iotop) 목표디스크 I/O가 느려서 발생하는 장애를 진단할 수 있어야 함. - 모르는 부분에 대해 정답을 찾아가는 과정1. 해당 에러 상황의 원인이 로그 파일 과다 쓰기로 디스크에 병목이 발생한 것에 대해 궁금함이 생김 (단서가 없다고 생각하였음)2. CPU와 메모리가 정상임으로 두 과정에서의 병목은 아님.3. 디스크 사용량이 99%기 때문에, 디스크 병목이라고 의심할 수 있음.4. 특히, 로그 파일 과다 쓰기로 의심한 이유는 아래와 같다. - write 시스템 콜을 호출하고, dirty page를 생성한다 (write 시스템 콜은 커널 page cache에 먼저 데이터를 쓰고, 해당 데이터를 디스크에 쓰는 행위는 백그라운드에서 비동기적으로 진행됨) - write 시스템 콜 자체도 동기적인 작업이며, 조건에 .. 2026. 1. 12.
메모리 분석 (Free, vmstat, /proc/meminfo) 목표시스템 메모리 상태를 분석하고, OOM (Out of Memory) 상황을 진단할 수 있어야 함.리눅스 메모리 구성리눅스 메모리는 Used + Free + Buffers + Cached로 이루어져있고, Buffers와 Cached는 즉시 반환이 가능하다. 실제 가용 메모리는 Free + Buffers + Cached의 합이다.- 모르는 부분에 대한 학습1. Buffers와 Cached 에 대한 개념이 없음.2. Buffers는 블록 디바이스 메타데이터 캐시이며, Cached는 실제 파일의 Content에 대한 캐시이며, 즉시 회수가 가능하다.3. 디스크 접근은 메모리 접근 대비 수천~수만 배 느리다. 그래서 Linux는 사용하지 않는 메모리는 낭비라는 철학을 가지고 있다.4. 그래서 Linux는 디스.. 2026. 1. 11.
/proc 파일시스템으로 프로세스 분석 목표/proc 파일시스템을 통해 실행 중인 프로세스의 상태를 분석하고, FD 누수나 메모리 문제를 진단할 수 있어야 함./proc 파일시스템이란?/proc은 가상의 파일시스템이며, 실제 디스크에 존재하지 않고 커널이 실시간으로 생성하는 정보가 담긴 파일시스템이며, 프로세스와 시스템의 상태를 파일처럼 읽을 수 있다.실제 장애 상황- 증상에 대한 분석과 진단을 한 근거를 찾아가는 과정1. Pod 및 OOMKilled 라는 용어 자체가 생소하였음.2. Pod는 쿠버네티스의 가장 작은 실행단위이며, 1개 이상의 컨테이너의 묶음과 격리된 네임스페이스, cgroup의 단위임.3. 여기서 네임스페이스는 같은 운영체제 (커널)을 사용하지만 보이는 것은 다른 서버 인 것 처럼 보여줄 수 있는 매커니즘4. 더 나아가, 컨.. 2026. 1. 10.
strace로 시스템 콜 분석하기 목표애플리케이션이 느리거나 장애가 발생했을 때, strace로 시스템 콜을 분석하여 원인을 찾을 수 있어야 한다. 시스템 콜이란?애플리케이션이 파일을 읽거나, 네트워크 통신을 하려면 운영체제(커널)에게 하드웨어에 접근해달라는 요청을 해야하고, 이 요청을 시스템 콜(System Call) 이라고 한다.DevOps 엔지니어가 시스템 콜을 알아야 하는 이유는?AI는 해당 상황을 장애 상황으로 보고 제시를 해주었으나, 작은 파일 150만 개를 개별적으로 열고 닫는다는 진단이 해당 로그를 보고 어떻게 나온 것인지 궁금하였음- AI의 답변 및 답을 찾아가는 개인적인 사고 방식1. 애플리케이션 로직이 돌고 있지 않은데 CPU를 100% 사용하고 있기 때문에 OS에서의 사용이 클 것이라고 예상함2. strace -c .. 2026. 1. 8.
2025-01-11 (Flutter) - Stateful widget은 데이터의 변화에 따른 화면 변화를 일으킬 수 있다.- setState 함수를 활용해 state의 변화를 widget에 전달하여 build 메서드를 재실행 시킨다.- setState는 콜백함수를 받아 실행하는데, 아무 내용을 넣지 않아도 실행만 한다면 widget에 데이터의 변화를 알리고, build 메서드를 실행하게 한다.- 이는, 데이터의 변화를 감지하는 것이 아닌 setState 함수 자체가 호출되면 데이터의 변화로 인지하여 build 메서드를 실행한다.- 그 반증으로 데이터를 먼저 수정하고, setState의 콜백함수에 아무 내용이 들어가지 않아도 수정된 데이터는 화면에 재렌더링 된다.- 하지만, 가독성의 이유로 데이터의 변화를 가지는 부분은 setState의 콜백.. 2025. 1. 11.
2025-01-04 (Flutter) - 플러터를 이용한 애플리케이션 개발 시, 화면을 구성하는 모든 요소는 Widget이라고 할 수 있고, Widget은 레고 블럭으로 커다란 성을 만들듯이 하나의 블럭으로 사용할 수 있다.- 모든 Widget은 class이며 Widget을 extends 즉, 상속하여 Widget으로써 작동하게 한다. 또한, build 메서드를 필수적으로 구현해야 하며, 이는 화면에 보이는 UI를 그려주는 메서드이며, 플러터가 실행시켜 build 메서드가 return하는 모든 것을 화면에 보여준다.- build 메서드 또한, Widget을 return하는데 쉽게 보면, Widget(build 메서드)을 return하는 Widget(class)를 생성하는 것이다.- build 메서드 상단에 달리는 @override 어노테이션.. 2025. 1. 11.
supabase를 활용한 회원 관련 기능 구현 (1) - OAuth 로그인 OAuth란?OAuth는 사용자 인증을 위한 기술 표준입니다. OAuth는 사용자 이름, 비밀번호 등의 실제 사용자 자격 증명을 공유하지 않고 한 서비스에서 다른 서비스로 권한 부여를 전달하기 위한 프로토콜입니다. OAuth를 사용하면 사용자는 한 플랫폼에서 로그인한 다음 다른 플랫폼에서 작업을 수행하고 데이터를 볼 수 있는 권한을 부여받을 수 있습니다. 쉽게는, 구글에 이미 사용자로 인증을 한 유저가 다른 서비스에서 구글의 자격 증명을 가지고 해당 서비스를 이용할 수 있는 기술이며, 최근의 웹 서비스에서는 소셜로그인, 간편로그인 등의 명칭으로 카카오, 네이버, 구글 등 많은 메가 웹서비스들이 OAuth를 통한 자격 증명 공유를 제공합니다. 더 쉬운 예로는, 집주인이 없을 때 방문자가 집에 와서, 집 주.. 2024. 10. 9.
[Typescript] Typescript에서 상수 관리하기 개인 프로젝트를 진행 중에 유저를 다양한 역할로 나눠서 관리합니다. 성인 미만 스포츠 팀과 관련된 프로젝트이기 때문에 코칭스태프, 선수, 학부모, 기타로 역할을 나누었습니다. 회원가입 시, 클라이언트에게 role(역할)에 대한 데이터를 요구하고, 요구한 role 데이터에 대한 유효성 검사를 할 필요가 있습니다.Controller Layer에서 유효성 검사를 진행하는 방법도 있지만, 코드가 복잡해지고 role에 대한 내용이 변동이 있을 때 마다 role 데이터에 대한 유효성 검사 코드가 작성된 모든 Controller 파일에서 수정이 이뤄져야 하기 때문에 좋은 방식은 아니라는 판단을 했습니다. 이런 상황에 사용할 수 있는 방법 중, DTO를 작성하고 DTO 파일 내부에서 클라이언트에서 보내오는 데이터에 대.. 2024. 6. 11.