서버가 이상하다?! 최근에 만든 토이 프로젝트를 외부에서 접속해 보고 싶어서 스마트폰에서 접속을 시도했다. 화면을 제대로 나왔지만 서버에서 데이터를 제대로 가져오지 못 하는 것 같았다. 이 때까지만 해도 오라클 프리티어 인스턴스에 젠킨스 + 서버 + DB가 동시에 실행 중인 상태라 리소스 부족으로 DB가 비정상 종료 됐다고 생각했다. 해킹을 당했구나!! 예상대로 DB는 inactive 상태였다. DB를 다시 켰지만 데이터가 제대로 나오지 않았다. DB에 직접 접속해서 DB를 열어 보았다. 내가 만든 DB는 없어지고 RESTORE_DATA_...의 DB가 생성되어 있었다. 내용을 조회해 보니 대략 "데이터를 복구하고 싶으면 0.08 BTC를 달라"는 내용의 글이 들어 있었다. 구축한지 며칠도 되지 않아서 ..
역정규화 성능이나 개발의 편의성을 위해서 테이블의 구조를 바꾸는 것 여러 대의 서버로 데이터를 분산할 때 사용할 수 있다. 조인 줄이기 많은 조인은 시스템에 부하를 줄 수 있기 때문에 조인을 줄여서 부하를 줄일 수 있다. 조인을 하지 않고 테이블을 조회할 수 있도록 컬럼을 추가했다. 하지만, topic_tag_relation 테이블은 중복이 발생하고 tag 테이블이 존재하면서 동시에 tag_name 컬럼이 존재하는 중복도 같이 발생해버렸다. 계산 작업을 줄이기 GROUP BY와 같은 명령어는 데이터가 많은 경우 많은 비용이 발생할 수 있다. SELECT author_id, COUNT(author_id) FROM topic GROUP BY author_id topic_count 컬럼을 추가해서 쿼리를 대체..
docker 폴더 생성 mkdir docker cd docker docker 폴더에 "docker-compose.yml"과 ".env" 작성 docker-compose.yml을 git에 push할 경우 비밀번호가 노출되기 때문에 환경 변수로 설정해야 한다. docker-compose는 기본적으로 .env 파일을 환경 변수 파일로 인식된다. .env 파일을 작성하고 .gitignore에 추가한다. services: mariadb: container_name: mariadb image: mariadb:10.8.3 restart: always environment: - MYSQL_ROOT_PASSWORD=${MARIADB_PASSWORD} MARIADB_PASSWORD=mypassword 컨테이너 실행 doc..
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 현재 버전과 날짜 구하..