전체 글

· 인프라
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 플랫폼입니다. 쿠버네티스의 핵심 기능 중 하나는 컨테이너의 상태를 체크하는 프로브(probe)입니다. 이 중 Liveness, Readiness, 그리고 Startup 프로브에 대해 알아봅시다. Liveness Probe Liveness Probe는 컨테이너가 동작 중인지 확인하는 역할을 합니다. 만약 Liveness Probe가 실패하면, 쿠버네티스는 해당 컨테이너를 재시작합니다. 이는 무한 루프에 빠진 애플리케이션, 데드락(deadlock)에 빠진 상태 등, 복구가 불가능한 문제를 해결하기 위한 방법입니다. Readiness Probe Readiness Probe는 컨테이너가 요청을 처리할 준비가 되..
· OS
멀티스레딩은 여러 개의 스레드를 동시에 수행하는 컴퓨팅의 한 형태입니다. 이로 인해 프로그램의 효율성이 높아지지만, 동시에 여러 가지 복잡한 이슈들이 발생할 수 있습니다. 경쟁 상태(Race Conditions): 두 개 이상의 스레드가 동시에 공유 데이터에 액세스할 때 발생하는 문제입니다. 이로 인해 데이터의 일관성이 깨질 수 있습니다. 예를 들어, 스레드 A와 B가 동시에 같은 변수에 접근해서 수정한다고 생각해 봅시다. A가 먼저 읽고 B가 먼저 쓴다면, A가 가지고 있던 데이터는 더 이상 유효하지 않게 됩니다. 이런 현상을 경쟁 상태라고 합니다. 데드락(Deadlock): 두 개 이상의 스레드가 서로 다른 스레드가 사용하고 있는 자원을 기다리면서 영원히 대기하는 상태입니다. 각 스레드는 다른 스레드..
· Java
1. 캡슐화 (Encapsulation) 캡슐화는 데이터와 해당 데이터를 다루는 메소드를 하나로 묶는 것을 의미합니다. 이는 클래스라는 '캡슐' 내에 데이터와 함수를 담아 관리합니다. 캡슐화를 통해 클래스의 내부 데이터는 외부에서 직접 접근할 수 없으며, 오직 클래스 내부 메소드를 통해서만 접근할 수 있습니다. 이렇게 하면 데이터를 보호하고, 클래스의 내부 구현을 외부로부터 숨길 수 있습니다. 2. 상속 (Inheritance) 상속은 기존 클래스의 특징과 기능을 물려받아 새로운 클래스를 생성하는 것입니다. 이를 통해 코드의 재사용성을 높이고, 중복된 코드를 줄일 수 있습니다. 자바에서는 extends 키워드를 사용하여 상속을 구현합니다. 상속받는 클래스를 '하위 클래스' 또는 '자식 클래스', 상속하는..
· OS
1. 뮤텍스 (Mutex) 뮤텍스는 "Mutual Exclusion"의 줄임말로, 상호 배제를 의미합니다. 이는 한 번에 하나의 스레드만 특정한 코드를 실행할 수 있게 하는 동기화 기술입니다. 이 기술은 특히 공유 자원에 대한 동시 접근을 제어하는데 사용됩니다. 예를 들어, 두 개의 스레드가 동시에 같은 메모리 위치를 수정하려고 시도하면 예측 불가능한 결과가 발생할 수 있습니다. 뮤텍스는 이런 상황을 방지하며, 하나의 스레드만이 특정 시점에서 공유 자원을 사용할 수 있게 합니다. 2. 모니터 (Monitor) 모니터는 고급 동기화 기법으로, 하나의 프로세스 또는 스레드만이 공유 자원을 접근할 수 있게 하는 메커니즘입니다. 모니터는 뮤텍스와 비슷하게 작동하지만, 모니터는 상호 배제를 보장하는 메소드와 변수..
· Java
가비지 컬렉터 특징 장점 단점 적합한 상황 G1 GC 영역별 관리, 동시성 GC 정지 시간 최소화, 가비지가 많은 영역 우선 처리 작은 힙에서 상대적으로 비효율적 대용량 힙, 낮은 정지 시간이 필요한 경우 Parallel GC 병렬 처리 전체 처리 시간 단축 정지 시간이 길 수 있음 병렬 처리 성능을 중요시하는 경우 CMS GC Old 영역 동시성 GC 정지 시간 최소화 메모리 추가 사용, 고부하에서 성능 저하 정지 시간이 짧아야 하는 경우 ZGC 저지연, 대용량 힙 처리 대용량 힙, 매우 낮은 정지 시간 메모리 오버헤드가 높을 수 있음 대용량 힙과 매우 낮은 정지 시간이 필요한 경우 Shenandoah GC 저지연, 다양한 플랫폼 지원 정지 시간 최소화, 다양한 환경에서 사용 가능 메모리 오버헤드가 높..
· Java
오늘은 자바(Java)라는 컴퓨터 프로그래밍 언어의 두 가지 버전, 자바 11과 자바 17의 차이점에 대해 알아볼 거예요. 컴퓨터 언어도 사람들이 사용하는 언어처럼 발전하고 변화해요. 자바도 계속 발전하면서 새로운 버전이 나오고 있어요. 그럼 이 두 버전의 주요 차이점을 알아볼까요? 1. 새로운 기능 자바 17 버전은 자바 11 버전보다 더 많은 기능을 가지고 있어요. 이런 기능들은 프로그래머들이 더 쉽게 작업을 할 수 있도록 도와줘요. 예를 들어, 자바 17에는 패턴 매칭, 레코드, 씰드 클래스 등의 새로운 기능이 추가되었어요. 패턴 매칭 (Pattern Matching) 패턴 매칭은 Java 17에서 도입된 instanceof 연산자에 추가된 개념입니다. 패턴 매칭을 이용하면 특정 타입에 대한 ins..
· Java
1. 서론 가비지 컬렉션(GC)은 프로그램에서 사용하지 않는 메모리를 자동으로 회수하는 기능입니다. 메모리 관리를 단순화하고 메모리 누수를 방지하는 역할을 하는 GC는 프로그래머의 부담을 줄여주는 중요한 기능입니다. 이 글에서는 가비지 컬렉션의 원리와 종류, 장단점에 대해 알아보겠습니다. 2. 가비지 컬렉션의 원리 GC의 기본 원리는 프로그램에서 사용되지 않는 메모리를 식별하고, 해당 메모리를 해제하는 것입니다. 이를 위해 GC 알고리즘은 메모리 사용 패턴을 추적하고, 더 이상 사용되지 않는 객체를 찾아내어 메모리를 회수합니다. 대표적인 GC 알고리즘으로는 참조 카운팅(Reference Counting), 표시-정리(Mark and Sweep), 카피(Copying), 그리고 세대별 수집(Generati..
· Java
JVM(Java Virtual Machine)은 Java 프로그램을 실행하기 위한 가상 머신으로, Java 코드를 플랫폼에 독립적으로 실행할 수 있게 해줍니다. 이 글에서는 JVM의 동작 원리와 구성 요소에 대해 자세하게 설명하겠습니다. JVM의 개요 JVM은 Java 코드를 바이트코드(Bytecode)로 컴파일한 후, 이 바이트코드를 해당 플랫폼의 기계어로 변환하여 실행합니다. 이 과정을 통해 Java 프로그램은 한 번 작성하면 여러 플랫폼에서 실행할 수 있는 이식성(Portability)을 갖게 됩니다. 2. JVM의 구성 요소 JVM은 크게 Class Loader, Runtime Data Area, Execution Engine 세 가지 주요 구성 요소로 이루어져 있습니다. 2.1. Class Lo..
· 네트워킹
웹 브라우저에서 웹사이트에 접근하는 과정은 많은 단계를 거칩니다. 이 글에서는 www.naver.com과 같은 웹사이트에 접근할 때 일어나는 프로세스와 DNS(Domain Name System)와의 관계에 대해 설명하겠습니다. 1. 웹 브라우저에 URL 입력 먼저 웹 브라우저의 주소창에 웹사이트의 URL(Uniform Resource Locator)을 입력하고 Enter 키를 누릅니다. URL은 웹 리소스의 위치를 나타내는 문자열로, 일반적으로 "http://" 또는 "https://"로 시작하고 도메인 이름과 경로 등의 구성요소를 포함합니다. 예: https://www.naver.com 2. URL 파싱 및 프로토콜 확인 웹 브라우저는 입력된 URL을 파싱하여 프로토콜, 도메인 이름, 경로 등의 구성요..
· OS
세마포어(Semaphore)는 다중 프로그래밍 환경에서 동기화 문제를 해결하기 위한 방법 중 하나입니다. 이 블로그 글에서는 세마포어의 개념과 사용 방법에 대해 설명하고, 관련된 동기화 기법에 대해서도 알아보겠습니다. 1. 동기화(Synchronization)란? 다중 프로그래밍 환경에서 여러 개의 스레드나 프로세스가 동시에 실행됩니다. 이 때 공유 자원에 동시에 접근하여 문제가 발생하는 경우를 '경쟁 상태(Race Condition)'라고 합니다. 동기화는 이러한 경쟁 상태를 방지하기 위해 스레드나 프로세스 간의 실행 순서를 조절하는 것입니다. 2. 세마포어(Semaphore)의 개념 세마포어는 공유 자원에 접근하는 스레드의 수를 제한하는 카운터입니다. 세마포어의 값은 정수이며, 일반적으로 두 가지 연..
개발만파볼까
신입 개발자의 하루