IPC란?

Inter Process Communication 의 약자로 프로세스간 통신을 말합니다.

위 그림처럼 프로세스는 완전히 독립된 실행객체로써 다른 프로세스의 영향을 받지 않습니다. 독립되어 있는 만큼 별도의 설비가 없이 서로간의 통신이 어려워, 커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공하여 프로세스는 커널이 제공하는 IPC설비를 이용해서 프로세스 간 통신을 가능하게 합니다. 

 

IPC 설비들

상황에 맞는 IPC의 선택은, 특히 fork()를 이용해서 만들어진 멀티 프로세스의 프로그램에 있어서 중요합니다. 잘못된 IPC 설비의 선택은 코딩과정을 어렵게 만들거나 프로그램의 작동을 효율적이지 못하게 만들 수 있습니다. 이러한 설비 종류로는 PIPE, Named PIPE, Message Queue, Shared Memory, Memory Map, Socket 등이 있습니다. 

 

1. PIPE

익명의 PIPE를 통해서 동일한 부모 프로세스를 가진 프로세스들 간에 단방향 통신을 지원합니다.

FIFO 구조이며 생성된 PIPE에 대하여 Write 또는 Read 만 가능하게 됩니다.

부모-자식 프로세스간 통신할 때 사용하게 됩니다.

쌍방통신을 위해서는 WritePIPE하나 Read PIPE하나를 따로 만들어야 합니다. read()write()가 기본적으로 block 모드로 작동하기 때문에 프로세스가 read가 대기중이라면 read가 끝나기 전에는 write를 할 수가 없게 됩니다.

 

2. Named PIPE

이름을 가진 PIPE를 통해서 프로세스들 간에 단방향 통신을 지원하며 서로 다른 프로세스들이 PIPE 이름만 알면 통신이 가능합니다.

익명의 PIPE와 마찬가지로 FIFO 구조이며 생성된 PIPE에 대하여 Write 또는 Read 만 가능하게 됩니다.

전혀 다른 모든 프로세스들 사이에서 통신이 가능한데 그 이유는 프로세스 통신을 위해 이름이 있는 파일을 사용하기 때문입니다. Named PIPE의 생성은 mkfifo를 통해 이뤄지는데, mkfifo가 성공하면 명명된 파일이 생성됩니다.

마찬가지로 쌍방 통신을 위해서는 WritePIPE하나 Read PIPE 하나를 따로 만들어야 합니다. read()write()가 기본적으로 block 모드로 작동하기 때문에 프로세스가 read대기중이라면 read가 끝나기 전에는 write를 할수가 없게 됩니다.

 

3. Message Queue

파이프가 아닌 어디에서나 물건을 꺼낼 수 있는 컨베이너 벨트와 유사하며 컨베이너 벨트에 올라올 물건에 라벨을 붙이면 동시에 다양한 물건을 다룰 수 있는 것과 같이 큐에 쓸 데이터에 번호를 붙임으로써 여러 개의 프로세스가 동시에 데이터를 쉽게 다룰 수 있습니다.

입출력 방식으로는 익명 PIPE와 동일하지만, 커널에서 관리하며 메모리를 사용한 PIPE 입니다. 구조체 기반으로 통신을 합니다.

FIFO 구조이며, msgtype에 따라 다른 구조체를 가져올 수 있습니다.

프로세스간 다양한 통신을 할 때 사용할 수 있습니다.

커널에서 제공하는 Message queue 이기 때문에 EnQueue 하는데 제한이 존재합니다.

 

4. Shared Memory

위 설비들과는 다르게 공유메모리가 데이터 자체를 공유하도록 지원하는 설비입니다. 

