Computer Science

    뮤텍스(Mutex), 세마포어(Semaphore)

    뮤텍스(Mutex), 세마포어(Semaphore)

    이전 프로세스 동기화 에서 프로세스 혹은 스레드가 공유 리소스에 동시에 접근하는 경우 공유 리소스에 대한 데이터 불일치 문제가 발생하고, 동기화를 통해 공유 리소스에 대한 데이터 일관성을 유지할 수 있는 것을 확인했다. 그리고, 이런 공유 리소스에 접근하기 위해 프로세스끼리 경쟁하는 것을 경쟁 상태(Race Condition), 공유 리소스에 접근하며 실제 동기화 문제가 발생하는 영역을 임계 영역( Critical Section)이라 했다. 마지막으로 임계 영역 문제를 해결하기 위해선 반드시 3가지 조건이 충족되어야 한다고 했다. Mutual Exclusion (상호 배제) : 임계 영역에는 반드시 하나의 프로세스만 실행되어야 한다. Progress (진행) : 임계 영역이 비어있는 상태라면 대기하고 있..

    프로세스 동기화 (Process Synchonization)

    프로세스 동기화 (Process Synchonization)

    프로세스 동기화 영화 좌석을 예매할 때 하나의 좌석에 동시에 여러 사람이 접근할 수도 있다. 이 때, 좌석에 대해 동기화 문제가 해결되지 않는다면, 한 좌석을 여러사람이 예매하는 문제가 발생할 것이다. 프로세스 동기화는 여러 개의 프로세스(스레드)가 컴퓨터 내의 공유된 리소스에 접근하는 경우에 데이터의 일관성을 유지하기 위한 방식을 의미한다. 경쟁 상태 (Race Condition)과 임계 영역(Critical Section) 은행을 예시로 생각해보자. 은행에서 하나의 계좌에는 입금과 출금을 할 수 있다. 만약 동시에 하나의 계좌에서 입금과 출금이 동시에 이뤄진다면 어떻게 될까 ? 현재 Zayson의 통장에는 잔고가 1000원 남아있다. Process A가 1000원을 입금했다. 동시에 Process B..

    반정규화 (De-Normalization)

    반정규화 (De-Normalization)

    정규화의 목적은 테이블 간 중복 데이터를 최소화하는 것이었다. 제 1 정규화 부터 제 5 정규화까지 단계를 거치며 테이블을 구체적으로 분해하게 되고, 이는 테이블 간 발생할 수 있는 이상 현상들을 제거하고 무결성을 유지할 수 있게 하는 장점이 있다. 하지만 단계를 거치며 중복을 제거하기 때문에 많은 테이블로 분리가 되기 때문에 데이터를 조회하기 위해선 테이블 간 Join 연산이 늘어나 조회 성능이 낮아지는 단점이 있다. 반정규화(De-Normalizaiton)은 성능 향상, 개발 편의성 등을 위해서 정규화된 테이블 규칙을 의도적으로 위반하는 것을 의미한다. 비정규화와 반정규화? 비정규화는 정규화가 되지 않은 테이블 모델을 지칭하는 단어이고, 반정규화는 정규화 원칙을 의도적으로 위반하는 것을 의미한다. 즉..

    정규화 (Normalization)

    정규화 (Normalization)

    하나의 테이블에 다양한 애트리뷰트를 혼합해서 사용한다면 데이터가 중복해서 저장될 수 있고, 이는 다양한 갱신 이상을 발생시킨다. 삽입 이상 : 원하지 않는 데이터가 삽입 되거나 필수적으로 삽입할 데이터가 부족해 삽입이 되지 않는 문제 현상을 말한다. 삭제 이상 : 하나의 데이터만 삭제하고 싶지만, 해당 데이터 전체가 포함된 튜플이 삭제됨으로써 원하지 않는 데이터가 삭제 되는 문제 현상을 말한다. 수정 이상 : 튜플의 일부분만 수정되어 데이터의 의미가 모호해지거나 일관성이 사라지는 문제 현상을 말한다. 정규화(Normalization)의 기본 목적은 테이블 간 중복 데이터를 최소화 시키는 것이다. 중복 데이터를 최소화 시킴으로써 데이터의 무결성 또한 유지되며 다양한 갱신 이상들을 해결할 수 있다. 그리고,..

    3-Way-Handshake, 4-Way-Handshake

    3-Way-Handshake, 4-Way-Handshake

    3-Way-Handshake와 4-Way-Handshake는 각각 TCP가 서로의 연결을 논리적으로 성립시키고 해제 시키는 과정을 의미한다. 3-Way-Handshake TCP는 서버와 클라이언트 사이에 데이터를 전송하기 위해 데이터 전송 전 서로의 연결을 3가지 단계를 이용해 성립시킨다. 연결하고자 하는 A가 B에게 연결 요청을 한다. B는 연결요청을 받았으니 A에게 연결 요청을 수락한다는 응답과 연결 요청을 보낸다. A는 B의 연결 요청을 수락한다는 응답을 B에게 보낸다. 각 단계를 구체적으로 알아보자. 연결하고자 하는 A가 B에게 연결 요청을 한다. 클라이언트 A는 서버 B와 연결을 하고싶다. 클라이언트 A는 연결하고자 하는 서버 B에게 연결을 요청하는 SYN 패킷을 전송한다. 연결이 없던 클라이언..