KR_CS지식 - somaz94/DevOps-Engineer GitHub Wiki

CS 지식 & 소프트웨어 아키텍처


주요 용어 통합 정리

웹 브라우저 & 렌더링

  • DOM (Document Object Model): HTML을 파싱하여 생성한 트리 구조
  • CSSOM (CSS Object Model): CSS를 파싱하여 생성한 트리 구조
  • Render Tree: DOM + CSSOM을 결합한 렌더링용 트리
  • AST (Abstract Syntax Tree): JavaScript 코드를 파싱한 추상 구문 트리
  • Construction: HTML/CSS/JS 파싱 및 Render Tree 생성 단계
  • Operation: Layout, Painting, Composition을 수행하는 렌더링 단계
  • Critical Rendering Path (CRP): 브라우저가 HTML, CSS, JavaScript를 화면의 픽셀로 변환하는 일련의 단계

아키텍처 패턴

  • MSA (Microservices Architecture): 애플리케이션을 독립적인 작은 서비스로 분리하는 아키텍처
  • Loosely Coupled: 서비스 간 의존성을 최소화한 느슨한 결합 구조
  • 3-Tier Architecture: Presentation, Application, Data 3개 계층으로 구성된 전통적 아키텍처
  • Clean Architecture: 비즈니스 로직과 외부 인터페이스를 분리한 계층형 아키텍처
  • Saga Pattern: 분산 트랜잭션을 이벤트 기반으로 처리하는 패턴

프로세스 & 스레드

  • Program (프로그램): 디스크에 저장된 정적 실행 파일
  • Process (프로세스): 실행 중인 프로그램 인스턴스 (독립적 메모리 공간)
  • Thread (스레드): 프로세스 내의 경량 실행 단위 (공유 메모리)
  • IPC (Inter-Process Communication): 프로세스 간 통신 메커니즘
  • Context Switching: CPU가 실행 중인 프로세스/스레드를 전환하는 작업
  • Race Condition: 여러 스레드가 공유 자원에 동시 접근하여 결과가 불확정적인 상태
  • Deadlock: 두 스레드가 서로의 락을 기다리며 무한 대기하는 상태

자료구조

  • Stack (스택): LIFO (Last In First Out) 후입선출 자료구조
  • Queue (큐): FIFO (First In First Out) 선입선출 자료구조
  • Push/Pop: 스택의 삽입/삭제 연산
  • Enqueue/Dequeue: 큐의 삽입/삭제 연산
  • Call Stack: 함수 호출 정보를 저장하는 스택 구조

Kubernetes & 상태 관리

  • StatefulSet: 상태를 가진 애플리케이션을 관리하는 K8s 오브젝트
  • Stateless Application: 내부 상태를 유지하지 않는 애플리케이션
  • Persistent Volume (PV): 영구 저장소
  • Headless Service: ClusterIP가 None인 서비스 (StatefulSet에서 사용)
  • Ordinal Index: StatefulSet Pod의 순서 번호 (0, 1, 2, ...)

DevOps & GitOps

  • GitOps: Git을 단일 진실 공급원으로 사용하는 운영 방식
  • Declarative: 시스템의 원하는 상태를 선언하는 방식
  • Imperative: 시스템에 수행할 명령을 지시하는 방식
  • Reconciliation: 선언된 상태와 실제 상태를 일치시키는 프로세스
  • ArgoCD: Kubernetes용 GitOps CD 도구
  • Flux: CNCF의 GitOps 도구

동기 & 비동기 처리

  • Synchronous Processing (동기 처리): 작업을 순차적으로 완료하는 방식
  • Asynchronous Processing (비동기 처리): 작업을 백그라운드에서 독립적으로 처리하는 방식
  • Blocking: 작업 완료까지 다음 작업이 대기
  • Non-blocking: 작업 완료를 기다리지 않고 즉시 반환
  • Event Loop: JavaScript의 비동기 처리 메커니즘

아키텍처 설계

  • Clean Architecture: 비즈니스 로직과 외부 인터페이스를 분리하는 계층형 아키텍처
  • Entities: 핵심 비즈니스 규칙 계층 (가장 내부)
  • Use Cases: 애플리케이션 비즈니스 로직 계층
  • Interface Adapters: Use Case와 외부 시스템 간 변환 계층
  • Frameworks & Drivers: 가장 외부 계층 — DB, 웹 프레임워크, 디바이스 드라이버
  • WAS (Web Application Server): 비즈니스 로직과 동적 콘텐츠를 처리하는 서버