프로세스는 자신만의 메모리 영역을 가지고 있고 다른 프로세스가 접근해서 함부로 데이터를 읽거나 쓰지 못하도록 커널에 의해서 보호되지만 메모리 영역에 있는 데이터를 다른 프로세스도 사용할 수 있도록 해야할 경우도 필요합니다. 위 설비들과 같이 PIPE 등을 이용해서 데이터 통신을 이용하여 데이터를 전달하는 방법도 있겠지만, Thread에서 처럼 메모리 영역을 공유한다면 더 편하게 데이터를 함께 사용할 수 있습니다. 

프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당해줍니다. 이후 어떤 프로세스건 해당 메모리영역에 접근할 수 있습니다.

공유메모리는 중개자가 없이 곧바로 메모리에 접근할 수 있기 때문에 다른 모든 IPC들 중에서 가장 빠르게 작동할 수 있다. 단순히 공유 메모리를 point 함으로써 프로세스에서 사용되는 메모리가 증가되지 않습니다.

프로세스간의 Read, Write 를 모두 필요로 할 때 사용하게 됩니다. 

 

5. Memory Map

운영체제에서 파일을 다루는 방법 중 하나로써 Memory MapShared Memory 공간과 마찬가지로 메모리를 공유한다는 측면에 있어서는 서로 비슷한 측면이 있습니다. 차이점은 Memory Map의 경우 열린파일을 메모리에 맵핑시켜서, 공유한다는 점입니다프로세스의 가상 메모리 주소 공간에 파일을 매핑한 뒤 가상 메모리 주소에 직접 접근하는 것으로 파일 읽기/쓰기를 대신합니다.

운영체제에서 페이징 기법을 사용하여 파일의 내용을 관리하며 페이지 크기에 따라 적절히 파일의 내용을 읽고 쓸 수 있습니다.

파일로 대용량 데이터를 공유할 때 사용되며, 대부분 운영 체제에서는 프로세스를 실행할 때 실행 파일의 각 세그먼트를 메모리에 사상하기 위해 메모리 맵 파일을 이용합니다. 

 

6. Socket

같은 도메인 내에서 연결될 수 있고 프로세스들 사이의 통신을 가능하게 합니다. 서버단에서는 bind, listen, accept를 진행해 소켓 연결을 위한 준비를 합니다. 클라이언트 단에서는 connect를 통해 서버에 요청하고 연결이 수립된 후에는 socket에 send 함으로써 데이터를 주고 받습니다. 연결이 끝난 후에는 반드시 Socket close()해주어야 합니다. 

범용적인 IPC로써 양방향 통신이 가능하며 패킷 단위로 주고 받음으로 직관적으로 이해하기 쉬운 코드를 만들 수 있습니다.

 

요약

IPC 종류 PIPE Named PIPE Message Queue Shared Memory Memory Map Socket
용도 부모 자식간 단방향 통신 다른 프로세스와 단방향 통신 다른 프로세스와 단방향 통신 다른 프로세스와 양방향 통신 다른 프로세스와 양방향 통신 다른 시스템간 양방향 통신
공유 매개체 파일 파일 메모리 메모리 파일+메모리 소켓
통신단위 stream stream 구조체 구조체 페이지 stream
통신방향 단방향 단방향 단방향 양방향 양방향 양방향

 

반응형

MongoDB의 구조 순으로 (database, collection, document) 데이터 입력에 관한 간단한 쿼리문을 정리하고 collection에서 종류에 따른 쿼리문을 정리하였습니다.

Database 쿼리문

Collection의 기본쿼리

 

Capped Collection 쿼리

콜렉션 종류 (1)

 

Time Series Collection 쿼리

콜렉션 종류 (2)

 

document 유효성 검사 지정

 

데이터 정렬 지정

Document 쿼리

 

반응형

'프로그래밍 > DataBase' 카테고리의 다른 글

[DataBase] MongoDB 특징과 구조  (0) 2021.11.01
[DataBase] Windows 10 PostgreSQL 설치오류  (2) 2021.10.14
[Database] Time series database, TSDB  (0) 2021.10.06
[Database] NoSQL  (0) 2021.10.06
[Database] DBMS와 RDBMS의 개념  (0) 2021.10.06

 

 

 

 

 

 

