투 포인터 알고리즘(Two-Pointers Algorithm)이란? 투 포인터 알고리즘은 말 그대로 두 개의 포인터를 이용해 문제를 해결하는 알고리즘을 뜻한다. 보통 l(left), r(right)나 s(start), e(end) 같은 식으로 포인터의 이름을 붙인다. 투 포인터 알고리즘을 설명하기 위해 하나의 알고리즘 문제를 소개하겠다. https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 백준에서 풀어볼 수..
정규화란?정규화는 이상현상(Anomaly)이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다. 이전 포스팅에서 1NF, 2NF, 3NF, BCNF까지 다뤄보았다. [DB] 정규화(Normalization)란? 정규화 예시, 1NF, 2NF, 3NF, BCNF정규화(Normalization)란? 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계code-lab1.tistory.com 이번엔 제 4정규형(4NF)과 제5 정규형(5NF)에 대해 알아보..
OLTP(Online Transaction Processing)란? OLTP란 트랜잭션 지향 애플리케이션을 손쉽게 관리할 수 있도록 도와주는 정보 시스템의 한 계열로서, 일반적으로 데이터 기입 및 트랜잭션 처리를 위해 존재한다. -위키백과- OLTP는 동시에 발생하는 다수의 트랜잭션을 실행하는 데이터 처리 유형이다. OLTP는 쿼리를 실행하고, 데이터 무결성을 유지하는 것을 목표로 한다. 예를 들어 은행의 ATM 기계는 OLTP 과정을 거친다. ATM 기계로 돈을 통장에 입금한다고 하자. 가장 먼저 카드를 삽입하면 ATM이 카드 정보를 인식한다. 카드를 인식했으면 돈을 기계에 넣는다. ATM은 돈을 세면서 잘못된 돈은 없는지 확인한다. 확인이 끝나면 돈을 보관하고 통장에 돈을 입금한다. 이러한 과정 ..
데이터베이스 트리거(Trigger)란? 데이터베이스 트리거는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미한다. 트리거는 INSERT, DELETE, UPDATE 같은 DML(데이터 조작 언어)의 데이터 상태 관리를 자동화하는데 사용된다. 트리거(Trigger)는 말 그대로 방아쇠이다. 방아쇠를 당기면 총에서 총알이 발사되듯, 트리거가 실행되면 일련의 작업을 수행하게 된다. 트리거 유형트리거는 크게 행 트리거와 문장 트리거가 존재한다. 행 트리거 : 테이블 안의 영향을 받은 행 각각에 대해 실행된다. 변경 전 또는 변경 후의 행은 OLD, NEW라는 가상 줄 변수를 사용하여 읽을 수 있다.문장 트리거 : INSERT, UPDATE, DELETE 문에 대해 한 번만 실행된다. 또한 트리거..
CDN(Contents Delivery Network)란? CDN(Contents Delivery Network)이란 데이터 사용량이 많은 애플리케이션의 웹 페이지 로드 속도를 높이는 상호 연결된 서버 네트워크이다. 사용자는 웹 사이트를 방문할 때 해당 웹 사이트 서버의 데이터가 인터넷을 통해 사용자의 컴퓨터에 도달하게 된다. 이때 사용자가 해당 서버에서 멀리 떨어져 있는 경우 동영상이나 이미지와 같은 대용량 파일을 로드할 때 많은 시간이 걸리게 된다. 반면 사용자와 가까운 거리에 있는 CDN 서버에 웹 사이트 콘텐츠를 저장해놓으면 사용자는 훨씬 빠른 속도로 콘텐츠를 로드할 수 있다. 즉, CDN은 콘텐츠 전송 시간을 줄여주는 네트워크이다. CDN의 동작 방식CDN의 목적은 지연 시간을 줄이는 ..
객체 지향 프로그래밍, 함수형 프로그래밍이란?프로그래밍 패러다임은 크게 두 가지 종류로 나눠볼 수 있다. 명령형(Imperative) 프로그래밍과 선언형(Declative) 프로그래밍. 객체 지향 프로그래밍(OOP)은 명령형 프로그래밍, 함수형 프로그래밍은 선언형 프로그래밍에 속한다. 객체 지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 프로그래밍 패러다임 중 하나이다. 함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 특히, 함수형 프로그래밍은 최근 들어 각광 받는 프로그래밍 패러다임이라고 할 수 있다. 개발 속도를 높여 생산성을 높이고, 가..
명령형(Imperative) 프로그래밍명령형 프로그래밍이란 프로그램의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 쉽게 설명하자면, 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이라고 볼 수 있다. 이러한 명령형 프로그래밍은 "how to solve it", 즉 어떻게 그것을 해결할 것인가에 관심이 있다. 거의 대부분의 컴퓨터 하드웨어는 명령형으로 구현된다. 거의 모든 컴퓨터 하드웨어들은 기계어를 실행하도록 설계되어 있는데, 보통 이것이 명령형으로 써져 있다. 포트란, ALGOL, C언어 등이 명령형 프로그래밍 언어의 일종이다. 선언형(Declarative) 프로그래밍선언형 프로그래밍은 보통 두 가지 뜻으로 통용된다. 첫 번째는 프로그램이 무엇을 해야 할..
다양한 프로그래밍 언어 소스코드 품질평가 기업인 TIOBE index에서는 평점이나 선호도를 기반으로 프로그래밍 언어의 순위를 평가하고 발표한다. 티오베 인덱스에 따르면 2022년 6월 현재 1순위는 Python이 차지하고 있는 것을 확인할 수 있다. 그 뒤로 C언어, Java, C++ 등이 위치하고 있음을 확인할 수 있다. 이처럼 1위부터 4위까지를 차지하고 있는 C, C++, Java, Python에 대하여 비교, 분석해보자. ※ 본 포스팅을 읽기 전 참고하면 좋은 글들 : [프로그래밍 언어론] 객체 지향 프로그래밍(OOP : Object Oriented Programming)란? OOP의 장단점객체 지향 프로그래밍(OOP)과 객체(Object) 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어..
NAC(Network Access Control)이란? NAC의 탄생 배경NAC는 말 그대로 네트워크 접근 제어를 뜻하는 것으로 엔드포인트(PC, 스마트폰 등과 같은 네트워크에 접속하는 모든 유무선 기기)가 네트워크에 접근하기 전 보안 정책 준수 여부를 검사하여 네트워크 사용을 제어하는 것을 말한다. 또한, NAC 시스템은 네트워크에 연결된 엔드포인트들의 여러 정보를 수집하여 엔드포인들을 분류하고 분류한 그룹의 보안 위협 정도에 따른 제어를 수행하기도 한다. 이러한 NAC는 어떻게 탄생하게 되었을까? NAC는 세계적인 컨설팅 회사인 가트너(Gartner) 그룹에서 새로운 네트워크 보안 모델을 제시한 것을 계기로 급속도로 확산 되었다. 사내망에 바이러스 같은 것이 침투하면 순식간에 사내망 전체로 퍼지게 되..
B- 트리란?보통 B 트리라고 하면 B- 트리를 의미한다. B 트리는 트리 자료구조의 일종으로 이진트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조이다. 이러한 B 트리의 다음과 같은 특징을 그림과 함께 알아보자. 1. 노드에는 2개 이상의 데이터(key)가 들어갈 수 있으며, 항상 정렬된 상태로 저장된다. [그림 1]처럼 한 노드에 2개, 3개의 데이터가 들어가 있을 수 있으며, 항상 정렬된 상태로 저장된다. 2. 내부 노드는 ceil(M/2) ~ M개의 자식을 가질 수 있다. 최대 M개의 자식을 가질 수 있는 B 트리를 M차 B트리라고 한다. [그림 1]은 3차 B트리를 나타낸다. ceil() 함수는 올림 함수를 뜻한다. 즉, ceil(3/2) = 2이다..
클러스터링(Clustering)이란? 클러스터링은 동일한 데이터베이스를 여러 대의 서버가 관리하도록 클러스터를 구축하는 것을 뜻한다. 이러한 클러스터링은 Active-Active 방식과 Active-StandBy 방식이 있다. 클러스터링을 하는 이유[그림 1]과 같이 모든 DB 서버가 Active 상태면 하나의 서버에 이상이 생기더라도 바로 다른 서버를 이용해 정상적인 서비스 운영이 가능하다. 또한 클러스터링을 이용하게 되면 기존에 하나의 서버에 몰리던 부하를 여러 곳으로 분산시킬 수 있다. 즉, 로드밸런싱(Load Balancing)이 가능해진다. 클러스터링의 단점하지만 클러스터링은 여러 대의 서버가 데이터베이스를 공유하므로 병목현상이 발생해 더 많은 비용이 발생할 수 있다. 특히, Active-Ac..
Memory Mapped I/O란?Memory Mapped I/O는 마이크로프로세서(CPU)가 입출력 장치를 접근할 때, 입출력과 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식이다. -위키피디아- 즉, Memory Mapped I/O는 disk block을 메모리의 페이지에 매핑시켜준다. 따라서 CPU는 파일을 메모리에서 접근 가능하게 된다. 이를 통해 CPU는 read() 혹은 write()등의 System call을 사용하지 않고 메모리에 data를 읽고 쓰는 것처럼 사용 가능하다. Memory Mapped I/O의 특징은 다음과 같다. 1. 메모리의 일부 공간을 I/O 포트에 할당한다.2. 많은 프로세스가 하나의 파일을 메모리에서 공유하는 것이 가능해진다. 3. ..