Today I Learned/개념 정리 28

ORM

RDB **Relational model(관계형 모델)**이란, 데이터를 여러개의 속성과 값을 통해 나타내는 모델이다. 데이터의 각 속성을 이루는 이루는 값은 데이터 자체의 고유성을 표현하기도 하며, 외무 모델과의 관계를 나타내는 등 특정 규칙을 통해 속성을 이룰 수 있다. 일반적으로 Relational model은 RDB(Relational Database; 관계형 데이터베이스)에 Table의 형태로 저장된다. Table은 각 데이터를 나타내는 Row와 데이터의 속성을 나타내는 Column으로 구성되며, Primary key(고유 키)가 각 Row에 대한 식별자의 역할을 하며 데이터를 식별한다. OOP 개발 방법론 구조적 방법론 정형화된 분석 절차에 따라 사용자 요구사항을 파악하여 문서화하는 처리중심의..

프로세스 동기화

Data Consistency, Race Condition, Critical Section 동시에 다수의 프로세스가 하나의 자원으로 접근할 때, 공유자원에 대한 무절제한 접근은 개별 프로세스의 단위에서 공유자원에 대한 신뢰성을 해한다. 공유하는 **자원의 일관성(Data consistency)**을 유지하기 위해선 각 프로세스가 순서를 가져야 한다. 프로세스 동기화는 이러한 자원의 일관성을 지키기 위해 다수의 프로세스를 관리하는 메커니즘이다. 동기화 되지 않은 다수의 프로세스가 동시에 자원에 접근하여 자원의 일관성을 깨트릴 수 있는 상황을 **경쟁 상태(Race condition)**라 부른다. 이러한 상태에 접근하는것을 방지하기 위해 코드 상에서의 공유자원 접근을 관리하는데, 공유 자원에 접근하는 코드..

DNS

DNS(Domain Name System; 도메인 이름 시스템) Domain(영역, 범위) + Name(이름) + System(체계) ⇒ 특정 기준으로 분리한 네트워크의 영역에 따라 붙인 이름을 관리하는 체계 DNS의 시작 ARPANET시절, 스탠포드 연구소는 복잡한 네트워크 위에서 서로의 기기로 정보를 정확히 송수신 하기 위해 IP주소를 사용하였다. IP 주소를 사용하여 다른 기기에 접근하기 위해선, 숫자로 이루어진 상대 기기의 IP주소를 알아야 한다. 네트워크 상에 존재하는 컴퓨터가 점점 많아지자, 이를 쉽게 기억하기 위해 전화번호부처럼 숫자로 이루어진 IP주소와 평문으로 이루어진 호스트 이름을 맵핑하는 hosts.txt라는 파일을 관리하였다. UNIX에서는 이를 /etc/hosts 파일로 확인할 수..

직관과 논리

고등동물인 인간은 논리적으로 매우 복잡한 상황에서도 직관적으로 행동할 수 있다. 이는 매우 빠르고 비교적 정확한 소통을 도출함으로써 인간의 가장 큰 무기가 되었다. 이 작용 얼마나 강력한지, 의식적으로 집중하여 정확한 논리 구조를 간파하려면 많은 시간과 에너지가 든다. 하지만 로우-레벨 논리들로 구성된 프로그래밍에서는 이러한 직관들이 방해될 때가 있다. 간단한 문제를 풀어보자. 카드 문제 사실: 모든 카드의 한쪽에는 알파벳, 다른 쪽에는 숫자가 적혀있다. 주장: 만약 카드의 한 쪽이 D이면, 다른 한 쪽은 3이다. 여기서, 주장이 사실인지 확인하기 위해 아래 카드 중 반드시 뒤집어 보아야 하는 카드는 몇개이고, 어느것인가? 매우 간단해 보이는 문제지만, 많은 사람들이 이 문제를 틀린다고 한다. 정답은 D..

IP, Packet, Port