반응형

문제

두 가지 방법으로 풀이를 하였다

1. 배열과 scanner 쓰기

2. 배열과 BufferedReader 쓰기

 

풀이(1)

  • int[] arr = new int[n];  -> 배열선언과 크기확장 동시에

 

풀이(2)

scanner로 읽어 들이는 방식이 시간이 오래걸린다 해서 BufferedReader로 읽어들여오는 코드를 짜봄

  • StringTokenizer클래스로 string형식으로 문자를 읽어들임
  • 개행문자가 나올 때 까지 토큰을 계속 넣어줌 이때, 읽은 토큰은 string형이기 때문에 int형으로 Integer.parseInt로 형변환 시켜줌

 

반응형

 

 

처음엔 방정식으로 해의 쌍으로 풀으려 했는데 경우의 수가 너무 많이 나누어짐,,

거스름돈(?) 문제랑 같은 알고리즘인거 같다

작은거를 기준으로 계속 빼주면서 큰거로 나누어지면 출력, 안나눠지면 -1 출력하기

낼 수 있는게 두가지라 간단하지만 세가지 네가지면..? 

반응형

PostgreSQL 설치방법은 구글 여러곳에 잘 나와 있다

 

PostgreSQL 설치오류

PostgreSQL 설치오류

대충 이런식의 오류가 계속 떴다. 홈페이지에 나와있는 모든 버전을 설치해봐도 동일한 오류가 떴다.

구글에 설치오류를 검색하고 나와있는 모든 방법을 썼지만 여전히 내 노트북은 오류발생,,,, (또 나만 왕따지,,,,,,,)

 

  • cmd 명령어를 이용한 설치

- postgresql 설치 경로에서 --install_runtimes 0 옵션을 주어 설치하는 방법이지만 여전히 난 에러

  • 다른 설치파일로 설치
 

PostgreSQL - Download

PostgreSQL: Verwaltet eure Daten in einer Datenbank - Kostenloser Download für ✓ Windows ✓ macOS ✓ Linux

www.netzwelt.de

다들 여기서 성공하셨다는데 , 여긴 아예 다운로드 창이 들어가지지 않았다.

 

해결

결국 이 사이트에서 나온 방법으로 해결할 수 있었다 ㅜㅜ !

 

PostgreSQL Install Fail in Windows 10 (icacls error / access denied)

I am getting the following error when trying to install PostgreSQL on my Windows 10 Machine (x64). Can anyone help me troubleshoot? Many thanks! Error screenshot below: https://i.stack.imgur.com/b...

superuser.com

문제점과 해결방안

위에 나와 있는거처럼 Administrator account를 활성화 시켜줘야 된다 뭐 이런 얘기 !

 

 

cmd 이용해서 Administrator account  활성화 시켜주기

1. 우선 cmd 창을 킨다.

2. D:\>net user administrator /active:yes   를 입력하여 administrator account를 활성화 시켜준다.

3. D:\>net user administrator *    를 입력하여 암호를 설정해준다. 두 번 입력하라고 나온다.

4. D:\>runas /user:administrator postgresql-14.0-1-windows-x64.exe        자신이 다운받은 파일명을 넣고, 위에 설정한 암호 넣어주면 끝!

 

이렇게 해서 성공했당 그 후엔 설치경로를 지정해 주는 단계가 있는데 기본 값 그대로 냅두면 된다.. 나는 여기서 또 만져서 헤맸당,,^^ 

뭐 설정하고 이런 다음 단계들은 구글에 검색하면 잘 나와있으므로 잘 보고 따라하면 끝 ! 

반응형

Time Series Date 시계열 데이터

: 시간에 따라 저장된 데이터

