일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스프링 부트
- 깃허브
- 레디스
- 호이스팅
- sqld
- document database
- Redis
- JPA
- 정보처리기사
- 스프링부트
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 이벤트루프
- SQL
- 스프링 시큐리티
- 정처기
- VMware
- 동적계획법
- 실행 컨텍스트
- spring security
- MongoDB
- 캐시
- 분할정복
- 다이나믹프로그래밍
- Spring Boot
- github
- NoSQL
- 게시판
- 영속성 컨텍스트
- 자바의 정석
- in-memory
- Today
- Total
목록Database (14)
FreeHand

목차1. 옵티마이저(Optimizer) 1.1 옵티마이저 1.2 규칙기반 옵티마이저(RBO, Rule Based Optimizer) 1.3 비용기반 옵티마이저(CBO, Cost Based Optimizer)2. 실행계획(Execution Plan) 2.1 실행계획 2.2 SQL 처리 흐름도(Access Flow Diagram) 1. 옵티마이저1.1 옵티마이저옵티마이저는 사용자가 질의한 SQL문에 대한 최적의 실행 방법을 결정한다. 이때 최적의 실행 방법을 실행계획이라고 한다. 즉 옵티마이저는 SQL문에 대한 실행계획을 결정한다. 데이터베이스의 동작 과정을 간단히 표현하면 다음과 같다.사용자가 질의한 SQL문의 결과를 추출할 수 있는 실행 방법은 다양할 수 있다. 그중 최적의 방..

시작하며3년 전에 학교 수업에서 웹 애플리케이션을 만들어서 발표하는 과제가 있었다. 그때 다른 팀에서 MongoDB를 사용했었다. 교수님: 왜 MongoDB를 사용한거니? MongoDB가 뭔데? 알고 쓴거니?학생: 어... 유튜브에서 MongoDB로 만들길래 그냥 따라 했어요. 위 대화가 아직도 생생하게 기억난다. 지금 다시 생각해 보면 MongoDB를 사용한 것이 좋은 선택인지 아닌지 보다도 서비스의 요구사항과 MongoDB의 특징을 전혀 모르고 이유도 없이 그냥 사용했다는 것이 교수님 입장에서는 답답했을 것 같다. 이 포스팅에서 정리하는 정도의 내용이라도 알았더라면 그 학생은 교수님의 회사로 간택당했을 수도 있지 않았을까... MongoDB 소개MongoDB는 Document Database인 No..

시작하며지난번에 Redis의 특징과 데이터 타입에 대해 정리했었다. 이번에는 캐시에 대한 전반적인 개념과 스프링 부트 프로젝트에서 다양한 상황에 적용할 수 있는 redis사용법을 정리하려고 한다. 스프링 (부트) 기반으로 간단한 프로젝트를 해봤다면 쉽게 이해할 수 있을 것 같다. 프로젝트 설정Spring Boot에서 Redis를 사용하려면 역시 의존성을 추가해야 한다.나는 Spring Initializr에서 Spring Data Redis 의존성을 추가했다. build.gradle의 dependencies에 아래 코드를 추가해도 된다.implementation 'org.springframework.boot:spring-boot-starter-data-redis' 의존성 추가 이후에는 applicati..

시작하며백엔드 개발자에게 캐시는 중요한 개념이다. DB에 있는 데이터에 접근하는 것은 결국 디스크 I/O가 발생하는 것이고 이는 매우 느리기 때문에 대용량 요청이 들어올 경우 병목현상의 원인이 된다. 이를 부분적으로 해결하기 위한 방법으로 캐시를 활용할 수 있고 대표적으로 많이 사용하는 Redis의 특징과 데이터 타입에 대해 알아본다. Redis의 특징Redis는 흔히 사용하는 RDB와 몇 가지 차이가 있다. 우선 SQL을 사용하는 RDB와 달리 SQL을 사용하지 않는 Key-Value 형태의 저장소인 NoSQL이다.따라서 복잡한 쿼리를 작성할 필요가 없고 Hash를 이용해 값을 읽으므로 속도가 더 빠르다.그러나 쿼리를 사용하지 않는 것은 범위 검색과 같은 복잡한 질의가 불가능하다는 단점이 되기도 한다..