클라우드 네이티브 패턴

  • VPC (Virtual Private Cloud): 클라우드 상의 격리된 가상 네트워크
  • PrivateLink: AWS의 프라이빗 연결 서비스
  • VPC Peering: VPC 간 직접 연결
  • Private Access: 인터넷 없이 GCP 내부에서 연결하는 방식
  • Service Mesh: 마이크로서비스 간 통신 관리 계층 (Istio, Linkerd)

Q&A 목록

Q1: 웹 브라우저의 동작 원리

브라우저가 URL 입력부터 화면 출력까지 거치는 과정: DNS 조회 → TCP/TLS 연결 → HTTP 요청 → HTML 파싱(DOM) → CSS 파싱(CSSOM) → JS 실행 → Render Tree → Layout → Paint → Composite 순으로 동작한다. CSS와 JS는 파서를 블로킹하므로 defer/async 속성으로 최적화한다.

상세 보기


Q2: 마이크로서비스 아키텍처 (MSA)

애플리케이션을 독립 배포 가능한 작은 서비스로 분리하는 아키텍처. 서비스 간 통신은 REST/gRPC(동기) 또는 Kafka/RabbitMQ(비동기)를 사용하고, DB는 서비스별로 분리(Database per Service)한다. 모놀리식 대비 독립 배포·확장이 가능하지만 운영 복잡도가 높아진다.

상세 보기


Q3: DNS의 동작 원리

도메인을 IP로 변환하는 분산 계층 시스템. 클라이언트는 Recursive DNS에 질의하고, Recursive DNS가 Root → TLD → Authoritative DNS 순서로 조회한 후 결과를 반환한다(Recursive Query). TTL 동안 캐시에 저장되어 이후 요청은 1 RTT로 처리된다. A, AAAA, CNAME, MX, TXT 등의 레코드 타입을 지원한다.

상세 보기


Q4: 프로세스와 스레드의 차이 및 IPC

프로세스는 독립된 메모리 공간을 가진 실행 단위(Isolation), 스레드는 프로세스 내 공유 메모리를 사용하는 경량 실행 단위(Concurrency)다. 프로세스 간 통신은 Pipe, Message Queue, Shared Memory, Socket 등 IPC를 사용한다. 멀티스레딩에서는 Race Condition을 Mutex로, Deadlock은 Lock Ordering으로 방지한다.

상세 보기


Q5: 스택(Stack)과 큐(Queue)

스택은 LIFO 구조로 함수 호출 스택, DFS, Undo/Redo에 활용된다. 큐는 FIFO 구조로 BFS, 작업 스케줄링, 메시지 큐(Kafka/RabbitMQ)에 활용된다. 모든 기본 연산은 O(1). 우선순위 큐는 Heap으로 구현하며 삽입/삭제가 O(log n)이다.

상세 보기


Q6: StatefulSet과 Stateless 애플리케이션

Stateless는 Deployment로 관리하며 Pod가 상호 교환 가능하다. Stateful은 StatefulSet으로 관리하며 Pod마다 고유 ID(mysql-0, mysql-1)와 전용 PVC를 보유한다. Headless Service(clusterIP: None)로 Pod IP를 직접 반환하여 Master/Slave 구분이 가능하고, Pod 재시작 후에도 DNS 이름이 유지된다.

상세 보기


Q7: GitOps 개념과 ArgoCD 활용

GitOps는 Git을 단일 진실 공급원으로 사용하여 인프라를 선언적으로 관리하는 방식이다. ArgoCD는 Git 저장소를 지속적으로 폴링하여 Desired State와 Actual State를 비교(Reconciliation Loop)하고, 차이 발생 시 자동으로 Sync한다. selfHeal: true로 수동 변경을 자동 복구하고, 롤백은 git revert만으로 가능하다.

상세 보기


Q8 & Q9: 클린 아키텍처와 3-Tier 아키텍처

클린 아키텍처는 계층을 Entities → Use Cases → Interface Adapters → Frameworks & Drivers 순으로 구성하여 비즈니스 로직을 UI·DB·프레임워크와 독립적으로 유지한다. 전통적 3-Tier는 Presentation → Application → Data로 구성되며, Spring Boot·Django 같은 현대 프레임워크는 앱 서버를 내장하여 WAS 경계가 흐려졌다.

상세 보기


Q10 & Q11: 클라우드 네이티브 패턴과 동기/비동기 처리

AWS 3-Tier: Route 53 → ALB/EKS → RDS/ElastiCache (PrivateLink). GCP 3-Tier: Cloud DNS → GKE LB/Ingress → Cloud SQL/Memorystore (Private Access). 동기 처리는 Blocking/순차 실행(단순·순서 보장), 비동기 처리는 Non-blocking/동시 실행(높은 처리량·백그라운드 작업)에 적합하다.

상세 보기


참고 자료

⚠️ **GitHub.com Fallback** ⚠️