동일한 소스로부터 시간이 지남에 따라 만들어진 데이터들로 구성되므로 시간 경과에 따른 변화를 추적하는데 용이하다. 최근 2년 동안 Time Series 데이터베이스가 엄청난 속도로 증가하고 있다. TimeSeries DB에 대한 관심이 증가하는 이유는 빅데이터의 시대에 대용량의 데이터를 빠르게 처리하기에 적합하기 때문이다.

 

특징

1. 시간을 기반으로 하는 저장 공간

시계열 데이터베이스는 기존의 다른 데이터베이스들과 차별이 되는 핵심적인 아키텍처 디자인 특징이 있는데, 그것은 바로 time-stamp를 기반으로 하는 저장소를 가지고 있다는 것이다. 이를 통해 데이터를 압축하고 요약하는 등의 작업을 진행하여 대규모의 시간 기반 데이터들을 다룰 수 있고, 시간을 기반으로 하는 쿼리를 가능하게 한다.

2. 빠른 처리 속도

TSDB는 빠르고 효율적인 방법으로 데이터를 수집하기 위해 만들어졌다. 물론 RDB도 빠르지만 데이터의 양이 증가함에 따라 성능이 급격하게 느려지는 경향이 있다반면에 TSDB에서의 인덱스는 시간에 따라 축적된 데이터들에 최적화되었기 때문에, 시간이 지나도 데이터를 수집하는 속도가 느려지지 않고 빠른 처리 속도를 보여준다.

3. 다양한 자동화된 기능 제공

TSDB에는 시간에 따라 변화되는 데이터들을 저장하므로 데이터의 양이 상당히 많으며, 시간에 따른 데이터의 요약 또는 통계 등과 같은 작업이 흔히 요구된다. TSDB는 특정 주기마다 자동으로 데이터들을 처리하는 기능(InfluxDBContinous Query, 연속적인 쿼리)이나 오래된 데이터를 자동으로 삭제하도록 도와주는 기능(InfluxDBRetention Policy, 보존 정책) 등을 제공함으로써 편리성을 제공하고 있다.

 

 

 

반응형

NoSQL (Not Only SQL)

기존 관계형 DBMS가 갖고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원함

2000년 후반으로 넘어오면서 인터넷이 활성화되고, 소셜네트워크 서비스 등이 등장하면서 관계형 데이터 또는 정형데이터가 아닌 데이터, 비정형데이터라는 것을 보다 쉽게 담아서 저장하고 처리할 수 있는 구조를 가진 데이터 베이스들이 관심을 받게 되었고, 해당 기술이 점점 더 발전하게 되면서, NoSQL 데이터베이스가 각광을 받게 된 것입니다. 이러한 배경하에서 어떤 엔지니어들은 NoSQLModern web-scale databases라고 정의하기도 합니다.

 

특징

  • 기존의 관계형 데이터베이스 보다 더 융통성 있는 데이터 모델을 사용, 데이터의 저장 및 검색을 위한 특화된 매커니즘을 제공
  • 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음
  • 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 액세스
  • 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
  • Schema-less (스키마 없이 동작), 구조에 대한 정의를 변경할 필요 없이 데이터베이스 레코드에 자유롭게 필드를 추가 가능
  • 데이터베이스의 중단 없는 서비스와 자동 복구 기능 지원
  • 다수가 Open Source로 제공

 

종류

  1. Key-value
  2. Document
  3. Column-family
  4. Graph

 

1. Key - value

특징 가장 단순한 형태의 NoSQL으로, 데이터가 키와 값의 쌍으로 저장된다. 키는 값에 접근하기 위한 용도로 사용되며, 값은 어떠한 형태의 데이터라도 담을 수 있다.
장점 간단한 API를 제공하는 만큼 질의의 속도가 굉장히 빠른 편이다. 수평적 확장이 용이하다.
단점 값의 내용을 사용한 쿼리가 불가능하다.
사용되는 DB Memcached, Riak, Redis, Amazon Dynamo DB, LevelDB

 

2. Document