패킷 서킷 스위칭 하나의 회선을 할당받아 데이터를 주고받는 방식 서킷(Circuit)이란 연결 통신 이전에 맺어야 한다. 패킷 스위칭 데이터를 패킷의 단위로 분할하여 전송하는 방식 패킷은 다음 노드로 전송되기 전 저장 후 전달되는 store and forward 방식을 따른다. 패킷의 헤더에는 출발지, 목적지 정보가 있으며, 라우팅 알고리즘을 이용하여 경로를 설정한다. 큐에 저장되는 패킷이 수용범위를 초과하면 손실이 발생(overflow)한다. IP 비대해진 네트워크 상 라우팅을 위해 사용자의 주소를 구분할 필요성이 대두되었다. 개별 컴퓨터는 각 Unique한 주소를 할당받는데, 이 주소를 IP라 한다. IPv4 정수값으로 42억9천가지의 주소를 배정하는 방식이다. ********.********.***..

DB Normalization

데이터베이스에 적재되는 데이터의 정돈은 곧 데이터베이스 상호작용의 성능을 높여준다. 잘 정렬된 데이터와 잘 정의된 스키마는 데이터베이스의 높은 확장성까지 꾀할 수 있다. 이 정돈과정을 Database Normalization(데이터베이스 정규화)이라 부른다. DB의 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 이를 통해 데이터의 무결성(Integrity)을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 여러 단계에 걸쳐 이미 정의된 테이블을 분리하고 병합하며 정규화를 진행한다. 정규화의 종류 데이터 베이스의 정규화 단계는 1970년 Edgar F. Codd에 의해 도입되었다. 그는 제 1~3 정규화를 정의하여 대부분의 RDB에 대해 삽입, 변경,..

SQL, NoSQL

SQL과 NoSQL의 차이는 전통적인 RDB(Relational Database; 관계형 데이터베이스)에서 시작된다. RDB의 관리 소프트웨어인 RDBMS에서 사용하는 SQL 언어의 사용 유무는 곧 RDB의 사용 유무로 확장된다. 특정 상황에서의 기존 RDB의 한계를 극복하기 위해 SQL 언어를 사용하지 않는 데이터베이스 시스템이 개발되기 시작해, 이는 곧 SQL 언어를 사용하는 DB와 SQL 언어를 사용하지 않는 DB로 구분되었다. Database 미국은 1914년부터 1945년대 까지 1차, 2차 세계 대전을 겪으며 군수물자 무역을 통해 엄청난 부를 거머쥐었다. 1950년대 벌어들인 대규모의 군비를 집중적, 효율적으로 관리하기 위해 컴퓨터를 활용한 도서관 개념을 개발하며 Database; DB라는 개..

REST, RESTful, RESTful API

REST REST(Representational State Transfer; 상태 표현 전달)란, 서버와 클라이언트 사이 자원을 주고받는 형식이며 소프트웨어 아키텍처 디자인 가이드라인이다. 쉬운 예로, 웹 서버에 특정 URL로 접근하여 HTML 페이지나 이미지 등의 자원을 전달받기 위해서는 REST 규칙을 준수하여 아키텍쳐를 구축해야 한다. 프로토콜 개념과 비슷하지만, 규칙의 체계가 아닌 모음집이라는 점에서 프로토콜로 분류되지 않는다. W3C(World Wide Web Consortium)에서 유지관리하는 SOAP(Simple Object Access Protocol) 데이터 전송 방식 프로토콜과는 구분이 필요하다. 일반적으로 활용 목적과 개발자의 선호에 따라 REST 또는 SOAP를 준수하여 API를 ..

컨테이너 간 SSH 키 공유

일회성을 가지는 컨테이너인 만큼 직접적으로 ssh key를 컨테이너에 집어넣는것은 좋지 않을것이다. 컨테이너를 생성할 떄 마다 새로운 키를 할당해 known host를 할당하거나 비밀번호 없이 접속하도록 key 공유 자동화 시스템을 만드는것도 상당히 시간 낭비일 것 같다. 컨테이너를 실행시키는 호스트 컴퓨터에서 키를 생성하고 컨테이너에 마운트 시키는것이 간단한 해결방법일것이다. 지금부터의 과정은 systemctl이 불가능한 5개의 노드로 구성된 CentOS7 컨테이너 클러스터에서 진행한다. 먼저 테스트용 컨테이너를 띄운 뒤, 키를 초기화한다. dockerhub에서 가져온 날것의 CentOS7에 openssh-server, openssh-client, openssh-askpass를 설치해 수행하였다. 이 ..