본문 바로가기

전체 글

(291)
[데이터베이스] Functional Dependency & 정규화 Functional Dependency 함수 형태의 의존 관계를 나타낸다. 일반적으로 X -> Y 라고 하면 X가 Y를 결정하며, 동일한 X에 대해 반드시 동일한 Y가 대응되는 관계가 설정된다. 마찬가지로 Relation 내의 Attribute 사이에서도 constraint 등에 의해 일종의 의존 관계가 나타날 수 있다. 예를 들어 학생의 학번(PK) 은 학생의 개인 정보를 결정한다. 이런 관계를 함수처럼 나타낸 것이 Function Dependency 이다. X : left-hand-side, 반드시 candidate key에 속해야 한다. Y : right-hand-side Function Dependency는 현실 세계에서 속성들에 정용되는 제약조건에 기반하여 생성된다. 특정 스키마 R 내에서 at..
[데이터베이스] Informal Design Guideline for relational database Informal Design Guideline relational database의 디자인은 속성(attribute) 들이 "좋은" relation schema를 가지도록 만드는 작업이다. 이때 relation schema 에는 2개 레벨이 존재하며, 좋은 relation schema를 해당 계층에 대해 논할 수 있을 것이다. Logical "user view" level : 유저가 relation schema와 그들의 의미를 해석하는 계층. 유저에게 노출되는 계층. Storage "base relation" level : base relation 안의 튜플들이 저장 및 업데이트 되는 계층. 데이터베이스 디자인을 위한 가이드라인은 대략 다음과 같다. relation의 각 튜플들은 하나의 entity 혹은..
[오늘의 삽질] web-tree-sitter 과 emscripten https://tree-sitter.github.io/tree-sitter/ Tree-sitter|Introduction Introduction Tree-sitter is a parser generator tool and an incremental parsing library. It can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited. Tree-sitter aims to be: General enough to par tree-sitter.github.io tree-sitter은 C언어 기반의 파서 생성기? 로 의존성을 최소화하여 다양한 환경에서 ..
[운영체제] 메모리 일반적으로 컴퓨터를 사용할 때 우리는 디스크에 저장된 이진코드와 메모리 상에서 실행중인 대상 둘 다 프로그램이라는 표현으로 퉁치지만, 컴퓨터 과학에서 프로그램과 프로세스는 명확히 구분된다. 프로세스는 메모리 상에서 실제로 동작하는 대상으로, 프로그램의 코드에 여러 자원을 할당하여 실제로 실행하는 것이다. 과거의 컴퓨터는 한번에 하나의 프로세스만 실행할 수 있었다. 그러나 기술의 발전에 따라 CPU 와 메모리 사이의 동작 속도 사이에 큰 간격이 발생했다. 따라서 CPU가 메모리의 정보를 읽어오는데 많은 지연 시간이 발생하게 되었는데, 이를 stall이라고 한다. 이러한 낭비되는 시간을 줄이기 위해서 메모리에 여러개의 프로세스를 적재하고 경우에 따라 CPU을 돌려 쓰는 멀티 프로그래밍 기법이 고안된다. 초기..
[데이터베이스] ER Model - Relational Database Design(Mapping) Mapping 현재 사용되는 많은 DBMS들은 Relational Database Model 을 기반으로 하므로, Conceptual Design 영역인 ER Model에 의한 데이터베이스 디자인을 곧바로 DBMS에 적용할 수 없다. 따라서 ER Model 기반의 디자인을 Relational Database Model 에 대응되도록 매핑할 필요가 있다. 모든 정보를 보존 ER 모델에 존재하는 모든 어트리뷰트들은 모두 의미를 지니고 있다. 따라서 Relational 모델에서도 해당 어트리뷰트들 각각을 누락하지 않고 모두 테이블에 대응시켜야 한다. 제약조건을 최대한 유지 Relational 모델은 ER 모델에 비해 표현력이 약하다. 예를 들어 ER 모델에서는 max cardinality나 min-max no..
[웹 스크래핑] 셀레니움 사용법 https://www.selenium.dev/ 셀레니움은 웹 브라우저에 대한 테스팅 자동화 목적으로 등장한 프레임워크로, DOM 상의 엘리먼트들에 접근해서 명령을 내리거나, 여러가지 정보를 가져올 수 있다. 특히 동적으로 동작하는 웹 브라우저에서 아직 등장하지 않은 엘리먼트를 기다리거나, 특정 엘리먼트에 직접 접근하여 자바스크립트 기반 명령을 내릴 수도 있는 등 다양한 기능을 가지고 있기 때문에 동적 웹사이트의 정보를 읽어오는 기능이 탁월하다. 위와 같은 특징들에 기반하여 셀레니움은 웹 스크래핑에도 자주 사용된다. 이때 유사한 용어로 웹 크롤링이라는 말도 많이 사용하는데, 약간의 뉘앙스 차이가 있다. 웹 크롤링 https://en.wikipedia.org/wiki/Web_crawler 봇을 이용하여 보관..
[운영체제] 데드락 자료 출처 : https://www.os-book.com/OS10/slide-dir/index.html 데드락 두개 이상의 프로세스들이 한 순간에 하나의 프로세스만 달성할 수 있는 작업을 동시에 수행하기 위해 상대 프로세스가 가지고 있는 자원을 계속 요구하여, 결과적으로 프로세스 진행이 멈추는 상태이다. 프로세스 P1 및 P2 가 공유 자원에 대한 세마포어 s1 및 s2를 사용하는 상황을 생각해보자. 만약 P1 및 P2 가 동시에 실행되면 P1은 s1, P2는 s2의 사용권을 가진 후 상대방에게 나머지 세마포어에 대한 사용권을 요구하게 된다. 이때 위 코드에서 별다른 수단이 없는 경우 P1 및 P2는 각각 s1 및 s2를 놓지 않고 무기한 자원 할당을 기다리는데, 이게 데드락이다. def transact..
[운영체제] 동기화 문제 및 방법 현재 글은 https://www.os-book.com/OS10/slide-dir/index.html 을 참고하고 있습니다. 어쩌다가 https://www.youtube.com/channel/UCOcPzXDWSrnaKXse9XOPiog 채널을 봤는데, 정말 교수님이 설명을 잘하시는 것 같습니다. 문제의 발단 CPU 스케줄러는 타임 슬라이싱(시간을 짧게 쪼개 돌아가면서 사용)을 통해 빠르게 콘텍스트 스위칭을 일으켜 프로세스들을 실행하며, 이 과정에 다양한 인터럽트 역시 발생할 수 있다. 따라서 각 프로세스 및 스레드들은 실행의 "일부분" 만을 완료한 상태에 있게 된다. 문제는, 이러한 프로세스나 스레드들이 공유 메모리에 접근할 때 발생한다. 예를 들어 다음의 상황을 가정하자. 프로세스 연산 A in_s = ..