전체 글
NoSQL
깃헙 블로그에서 편하게 보기 Click! NoSQL의 정의 NoSQL은 Not Only SQL의 약자로, Not Only의 뜻을 생각해봤을 때 RDBMS만 고집하지 말고 필요에 따라 다른 특성의 데이터베이스로 사용해봐라~ 이런 뜻으로 해석하면 된다. NoSQL은 관계 데이터 모델과 SQL을 사용하지 않는 데이터베이스 시스템이다. RDBMS가 일관성에 초점을 맞췄다면, NoSQL은 가용성과 확장성에 초점을 맞춘 데이터베이스이다. NoSQL의 등장 기존의 RDBMS는 정형화된 데이터를 저장하기 때문에 데이터의 형태/크기를 미리 정하고 테이블 단위로 구분하여 데이터를 저장할 수 있다. 또한, 트랜잭션을 통해 데이터를 안전하게 관리할 수 있고, 조인 연산을 사용한 검색도 가능하다. 하지만 기술이 발전함에 따라 ..
Statement vs PreparedStatement
깃헙 블로그에서 편하게 보기 Click! Statement 데이터베이스에 액세스 하는 데 사용된다. Statement 인터페이스는 매개 변수를 허용할 수 없으며 런타임에 정적 SQL문을 사용할 때 유용하다. SQL 쿼리를 한 번만 실행하려는 경우 Statement 인터페이스가 PreparedStatement보다 선호된다. Connection con = DriverManager.getConnection(); // Statement 객체 생성 Statement stmt = con.createStatement(); // Statement 실행 stmt.executeUpdate("CREATE TABLE STUDENT(ID NUMBER NOT NULL, NAME VARCHAR)"); PreparedStatemen..
[1647] 도시 분할 계획(C++)
문제 바로가기 동물원에서 막 탈출한 원숭이 한 마리가 세상구경을 하고 있다. 그러다가 평화로운 마을에 가게 되었는데, 그곳에서는 알 수 없는 일이 벌어지고 있었다. 마을은 N개의 집과 그 집들을 연결하는 M개의 길로 이루어져 있다. 길은 어느 방향으로든지 다닐 수 있는 편리한 길이다. 그리고 각 길마다 길을 유지하는데 드는 유지비가 있다. 마을의 이장은 마을을 두 개의 분리된 마을로 분할할 계획을 가지고 있다. 마을이 너무 커서 혼자서는 관리할 수 없기 때문이다. 마을을 분할할 때는 각 분리된 마을 안에 집들이 서로 연결되도록 분할해야 한다. 각 분리된 마을 안에 있는 임의의 두 집 사이에 경로가 항상 존재해야 한다는 뜻이다. 마을에는 집이 하나 이상 있어야 한다. 그렇게 마을의 이장은 계획을 세우다가 ..
[1167] 트리의 지름(C++)
문제 바로가기 트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오. 입력 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 매겨져 있다. 먼저 정점 번호가 주어지고, 이어서 연결된 간선의 정보를 의미하는 정수가 두 개씩 주어지는데, 하나는 정점번호, 다른 하나는 그 정점까지의 거리이다. 예를 들어 네 번째 줄의 경우 정점 3은 정점 1과 거리가 2인 간선으로 연결되어 있고, 정점 4와는 거리가 3인 간선으로 연결되어 있는 것을 보여준다. 각 줄의 마지막에는 -1이 입력으로 주어..
[2589] 보물섬(C++)
문제 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 이동은 상하좌우로 이웃한 육지로만 가능하며, 한 칸 이동하는데 한 시간이 걸린다. 보물은 서로 간에 최단 거리로 이동하는데 있어 가장 긴 시간이 걸리는 육지 두 곳에 나뉘어 묻혀있다. 육지를 나타내는 두 곳 사이를 최단 거리로 이동하려면 같은 곳을 두 번 이상 지나가거나, 멀리 돌아가서는 안 된다. 예를 들어 위와 같이 지도가 주어졌다면 보물은 아래 표시된 두 곳에 묻혀 있게 되고, 이 둘 사이의 최단 거리로 이동하는 시간은 8시간이 된다. 보물 지도가 주어질 때, 보물이 묻혀 있는 두 곳 간의 최단 거리로..
인덱스(Index)
Index 데이터베이스에서의 인덱스란 데이터를 빠르게 찾을 수 있는 데이터 구조로, RDBMS에서 검색 연산의 속도를 높이기 위한 방법이다. 책 맨 뒷장에 있는 찾아보기처럼 내가 원하는 데이터가 DB의 어디에 저장되어있는지 빠르게 찾을 수 있다. 데이터베이스의 파일 구조에는 인덱스 이외에도 순차 방법과 해싱 방법이 있지만, 순차 방법은 물리적 순서와 논리적 순서를 동일하게 유지해야 하기 때문에 융통성이 떨어지고 탐색 시간이 오래 걸린다는 단점이 있다. 해싱 방법은 등호 연산(=)을 사용할 때는 O(1)로 굉장히 빠르지만, 부등호 연산(>, >=,
데이터베이스
데이터베이스의 정의 데이터베이스는 특정 조직의 여러 사용자가 공유하여 사용할 수 있도록 통합해서 저장한 운영 데이터의 집합이다. 그리고 이러한 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(Database Management System)이라고 한다. 데이터베이스의 특징 1️⃣ 실시간 접근성 데이터베이스는 사용자의 데이터 요구에 실시간으로 응답할 수 있어야 한다. 2️⃣ 계속 변화 데이터베이스는 데이터의 삽입, 삭제, 수정으로 항상 최신의 데이터를 유지해야 한다. 3️⃣ 동시 공유 데이터베이스는 여러 사용자가 서로 다른 데이터를 동시에 사용 가능해야 하고, 같은 데이터를 동시에 사용하는 것도 가능해야 한다. 4️⃣ 내용 기반 참조 데이터베이스는 주소나 위치가 아닌 데이터의 내용(content)으로..
메모리 계층과 캐시 메모리
깃헙 블로그에서 편하게 보기 Click! 메모리 CPU는 메모리에 올라와 있는 프로그램의 명령어들을 단순히 실행하기만 한다. 메모리는 어떻게 생겼을까? 메모리 계층 메모리 계층은 아래와 같은 구성 요소로 이루어져 있다. 레지스터 캐시 메모리 메인 메모리(주기억장치, RAM) 저장장치(보조기억장치, HDD, SDD) 레지스터는 CPU 내의 작은 메모리이다. 가장 속도가 빠른만큼 비싸고, 가장 용량이 적다. 캐시 메모리 역시 속도가 빠르지만 용량이 적다. 메인 메모리(주기억장치)는 속도도 보통, 용량도 보통이다. 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장한 후 이를 CPU에 전달하는 역할을 한다. 레지스터부터 메인 메모리까지를 상위 계층이라고 하며 전원이 꺼지면 데이터도 모두 사라지는 휘발성 저장..