해당 estudy 저장소는 내가 소프트웨어라는 학문을 연구하고 공부하면서 작성했던 기록들의 집합이다.
단순 이론 기록 부터 딥다이브와 리서치, 개인적인 생각과 호소, 내가 중요하게 생각하는 가치와 경험들이 담겨있기도 하다.
요즘 개발자의 추월차선이라는 개념을 스스로 구상하고 있는데, 기록(記錄)이 규모와 진입의 계명을 타파할 수 있을까 자문중이다.
물론 기록이라는 행위 자체가 누군가에게 보여주거나 지적 허영심을 충족하기 위한 수단이였다면 이 저장소를 만들지도 않았다.
그러나 어느정도 나무가 심어져감에 따라, 숲이 완성되어가는 모습을 보자니 숨어있던 나의 욕망이 들어나는 것 같기도하다.
나름 자랑하고 싶은 글을 쓰고싶을때도 있고, 기록이라는 행위 그 자체에 본질적인 가치를 얻는 것 때문에도 글을 쓴다.
동기가 내부적이든 외부적이든 어찌되었든 하나 확실한 것은 기록이라는 데이터 자체는 이곳에 커밋되는 순간 영원해지며
내용이 다르든 구조가 다르든 형식이 다르든 어찌되었든 이 저장소에서는 모든것이 소중하고 가치있는 데이터들이다.
서론이 길어졌다. 어찌되었든 이 저장소는 단순하게 소프트웨어 개발자로서 잡다한 가치를 지닌 기록들의 집합이다.
어느 내용은 당신에게 도움이 되지 않을지도 모르지만 어느 내용은 터닝포인트가 될 수도 있지 않을까 싶다.
"나의 지식의 숲 estudy에 방문해주신 것을 진심으로 환영드리며 또 감사드립니다."
- 소프트웨어 엔지니어로서 성장하기
- 왜 선배들은 Hello World를 찍으라할까?
- YAGNI, 리팩터링, 소프트웨어 의사결정에 관한 이야기
- 애자일 소프트웨어 개발
- 일을 잘한다와 개발을 잘한다의 정의
- 나만의 역량 강화, 지속 가능한 성장 방법
- 카르페디엠(Carpe Diem)
- AI 시대에서 살아남는 방법
- KISS, YAGNI, DRY
- 인증(Authentication), 인가(Authorization)
- Back-End 효율적인 API 명세서 설계방법
- Java Back-End 웹 기술 역사
- Clean Architecture
- OAuth 2.0 개념과 권한 부여 방식 알아보기
- 2023 제 3회 당근마켓 SRE 밋업 후기
- IntelliJ 테스트 커버리지 확인하기
- SOLID 원칙과 각 원칙의 장단점
- Kotlin, JPA가 서로 지향하는 방향의 차이
- Netty
- Netty Message Flow
- EventLoop, Thread Model, Tuning(ioRatio, epoll)
- ByteBuf, Memory Management
- Netty가 완료된 작업을 식별하는 메커니즘
- Netty Async Flow Control(Future, Promise, Listener)
- EventLoopGroup
- NioEventLoop vs EpollEventLoop
- Netty Native Memroy Tuning, BackPressure
- Reactive Programming
- 우아한 테크 세미나 - 우아한 스프링 배치
- Cache - Eviction, Expiration, Passivation
- Protocol Buffers
- Redis 분산락 + WebFlux 프로젝트
- Kafka
- PUB/SUB Architecture
- Kafka 리밸런싱
- Kafka Consumer Offset 수동 commit
- Kafka ISR(In Sync Replica)
- Producer 주요 Options
- Kafka Disk I/O (Sequenctial I/O, Page Cache, Zero Copy)
- Kafka Replication 작동 원리
- Kakfa Partition
- State Machine Model
- State Machine Pattern
- 다중 환경에서 세션은 어떻게 공유하고 관리할까?
- 분산 환경 합의 알고리즘 Paxos
- Kernel
- Linux
- LXC(Linux Container)
- Linux Performance analysis commands
- Linux File System EXT
- User Space, Kernel Space
- System Call Interface
- buffer_head
- 분산 시스템에서 시간 동기화 문제와 해결 알고리즘
- 분산 시스템 논리적 시계(렘포트 시계, 벡터 시계)
- IDC 이중화 구성으로 DR하기 + Kafka 이중화 예시
- Data Partitioning
- 마이크로서비스 아키텍쳐 (MicroService Architecture)
- 확장 큐브로 보는 마이크로서비스
- MA, MSA, SOA(Service Oriented Architecture), ESB, SOAP
- 서비스 디스커버리를 DNS, 로드 밸런서 방식을 사용하지 않는 이유
- 마이크로서비스 클라이언트 회복성 패턴
- MSA 핵심 디자인 패턴
- Saga Pattern
- Event Sourcing
- CQRS
- Transactional Outbox Pattern
- 마이크로서비스 아키텍처 IPC
- 서비스 디스커버리 Service Discovery
- 비동기 메시지 패턴 응용 통신
- 서비스 메시 Service Mesh
- Istio
- xDS Protocol, Control Plane (Istio Pilot)
- Traffic Control & Security mTLS
- Istio Circuit Breaker
- 마이크로서비스에서 분산 트랜잭션 관리하기
- SRE
- Socket Programming
- Encryption Algorithm, AES256
- Low Level, JVM Async Programming
- 수치 기반 사고(Observability + Capacity Planning)
- Failover Consistency
- Netty Proxy
- TCP SYN/ACCEPT Queue 성능 튜닝
- 외부 연동 시스템 리소스 제약과 쏟아지는 트래픽 대응
- 성능 테스트
- WAL, 분산 시스템 데이터 일관성과 장애 복구 패턴
- 캐시 시스템 설계 이론
- 캐시 시스템 설계 구현
- 캐시 무중단 마이그레이션 (Lazy Migration)
- 장애 지점 식별 및 C/A 시스템 설계
- Distributed Lock 취득 후 master node가 다운되었을때
- 캐시 스템피드 현상 제어 (Distributed Lock, PER)
- 대규모 DB 및 데이터 마이그레이션
- SNAT 포트 고갈, DNS 해상도 지연 문제 해결
- Kafka 파티션 리밸런싱중 발생하는 중복 메시지 처리, 멱등성 보장
- 분산 합의 (Consensus) 알고리즘
- Zookeeper가 Paxos를 기용한 이유
- Full GC Hang Alert & Task 시스템 최적화 사례
- Pod Pending 상태의 주요 원인
- kube-proxy의 역할
- iptables와 ipvs의 차이
- CNI(Container Network Interface)
- Pod 간 노드 통신 패킷 흐름
- HPA(Horizontal Pod Autoscaler) 동작 원리
- VPA 사용 시 발생할 수 있는 위험 요소
- PDB(Pod Disruption Budget)의 필요성
- Node Pressure(OOM, DiskPressure) 발생 시 동작
- CrashLoopBackOff 원인 분류
- StatefulSet과 Deployment 비교
- Ingress와 Service 비교
- kubelet의 Pod 관리 과정
- Liveness·Readiness·Startup Probe 비교
- containerd의 역할
- OOM Killer 동작 방식
- epoll이 select/poll보다 효율적인 이유
- CPU Load Average 해석
- cgroup의 CPU·메모리 제어 방식
- 파일 디스크립터 고갈 시 나타나는 증상
- TCP TIME_WAIT 증가의 원인
- DNS Lookup Timeout 발생 요인
- Swap 사용이 위험한 이유
- NUMA 구조에서 발생하는 성능 문제
- 스레드 풀 사이즈 산정 원리
- Prometheus Pull 방식의 장점
- Alertmanager의 역할
- p95·p99 레이턴시 차이 분석
- High Cardinality의 위험성
- 로그 수집 시스템 필터링의 필요성
- Jaeger·Tempo의 역할
- OpenTelemetry 구조
- SLO와 SLI 비교
- MTU Mismatch 발생 시 증상
- Retry 폭주(Thundering Herd)의 위험성
- Connection Pool 고갈 증상
- Nginx 502·504 차이
- Slow Query 탐지 방법
- Thread Overflow 발생 원인
- GC Pause 증가의 근본 원인
- 장애 대응 시 우선순위 판단 기준
- Incident Severity 산정 방식
- 롤백 전략 수립 방법
- Blue/Green Deployment vs Canary Deployment
- DNS Failover 구성 방법
- 재발 방지 대책(Runbook 포함) 작성 방법
- Incident Flow: 감지 → Triage → Mitigation → RCA
- Alert Fatigue 감소 전략
- 배포 자동화 시 고려해야 할 안정성 체크
- SLA·Error Budget 적용 방식
-
[Kotlin, Spring boot] 검색 api에서 find Query vs Internal Function 데이터 처리 효율
-
Spring boot Actuator 스프링 부트 액추에이터 API + Spring Cloud를 사용한 예제
-
ResourceLoader, ResourcePatternResolver, ApplicationContext and Resources Paths
-
SecurityContextHolderStrategy (ThreadLocal, InheritableThreadLocal, Global)
- DDD(Domain Driven Design) 도메인 주도 설계 알아보기
- [Domain-Driven-Design] 바운디드 컨텍스트 (Bounded-Context)
- 도메인 주도 설계 애그리거트(Aggregate) 알아보기
- 응용 서비스와 표현 영역 (presentation, application)
- 여러 애그리거트가 필요한 기능과 도메인 서비스(응용 서비스와의 차이)
- 애그리거트 트랜잭션 관리 (선점,비선점,오프라인 잠금)
- 도메인 모델과 바운디드 컨텍스트
- 시스템 간 강결합(high coupling) 문제
- 이벤트 (Event), 핸들러 (Handler), 디스패처 (Dispatcher)
- 동기 이벤트 처리 문제, 비동기 이벤트 처리
- CQRS (Command Query Responsibility Segregation)
- 데이터베이스
- What is DataBase?
- DataBase Mangement System
- MySQL Query문 정리
- DDL(데이터 정의어)
- 키(Key)의 개념 및 종류
- ORM의 개념과 종류, 활용 방안
- 트랜잭션과 ACID
- 데이터베이스 정규화(Normalization)
- 데이터베이스 성능을 위한 Index와 동작원리
- 리플리케이션(Replication) vs 클러스터링(Clustering)
- DataBase Sharding (분산처리)
- 데이터베이스 CAP 이론
- 데이터 모델링과 데이터 성질에 따른 DB 종류
- 데이터베이스의 커넥션 풀 (Connection Pool CP)
- 데이터베이스 옵티마이저 Optimizer
- 옵티마이저의 최적화와 목표 그리고 한계
- 데이터베이스에서의 클러스터 (Cluster)
- Clustering (Active Clustering, Standby Clustering)
- SQLD
- 식별자 Identifier 종류와 분류체계
- 데이터베이스 정규화 Normalization
- 데이터베이스 반정규화 Denormalization
- DDL(CREATE, ALTER, DROP, TRUNCATE)
- DML(INSERT, UPDATE, DELETE, SELECT), TCL(COMMIT, ROLLBACK)
- DCL(GRANT, REVOKE) 실습, 사용자 생성
- WHERE 조건절 지정 실습
- ORDER BY로 데이터 정렬하기 실습
- GROUP BY, 집계함수로 데이터 그룹별 집계
- Join 연산 (INNER JOIN, OUTER JOIN)
- INNER JOIN & OUTER JOIN SQL
- 날짜(DATE) 함수를 사용한 실습 + DUAL 테이블
- REPLACE() 함수로 데이터 수정하기 실습
- SUBSTR() 함수를 사용한 문자 데이터 자르기
- UPPER(), LOWER() 함수를 사용한 대소문자 구분
- 숫자함수 ROUND(), TRUNC(), CEIL()
- SQL 윈도우 함수 (WINDOW FUNCTION)
- 계층형 쿼리(START WITH, CONNECT BY PRIOR, SIBLINGS BY)
- SQL NULL 관련 함수 - NVL, NVL2, NULLIF, COALESCE
- 프로시저와 트리거의 차이점
- NoSQL vs SQL
- MongoDB
- MongoDB 트레이드 오프 (vs RDB)
- MongoDB - CRUD
- MongoDB 샤딩
- MongoDB 데이터 복구(UNDO, REDO)
- Redis
- Redis 메모리 관리, 최적화 방안
- Redis Fragmentation Ratio
- Redis Distributed Lock, RedLock
- Redis Cluster
- Redis Distributed Lock, Spring Boot Example
- Redis 다중 명령에 대한 원자성 보장 방법
- Redis Architecture
- Redis Replication
- Redis Failover시 데이터 손실 방지 방법
- Redis important fact about replication
- Redis INCR
- Redis Serialization Sync
- 데이터베이스 부하분산(파티셔닝, 샤딩, 레플리케이션) 개념
- 데이터베이스 파티셔닝
- 파티셔닝 종류와 분할 기준
- VARCHAR vs TEXT
- Transaction Serializability
- Transaction Recoverability
- 전문 검색 인덱스
- 커버링 인덱스
- MMR, BKA
- MySQL 8.0 InnoDB Locking
- Pessmistic Lock, Optimistic Lock
- LSM Tree
- B+Tree
- LIKE 쿼리 검색 성능 개선, Full-Text Search
- 분석 함수를 활용해 쿼리 성능 높히기
- Deadlock
- MySQL, MyISAM, InnoDB Storage Engine
- MySQL WAL
- InfluxDB
- 디자인 패턴
- 생성 패턴
- 팩토리 메서드 패턴
- 추상 팩토리 패턴
- 빌더 패턴
- 프로토타입 패턴
- 행동 패턴
- 템플릿 메서드 패턴
- 옵저버 패턴
- 전략 패턴
- 싱글톤 패턴
- 스테이트 패턴
- 책임 연쇄 패턴
- 커맨드 패턴
- 인터프리터 패턴
- 이터레이터 패턴
- 중재자 패턴
- 구조 패턴
- 프록시 패턴
- 어댑터 패턴
- 컴포지트 패턴
- 데코레이터 패턴
- 퍼사드 패턴
- 브리지 패턴
- 인터넷 네트워크
- IP(인터넷 프로토콜)
- TCP & UDP
- PORT & DNS
- URI와 웹 브라우저 요청 흐름
- URI
- 웹 브라우저 요청 흐름
- HTTP 기본
- 모든것이 HTTP
- 클라이언트 서버 구조
- Stateful, Stateless
- HTTP 메시지
- HTTP 메서드, 활용
- 비 연결성 (connectionless)
- HTTP API를 만들어보자
- HTTP 메서드 - GET, POST
- HTTP 메서드 - PUT, PATCH, DELETE
- HTTP 메서드의 속성
- 클라이언트에서 서버로 데이터 전송
- HTTP API 설계 예시
- HTTP 상태코드
- HTTP 상태코드 소개
- 2xx - 성공
- 3xx - 리다이렉션
- 4xx - 클라이언트 오류, 5xx - 서버 오류
- HTTP 헤더 - 일반 헤더
- HTTP 헤더 개요, 표현
- 협상, 전송 방식
- 일반 정보, 특별한 정보
- 인증, 쿠키
- HTTP 헤더 - 캐시와 조건부 요청
- 캐시 기본 동작
- 검증 헤더와 조건부 요청
- 캐시와 조건부 요청 헤더
- 프록시 캐시, 캐시 무효화
- 네트워크의 기초 알아보기
- 네트워크 프로토콜 정리
- 인터넷 작동 원리
- HTTP에 대해 알아보기
- DNS와 작동 원리
- 도메인 네임이란?
- 브라우저 동작 원리
- 호스팅이란 무엇일까?
- HTTP 메서드 알아보기
- RESTful API 의미와 설계규칙
- 네트워크 계층별 프로토콜
- 아파치 톰캣 (Apache Tomcat)
- 네트워크 웹 통신의 흐름
- 웹 캐시(프록시 서버)
- CDN (Content Delivery Networks)
- P2P(peer-to-peer network)
- 스위치와 라우터, 스위칭과 라우팅
- 인바운드(Inbound)와 아웃바운드(Outbound)
- 회선교환 방식과 패킷교환 방식
- IP/IP Packet, 패킷 전달, 한계
- OSI 7계층과 TCP/IP 4계층
- TCP/IP Packet, TCP vs UDP
- 웹 캐시 Web Cache
- 캐시 검증 헤더(ETag, If-None-Match)
- L2, L3, L4 & L7 스위치
- 웹소켓(WebSocket), HTTP와의 차이
- SSL(Security Socket Layer), TLS(Transfer Layer Security)
- 메시지 큐(Message Queue, MQ) 개념
- 서브넷팅 & 슈퍼넷팅 개념 및 쉬운 계산 방법
- 3-way / 4-way Handshake
- VLAN, Trunk/AccessPort
- 캐시 검증 헤더, Last-Modified, If-Modified-Since
- VLAN(.v2)
- SSL Handshake
- 라우터 Router
- DHCP(Dynamic Host Configuration Protocol)
- TCP Header
- TCP 세션 유지 Keepalive
- TCP Flag, ECN
- QoS 3가지 수행 모델 (Best Effort, IntServ, DiffServ)
- Token Ring, Ethernet
- Network 회선, VPN, DWDM
- Network Components
- MAC, IP Address, Subnetting
- Gateway, Subnet
- Switch In Action
- TCP State Machine, Concept
- HTTP TCP Keep-Alive
- HTTP Keep-Alive Concept
- File Descriptor in Network(cc. KeepAlive)
- BGP(Border Gateway Protocol) Peering
- IPSec
- TCP SYN Cookie
- TCP Window Size, MSS, SACK Permmited
- TCP Congestion Control
- Loss-based 알고리즘 Reno & CUBIC
- 현대적 네트워크, 차세대 혼잡제어 BBR & QUIC
- 꼭 알아야 할 기본 CS 지식
- 멀티 스레드와 멀티 프로세스
- CPU 스케줄링이란
- 런타임과 컴파일타임
- OS의 스와핑 Swapping
- HTTP 메서드
- 가상 메모리 Virtual Memory System
- [OS] 운영체제 구조와 원리
- 뮤텍스(Mutex)와 세마포어(Semaphore)
- 스레드와 동시성
- 데몬(daemon) 프로세스의 정의
- 응용SW_2( 컴퓨터 시스템 일반 학습지 )
- 컴퓨팅 시스템 Computing System
- 페이지 교체 알고리즘 FIFO, LRU, LFU, MFU, NUR
- 메모리 단편화 Fragmentation
- 하이퍼바이저 Hypervisor
- 스핀락, 뮤텍스, 세마포어 + 뮤텍스 vs 이진 세마포어
- 컴파일러 최적화
- IPC(Inter Process Comunication)
- Process Memory Structure
- 캐시 메모리 구조와 작동 방식
- Memory - Address, Contiguous allocation, MMU
- Paging, Fragmentation, TLB
- UDS, 0000.sock
- Parity bit, Pararell Paritiy, Hamming Code
- Process Architecture
- MMU, TLB, Page Table
- NUMA
- NUMA (Kernel Level)
- Page Cache, Buffer Cache
- inode(index node)
- CPU Out-of-Order Execution, Barrier, Happens-Before
- Copy-on-Write (CoW)와 fork()의 메모리 최적화
- CAS와 ABA 문제
- Lock-free 및 STM(Software Transactional Memory)
- 선형 구조
- 선형 리스트
- 연결 리스트
- 스택 stack
- 큐 queue
- 비선형 구조
- 트리 Tree
- Abstract Syntax Tree
- Parse Tree
- AVL(Adelson-Velsky and Landis) Tree
- Red-Black Tree: 레드 블랙 트리
- B-Tree
- 그래프 graph
- 너비 우선 탐색(BFS, Breadth-First Search)
- 자료구조와 알고리즘
- 너비 우선 탐색(BFS)
- 깊이 우선 탐색(DFS)
- 그리디 알고리즘
- 프림 알고리즘
- 다익스트라 알고리즘
- 벨만 포드 알고리즘
- 플로이드 와샬 알고리즘
- CPU와 GPU의 설계 철학 차이
- GPU 스레드 실행 모델
- GPU 내부 메모리 계층 구조
- CUDA, Tensor Core
- HBM, Roofline 모델
- PCIe 레인 구조, GPUDirect Storage, NUMA Optimization
- NVLink, NVSwitch
- ZeRO Optimizer (DeepSpeed, FSDP)
- Transformer 추론 실행 구조 이해
- LLM Serving Benchmark와 성능 지표
- KV Cache와 Batching 최적화
- Quantization과 Multi-GPU Parallelism
- Production Model Serving과 Capacity Planning
- Agent 구성요소와 State Model 설계
- Tool Calling과 MCP 기반 Tool 설계
- Durable Execution과 Workflow 복구
- GPU 하드웨어와 성능 모델
- SGLang 서빙 실전 케이스북
- 모델 아키텍처별 서빙 플레이북
- 병렬화 전략 - TP, PP, EP, DP
- GPU 위에 모델이 뜨는 과정
- 분산 서빙과 통신