Developing Myself Everyday
article thumbnail
HTTP와 TCP/IP 그리고 소켓과 웹소켓

사진: Unsplash의JJ Ying 요즘 지원 공고를 보다보면 웹소켓 통신을 사용해본 경험을 요하는 공고가 꽤 있었습니다. 사실 이전부터 웹소켓 통신을 해봐야지 라고 마음만 먹고 시작하지 못했어서, 직접 경험해보기 전에 웹소켓이 뭔지, 전체적으로 정리해 보려고 합니다. HTTP와 TCP/IP HTTP와 TCP/IP는 항상 같이 이야기가 나오지만, 이 둘이 자주 혼동되는거 같습니다. 현대의 인터넷 통신에서는 아래와 같은 TCP/IP 4계층 구조를 통해 통신을 하고 있습니다. Application Layer(애플리케이션 계층): 응용 프로그램에서 사용하는 프로토콜을 정의하는 계층이다. 이 계층에서는 사용자와 직접적인 상호작용이 이루어진다. HTTP, FTP, SMTP 등의 프로토콜이 이 계층에서 동작한다...

article thumbnail
누적합(부분합)을 응용해서 문제 해결하기 by Kotlin

사진: Unsplash의Antoine Dautry 우리가 알고리즘 문제를 해결하다가 보면 특정 구간에 대한 변화를 줘야할 때가 있습니다. 이번 게시글에서는 부분합에 개념에 대해 알아보고 누적합을 사용해서 특정 구간에 대한 변화를 주는 방법을 알아보도록 하겠습니다. 누적합 누적합의 개념은 사실 단순합니다. 배열의 처음부터 각각의 원소를 모두 더한 값을 새로운 배열에 넣으면 됩니다. [1, 2, 3, 4, 5] 의 배열이 있다면 이에 대한 누적합 배열은 [0, 1, 3, 6, 10 ,15] 입니다. 이러한 개념을 이용하면 특정 구간에 대한 합도 쉽게 구할 수 있습니다. 만약 3부터 5를 더한 값을 구하려고 한다고 생각해 보겠습니다. 그럼 이 값은 1부터 5까지의 값에 1부터 2까지 더한 값을 뺀 값이랑 동일..

article thumbnail
Singleton Pattern(싱글턴 패턴) by Java, Kotlin

싱글턴 패턴이란? 싱글턴 패턴은 객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로, 애플리케이션에서 특정 클래스의 인스턴스가 단 하나만 생성되도록 보장하는 패턴이다. 즉, 해당 클래스의 인스턴스가 오직 하나뿐이며, 어디서든지 그 인스턴스에 접근하여 사용할 수 있도록 만들어 준다. 싱글턴 패턴을 사용하는 이유는 다음과 같다. 자원 공유: 여러 객체에서 하나의 인스턴스를 공유하여 사용할 수 있다. 이를 통해 자원을 효율적으로 사용할 수 있다. 객체의 생성 비용 최소화: 인스턴스가 한 번 생성된 이후에는 다시 생성하지 않기 때문에, 객체 생성 비용이 큰 경우에 사용하면 효율적이다. 인스턴스의 수 제한: 클래스의 인스턴스가 하나뿐이기 때문에, 불필요한 인스턴스 생성을 방지할 수 있다. 싱글톤 패턴을 구현하..

article thumbnail
PCB (Process Control Block, 프로세스 제어 블록)

PCB란? PCB는 운영 체제에서 프로세스를 관리(Process Management) 하기 위해 사용되는 데이터 구조이다. 운영체제는 하드웨어 자원을 관리하고 프로그램들을 지원해주는 역할을 한다. 커널은 이 운영체제의 핵심으로 프로그램과 하드웨어의 중간다리 역할을 한다. 위의 그림을 보게 되면 커널에는 Data Structure for Hardware(하드웨어의 데이터 구조)와 PCB가 있는 것을 알 수 있다. 그리고 프로세스와 하드웨어를 관리하기 위한 데이터가 담겨있는 이런 데이터 구조체를 통틀어 metadata(메타데이터)라고 부른다. PCB는 각 프로세스에 대해 운영 체제가 생성하고 유지하며, 해당 프로세스에 대한 정보를 저장한다. PCB가 가지는 정보 PCB가 가지는 정보는 아래와 같다. PCB를..

