분류 전체보기

DB 정규화에 쓰이는 functional dependency (함수 종속)
Functional dependency ? 두 attributes 집합 사이의 의존성을 나타내는 개념이 functional dependency(FD)다 예를 들어 설명하겠다 아래는 임직원 정보를 저장하는 EMPLOY 테이블의 스키마(schema)다 empl_id empl_name birth_date position salary EMPLOYEE 테이블에는 총 다섯 개의 attribute가 있는데 이 attribute를 아래와 같이 X, Y 두 집합으로 나눠보겠다 X = {empl_id} Y = {empl_name, birth_date, position, salary} 이제 X와 Y의 관계를 생각해 보자 empl_id는 임직원을 구별하기 위해 부여된 식별자이다 그러므로 empl_id가 동일한데 empl_na..

프로세스와 스레드의 관계를 바라보는 두 가지 세계관
프로세스(process)와 스레드(thread)의 관계는 개념적으로 크게 두 가지 세계관이 존재한다 세계관 1 임의의 프로그램(program)이 실행되려면 기본적으로 가지고 있어야 하는 리소스들(메모리 공간, 프로그램 코드, 환경 변수, 프로세스 ID)이 있다 프로그램이 실행되면 OS가 이런 리소스들을 부여하고, 메모리에 올려서 실행 가능한 형태로 만드는데 이렇게 리소스를 부여받아 실행 중인 (혹은 실행 가능한) 프로그램을 프로세스라고 부른다 하지만 실제로 CPU에서 (요즘은 멀티코어니까 각 코어에서) 실행(execution)되고 스케줄링(scheduling) 되는 것은 스레드다 그렇기 때문에 프로세스는 최소 하나의 스레드를 반드시 가져야 하며, 그러므로 이 세계관에서는 스레드 또한 프로세스가 가지는 리..

DB 트랜잭션 isolation 속성과 lost update
트랜잭션 isolation 속성의 의미 트랜잭션의 속성 중에는 isolation 속성이 있다 우리말로 격리라는 뜻을 가진 isolation의 의미는 여러 트랜잭션이 동시에 실행해도 각각의 트랜잭션이 서로 다른 트랜잭션에게 영향을 받지 않고 격리돼서 실행되는 것처럼 동작해야 함을 의미한다 Lost update 현상이란? isolation 속성이 없으면 여러 트랜잭션들이 동시에 실행될 때 예상했던 결과와는 다른 결과가 생긴다 예를 들어보겠다 X의 계좌에는 50이 있고 Y의 계좌에는 10이 있다 만약 X에서 Y에게 40을 이체하는 트랜잭션 1과 X에게 30을 입금하는 트랜잭션 2가 동시에 실행됐다고 가정해 보자 그러면 시간 타이밍에 따라 여러 결과가 나올 수 있는데, 아래는 그중에 한 가지 예다 트랜잭션1 트..

프로세스는 최소한 하나의 스레드를 가진다 (맥북에서 확인하기)
오늘날의 컴퓨터에서 프로그램 동작 방식 프로그램이 컴퓨터에서 실행되면 그걸 프로세스라고 부른다 그 프로세스는 최소 한 개의 스레드를 가진다 스레드는 CPU 코어에서 실제로 실행되는 실행 단위다 오늘은 실제로 그러한지 맥북에서 테스트해보는 내용이다 맥북에서 테스트를 위한 프로그램 작성 C언어로 아주 간단한 프로그램을 아래처럼 작성했다 // 파일 이름 : hello.c #include #include int main(void) { printf("Hello, world!\n"); // 화면에 출력 sleep(10); // 10초 sleep return 0; // 정상적인 종료를 의미 } 이 코드 어디에서도 명시적으로 스레드를 만드는 코드는 없다 단지 프로그램을 실행하면 호출되는 main() 함수가 있을 뿐이다..

프로세스와 스레드 차이 많이 헷갈려 하는 포인트
프로세스와 스레드는 독립적인 존재가 아니다 프로세스(process)와 스레드(thread)를 독립적으로 따로 존재하는 개념으로 인식하는 경우가 꽤 있는 것 같다 예를 들어 프로세스 A가 있고, 그 프로세스에 속한 스레드 x가 있을 때 A와 x 둘 다 독립적으로 CPU 코어에서 실행 가능한 존재로 인식하는 것처럼 말이다 오늘은 이 부분을 정리하고자 한다 프로세스와 스레드와 CPU의 관계 프로세스는 메모리에 올라가서 사용자에 의해 컴퓨터 상에서 '실행 중인 프로그램'을 의미하며 그 프로세스의 실행 정보나 상태(메모리 주소 공간, 프로세스 ID, .. etc)는 OS에 의해 관리된다 하지만 실제로 CPU 코어에서 실행되는 것은 스레드다 (이게 매우 중요한 개념 !!) 그렇기 때문에 하나의 프로세스가 CPU 코..