Redis에 데이터를 직렬화/역직렬화 처리할 때 SerializationException이 발생 아래와 같이 직렬화, 역직렬화 대상이 되는 클래스에 LocalDateTimeSerializer, LocalDateTimeDeserializer를 각각 지정해서 직렬화, 역직렬화에 사용한다. @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class) private LocalDateTime createdDate; @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonSerialize(using = LocalDateT..
역정규화 성능이나 개발의 편의성을 위해서 테이블의 구조를 바꾸는 것 여러 대의 서버로 데이터를 분산할 때 사용할 수 있다. 조인 줄이기 많은 조인은 시스템에 부하를 줄 수 있기 때문에 조인을 줄여서 부하를 줄일 수 있다. 조인을 하지 않고 테이블을 조회할 수 있도록 컬럼을 추가했다. 하지만, topic_tag_relation 테이블은 중복이 발생하고 tag 테이블이 존재하면서 동시에 tag_name 컬럼이 존재하는 중복도 같이 발생해버렸다. 계산 작업을 줄이기 GROUP BY와 같은 명령어는 데이터가 많은 경우 많은 비용이 발생할 수 있다. SELECT author_id, COUNT(author_id) FROM topic GROUP BY author_id topic_count 컬럼을 추가해서 쿼리를 대체..
정규화란? 정제되지 않은 데이터(표)를 관계형 데이터베이스에 어울리는 표로 만들어 주는 방법 제1정규화(1NF) : 각 컬럼이 단일 값을 가져야 한다. Unnoramalized form에서 SELECT * FROM topic WHERE tag = 'free' 또는 SELECT * FROM topic ORDER BY tag와 같은 쿼리를 하려고 할 때 문제점가 발생한다. 아래와 같이 표를 수정하면 제1정규화을 만족할 수 있지만 정보의 중복이 발생하거나 테이블 구조를 변경해야 하고 컬럼을 사용하지 않는 낭비가 발생할 수 있다. Topic과 Tag의 관계는 카디널리티가 M:N이다. M:N은 테이블을 나누는 것으로 끝나지 않고 매핑 테이블을 만들어 주어야 한다. topic의 title과 tag의 id를 키로 가..
1. 시스템 업데이트 sudo apt update && sudo apt-get -y upgrade 2. MariaDB 설치 sudo apt-get install -y mariadb-server 3. 기본 설정 root 계정 비밀번호 설정 및 권한 부여 sudo mysql use mysql update user set plugin='' where User='root'; set password = password('YOUR PASSWORD'); flush privileges; 접속확인 mysql -u root -p 4. DB에서 사용하는 문자열 점검 SHOW VARIABLES LIKE 'char%'; utf8mb4로 기본 설정되어 있지만 만약 아니라면 utf8mb4로 변경한다. 참고 : jm4488.tist..
DB 접속 mariadb –h호스트명 –uDB계정명 –p 데이터베이스이름 ex) mariadb -h 127.0.0.1 -u connectuser -p connectdb root 계정은 설치시 입력한 비밀번호 Database 생성 create database DB이름; 권한 부여 grant all privileges on db이름.* to 계정이름@'%' identified by '암호'; flush privileges; db이름 뒤의 * 는 모든 권한을 의미. @'%'는 어떤 클라이언트에서든 접근 가능하다는 의미이고, @'localhost'는 해당 컴퓨터에서만 접근 가능하다는 의미. flush privileges는 DBMS에게 적용을 하라는 의미. db 종료 exit or quit 현재 버전과 날짜 구하..