서버가 이상하다?! 최근에 만든 토이 프로젝트를 외부에서 접속해 보고 싶어서 스마트폰에서 접속을 시도했다. 화면을 제대로 나왔지만 서버에서 데이터를 제대로 가져오지 못 하는 것 같았다. 이 때까지만 해도 오라클 프리티어 인스턴스에 젠킨스 + 서버 + DB가 동시에 실행 중인 상태라 리소스 부족으로 DB가 비정상 종료 됐다고 생각했다. 해킹을 당했구나!! 예상대로 DB는 inactive 상태였다. DB를 다시 켰지만 데이터가 제대로 나오지 않았다. DB에 직접 접속해서 DB를 열어 보았다. 내가 만든 DB는 없어지고 RESTORE_DATA_...의 DB가 생성되어 있었다. 내용을 조회해 보니 대략 "데이터를 복구하고 싶으면 0.08 BTC를 달라"는 내용의 글이 들어 있었다. 구축한지 며칠도 되지 않아서 ..
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 현재 버전과 날짜 구하..