Redis를 RDB처럼 쓰려고 했던 시도

🫠 실패에 대한 짧은 결론 : 레디스는 인메모리 DB로써 빠른 IO를 요구하는 작업에 최적화 되어있다. 예를 들면 세션 클러스터링이나 캐싱에 많이 사용된다. 그러나 Entity를 계층 구조로 만들고 깊은 내부의 있는 필드에 Document나 RDB 하듯 LIKE 쿼리를 구현하는 것은 바람직하지 않아보인다. 물론 단순한 구조의 Entity에 id필드를 지정하고 id를 가지고 직렬화/역직렬화 하는 것은 가능하다. 결론적으로 key로 value에... » read more

String, StringBuilder 주요 메서드

Java problem solve를 위한 String과 StringBuilder의 주요 메서드 정리. StringBuilder에 최적화 된 작업 StringBuilder는 못하지만 String으로 할 수 있는 것 사족) String 쓰면서 + 로 문자열을 붙이는것이 거의 죄악 취급이지만, 그런 소스가 있더라도 컴파일러가 판단하여 StringBuffer에 append로 변경한다. 생각보다 최적화를 잘 함.

Virtual Memory

가상 메모리 가상 메모리라는 것은 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다. 이 기법의 주요 장점중 하나는 사용자 프로그램이 물리 메모리 보다 커져도 된다는 점이다. 배경 많은 경우에 프로그램 전체가 한꺼번에 메모리에 늘 올라와있어야 하는것은 아니다 아래의 예시가 있다. 프로그램에는 잘 발생하지 않는 오류 상황을 처리하는 코드가 종종 존재한다. 이러한 오류들은 거의... » read more

Memory

메모리 관리 프로세스에게 메모리를 할당하는 방법 컴퓨터 시스템에서 페이징의 동작 방법 배경 메모리는 각각 주소가 할당된 이련의 바이트들로 구성된다. CPU는 프로그램 카운터가 지시하는 대로 메모리로부터 다음 명령어를 가져온다. 명령어는 필요한 경우 추가적인 데이터를 더 가지고 올수도 있고 내보낼 수도 있다. 기본 하드웨어 메인 메모리와 프로세서 자체에 내장되어 있는 레지스터들은 CPU가 직접 접근할 수 있는 유일한... » read more

CPU Scheduling

CPU 스케줄링 스레드를 지원하는 운영체제에서는 실질적으로 운영체제는 프로세스가 아니라 커널 수준 스레드를 스케줄 한다. 프로세스 스케줄링과 스레드 스키줄링은 상호교환적으로 사용된다. 일반적인 스케줄링 개념을 논의하는 경우 프로세스 스케줄링을 사용하고 스레드에 국한된 개념을 가리키는 경우 스레드 스케줄링이라는 용어를 사용한다. 기본 개념 단일 프로세서 시스템에서는 한 순간에 오직 하나의 프로세스만이 실행할 수 있다. 다중 프로그래밍의 목적은 CPU 이용률을... » read more

Process synchronization

프로세스 동기화 협동 프로세스는 시스탬 내에서 실행중인 다른 프로세스의 실행에 영향을 주거나 영향을 받는 프로세스다. 협동 프로세스에서 데이터 공유는 동시접근에 의한 데이터의 비 일관성을 낳을 수 있다. 협동 프로세스의 질서있는 실행을 보장하며, 이를 통해 데이터의 일관성을 유지하는 기법을 알아보자. 배경 프로세스는 동시 또는 병렬로 실행될 수 있다. CPU 스케줄러가 프로세스 사이에서 빠르게 오가며 각 프로세스를... » read more

Thread

스레드 스레드는 CPU이용의 기본 단위다. 스레드는 다음으로 구성된다 스레드ID 프로그램 카운터 레지스터 집합 스택 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션 그리고 열린 파일이나 시그널과 같은 운영체제 자원들을 공유한다. Motivation 어플리케이션은 멀티 코어를 사용하여 다수의 CPU집중 작업을 병렬로 처리할 수 있다 프로세스와 스레드가 하나인 시스템에서는 여러개의 동시 요청에 하나씩 처리할 수 밖에 없다.... » read more

Process

프로세스 초기의 컴퓨터 시스템은 한번의 하나의 프로그램만 실행하도록 허용했다. 오늘날 컴퓨터는 메모리에 다수의 프로그램들이 적재되어 병행 실행되는 것을 허용한다. 제어와 구획화의 필요성에 따라 프로세스의 개념이 생겼다. 프로세스란 실행중인 프로그램이다. 프로세스 개념 CPU활동을 지칭하는 이름 일괄처리 시스템 : Job 시분할 시스템 : 사용자 프로그램, Task 이러한 명칭들이 있지만 모두 프로세스라고 부른다. 프로세스 프로세스는 텍스트 섹션으로 알려진... » read more

Composite pattern

Composite 패턴 컴포짓 패턴은 part-whole의 관계를 갖는 객체들을 정의할때 유용하다. 여러 객체가 한 클래스 전체 객체의 일부분으로 정의될때 사용한다. 부분 객체의 추가나 삭제가 있어도 전체 클래스의 코드를 변경하지 않으면 컴포짓 패턴은 유용하다. 그리고 클라이언트는 whole과 part를 구분하지 않고 동일한 인터페이스를 가질 수 있다. 컴퓨터에 추가 장치 지원하기 컴퓨터를 모델링해보자. 컴퓨터에는 Keyboard, Monitor, RAM, SSD, CPU등이... » read more

Abstract Factory pattern

Abstract factory 패턴 추상 팩토리 패턴은 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다. 계속되는 엘리베이터 예제에서 벤더에 따른 코드를 작성하면 벤더가 바뀌었을때 모든 부품의 코드가 벤더를 이동해야한다. 이런 경우에 부품별로 Factory를 정의하는 대신 관련 객체들을 일관성 있게 생성 할 수 있도록 Factory클래스를 정의하는 것이 효과적이다. 예를들어 Motor클래스를 위한 MotorFactory나 Door클래스를 위한 DoorFactory... » read more