동시성(Concurrency)이란? 컴퓨터공학에서 동시성이란 여러 작업이 순서에 상관없이 동시에 진행되는 것을 뜻한다. 하지만 여기서 동시에 진행된다는 것은 실제로 여러 작업이 동시에 동작하고 있다는 뜻은 아니다. 여러 작업이 동시에 실행되고 있는 것처럼 보이는 것이다. CPU는 빠른 문맥 교환(context switch)을 통해 여러 작업이 동시에 실행되는 것처럼 보이게 할 수 있다. 실제로는 A라는 작업을 하다가 B작업을 하는 것이지만, 마치 A와 B가 같이 실행되는 것처럼 보이는 것이다. 이것을 동시성이라고 한다. 요리사가 어떤 요리를 한다고 하자. 이 때 재료도 썰고 냄비의 내용물이 타지 않게 저어주기도 한다고 하자. 요리사는 몸이 두 개가 아니기 때문에 실제로 동시에 재료를 썰면서 냄비의 내용물..
팩토리 메서드 패턴이란? 팩토리 메서드 패턴은 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며, 자식 클래스가 어떤 객체를 생성할지 결정하도록 하는 패턴이기도 하다. 팩토리 메서드 패턴은 템플릿 메서드의 생성 패턴 버전으로 볼 수 있는데, 따라서 템플릿 메서드에 대해 알지 못한다면 해당 패턴을 먼저 이해하는 것이 좋다. 참고) [디자인패턴] 템플릿 메서드 패턴(Template Method Pattern)이란? 템플릿 메서드 예시 [디자인패턴] 템플릿 메서드 패턴(Template Method Pattern)이란? 템플릿 메서드 예시 템플릿 메서드 패턴이란? 템플릿 메서드 패턴은 소프트웨어 공학에서 동작 상 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. -위키백과- 템플릿 메서드 패..
템플릿 메서드 패턴이란? 템플릿 메서드 패턴은 소프트웨어 공학에서 동작 상 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다. -위키백과- 템플릿 메서드 패턴은 알고리즘의 골격을 부모 클래스에서 정의하되, 자식 클래스들이 해당 알고리즘의 구조를 변경하지 않고 알고리즘의 특정 단계들을 오버라이드(재정의) 할 수 있도록 하는 행동 디자인 패턴이다. 템플릿 메서드 패턴은 부모 클래스에서 알고리즘을 일련의 단계들(메서드)로 나누고 단일 템플릿 메서드 내부에서 이러한 메서드들을 호출한다. 자식 클래스는 단일 템플릿 메서드 내부에서 호출되는 메서드들 중에서 필요한 경우 선택적으로 오버라이드 하여 사용할 수 있다. 이렇게 하면 중복을 제거하고 다형성을 확보할 수 있다. 템플릿 메서드 예시 예를 들어 쉽게 이해..
GoF와 이펙티브 자바의 빌더 패턴 빌더 패턴은 "Design Patterns"의 공동 저자 4명을 부르는 GoF(Gang of Four)에서 소개하는 버전과 이펙티브 자바(Effective Java)에서 소개하는 버전이 존재한다. 이 글에서는 요새 자주 쓰이고 Lombok에서도 지원하는 간단한 빌더 패턴에 대해 알아보겠다. 참고) GoF 빌더 패턴 빌더 패턴 / 디자인 패턴들 / 생성 패턴 빌더 패턴 다음 이름으로도 불립니다: Builder 의도 빌더는 복잡한 객체들을 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다. 이 패턴을 사용하면 같은 제작 refactoring.guru 빌더 패턴이란? 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과..
싱글톤 패턴(Singleton Pattern)이란? 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러 개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. - 위키백과 - 싱글톤 패턴은 쉽게 말해 생성 할 수 있는 객체의 인스턴스를 하나로 제한하는 패턴이다. 싱글톤 패턴을 따르는 클래스는 아무리 생성자를 여러 번 호출하더라도 최초의 생성으로 생겨난 인스턴스가 반환된다. 예시를 통해 이해해 보자. ..
참조의 지역성(Locality of Reference) 주기억장치와 메모리는 속도 차이가 크다. 이러한 속도의 차이를 극복할 수 있는 게 캐시 메모리이다. 이 캐시 메모리는 주기억장치와 메모리 사이에 위치하며 속도 차이에 따른 병목현상을 줄여준다. 그런데 이 캐시 메모리의 효율을 높이려면 캐시 메모리에 어떤 정보가 들어있냐가 중요하다. 어떤 프로그램을 실행할 때 필요한 정보를 캐시 메모리에서 찾는 캐시 적중율(hit-rate)을 높일 수 있기 때문이다. 그런데 이러한 캐시 적중율을 높일 수 있는 원리가 있는데, 그것이 바로 참조의 지역성이다. 참조의 지역성은 캐시의 지역성이라고도 불리는데, 정확히는 참조의 지역성이 맞다. 참조의 지역성이란 컴퓨터 프로그램이 일정 기간 동안 특정한 메모리 위치 집합에 접근..
스위치(Switch)란? 네트워크에서 스위치(Switch)는 컴퓨터 네트워크에서 데이터를 전송하고 연결하는 장비를 뜻한다. 스위치는 OSI 모델의 2계층인 데이터 링크 계층에서 동작하며, 주로 이더넷(Ethernet) 네트워크에서 사용된다. 스위치는 여러 개의 네트워크 장치(컴퓨터, 서버, 프린터 등)를 연결하고 이들 간에 데이터 패킷을 전송하며 데이터의 흐름을 제어한다. 스위치는 주로 MAC 주소를 사용해 연결된 장치들을 식별하고 데이터를 전달한다. 참고) [네트워크] 스위치와 라우터의 차이 스위치란? 네트워크에서 스위치란 소규모 비즈니스 네트워크 안에서 컴퓨터, 프린터 등 모든 디바이스를 서로 연결해주어 자원을 쉽게 공유할 수 있도록 하는 장치이다. 스위치는 L2(데이터 링 code-lab1.tist..
NAT(Network Address Translation)란? NAT는 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술을 말한다. -위키백과- NAT는 Network Address Translation의 줄임말로, 직역하자면 네트워크 주소 변환이다. 이러한 NAT는 IPv4의 주소 부족으로 인해 도입되었다. IPv4는 XXX.XXX.XXX.XXX 형태로 2^32개(약 43억 개)의 주소만을 할당할 수 있다. 언뜻 많아 보이지만 전 세계에 존재하는 수많은 호스트들을 모두 감당하기에는 역부족이다. 이때 NAT를 사용하면 IP 주소의 부족을 해결할 수 있다. NAT는 하나의 공인 IP를 여러 개의 사설 IP로 변환한다. 이러한..
사용자 모드(User Mode)와 커널 모드(Kernel Mode) CPU는 사용자 모드와 커널 모드를 번갈아가면서 동작한다. 사용자 모드일때는 User Process를 실행시킨다. 이때는 하드디스크나 메모리, I/O 디바이스 등의 I/O 장치에 직접 접근할 수 없다. 또한 유저 모드 특권 레벨(privilege level)을 가지고 코드를 실행한다. I/O 명령을 실행하기 위해서는 System Call을 호출해 커널모드로 전환해야 한다. System Call이 호출되면 Mode bit를 1에서 0으로 전환하고 커널모드로 진입한다. 커널 모드에서는 I/O 장치에 접근하는 등 다양한 System Call을 실행할 수 있다. 즉, 커널 모드 특권 레벨(privilege level)을 가지고 코드를 실행할 수..
동기와 비동기, 블로킹과 논-블로킹 너무 헷갈려 운영체제를 공부하다 보면 동기(Syncronous)와 비동기(Asynchronous), 블로킹(Blocking), 논-블로킹(Non-blocking)에 대해 들어볼 수 있다. 이 개념들은 언뜻 보면 매우 헷갈리기 때문에 한 번 정리가 필요하다고 생각했다. 검색해 보니 좋은 글들이 많아 이해가 쉬웠다. 이를 종합해서 설명해 보겠다. [그림 1]은 IBM DeveloperWorks Library에 게재된 Boost application performance using asynchronous I/O라는 글에서 사용된 도표이다. 해당 게시글은 2006년에 Linux의 Asynchronous I/O(AIO)에 대해 설명하는 글이다. AIO는 쉽게 말해 프로세스가 여..