본문 바로가기

전체 글83

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.
데이터베이스 첫걸음 정리 - 33장. 관계형 모델 관계형 데이터베이스는 관계형 모델을 기반으로 만들어졌습니다. SQL은 관계형 모델에 의해 구축된 데이터베이스를 조작하는 체계적인 명령의 집합입니다. 관계형 모델에서 SQL이 만들어졌지만 관계형 모델에서 사용하는 용어와 SQL의 용어는 일치하지 않습니다. 관계형 모델에서 테이블, 열, 행은 다음과 같이 표현됩니다. 관계형 모델은 데이터 구조에 관해 정의합니다. 릴레이션은 튜플의 집합이며, 릴레이션에 대한 연산이 집합에 대한 연산에 대응한다는 이론을 관계대수라고 합니다. 관계대수의 기본규칙은 다음과 같습니다. 하나 이상의 관계를 바탕으로 연산한다. 연산한 결과인 반환 값 또한 관계이다. 연산을 중첩 구조로 실행해도 상관없다. 관계형 모델과 SQL 관계대수에서는 자주 사용될 것 같은 릴레이션의 연산 방법을 몇.. 2022. 10. 3.
데이터베이스 첫걸음 정리 - 32장. 테이블 결합 테이블 결합 보통 데이터베이스는 하나의 테이블에 많은 데이터를 저장하지 않고 몇 개의 테이블로 나누어 저장합니다. 여러개로 나뉘어진 테이블을 하나로 묶어 결과를 낼 수 있는 방법이 테이블 결합입니다. 테이블 결합의 경우 집합론의 “곱집합”과 유사합니다. 곱집합 곱집합은 합집합이나 교집합 처럼 집합의 연산 방법 중 하나로 두 개의 집합을 곱하는 연산입니다. 예를 들어 다음과 같은 집합이 있다고 가정해봅시다. 집합 A는 {A, B, C}를 가지고 있고 집합 B는 {1, 2, 3}이라는 세 개의 요소를 가집니다. 여기서 A와 B를 곱집합으로 계산하면 다음과 같이 계산됩니다. 곱집합 결과를 보면 A와 B를 조합한 모든 결과가 나오는 것을 알 수 있습니다. 교차결합(Cross Join) 테이블을 곱집합으로 연산하.. 2022. 10. 3.