전체 글

신승환의 기술 블로그
컴퓨터 구조

싱글스레드와 멀티스레드 (Single Thread & Multi Thread)

싱글스레드와 멀티스레드(Single Thread & Multi Thread) 프로그램 내의 처리 실행 단위 혹은 CPU의 이용 단위를 나타내는 단어에 스레드(Thread)가 있다. 일련의 처리를 단일 스레드만으로 직렬 처리하는 프로그래밍 방법을 싱글 스레드 프로그래밍(Single Thread Programming)이라고 한다. 반면, 동일 어드레스 공간의 메모리를 공유하면서 병렬로 처리하는 방법을 멀티 스레드 프로그래밍(Multi Thread Programming)이라고 한다. 복수의 cpu를 탑재한 컴퓨터에서 각각의 방법을 채용한 프로그램을 실행하면, 일반적으로는 멀티스레드 쪽이 혜택을 받기 쉽다. 싱글 스레드의 작동 방식 싱글 스레드는 프로세스 내에서 하나의 메인스레드만으로 작업을 처리한다. 그러므로..

컴퓨터 구조

프로세스(Process) 와 쓰레드(Thread) 란?

프로세스(Process) 란? - 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) - 운영체제로부터 시스템 자원을 할당받는 작업의 단위 - 동적인 개념으로는 실행된 프로그램을 의미 - 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다 - 기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다. - 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근X - 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신 (IPC, inter-process communication) 을 사용해야 함. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용) 스레드(Threa..

DB ARCHITECTURE

정규화(Normalization)

정규화(Normalization)란? 정규화란, 각각의 엔터티가 하나의 릴레이션에 의해 표현된다라는 것을 보장하는 규칙적인 수학적 과정을 말한다. 정규화된 데이터베이스인 경우에는 데이터를 변경하더라도 논리적인 문제가 발생하지 않으며, 완벽성을 손상시키지 않고서도 데이터 중복을 최소한으로 유지할 수 있다. 정규화에는 대표적으로 1 정규화, 2 정규화, 3 정규화가 존재한다. 제 1 정규화 - 릴레이션(테이블)의 튜플(행)은 반드시 고유해야 한다. - 모든 특성들은 더 이상 분해할 수 없는 원자적이어야 한다. - 쉽게 생각하면 기본키의 특성을 갖는 속성이 있어야 한다. 위의 1 정규화의 정의는 릴레이션에 대한 반복적인 정의라고 볼 수 있다. 즉, 테이블이 진정한 릴레이션이 되려면, 이미 해당 테이블은 1 정..

DB ARCHITECTURE

함수적 종속

함수적 종속이란? 함수적 종속(Functional Dependency)은 관계형 데이터베이스에서 두 개의 속성(Attribute)이나 열(Column) 사이의 종속성을 말한다. 어떤 릴레이션 R이 있을 때 X와 Y를 각각 속성의 부분집합이라고 가정해보자. 여기서 X의 값을 알면 Y의 값을 바로 식별할 수 있고, X의 값에 Y의 값이 달라질 때, "Y는 X에 함수적 종속된다." 라고 한다. 이 경우 X를 결정자, Y를 종속자라고 한다. 이를 기호로 표현하면 X→Y 이다. 이런 함수적 종속관계에는 아래와 같이 분류할 수 있다. 1. 완전 함수적 종속 2. 부분 함수적 종속 3.이행적 함수 종속 1. 완전 함수적 종속 완전 함수적 종속이란, 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 ..

DB ARCHITECTURE

제약조건(Constraint) 이란

제약조건이란 무엇인가? 관계형 모델의 큰 장점 중 하나는 데이터 모델의 한 부분으로 데이터 무결성을 정의할 수 있다는 것이다. 데이터 무결성은 데이터 모델에서 정의되는 제약 조건이라고 하는 규칙을 통해 구현되며, RDBMS에서 이 규칙들을 사용하게 된다. 데이터 무결성을 강화시키는 가장 간단한 방법은 속성 형식과 더불어 칼럼의 "NULL 허용 여부"를 지정하는 것이다. 또한, 데이터의 무결성을 확보하기 위해 칼럼마다 키(KEY)라는 속성을 사용할 수 있다. 제약조건 키 종류와 속성 1. 키(Key) - 열쇠는 무언가를 열거나 잠글 때 사용하는 것으로, 같은 것이 하나도 없다. - 이와 같이 키라는 것은 무언가를 식별하는 고유한 식별자(identifier) 기능을 한다. - 즉, 키는 데이터베이스에서 조건..

알고리즘

댓글 알고리즘 - 중첩집합(3)

지난번 포스팅에서는 중첩 집합 방식 알고리즘을 적용한 댓글 구조에서 답글을 어떤 식으로 삭제하는지 알아봤습니다. 중첩 집합 방식에 대한 설명(삭제) - [Algorithm] 중첩 집합(2) 댓글 알고리즘 - 중첩집합(2) 지난번 포스팅에서는 기본적으로 중첩 집합 방식 알고리즘이 어떤 식으로 작동하는지에 대해 알아봤습니다. 중첩 집합 방식에 대한 설명 - [Algorithm] 중첩 집합(1) 이번 포스팅에서는 중첩 집합 goodbyeanma.tistory.com 이번 포스팅에서는 새로운 답변을 생성하는 경우 어떠한 구조로 로직을 생성해야 하는지 알아보겠습니다. 예를 들어 #2에 대한 새로운 답변(#32)을 추가해봅시다. 그럼 위 그림과 같은 트리 형식이 될 것입니다. 일단 새로운 답글 #32은 #2의 자식..

알고리즘

댓글 알고리즘 - 중첩집합(2)

지난번 포스팅에서는 기본적으로 중첩 집합 방식 알고리즘이 어떤 식으로 작동하는지에 대해 알아봤습니다. 중첩 집합 방식에 대한 설명 - [Algorithm] 중첩 집합(1) 댓글 알고리즘 - 중첩집합(1) 지난번 포스팅에서는 경로 열거 방식 알고리즘을 적용해서 댓글을 구현해 봤습니다. 경로 열거 방식이 궁금하다면 - [Algorithm] 경로 열거 방식 경로 열거 방식에서는 경로 값의 무결성과 정합성 goodbyeanma.tistory.com 이번 포스팅에서는 중첩 집합 알고리즘을 통해 구현한 댓글에서 하나의 댓글이 지워지는 로직을 어떤 방법으로 구현할 것인지 생각해보고 그로 인해 생기는 문제점은 없는지 알아보겠습니다. 만약 위의 구조에서 #6의 댓글을 지우려면 아래와 같이 쿼리를 날리면 됩니다. BEGI..

알고리즘

댓글 알고리즘 - 중첩집합(1)

지난번 포스팅에서는 경로 열거 방식 알고리즘을 적용해서 댓글을 구현해 봤습니다. 경로 열거 방식이 궁금하다면 - [Algorithm] 경로 열거 방식 댓글 알고리즘 - 경로열거(Path Enumeration) 지난번 포스팅에서는 "인접 목록 방식" 알고리즘을 적용해서 댓글을 구현해 봤습니다. 인접 목록 방식이 궁금하다면 - [Algorithm] 인접 목록 방식 인접 목록의 약점 중 하나는 트리에서 주어진 노 goodbyeanma.tistory.com 경로 열거 방식에서는 경로 값의 무결성과 정합성을 보장할 수 없다는 점과, 결국 문자열로 경로를 저장하기 때문에 경로의 깊이 자체에도 한계가 있다는 단점이 있었습니다. 중첩 집합은 각 노드가 자신의 부모를 저장하는 대신 자기 자손에 집합에 대한 정보를 저장합..

알고리즘

댓글 알고리즘 - 경로열거(Path Enumeration)

지난번 포스팅에서는 "인접 목록 방식" 알고리즘을 적용해서 댓글을 구현해 봤습니다. 인접 목록 방식이 궁금하다면 - [Algorithm] 인접 목록 방식 인접 목록의 약점 중 하나는 트리에서 주어진 노드의 조상들을 얻는 데 비용이 많이 든다는 것입니다. 경로 열거 방법에서는 일련의 조상을 각 노드의 속성으로 저장해 이를 해결합니다. 디렉터리 구조와 비슷한데 /user/local/test/ 와 같은 unix 경로와 비슷하다고 생각하면 됩니다. CREATE TABLE dbo.COMMENT_TEST_PATH ( comment_idbigint not null, pathvarchar(1000) null,-- 경로를 저장해줄것 commentnvarchar(500) not null, comment_datedateti..

알고리즘

댓글 알고리즘 - 인접목록방식

기본적인 댓글 알고리즘에 대해서 살펴보겠습니다 :) 첫 번째로 댓글을 구현하는데 가장 많이 사용하는 방법은 "인접 목록 방식"입니다. 댓글의 아이디를 참조하는 parent_id 칼럼을 추가하는 방식으로써 하나의 테이블만으로 댓글 기능을 구현합니다. 이해를 위하여 아래의 테이블을 예시로 들겠습니다. CREATE TABLE dbo.COMMENT_TEST ( comment_idbigint not null,-- 댓글 아이디(pk) parent_idbigint null,-- 부모 아이디 commentnvarchar(500) not null, -- 댓글 내용 comment_datedatetime not null,-- 작성 일자 authorvarchar(20) not null-- 작성한 사람 ) ALTER TABLE..

ssh9308
신승환의 기술 블로그