특징 데이터는 키와 도큐먼트(Document)의 형태로 저장된다. 키-값 모델과 다른 점이라면 Value가 계층적인 형태인 도큐먼트로 저장된다는 것이다. 객체지향에서의 객체와 유사하며, 이들은 하나의 단위로 취급되어 저장된다. 다시 말해 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어진다.
장점 객체-관계 매핑이 필요하지 않다. 객체를 도큐먼트의 형태로 바로 저장 가능하기 때문이다.
단점 사용이 번거롭고 쿼리가 SQL과는 다르다. 도큐먼트 모델에서는 질의의 결과가 JSON이나 xml 형태로 출력되기 때문에 그 사용 방법이 RDBMS에서의 질의 결과를 사용하는 방법과 다르다.
사용되는 DB MongoDB, CouchDB, MarkLogic

 

3. Column-Family

특징 키에서 필드를 결정한다. 키는 Row(키 값)와 Column-family, Column-name을 가진다. 연관된 데이터들은 같은 Column-family 안에 속해 있으며, 각자의 Column-name을 가진다. 이렇게 저장된 데이터는 하나의 커다란 테이블로 표현이 가능하며, 질의는 Row, Column-family, Column-name을 통해 수행된다.
장점 클러스터링이 쉽게 이뤄지며, Time stamp가 존재해 값이 수정된 히스토리를 알 수 있다. 또한 값들은 일련의 바이너리 데이터로 존재하기 때문에 어떤 형태의 데이터라도 저장될 수 있다.
단점 Blob 단위의 쿼리가 불가능하며, Row와 Column의 초기 디자인이 중요하다. Schema-less이긴 하지만 새로운 필드를 만드는 데 드는 비용이 크기 때문에 사실상 결정된 스키마를 변경하는 것이 어렵다.
사용되는 DB HBase, Cassandra, Hypertable

 

4. Graph

특징 실제 세계의 데이터를 관계와 함께 표현하기 위해 디자인된 모델로써, 데이터는 연속적인 노드, 관계, 특성의 형태인 그래프 형태로 저장된다. 따라서 질의는 그래프 순회를 통해 이루어진다.
관계형 모델이라고 할 수 있으며, 데이터 간의 관계가 탐색의 키일 경우에 적합하다. 연관된 데이터를 추천해주는 추천 엔진이나 패턴 인식 등의 데이터베이스로 적합하다. 또한 집합 지향 모델과는 다르게 개체의 ACID 트랜잭션을 지원한다.
단점 클러스터링에는 적합하지 않다. 또한 질의 언어도 특화되어 있어 배우기 어렵다.

 

의의

NoSQL이 RDBMS를 대체할 수 있을 것이라고는 생각하지 않는다. 그러기에는 RDBMS가 가진 장점이 너무나 명확하고, 또한 많은 사람들이 RDBMS을 사용하는 데 익숙해져 있기 때문이다. 그럼에도 불구하고 NoSQL이 각광받고 있는 까닭은 NoSQL만의 장점이 뚜렷하기 때문이다.

예를 들어 구매 내역이나 게임의 로그 같은 데이터들은 매 초마다 엄청난 양이 생성되지만 한번 저장되고 난 뒤에는 수정될 일이 거의 없다. 이런 데이터들을 저장하는 데 데이터의 일관성을 보장하기 위해 ACID 트랜잭션을 지원할 필요는 없을 것이다. 거기다 생성되는 데이터의 양도 많기 때문에 장비의 성능에도 상당한 영향을 미칠 것이다. NoSQL은 이러한 데이터들을 효율적으로 저장할 수 있다. 여러 대의 장비에 빠른 속도로 저장이 가능하며, 데이터의 양이 누적되더라도 얼마든지 수평적 확장이 가능하기 때문이다.

