| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- document database
- cache
- 캐시
- in-memory
- spring security
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- db partition
- 정처기
- NoSQL
- DB파티션
- 스프링부트
- cursor
- 동적계획법
- 실행 컨텍스트
- Redis
- 호이스팅
- 자바의 정석
- VMware
- Spring Boot
- 스프링 시큐리티
- 스프링 부트
- JPA
- 정보처리기사
- sqld
- pagination
- 게시판
- 레디스
- 영속성 컨텍스트
- SQL
- 다이나믹프로그래밍
- Today
- Total
목록Database (16)
FreeHand
요즘 레디스를 공부하면서 간단하게라도 서비스에 실제로 사용해보고 싶다는 생각이 들었다.그래서 레디스를 바로 적용해 볼 수 있는 것을 찾아봤다.그렇게 발견한 후보는 아래 두 가지다. 1. 대시보드 통계 쿼리 결과를 저장해 두는 캐시2. 인증번호 저장 기존에는 레디스를 사용하지 않았으므로 당연히 DB를 사용해서 구현했다.이제 레디스로 바꿔보겠다. (실제 코드를 바탕으로 재구성한 것임) 캐시로 사용하기현재 관리자 대시보드에는 통계 데이터를 그래프로 보여주고 있다.해당 쿼리들이 꽤나 복잡하기도 하고, 화면 하나에 여러 정보가 있어서 페이지가 로드될 때 많은 DB 조회가 발생해서 캐시를 사용하면 좋겠다고 생각했다. @Transactional(readOnly = true)@Cacheable( value = ..
목록 조회를 구현할 때 가장 많이 사용하는 방식은 크게 두 가지다. OFFSET 기반 페이징Cursor 기반 페이징OFFSET 방식SELECT *FROM postORDER BY id DESCLIMIT 20 OFFSET 10000; OFFSET 방식은 위 쿼리처럼 LIMIT와 OFFSET을 사용해서 조회하는 방식이다.id로 내림차순 정렬하고 10000개 건너뛰고 그다음 20개를 조회한다.즉 아래와 같이 동작한다. 정렬 수행10000개 row 읽음10000개 버림다음 20개 row 반환20개를 조회하기 위해서 10020개를 조회한 것이다.OFFSET이 커질수록 즉 페이지가 뒤로 갈수록 느려진다는 의미이다. Cursor 방식SELECT *FROM postWHERE id Cursor 방식은 현재 위치(커서)를..
목차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..