썸네일 트랜잭션 DBMS에서 트랜잭션과 동시성 제어는 데이터의 일관성과 시스템의 효율성을 유지하는 데 핵심적인 역할을 한다.1. 트랜잭션(Transaction)이란?트랜잭션은 DBMS에서 더 이상 나눌 수 없는 작업의 단위이다. 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻한다.트랜잭션의 특징(ACID)원자성(Atomicity): 트랜잭션의 모든 연산이 완전히 수행되거나, 전혀 수행되지 않아야 한다.일관성(Consistency): 트랜잭션 실행 전후의 데이터베이스 상태가 일관되어야 한다.독립성(Isolation): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다.지속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 한다.트랜잭션의 예시START TRANSA..
썸네일 데이터 독립성 DBMS를 사용하는 이유 중 하나는 DBMS가 데이터 독립성을 제공하기때문이다.데이터 독립성이라는 말만 들었을때 직관적으로 의미가 다가오지 않는다.  데이터 독립성은 데이터베이스의 물리적 구조나 저장 방식이 변경되어도 응용 프로그램이나 사용자 인터페이스에 영향을 주지 않는다는 것을 말한다.  물리적 데이터 독립성: 데이터베이스의 물리적구조/저장방식이 변경데이터베이스가 물리적 저장 구조가 변경된다는 것은 예를 들어데이터가 디스크에 실제로 배치되는 방법이 변경되어 데이터를 저장하던 저장 하드웨어가 HDD에서 SDD로 변경된다던지, 특정 레코드의 빠른 검색을 가능하게 하기 위해 파일 구조의 변경을 하여 순차 파일에서 인덱스 파일로 변경이 일어난다는 것을 의미한다. 물리적 스키마가 변경되어도 개념 스키마가 그대..
썸네일 [Network Layer 04] Control Plane 2 이제껏 우리가 배웠던 라우터는 다 이상적인 상황의 라우터였다. 실제로는 다르다. 1. 이상적인 모델에서는 네트워크 내의 모든 목적지와 경로를 라우터가 완벽하게 알고 있고, 이를 기반으로 최적의 경로를 계산할 수 있다고 가정한다. 그러나 실제 네트워크는 매우 방대하다. 실제 인터넷은 수십억 개의 목적지를 포함하며, 이러한 모든 목적지에 대한 정보를 모든 라우터가 알고 있을 수는 없다. 2. 이상적인 모델에서는 모든 라우터가 동일한 관리 하에 있으며, 모든 라우터가 동일한 정책과 프로토콜을 사용하여 협력한다고 가정한다. 그러나 실제 네트워크는 여러 조직, 기업, 정부 기관 등 다양한 주체들이 관리하므로 동일 정책을 사용하지 않는다.  인터넷의 확장 가능한 라우팅 접근 방식에서는 "자율 시스템(Autonomo..
[Network Layer 03] Control Plane 이전 단원에서 routing table을 참조해서 forwarding 하는 과정에 대해 배웠다.이번 단원에는 routing table을 어떤 방식으로 만드는지 알아보겠다.  라우팅 테이블을 생성하는 주요 방식은 다음과 같은 2 가지이다.전통적인 라우팅 프로토콜Link state 프로토콜(OSPF): 네트워크 토폴로지 정보를 교환하여 최단 경로 계산Distance Vector 프로토콜(RIP): 이웃 라우터의 거리 정보를 교환하여 경로 결정이 경우 router마다 네트워크 상황을 다르게 해석할 수 있다. 전통적인 프로토콜에서 각 라우터는 독립적으로 네트워크 상황을 판단하고 경로를 결정한다. 이때 ISP(인터넷 서비스 제공자)마다 다른 방식으로 최적 경로의 비용(cost)을 계산할 수 있다. 비용 계산에 고..
썸네일 [ Network Layer 02] Data Plane NAT : network address translationNAT는 앞서 말했다싶이 IPv4만을 사용해서 IP 주소가 부족한 상황에서 생겨난 개념으로 하나의 IPv4 주소를 local network에 있는 모든 디바이스 내에서 공유하는 개념을 말한다. 외부에서 볼때는 한 지점이지만 실제로 local device는 여러개를 사용하고 있다. NAT는 외부에서 쓰는 하나의 public한 IP 주소가 있고, 내부에서 사용하는 private한 주소가 있는데, 내부 private한 진짜 목적지까지를 구분하기 위해서는 포트번호를 사용한다. 사실상 포트번호는 device를 구분하기 위해서 사용되지 않고 프로세스를 구분하기 위해 사용되는데 규칙을 위반한 것이긴 하다. 들어온 패킷의 IP 주소는 내부의 어떤 디바이스로 연..
[ Network Layer 01] Data Plane Transport Layer는 Process to Process communication 서비스를 제공하듯이, Network Layer는 Computer to Computer Service를 제공한다. 이번 글에서는 IP라는 핵심 네트워크 계층의 프로토콜은 어떤 서비스 모델을 채택하고 있는지를 구체적으로 살펴볼 계정이다.  Network-layer services and protocols이전에 tranport layer에서는 end-system 의 process부터 다른 end-system의 process를 다루었다. 이 Process to Process communication 이 가능하기 위해서는 Process가 실행되는 컴퓨터에서 상대 컴퓨터까지의 통신이 가능해야한다. 이 서비스를 제공하는 것이 바..
썸네일 [Tranport Layer 03] TCP의 연결 설정 Flow Control흐름제어란 receiver가 1대 1 차원에서 overflow되어 buffer에 넘치게 받은 정보를 받지 않도록 하며 receiver가 자신이 overflow되지 않을 만큼만 sender에게 알려주고, sender가 흘러넘치지 않은 정도의 정보로만 data를 전송하는 것을 목적으로 한다.receiver의 application이 갑자기 다른 일을 하느라 receiver의 buffer 빈 공간이 안만들어질 수 있다. 또는 receiver가 데이터를 받는 속도가 application이 data를 읽어가는 속도보다 빠를때 buffer가 가득 차는 상황이 발생할 수 있다. 이러한 정보는 recieve window라는 필드를 통해서 free space정보를 전송한다. (=rwnd field)R..
썸네일 [Transport Layer 02] TCP TCP의 특징TCP는 하나의 sender당 하나의 receiver가 소통하는 프로토콜이다. 또한 checksum을 통해 reliable을 보장하나, 이는 보안을 위한 목적이라기 보다는 정말 약한 확인정도에 불과하다. TCP는 누적 ACK를 사용해 정확히 받은 가장 마지막 seq numb만 전송하고, stop and wait 기법이 아닌 파이프라인 기법을 사용한다. 또한 연결 설정을 진행하며 data가 buffer의 size를 넘치지 않도록 flow control과 congestion control 을 사용한다. 또한 양방향으로 data전송이 가능한 full duplex data이다.   TCP segment structure ACK number : 다음 예상되는 byte의 sequence number. ..
썸네일 [Transport Layer 01] Pipelining, Go-Back-N, Selective repeat rdt 2.0, 2.1, 2.2, 3.0 을 배웠다. rdt의 stop and wait protocol의 경우 매우 비효율적이다. 미국의 동부 끝과 서부 끝에서 패킷을 주고받는다고 생각해볼때 하나의 패킷을 보내고, ACK가 올때까지 기다려야한다.다시 말해 물리적인 거리가 매우 긴 곳에서 stop and wait protocol을 이용해서 패킷을 주고받으면 propagation delay가 매우 클 것이기에 RTT가 길어져서 오랜 시간을 기다려야할것이다. 따라서 최악의 performance를 가질 것이다. Pipelining그러면 데이터 패킷을 하나 보내놓고 기다리지 않고 데이터 패킷을 여러 개 보내놓고 기다리면 좀 낫지 않을까?utilization을 구해서 비교해보자. 파이프라인이 적용되지 않는 util..
썸네일 [Linux] vi나 vim 에디터 없이 파일 수정 Background 개발 환경이 달라져서 환경세팅을 다시 하던 중에 homebrew는 설치되었으나 zshell에 path가 추가되지 않아서 zshrc에 들어가서 PATH를 추가해줘야 한다. 쉬운 방법으로는 vi ~/.zshrc 로 zshrc에 들어가서 (tmi. 뒤에 붙은 rc는 run commands이다. ) export PATH=/opt/homebrew/bin:$PATH 이 문장을 추가해 주고 ESC를 누르고 :wq를 누르고 엔터를 치고 나오면 된다. 이 오류는 Homebrew가 설치된 곳이 /usr/local/... 이 아니라 /opt/homebrew/ 위치에 설치되었기 때문이라 경로 설정을 해주는 것이다. 그런데 나는 이렇게 하기 싫었다. 까지가 Background이다. 굳이 vi나 vim을 써서..
썸네일 [Linux] ls: command not found Mac 사용자들이 terminal을 사용하다가 ls나 vi 와 같은 명령어를 써줄때, 갑자기 명령어가 작동하지 않는 순간이 있다. 무엇이 원인일까? mongodb와 관련된 코드의 에러를 해결하려던 중, mongodb 설치 경로를 읽기 전용이라 접근 불가능하다는 것으로 원인을 파악하여 쓰기 전용으로 권한을 변경하려했다. 그러기 위해서 .bash_profile에 가서 mongodb path를 잘못 설정해주었기때문에 발생했던 것이다. 어떻게 해결해야할까? 1. 당장의 PATH에서는 명령어가 작동하지 않기때문에 임시방편으로 PATH설정을 수동으로 해줘야한다. 다음의 명령어를 shell에 치면 ls나 vi와 같은 명령어가 제대로 작동할 수 있다. export PATH=%PATH:/bin:/usr/local/bin..