article thumbnail
Database Index

인덱스란? 데이터베이스 인덱스는 데이터베이스의 효율적인 검색 및 데이터 접근을 지원하기 위해 사용되는 자료 구조다. 인덱스는 테이블의 컬럼 또는 컬럼의 조합에 대한 정렬된 데이터 구조로, 검색 속도를 향상시키고 데이터 접근 시간을 줄여준다. 인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치라고 볼 수 있다. 즉 메모리 영역의 일종의 목차를 생성하는 개념이다. B - Tree 인덱스는 보통 B - Tree라는 자료 구조로 이루어져 있다. B - Tree는 루트 노드, 리프 노드 그리고 루트 노드와 리프 노드 사이에 있는 브랜치 노드로 나뉜다. 트리 탐색은 맨 위 루트 노드부터 탐색이 일어나며 브랜치 노드를 거쳐 리프 노드까지 내려온다. 위의 그림처럼 이렇게 루트 노드부터 시작하여 마지막 리프 노드에 도달..

Transaction ACID & Integrity(무결성)

트랜잭션이란? 트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. 즉 여러 개의 작업을 하나로 묶은 실행 유닛이다. 트랜잭션은 데이터베이스의 일관성과 무결성을 보장하기 위해 사용된다. 트랜잭션은 ACID 원칙에 기반을 두고 있다. Atomicity (원자성) 트랜잭션은 작업의 모든 단계가 완료되거나 아무 것도 수행되지 않은 상태를 보장하는 특징이다. 트랜잭션을 커밋했는데, 문제가 발생해 롤백하는 경우 그 이후에 모두 수행되지 않음을 보장하는 것을 말한다. 예를 들어 내가 마트에서 물건을 사려고 한다고 가정해보자. 나는 지금 100만원이 있고 내가 사려는 물건은 50만원이다. 이 때 물건을 구매하기 위해서는 3단계의 과정을 거친다. 1) 내가 얼마를 가지고 있는지 확인한다..

article thumbnail
운영체제(5) - CPU Scheduling Algorithm

CPU 스케줄러는 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다. 이 때 어떤 프로그램에 CPU 소유권을 줄 것인지 결정하는 것이 바로 CPU 스케줄링 알고리즘이다. CPU 스케줄링 알고리즘은 다음과 같이 나눌 수 있다. Non Preemptive (비선점형) 비선점형 방식은 프로세스가 스스로 CPU 소유권을 포기하는 방식으로 강제로 프로세스를 중지하지 않는다. FCFS (First Come First Served) 큐에 가장 먼저 도착한 순서대로 CPU 할당 실행 시간이 짧은 게 뒤로 가면 평균 대기 시간이 길어짐으로 준비 큐에서 오래 기다리는 현상인 'Convoy Effect' 가 발생한다 SJF (Shortest Job First) 수행시간이 가장 짧다..

운영체제(4) - DeadLock (교착 상태)

교착 상태란? 교착 상태는 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태이다. 예를 들어 하나의 사다리가 있고, 두 명의 사람이 각각 사다리의 위쪽과 아래쪽에 있다고 가정한다. 이때 아래에 있는 사람은 위로 올라 가려고 하고, 위에 있는 사람은 아래로 내려오려고 한다면, 두 사람은 서로 상대방이 사다리에서 비켜줄 때까지 하염없이 기다리고 있을 것이고 결과적으로 아무도 사다리를 내려오거나 올라가지 못하게 되는 상태가 그러하다. 교착 상태의 원인으로는 다음 4가지가 존재한다. 1. 상호 배제 (Mutual Exclusion): 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가능하다. 2. 점유 대기 (Hold and W..