개요 Redis는 인메모리 데이터 저장소로 서버가 내려가면 데이터가 소실된다는 단점을 가지고 있습니다. 이를 극복하기 위해 Redis는 데이터를 복구할 수 있는 AOF 방식과 RDB 방식을 지원합니다. 이번에는 RDB 방식에 대해 공부한 내용을 정리해보겠습니다. RDB 특징 RDB는 특정 시점에 스냅샷을 찍어 저장하는 방식입니다. 설정 파일을 통해서 자동으로 저장하게 할 수 있고 SAVE, BGSAVE 명령어를 사용하여 수동으로 저장할 수 있습니다. RDB로 생성된 스냅샷은 dump.rdb 이름으로 생성됩니다. (설정 파일에서 이름을 바꿀 수 있습니다.) AOF와 RDB를 사용하면 AOF를 먼저 실행되고 AOF 파일이 없으면 RDB를 찾아 실행합니다. AOF 파일이 손상되거나 문제가 발생한 경우 RDB를..
개요 Redis는 인메모리 데이터 저장소로 휘발성 특징을 가지고 있습니다. 즉 예상치 못한 사고로 서버가 내려가면 Redis 에 있는 데이터도 소실됩니다. 이를 방지하기 위해서 Redis 는 데이터를 복구하는 기능으로 AOF 방식과 RDB 방식을 제공합니다. 이번 글에서는 AOF에 대해 공부한 내용을 정리해보겠습니다. AOF 특징 AOF는 Append Only File 에 약자로 Redis에 데이터가 변경되는 작업(입력, 수정, 삭제)이 실행될 때 마다 로그를 저장하는 방식입니다. Redis가 재시작할 때 AOF 파일을 순차적으로 재실행하여 데이터를 복구합니다. AOF의 파일이 너무 커지면 현재의 데이터 상태를 반영하는 새로운 AOF 파일을 재작성 합니다. 재작성을 통해 파일의 크기를 줄이고 재실행 속도..
Index란? MySQL에 Index란 DB에 성능을 향상시키기 위한 데이터 구조 입니다. Index는 DB 테이블 내의 특정 열(컬럼, 필드)에 대한 검색과 정렬을 빠르게 수행하기 위한 자료구조 입니다. Index는 데이터 검색 속도 향상, 정렬, 중복 제거 등의 용도로 사용되며 기본키 인덱스, 유니크 인덱스, 인덱스, 외래 키 인덱스 등의 종류가 있습니다. 저는 테이블의 특정 열에 대한 일반적인 Index를 적용해보려 합니다. Index는 데이터의 종류가 많은 열에 사용하면 더욱 큰 성능 향상 효과를 볼 수 있습니다. Index 사용하기 MySQL에서 Index를 적용하여 조회 성능 향상시켜 보겠습니다. 성능 측정은 Spring Boot에서 진행했고 JPA를 활용했습니다. 저의 프로젝트 구성은 다음과..
이번에는 window에 설치한 redis의 각종 설정들을 다뤄보려 합니다. 설정들을 사용하면 추가로 넣을 생각 입니다. 비밀번호 설정 redis의 비밀번호 설정을 아주 중요합니다. 프로젝트 때 redis의 비밀번호를 설정하지 않고 docker container로 ec2 ubuntu에 뛰운 적이 있습니다. 이 때, redis의 모든 데이터가 없어지는 문제가 빈번히 발생했습니다. 이유는 비밀번호가 없는 redis의 데이터를 자동으로 공격하는 프로그램이 있다고 합니다. 이 일 이후로 redis의 비밀번호를 꼭 설정했고 window에서도 redis에 비밀번호를 설정하려고 합니다. 설정 파일 변경 Redis 폴더 들어가기 C:\Program Files\Redis 경로로 들어가 줍니다. 여기에 2가지 설정 파일이 ..
window 환경에서 redis를 설치해보려 합니다. Redis 설치 사이트 결론적으로 Microsoft Redis Github에서 다운로드 받아 설치하면 됩니다. Microsoft Redis Github https://github.com/microsoftarchive/redis Microsoft Redis Github의 release 부분 (여기서 다운) https://github.com/microsoftarchive/redis/releases 사이트에 들어가면 버전 별로 윈도우에서 사용하기 위한 redis를 다운받을 수 있습니다. msi 파일과 zip 파일 둘 중 뭘 선택해도 별 차이는 없다고 합니다. 저는 msi 파일을 다운 받아 설치를 진행했습니다. 참고로 마이크로소프트에서는 redis를 윈도우 ..
MySQL을 사용하다보면 No connection established 에러를 심심치 않게 만날 수 있다. 이 에러를 해결하는 방법을 정리해보려 합니다. can't connect to server on localhost 등등의 에러에서도 해결할 수 있습니다. No connection established 연결이 되지 않는다는 에러 문구로 MySQL이 중지됨 상태일 때 발생한다. 해결 방법은 작업 관리자에 들어가 MySQL을 실행 중으로 변경하면 된다. 해결 방법 작업 관리자 실행 (Ctrl + Alt + ESC) 서비스 페이지로 이동 MySQL을 찾은 다음 시작을 눌러 실행 중으로 변경
목차 Redis 란? Redis는 REmote Dictionary Server 의 약자로 오픈소스 DBMS 입니다. 인메모리 데이터 저장소이며 key-value 기반의 비정형 데이터를 저장하고 관리하는 NoSQL DBMS 입니다. Redis는 빠른 성능과 다양한 데이터 타입을 지원하며 DB, 캐싱, 메시지 브로커 등 다양한 용도로 활용됩니다. Redis 사용 이유 기존의 DB는 디스크에 데이터를 저장했습니다. 이는 서버에 문제가 생겨도 데이터가 손상되지 않는 장점이었습니다. 운영 초반이거나 규모가 작은 서비스는 사용자가 많지 않아 DB에 무리가 가지 않았습니다. 하지만 사용자가 많아져 부하가 높아진다면 DB에 과부하가 걸려 느려지는 문제가 발생할 수 있습니다. 이 때 Redis가 인메모리 데이터 저장소로..
목차 이번 포스팅에서는 영속성 컨텍스트라는 별도의 영역을 통해 얻을 수 있는 이점과 영속성 컨텍스트에 무엇인지에 대해 알아보겠습니다. 영속성 컨텍스트란? 영속성 컨텍스트란 엔티티를 영구히 저장하는 환경을 뜻 합니다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 합니다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다. 엔티티 매니저와 영속성 컨텍스트 엔티티 매니저를 생성할 때 하나가 생성됩니다. 엔티티 매너지를 통해 영속성 컨텍스트에 접근하고 관리할 수 있습니다. 잠시 엔티티와 엔티티 매니저에 대해 알아보고 가겠습니다. 엔티티(Entity) 엔티티는 영속성을 가진 객체로 DB 테이블에 보관할 대상입니다..
목차 트리거(Trigger) 트리거란 영어로 방아쇠라는 뜻입니다. 방아쇠를 당기면 총기 내부에서 알아서 일련의 작업을 실행하고 총알이 날아갑니다. 이와 같이 데이터베이스에서도 트리거는 특정 테이블에 INSERT, DELETE, UPDATE 와 같은 DML이 실행했을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램 입니다. 즉 사용자가 직접 호출하는 것이 아니라 데이터베이스에서 자동적으로 호출하는 것이 큰 특징입니다. 트리거는 데이터베이스 시스템에서 데이터의 삽입, 갱신, 삭제 등의 변경 이벤트가 발생했을 때 관련 작업이 자동으로 수행되게 하는 절차형 SQL(프로그램) 입니다. 이벤트는 전체 트랜잭션 대상과 각 행에 의해 발생되는 경우 모두를 포함할 수 있으며 테이블과 뷰, DB 작업을 대상으로 ..
목차 데이터베이스 정규화(Normalization) 개념 정규화는 데이터의 중복성을 최소화하고 일관성 등의 유지를 통해 데이터베이스의 품질을 보장하고 성능 향상을 목적으로 수행합니다. 정규화를 통해 불필요한 데이터(redundancy)를 제거하고 이상현상이 있는 릴레이션을 무손실 분해하여 이상현상을 제거합니다. 이 과정에서 이상현상이 있는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 됩니다. 이를 단계별로 구분하여 수행하는 것을 정규형이라고 하고 정규형이 높아질수로 이상현상은 줄어들게 됩니다. 데이터베이스의 정규화 데이터의 중복을 최소화하고 불필요한 데이터를 제거하는 작업을 통해 이상현상을 제거해 데이터베이스의 품질을 보장하고 성능을 향상하는 작업 그러면 이상현상이 무엇일까요? 이상현상(Anomal..
목차 RDB, RDBMS RDB(Relational Database)란 관계형 데이터 모델에 기초를 둔 데이터베이스 입니다. 관계형 데이터 모델이란 데이터를 구성하는데 필요한 방법 중 하나로 모든 데이터를 2차원의 테이블 형태(row, column)로 표현합니다. 관계형 데이터베이스는 다른 테이블과 관계를 맺고 모여있는 집합체로 이해할 수 있습니다. 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용하고 테이블 간 Join이 가능하다는게 RDBMS의 가장 큰 특징 입니다. 특징 테이블마다 스키마가 정의해야 합니다. 데이터는 정해진 데이터 스키마를 따라 데이터베이스 테이블에 Column, Row 형태로 저장됩니다. SQL 언어를 사용해 데이터를 다룹니다. 부하의 분산이 어렵다 데이터..
목차 개요 데이터베이스의 종류를 알아보기 전에 용어 정리를 먼저 하고 가겠습니다. 데이터베이스(Database, DB) 데이터베이스(Database, DB)는 여러 사람이 공유하고 사용할 목적으로 통합 관리되는 정보의 집합입니다. 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조화함으로써 검색 및 갱신의 효율을 높인다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다. 같은 데이터라 할지라도 사용자는 각각의 응용 목적에 따라 다르게 사용할 수 있다. 사무 계산을 할 경우 각각의 업무 전용 데이터 파일을 사용하고 있지만 각 파일에는 중복된 정보가 들어있는 것이 많다. 이 중복을 피하여 정보를 일원화하..