실제로 소셜 네트워크 서비스에서는 게시글들을 저장하는 데 NoSQL 데이터베이스를 사용하고 있다. 매 초에 수백 기가~수 테라 바이트씩 생성되는 데이터들을 RDBMS를 사용해 저장한다면, 글 작성 버튼을 누른 후 글이 중앙 데이터베이스에 저장되기까지 한참을 기다려야 글을 성공적으로 게시할 수 있을 것이다. 하지만 NoSQL의 분산 데이터베이스를 사용한다면 부하가 분산되기 때문에 우리가 글쓰기 버튼을 누르고 한참을 기다릴 필요가 없게 된다.

또한 각종 검색 엔진에도 사용되는 것이 NoSQL인데, 웹 페이지 내의 텍스트들을 형태소 단위의 토큰으로 분리하여 토큰과 해당 토큰이 포함된 페이지들의 URL을 맵핑하는 Inverted Index(역 인덱스) 구조를 NoSQL을 통해 구현한다. 이런 기능을 일반적인 RDMBS로 구현했을 경우 검색 창에 단어를 입력했을 때마다 상당한 시간이 소요될 것이다.

C++, Java, Python 등 여러 언어를 사용해서 하나의 프로그램을 만들 수 있는 것처럼 데이터베이스 역시 다양한 저장소를 사용할 수 있게 되었다는 점에서 NoSQL의 의의는 크다고 볼 수 있다.

반응형

데이터베이스란?

  • 체계화된 데이터의 모임
  • 여러 응용 시스템들의 통합된 정보를 저장하여 운영할 수 있는 공용 데이터의 묶음
  • 논리적으로 연관된 하나 이상의 자료 모음으로 데이터를 고도로 구조화함으로써 검색/갱신등의 데이터 관리를 효율화 함

DBMS란?

  • 데이터베이스를 관리하는 시스템
  • 사용자와 DB사이에서 사용자의 요구에 따라 데이터를 생성해주고, DB를 관리해주는 소프트웨어이다.
  • 데이터를 계층 또는 탐색 형식으로 저장한다. 파일 시스템을 사용해 저장하며 테이블 간에는 아무련 관계가 없다.
  • 데이터에 대한 많은 보안을 제공하지 않고, 정규화를 수행할 수 없어 데이터는 높은 중복성을 가질 수 있다.

 

RDB란?

  • 관계형 데이터 모델에 기초를 둔 데이터 베이스이다.
  • 모든 데이터를 2차원의 테이블 형태로 표현한다.

RDBMS란?

  • RDB를 생성하고 수정하고 관리할 수 있는 소프트웨어이다.
  • 관계형 모델을 기반으로 하는 DBMS 유형이다.
  • 테이블이 서로 연관되어 있어 일반 DBMS보다 효율적으로 데이터를 저장, 구성 및 관리할 수 있다.
  • 정규화를 통해 데이터의 중복성을 최소화하여 트랜잭션을 수행하는 것이 더 쉽다.
  • 데이터의 원자성, 일관성, 격리 및 내구성을 유지하며 데이터 무결성을 높인다.

 

관계형 모델이란?

관계형 모델은 실제 세계의 데이터를 '관계'라는 개념을 사용해서 표현한 데이터 모델이다.

 

Relation 이란?

  • Heading과 Body로 구성되어 있다.
  • Heading은 Attribute가 n개 모인 집합이고 이 Attribute는 이름과 데이터 형으로 되어 있다.
  • Body는 속성값의 집합인 tuple의 집합이다.
  • tuple과 attribute는 sql에서는 row, column 이라고 한다.

 

 

 

 

 

 

 

 

반응형

객체지향프로그래밍에서 중요한 개념인 오버라이딩과 동적바인딩에 대하여 간단히 조사하고 세미나를 진행하였습니다!

 

 

오버라이딩에 대한 정의입니다

 

다음은 오버라이딩에 대한 간단한 규칙입니다.

 

오버라이딩은 동적 바인딩을 통해 구현됩니다. 동적 바인딩에 대한 정의입니다.

 

동적 바인딩이 실현되는 가상함수테이블에대한 설명입니다.

반응형

+ Recent posts