숫자형데이터 타입바이트 수숫자 범위설명BIT(N)N/8 1~64bit를 표현TINYINT1-128 ~ 127정수SMALLINT2-32,768 ~ 32,767정수MEDIUMINT3-8,388,608 ~ 8,388,607정수INTINTEGER4약-21억 ~ +21억정수BIGINT8약-900경 ~ +900경정수FLOAT4-3.40E+38 ~ -1.17E-38소수점 아래 7자리까지 표현DOUBLEREAL8-1.22E-308 ~ 1.79E+308소수점 아래 15자리까지 표현DECIMAL(m, [d])NUMERIC(m, [d])5~17-10^38+1 ~ +10^38-1전체 자릿수(m)와 소수점 이하 자릿수(d)를 사진 숫자형 DECIMAL은 정확한 수치를 저장하고, FLOAT나 DOUBLE은 근사치의 숫자를 저장한..

WITH절은 CTE(Common Table Expression)를 표현하기 위한 구문으로 MySQL 8.0부터 사용할 수 있다.CTE는 재귀적 CTE와 비재귀적 CTE가 있다. 지금은 비재귀적 CTE를 알아본다. 비재귀적 CTE 형식WITH CTE_테이블(칼럼)AS( )SELECT 칼럼 FROM CTE_테이블;SELECT 외에 UPDATE 등도 가능하지만 주로 SELECT문을 사용한다. 사용 예 buytbl 테이블에서 총 구매액을 구하고, 총 구매액이 많은 순으로 정렬하려면 다음과 같이 해야 한다.SELECT userID, SUM(price*amount) totalFROM buytblGROUP BY userIDORDER BY SUM(price*amount) DESC;정렬되기 전의 결과 테이블을 ab..

DELETE문 기본 구조DELETE FROM 테이블 WHERE 조건 WHERE절을 생략하면 모든 행의 데이터가 삭제된다. test 테이블에서 '로제'를 삭제하려면 다음과 같이 할 수 있다.DELETE FROM test WHERE userName = '로제';마지막 행의 '로제'가 테이블에서 삭제되었다. 데이터를 삭제하는 방법은 DELETE, DROP, TRUNCATE문으로 크게 3가지가 있다.CREATE TABLE ex1 (SELECT * FROM employees.employees);CREATE TABLE ex2 (SELECT * FROM employees.employees);CREATE TABLE ex3 (SELECT * FROM employees.employees); 대략 30만 건이 있는 em..

UPDATE문 기본 구조UPDATE 테이블 SET 칼럼1 = 값1, 칼럼2 = 값2, ... WHERE 조건; WHERE절은 생략 가능하지만 생략하면 모든 행이 변경된다. buytbl 테이블의 가격을 1.5배 인상하려면 다음과 같이 할 수 있다.SELECT prodName, price FROM buytbl;UPDATE buytbl SET price = price * 1.5;

INSERT문 기본 구조INSERT INTO 테이블(칼럼1, 칼럼2, ...) VALUES (값1, 값2, ...); 여러 행을 한번에 입력INSERT INTO 테이블 VALUES (값1, 값2, ...), (값1, 값2, ...);CREATE TABLE test (id int, userName char(3), age int); INSERT INTO test(id, userName, age) VALUES (1, '배수지', 30);SELECT * FROM test;실습용 테이블을 만들고 데이터를 삽입했다. INSERT INTO test(int, userName, age) VALUES (2, '권은비');칼럼의 개수와 넣으려는 값의 개수가 다르면 오류가 발생한다. INSERT INTO test(id,..

사용자가 구매한 물품의 개수를 보려면 어떻게 해야 할까SELECT userID, amount FROM buytblORDER BY userID;이렇게 조회하면 각 사용자마다 개수를 더해야 한다.group by와 집계 함수를 사용하면 원하는 결과를 얻을 수 있다.SELECT userID, SUM(amount) FROM buytblGROUP BY userID;칼럼 이름이 함수 그대로 나오기 때문에 별칭을 사용한다.SELECT userID '사용자 아이디', SUM(amount) '총 구매 개수' FROM buytblGROUP BY userID; 사용자별 총 구매액을 조회하려면 이렇게 할 수 있다.SELECT userID '사용자 아이디', SUM(price*amount) '총 구매액' FROM buytblGR..