해당 estudy 저장소는 내가 소프트웨어라는 학문을 연구하고 공부하면서 작성했던 기록들의 집합이다.
단순 이론 기록 부터 딥다이브와 리서치, 개인적인 생각과 호소, 내가 중요하게 생각하는 가치와 경험들이 담겨있기도 하다.
요즘 개발자의 추월차선이라는 개념을 스스로 구상하고 있는데, 기록(記錄)이 규모와 진입의 계명을 타파할 수 있을까 자문중이다.
물론 기록이라는 행위 자체가 누군가에게 보여주거나 지적 허영심을 충족하기 위한 수단이였다면 이 저장소를 만들지도 않았다.
그러나 어느정도 나무가 심어져감에 따라, 숲이 완성되어가는 모습을 보자니 숨어있던 나의 욕망이 들어나는 것 같기도하다.
나름 자랑하고 싶은 글을 쓰고싶을때도 있고, 기록이라는 행위 그 자체에 본질적인 가치를 얻는 것 때문에도 글을 쓴다.
동기가 내부적이든 외부적이든 어찌되었든 하나 확실한 것은 기록이라는 데이터 자체는 이곳에 커밋되는 순간 영원해지며
내용이 다르든 구조가 다르든 형식이 다르든 어찌되었든 이 저장소에서는 모든것이 소중하고 가치있는 데이터들이다.
서론이 길어졌다. 어찌되었든 이 저장소는 단순하게 소프트웨어 개발자로서 잡다한 가치를 지닌 기록들의 집합이다.
어느 내용은 당신에게 도움이 되지 않을지도 모르지만 어느 내용은 터닝포인트가 될 수도 있지 않을까 싶다.
"나의 지식의 숲 estudy에 방문해주신 것을 진심으로 환영드리며 또 감사드립니다."
- 소프트웨어 엔지니어로서 성장하기
- 왜 선배들은 Hello World를 찍으라할까?
- YAGNI, 리팩터링, 소프트웨어 의사결정에 관한 이야기
- 애자일 소프트웨어 개발
- 일을 잘한다와 개발을 잘한다의 정의
- 나만의 역량 강화, 지속 가능한 성장 방법
- 카르페디엠(Carpe Diem)
- KISS, YAGNI, DRY
- 인증(Authentication), 인가(Authorization)
- Back-End 효율적인 API 명세서 설계방법
- Java Back-End 웹 기술 역사
- Clean Architecture
- OAuth 2.0 개념과 권한 부여 방식 알아보기
- 2023 제 3회 당근마켓 SRE 밋업 후기
- IntelliJ 테스트 커버리지 확인하기
- SOLID 원칙과 각 원칙의 장단점
- Kotlin, JPA가 서로 지향하는 방향의 차이
- Netty
- Reactive Programming 이것만큼은 알고가자
- 우아한 테크 세미나 - 우아한 스프링 배치
- Cache - Eviction, Expiration, Passivation
- Protocol Buffers
- Redis 분산락 + WebFlux 프로젝트
- Kafka
- State Machine Model
- State Machine Pattern
- 다중 환경에서 세션은 어떻게 공유하고 관리할까?
- 분산 환경 합의 알고리즘 Paxos
- Kernel
- Linux
- 분산 시스템에서 시간 동기화 문제와 해결 알고리즘
- 분산 시스템 논리적 시계(렘포트 시계, 벡터 시계)
- IDC 이중화 구성으로 DR하기 + Kafka 이중화 예시
- Data Partitioning
- 마이크로서비스 아키텍쳐 (MicroService Architecture)
- 확장 큐브로 보는 마이크로서비스
- MA, MSA, SOA(Service Oriented Architecture), ESB, SOAP
- 서비스 디스커버리를 DNS, 로드 밸런서 방식을 사용하지 않는 이유
- 마이크로서비스 클라이언트 회복성 패턴
- MSA 핵심 디자인 패턴
- 마이크로서비스 아키텍처 IPC
- 서비스 메시 Service Mesh
- 마이크로서비스에서 분산 트랜잭션 관리하기
- SRE
- Socket Programming
- Encryption Algorithm, AES256
- Low Level, JVM Async Programming
- 수치 기반 사고(Observability + Capacity Planning)
- Failover Consistency
- Netty Proxy
- TCP SYN/ACCEPT Queue 성능 튜닝
- DevOps Engineer
- 도커와 쿠버네티스
- IaaS, PaaS, SaaS 차이
- CI/CD 파이프라인과 구현과정
- 가상머신(Virtual Machine) vs 컨테이너(Container)
- 배포 전략의 종류(롤링/블루 그린/카나리)
- Docker Container
- 컨테이너 제어 명령어
- 컨테이너 관리 명령어
- 이미지 관련 명령어
- 도커 컨테이너를 띄워보자
- 컨테이너 외부 노출
- 컨테이너 애플리케이션 구축
- 도커 볼륨 이용하기
- 도커 네트워크 구조
- 컨테이너 로깅
- 컨테이너 자원 제한
- 도커 이미지 생성
- Docker Swarm
- spring boot 프로젝트를 Docker를 사용해 배포하기
- permission denied while trying .. Docker demon socket 트러블 슈팅
- Docker Engine LXC, libcontainer
- Namespace, Container + runc syscall tracking
- Kubernetes
- Desired State
- 쿠버네티스 구성요소
- 쿠버네티스 API 리소스
- 쿠버네티스의 동작 흐름
- 쿠버네티스 대시보드 토큰 발행 및 접속
- Kubernetes Cluster
- Control Plane
- Node Components
- Pod
- Pod LifeCycle(Phase, Condition)
- Pod의 생명주기, 재시작 정책
- 멀티 컨테이너 파드 디자인 패턴
- Qos Classes
- Node Scheduling
- Probe
- Service - ClusterIP, NodePort, LoadBalancer
- Service - Headless, Endpoint, ExternalName
- ReplicaSet
- Deployment
- DaemonSet, Job, CronJob
- Volume
- ConfigMap, Secret
- Namespace, ResourceQuota, LimitRange
- Cluster Autoscaler, Karpenter
- Kubernetes Scheduler, Controller
- PV, PVC Dynamic Provisioning
- Kubernetes Network
- Kubernetes 배포 전략, Probe
- RBAC, Security Policy
- 애자일(Agile) 방법론
- 클라우드 아키텍처 Cloud Architecture
- 하이브리드 클라우드 Hybird Cloud
- 테스트의 종류 알아보기
- 워크스루와 인스펙션
- TDD란 (테스트 주도 개발)
- 깃허브 액션 GitHub Actions
- AWS(Amazon Web Service)
- EC2(Elastic Compute Cloud)
- EC2의 가격 정책과 타입 종류
- IAM(Identity and Access Management)
- EBS, Instance Store, AMI
- AWS 보안 그룹 Security Group
- AWS ELB (Elastic Load Balancer), Sticky Session
- 오토 스케일링 (Auto Scaling) 구성과 순서도
- VPC(Virtual Private Cloud)와 구성요소
- NAT, NAPT 그리고 AWS NAT Gateway
- AWS 라우팅 테이블 개념과 구성
- 고가용성과 장애내구성, 재해 복구, 확장성과 탄력성
- AWS RDS(Relation Database Service)
- Elastic IP, ENI(Elastic Network Interface)
- System Manager Session Manager
- Amazon Aurora
- AWS Aurora 2nd
- CloudWatch vs CloudTrail
- AWS SES(Simple Email Service)
- AWS SNS(Simple Notification Service)
- AWS SQS(Simple Queue Service)
- AWS SQS 속도와 규모 조정을 위한 최적화 개선
- AWS 클라우드 프론트 CloudFront
- AWS ECR(Elastic Container Registry)
- AWS ELK(Elastic Search Logstash Kibana)
- Bastion 서버로 Private EC2에 접속하는 방법 + Hi-v2 트러블 슈팅
- CloudWatch
- EKS
- Site to Site VPN
- DX(Direct Connect)
- 모놀리식 아키텍처 (Monolithic Architecture)
- APM(Application Performance Management)
- gRPC, RPC, 작동원리, HTTP API 비교
- RabbitMQ
- Blue/Green Deployment, Architecture
- Nginx
- ELK와 로깅 구성
- Prometheus, Grafana
- Exporter - 모니터링 에이전트
- 블루/그린 배포
- 서버 이중화 구조
- GitOps
- HCL
- MicroService Monitoring System (cc. Loki/Grafana)
- Presto
- 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 적용 방식
- Java
- 객체지향 프로그래밍
- JVM 메모리 구조 알아보기
- JMM(Java Memory Model)
- JVM 메모리 모델
- JVM Garbage Collection 구조와 동작
- GC의 종류와 각각의 차이점
- 종류별 Garbage Collector 동작 방식
- G1GC - Garbage First Garbage Collector
- Java String Pool
- 객체지향의 4가지 특징
- 객체지향 설계의 5원칙(SOLID)
- 클래스와 인스턴스 개념과 차이
- 생성자, new 객체 생성
- 오버라이딩과 오버로딩
- 추상메서드와 추상클래스
- 다형성 (Polymorphism)
- Date, SimpleDateFormat 현재 날짜, 시간 출력
- 자바 Object 클래스의 메서드
- 컬렉션 프레임워크 종류와 사용법
- 예외 처리 (Exception)
- RuntimeException & Exception
- HashMap 메소드 및 사용법
- 옵셔널(Optional) 클래스 알아보기
- Web 서블릿(Servlet) 이란?
- StringBuilder 사용법과 주요 메서드
- 래퍼 클래스(Wrapper Class), 박싱 언박싱
- Java Generic
- SocketAdress 클래스 & NetworkInterface 클래스
- Java String, StringBuilder, StringBuffer 차이 알아보기
- POJO (Plain Old Java Object)
- 자바 리플랙션 Reflection 개념과 사용방법
- 자바 익스큐터 java Executors
- java Callable, Future
- 자바에서 finalize() 메서드의 역할은 무엇일까요?
- 자바 Cleaner, PhantomReference Class
- 객체의 생명주기(생성, 사용, 소멸)
- OutOfMemoryError가 발생했을 때 해결하는 방법
- 자바의 네 가지 참조 유형(Strong, Weak, Soft, Phantom)
- Java 8 Functional Interface
- Java에서 제공하는 기본적인 Functional Interface
- Reactive Streams API, back-pressure
- Cold Publisher & Hot Publisher
- Java AIO
- JDK Proxy, CGLib Proxy
- Hotspot VM, JIT Compiler 그리고 한계
- GraalVM
- Native Image
- 네이티브 이미지의 메모리 최적화
- Reactive Stream, Backpressure, API Components
- Java의 예외 생성 비용, 비용 절감 방법
- JVM Warm Up - 배포 직후 Latancy 성능 저하 원인
- JVM Warm Up 적용하기
- ReentrantLock, Condition
- JIT Compiler(c1, c2)
- Native Memory Tracking
- jemalloc
- jemalloc, arena, thread cache, memory fragmentation
- JVM Heap Object Headers on Internals
- JVM safepoint
- Bias Locking, Revocation
- CAS (Compare And Swap)
- vDSO(virtual Dynamic Shared Object)
- Object Header Mark Word
- GC Write Barrier
- Card Table
- G1GC
- ZGC
- Kotlin
- Kotlin DSL, gradle.kts
- mapOf(), to로 Pair 인스턴스 생성하기
- 코틀린에서의 객체지향 프로그래밍
- 코틀린 함수형 프로그래밍
- 코틀린 컬렉션즈 프레임워크
- 대리자 delegate, by, lazy
- 고차 함수 (High-order-function)
- 스코프 함수 (Scope Function)
- Kotlin 시퀀스와 지연 계산 (Sequences and Lazy Evaluation)
- Kotlin 함수형 인터페이스와 SAM 생성자
- kapt와 annotation processor
- 코틀린에서는 왜 Lombok 라이브러리를 사용할 수 없을까?
- Kotlin으로 Spring Framework 사용하기
- data 클래스로 persistence 구현하기
- @JvmField, @JvmStatic 어노테이션
- kotest를 사용해서 테스트 코드 작성하기
- Kotlin 코루틴 (Coroutine)과 동시성 프로그래밍
- 내가 제일 좋아하는 Kotlin의 companion object ❤️
- Kotlin Generics 공변성, 반공변성, 무변성
- Kotlin Generics 스타 프로젝션, reified 자료형
- sortedWith, Comparator 정렬 람다식 예제
- Kotlin runCatching과 Result 타입
- Kotlin에서 Unit과 Nothing의 차이점
- Kotlin에서 싱글톤 클래스를 어떻게 생성할까요?
- companion object와 object의 차이점은 무엇일까요?
- 클래스 외부의 함수(A package-level/ Top-level 함수)
- Kotlin Class, Field vs Property
- Kotlin Delegation으로 결합도 낮추기
- lateinit과 Delegates.notNull<>()로 적절한 null 처리하기
- .close()가 필요한 클래스를 사용할 때, use로 효율적으로 사용하기
- infix, inline function
- Kotlin Sealed Class
- inline fun 함수를 사용해 고차 함수 최적화
- Coroutine
- Golang
- JavaScript
- TypeScript
- Spring Frameworks MVC
- Controller, Service, Repository
- IoC(Inversion of Controll)
- Spring Bean
- Spring AOP (Aspect Oriented Programming)
- Spring AspectJ
- Spring Frameworks' Annotation
- Spring JDBC, DataSource
- (Spring Package Structure) - 계층형 vs 도메인형
- Lombok Library
- Spring boot @Builder, Builder Pattern
- Spring Frameworks URL Mapping
- Spring Security Access Token & Refresh Token
- Log 관리, Slf4j Logger
- Jwt (Json Web Token)
- Spring Validation을 이용한 유효성 검증
- Spring boot @ExceptionHandler를 통한 예외처리
- (Spring boot + Security) SecurityConfig 설정하기
- Swagger를 활용한 API 문서 자동화
- IoC, DI, Spring Container, Bean 완벽하게 알아보자
- AOP(Aspect Oriented Programming) 대체 뭘까?
- 디스패처 서블릿 Dispatcher-Servlet의 개념과 동작 과정 알아보기
- Servlet Filter, Spring Intercepter 특징과 차이 이해하기
- [Kotlin, Spring boot] copy() 깊은복사, 얕은복사 성능상의 이점
- [Kotlin, Spring boot] 검색 api에서 find Query vs Internal Function 데이터 처리 효율
- Spring boot Actuator 스프링 부트 액추에이터 API + Spring Cloud를 사용한 예제
- Spring WebFlux, Reactive Stream, R2DBC, Mono, Flux 정복하기
- Springboot에서 데이터베이스 인덱싱 하는 방법
- Spring Test시에 Spring Security인증을 할 수 있는 어노테이션
- Spring 에서의 Connection Pool, HikariCP
- 스프링 부트 배치 Spring boot Batch
- ControllerAdvice는 AOP로 구현되어 있을까? 동작 과정 살펴보기
- ObjectMapper의 동작 방식과 Spring boot가 제공하는 추가 기능들
- 코틀린 테스트 프레임워크 mockk 사용법
- Spring Data Binding, Converter, Formatter
- Spring Resource Interface, Resource 추상화와 구현체
- ResourceLoader, ResourcePatternResolver, ApplicationContext and Resources Paths
- SecurityContextHolderStrategy (ThreadLocal, InheritableThreadLocal, Global)
- Spring Security의 여러가지 Filter
- Mock 테스트와 Stub 테스트의 차이
- Koltin에서 Spring을 실행하기 위한 plugin, dependencies
- Spring boot 내장 웹 서버 톰캣 설정, 다른 내장 웹 서버 설정하는 방법
- Spring ArgumentResolver를 이용한 유연성 있는 파라미터 처리
- Spring Scheduler를 사용해 일정 주기로 동작 수행
- Spring boot 프로젝트 profile 설정하기
- Bean Scope, DL(Dependency Lookup), Provider
- JDBC, DriverManager
- Spring AOP와 다이나믹 프록시를 사용해 트랜잭션 분리하기
- 애플리케이션 로직, 인프라 빈, 컨테이너 인프라 빈
- 빈 스코프와 발생할 수 있는 여러 문제들과 해결 방법
- Spring WebFlux vs MVC, 내부 작동 방식
- Spring Batch 기술적 트레이드 오프
- Spring Batch 데이터 일관성 관리
- Spring Data JPA와 @Transactional
- Spring Data JPA 동작 원리
- Spring AOP Advice 순서 제어 방법
- Spring Data JPA @Modifiying
- High Performance Hibernate, @NaturalId
- JPA Entity equals(), hashcode() overriding
- 영속성 컨텍스트
- 플러시 (flush)
- 객체와 테이블 매핑
- 데이터베이스 스키마 자동 생성
- Team.MSG GAuth-BackEnd 동적 검색 API QueryDSL 적용 사례
- Hibernate 하이버 네이트, Spring Data JPA
- 임베디드 타입, @Embedded, @Embeddable, @AttributeOverride
- @Query 어노테이션에서 FK로 객체를 찾는 방법
- JPA N + 1 문제 해결 방법 및 실무 적용
- 일반 조인(Join)과 패치 조인(Fetch Join)의 차이
- 일반 조인 Join은 언제 사용될까?
- JPA Propagation 트랜잭션 전파 단계
- 프록시(Proxy)와 지연 로딩
- OSIV(Open Session In View)
- 벌크 수정, 삭제 연산과 영속성 컨텍스트
- 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
- 엔터티(Entity), 속성(Attribute), 관계(Relation)
- 식별자 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
- Redis
- 데이터베이스 부하분산(파티셔닝, 샤딩, 레플리케이션) 개념
- 데이터베이스 파티셔닝
- 파티셔닝 종류와 분할 기준
- 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
- 인터넷 네트워크
- URI와 웹 브라우저 요청 흐름
- HTTP 기본
- HTTP 메서드, 활용
- 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
- 캐시 검증 헤더(Last-Modified, If-Modified-Since)
- 캐시 검증 헤더(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
- 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 지식
- OS(운영체제) 구조와 원리
- 스레드와 동시성
- 멀티 스레드와 멀티 프로세스
- CPU 스케줄링이란
- Synchronize(동기화)와 Deadlock
- 런타임과 컴파일타임
- OS의 스와핑 Swapping
- 가상 메모리 Virtual Memory System
- 뮤텍스(Mutex)와 세마포어(Semaphore)
- 데몬(daemon) 프로세스의 정의
- 컴퓨팅 시스템 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
- 선형 구조
- 비선형 구조
- 자료구조와 알고리즘
- 너비 우선 탐색(BFS)
- 깊이 우선 탐색(DFS)
- 그리디 알고리즘
- 프림 알고리즘
- 다익스트라 알고리즘
- 벨만 포드 알고리즘
- 플로이드 와샬 알고리즘