본문 바로가기

Computer Science

(10)
싱글톤 패턴 Singleton Pattern Definition 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴. 쉽게 얘기하면 싱글톤 패턴은 하나의 인스턴스만 생성하여 사용하는 디자인 패턴, 즉, 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 싱글톤 패턴을 구현하는 방법은 여러 가지가 있지만, 객체를 미리 생성해두고 가져오는 방법이 가장 단순하고 안전하다. Example Java public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { // ... } public static Singleton get..
프로세스 주소 공간 프로세스 주소 공간 프로세스는 운영체제가 자원을 할당하는 단위이다. 프로세스가 메모리를 할당 받으면, 자신만의 방법으로 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리하는데, 우리는 이를 프로세스 주소 공간이라고 부른다. 프로세스 주소공간은 다음과 같이 나뉘어진다. Stack 영역 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역. Stack 영역의 값은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다. 재귀 함수가 너무 깊게 호출되거나 함수가 지역변수를 너무 많이 가지고 있어 stack 영역을 초과하면 stack overflow 에러가 발생한다. Heap 영역 런타임에 크기가 결정되는 영역. 사용자에 의해 공간이 동적으..
Race Condition Race Condition Definitions Race Condition이란 두 개 이상의 프로세스가 공통 자원을 Concurrently하게 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황을 말한다. EXAMPLES 커널 작업을 수행하는 중에 인터럽트 발생 문제점 : 커널 모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작하는 경우 해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 한다. 프로세스가 System Call을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환(Context Switching)이 발생할 때...
Redis Redis 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어 Redis의 정의 Key - Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템이다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다. db.engines.com에서 Key-value store중에 가장 순위가 높다 Redis의 특징 보통 데이터베이스는 하드 디스크나 SSD에 저장한다. 하지만 Redis는 메모리(RAM)에 저장해서 디스크 스캐닝이 필요없어 매우 빠르다. 캐싱도 가능하기 때문에 실시간 채팅에 적합하며 세션 공유를 위해 세션 클러스터링에도 활용된다. 캐시 서버의 패턴 캐시 서버는 Look aside cache 패턴과 Write Ba..
[TCP] 3 way handshake & 4 way handshake [TCP] 3 way handshake & 4 way handshake 참고 링크 참고 링크 참고 링크 연결을 성립하고 해제하는 과정을 말한다. 3 way handshake TCP는 장치들 사이에 논리적인 접속을 성립시키기 위해 3 way handshake를 사용한다. TCP 3 way handshake(이하 3way)는 TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다. TCP 통신은 PAR(Positive Acknowledgement with Re-transmission)을 통해 신뢰적인 통신을 제공한다. PAR을 사용하는 기기는 ack을 받을 때까지 데이터 유닛을 재전송한다. 수..
트랜잭션 격리수준 트랜잭션 격리 수준(Transaction Isolation Level) 참조링크1 참조링크2 Isolation Level 트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준 트랜잭션은 데이터의 정합성을 보장하기 위한 수단이다. 논리적인 수준의 작업 자체가 100% commit 되거나, 혹은 Roll back 되는 것을 보장해주어야 한다. 트랜잭션 격리수준은 ACID에서 I, Isolation(격리성)에 해당하는 파트가 된다. 동시에 실행되는 서로 다른 트랜잭션은 서로가 서로에게 영향을 미쳐서는 안된다. 동시에 같은 데이터를 수정하게 되는 경우 발생하게 될 문제들을 방지하기 위해서이다. # Dirty Read 하나의 트랜잭션(A)이 처리중인, 그러나 커밋되지 않은 데이터를 다른 트랜잭션(B)이 읽을 수..
Index Database Index 인덱스의 목적 추가적인 쓰기 작업과 저장 공간을 활용하여 DB table의 검색 속도를 향상시키기 위한 자료구조. 두꺼운 책의 목차와 같다 Usage of Index Index를 활용하면 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. UPDATE USER SET NAME = 'Mingyu' WHERE NAME = 'Mingkim'; 만약 Index를 사용하지 않는다면 Full Scan 작업을 수행해야하는데, 이는 처리 속도가 떨어질 수 밖에 없다. Index Management DBMS는 Index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다. 그렇기 때문에 Index가 적용된 ..
Call by value, Call by reference, Call by assignment Call by value , Call by reference, Call by assignment 함수를 호출할 때에, 우리는 값에 의한 호출을 하기도하고 참조에 의한 호출을 하기도 한다. 함수가 호출될 때 메모리 공간 안에서는 함수를 위한 공간이 생성된다. 그리고 함수가 종료될 때, 해당 공간은 사라진다. Stack Frame : 함수 호출시 할당되는 메모리 블록(지역변수의 선언으로 할당되는 메모리 블록) int main(void) { // 스택변수 a는 Stack Frame에 지역변수로서 할당이 된다. int a; a = 4; return (0); } Call by value Call-by-value는 말 그대로 값에 의한 호출이다. Call-by-value는 인자로 받은 값을 복사하여 처리를 하는데,..