본문 바로가기

분류 전체보기85

DBMS와 실행 계획 RDB를 조작할 때 SQL이라는 전용 언어를 사용하게 됩니다. 사용자 또는 개발자는 SQL을 이용하여 DBMS에 명령을 내리면 그 이후는 DBMS가 알아서 처리하고 결과를 제공해주게 됩니다. 따라서, 사용자는 데이터가 있는 곳을 알 필요도 없고, 데이터에 접근하는 방법도 따로 생각하지 않습니다. RDB가 권한이양을 하는 이유 이러한 모든 것을 DBMS에게 맞기게 되는데 이런 방식은 일반적인 프로그래밍과는 거리가 멉니다. C, 자바, 루비와 같은 프로그래밍 언어를 사용하는 경우 데이터에 접근하기 위한 절차에 대해 기술하게 되지만 RDB 같은 경우 단순히 해야하는 일을 기술하고 어떤식으로 처리할지는 DBMS에 맡기게 됩니다. RDB가 이런식으로 DBMS에게 권한을 이양한 이유는 권한을 이양하는 방식이 비즈니.. 2022. 10. 22.
DBMS와 버퍼 기억장치의 분류 일반적으로 기억장치는 기억비용에 따라 1차에서 3차까지의 계층으로 분류됩니다. 기억비용은 데이터를 저장하는데 소모되는 비용을 의미합니다. 1차기억장치의 경우 데이터 접근속도는 매우 빠르지만 기억비용이 높고 2차, 3차 기억장치로 갈수록 기억비용은 낮아지지만 데이터 접근속도가 느려집니다. 결국 많은 데이터를 영속적으로 저장하기 위해서는 속도를 잃고, 속도를 얻고자 하면 많은 데이터를 영속적으로 저장하기 힘들기 때문에 상황에 맞는 기억장치를 사용해야 합니다. DBMS와 기억장치의 관계 DBMS는 데이터 저장을 목적으로 하는 미들웨어이기 때문에 기억장치와는 떨어뜨릴 수 없는 관계입니다. 하드디스크 DBMS가 데이터를 저장하는 매체(저장소)는 현재 대부분 HDD입니다. 물론 하드디스크 이외에도 .. 2022. 10. 17.
DBMS 아키텍처 개요 DBMS 아키텍처 일반적인 DBMS의 아키텍처 구조는 다음과 같습니다. 그림을 살펴보면 데이터베이스 사용자가 SQL을 이용해 명령을 내리면 중간에 있는 DBMS에서 다양한 처리를 수행하게 됩니다. 그리고 저장장치에 있는 데이터에 접근해서 데이터를 읽고 쓰게 됩니다. 이제 DBMS 내부에서 어떤 처리가 일어나는지 자세히 알아봅시다. 쿼리 평가 엔진 쿼리 평가 엔진은 사용자로부터 입력받은 SQL 구문을 분석하고 어떤 순서로 기억장치의 데이터에 접근할지를 결정합니다. 이때 결정되는 계획을 “실행 계획”(또는 “실행 플랜”)이라고 부릅니다. 이러한 실행 계획에 기반을 둬서 데이터에 접근하는 방법을 접근 메서드(access method)라고 합니다. 한마디로 쿼리 평가 엔진은 계획을 세우고 실행하는 DBMS의 핵.. 2022. 10. 16.
CORS CORS 에러 발생상황 프론트에서 백엔드에게 정보를 받아오기 위해 다음과 같이 요청했다고 가정해봅시다. 프론트 (http://localhost:3000) import React, { useState, useEffect } from 'react'; import axios from 'axios'; import './App.css'; const App = () => { const [data, setData] = useState(''); useEffect(() => { axios.get('http://localhost:8080/api/healthy') .then(res => setData(res.data)) }, []); return ( {data ? "연결 성공" : "연결 실패"} ); }; export d.. 2022. 10. 14.
@RequestBody로 지정한 DTO에 기본생성자가 필요한 이유 @RequestBody로 요청 DTO를 매핑시킨 상태로 HTTP 요청을 보냈는데 다음과 같은 에러가 발생했었습니다. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.devcourse.voucher.application.customer.controller.dto.CustomerRequest]; nested exception is com.fasterxml.jackson.datab.. 2022. 10. 11.
데이터베이스 첫걸음 정리 - 36장. 트랜잭션 트랜잭션 트랜잭션은 데이터베이스 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 일련의 연산들을 의미합니다. 쉽게 말해서, SQL 명령들을 하나로 묶어 실행할 수 있는 기능입니다. 트랜잭션 설명을 위해 다음과 같은 테이블이 있다고 가정해봅시다. 위의 주문 테이블과 주문 상품 테이블 사이에는 의존관계가 존재합니다. 즉, 상품을 주문하게 되면 주문 테이블에 주문 정보가 들어가고 주문상품에는 해당 주문에 대한 상품 목록이 들어가게 됩니다. 이제 주문이 발생하는 상황을 생각해봅시다. 먼저, 주문 정보에 대한 행을 추가하고 주문한 상품에 대한 행들이 추가될 것입니다. INSERT INTO 주문 VALUES(4, '2014-03-01', 1); INSERT INTO 주문상품 VALUES(4,.. 2022. 10. 9.
데이터베이스 첫걸음 정리 - 35장. 정규화 정규화 정규화란 데이터베이스 테이블의 규정된 올바른 형태로 개선해나가는 것입니다. 정규화는 데이터베이스의 설계 단계에서 행해지며 경우에 따라서는 기존 시스템을 재검토할 때 정규화하는 경우도 있습니다. 먼저 예제를 통해 정규화를 진행하는 과정을 살펴봅시다. 먼저, 다음과 같이 쇼핑 사이트의 주문 처리 시스템 DB가 있다고 가정해봅시다. 현재 주문상품의 경우 특별한 형식 없이 만들어져 있어 문제가 발생할 수 있습니다. 현재 주문 상품이 주문 번호와 상품 명, 상품의 개수로 이루있는 상황에서 데이터를 정규화하면 데이터베이스의 테이블로 만들 수 있습니다. 정규화는 단계적으로 실시하며, 첫 번째 단계가 제 1 정규화로 이를 시행하면 제 1 정규형 테이블을 만들 수 있습니다. 제 1 정규형 관계형 데이터베이스의 테.. 2022. 10. 7.
데이터베이스 첫걸음 정리 - 34장. 데이터베이스 설계 데이터베이스를 설계한다는 것은 데이터베이스의 스키마 내에 테이블, 인덱스, 뷰 등의 데이터베이스 객체를 정의하는 것을 말합니다. 스키마 내에 정의한다는 뜻에서 “스키마 정의”라고 부르기도 합니다. 데이터베이스 설계의 주된 내용은 테이블의 이름이나 열, 자료형을 결정하는 것입니다. “이 테이블은 이 열을 이용해 저쪽 테이블과 연결한다”와 같이 테이블 간의 관계를 생각하면서 여러 테이블을 정의하고 작성하게 됩니다. 논리명과 물리명 테이블을 설계할 때는 테이블 정의서나 설계도 등의 문서를 작성하는 경우가 많은데 일반적으로 다음과 같은 양식을 많이 사용합니다. 테이블을 설계할 때는 테이블 이름이나 열 이름을 지정하게 되는데, 하나의 테이블에 대해 물리명과 논리명이라는 두 개의 이름을 지정할 때 도 있습니다. 물.. 2022. 10. 4.