프로그래밍 언어/DB
Redis 와 MongoDB 의 로그인 토큰 적합성 비교
보통 로그인 토큰 관리는 Redis에서 많이 하는데 현재 프로젝트에서는 MongoDB 를 메인 디비로 사용하고 있어서둘 중 어떤 DB로 로그인 토큰 관리하는게 적합한지 궁금해서 찾아보게 되었다. 데이터 구조 및 저장 형식Redis 는 Key-Value 형태의 데이터 구조를 가지는 인메모리 데이터 저장소이다. MongoDB는 Document 형태의 데이터 구조를 가지며 디스크 기반으로 데이터를 저장한다. 이러한 차이로 Redis 는 메모리 기반으로 빠른 데이터 처리가 가능하고 주로 캐싱에 사용되고 MongoDB는 대용량의 데이터를 저장하고 관리하는데 적합하다. Redis 사용 시 장점속도: Redis는 메모리 기반 데이터 스토어로, I/O가 메모리에만 집중되어 있어 조회 속도가 매우 빠르다. 이는 로..
[MongoDB] MongoDB Aggregate()
db.collection.aggregate()mongodb 조회 시 find 는 간단한 조건에 대해서 사용이 용이한데 다양한 조건을 넣어서 사용할 수는 없다. 따라서 aggregate는 다양한 조건들에 대해 검색하고 싶을때 사용한다. 컬렉션 또는 뷰의 데이터에 대한 집계 값을 계산한다. > 파이프라인에 Explain 옵션이 포함된 경우 쿼리는 집계 연산 처리에 대한 세부 정보를 제공하는 문서를 반환한다. > 파이프라인에 $out 또는 $merge 연산자가 포함된 경우 쿼리는 빈 커서를 반환한다. db.collection.aggregate(pipeline, options) pipeline데이터 aggregate 작업 또는 단계의 시퀀스로입력 문서에 대한 연산을 수행한다. $out 또는 $merge 연산자가..
[MongoDB] MongoDB compass 설치 (GUI)
https://www.mongodb.com/try/download/compass Try MongoDB Tools - Download Free HereFree download for MongoDB tools to do more with your database. MongoDB Shell, Compass, CLI for Cloud, BI Connector and other database tools available.www.mongodb.com GUI 가 적힌 해당 부분에서 원하는 버전과 환경에 맞는걸로 다운로드하면 된다. compass 를 사용하는 이유는database, collection, document CURD에 대해 직관적인 UI 조작이 가능하고 쿼리문 날리기도 편하게 되어 있다.
[Mysql] 데이터 삭제하기 & AUTO INCREMENT 초기화 - DELETE, TRUNCATE, DROP
mysql 에서 데이터를 삭제하는 방법은 세가지 정도가 있다. DELETE : WHERE 절에 조건을 걸고 데이터 삭제, 테이블 유지TRUNCATE : WHERE절을 사용하지 않고 모든 데이터 삭제DROP : 데이터 삭제 & 테이블 삭제 DELETEDELETE 에서 WHERE 절이 없이 사용하면 모든 데이터가 삭제 되기 때문에 주의한다. name 이 test 인 데이터 행 삭제-- DELETE FROM 테이블명 WHERE 조건;DELETE FROM member WHERE name = 'test'; DROPmember 테이블 자체가 삭제된다.-- DROP TABLE 테이블명DROP TABLE member; TRUNCATE테이블은 그대로고 데이터만 삭제된다. Auto increment 도 초기화된다...
[Mysql] Docker 환경에서 mysql 설치 후 접속 에러 - Access denied for user 'root'@'172.17.0.1' (using password: YES)
Docker 환경에 mysql 을 설치하고 localhost로 접속하면 Access denied for user 'root'@'172.17.0.1' (using password: YES) 다음과 같은 에러가 나면서 접속이 안된다. docker 에서 컨테이너 접속 $ docker exec -it bash mysql 접속 > mysql -u root -p 계정에 권한 부여 > GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.1' WITH GRANT OPTION; 다른 계정을 사용한다면 계정 생성 및 권한 부여 > CREATE USER 'admin'@'172.17.0.1' IDENTIFIED BY '비밀번호 입력'; > GRANT ALL PRIVILEGES ON *.* T..
[MySQL/Intellij] Public key retrieval is not allowed 에러 해결
에러 원인 Mysql DB 에 접속시도를 했는데 Public key retrieval is not allowed 에러가 나면서 DB에 접속이 안되었다. Mysql 8.0 버전 부터 보안적인 이슈로 useSSL 옵션에 대한 추가적인 설정이 필요해졌다. useSSL=false 로 설정되어 있는지, allowPublicKeyRetrieval 설정이 되어 있는지 확인해본다. 해결 만약 다음과 같은 에러가 난다면 두가지 옵션에 대해서 추가 및 변경해준다. 접속하는 datasource URL에 아래와 같이 설정해준다. jdbc:mysql://localhost:port/database?useSSL=false&allowPublicKeyRetrieval=true useSSL : DB에 SSL로 연결 allowPublic..
[SQL] MySQL 5.7버전과 8.0버전 차이점, 8.0 업그레이드
5.7버전 8.0버전 차이점 1. 사용자 인증 방식 변경 8.0버전 부터는 별도의옵션없이 Caching SHA-2 Authentication 인증 방식 사용 8.0버전에서 Native Authentication 인증 방식을 사용하려면 --dafault-authentication-plugin=mysql_native_password 파라미터를 활성화 한다. Native Authentication MySQL 서버에 기본적으로 내장되어 있는 인증 방식으로 사용자의 계정 정보와 암호를 MySQL 내부 데이터 딕셔너리에 저장한다. 사용자 계정과 암호가 MySQL 의 'mysql.user' 테이블에 저장된다. 암호는 해시 형태로 저장되며, 암호를 비교할 때 클라이언트에서 전달된 암호를 해시하여 저장된 암호화 비교한다..
[SQL] IN, EXISTS 비교 및 속도 비교
IN in은 입력된 값들 중 하나라도 일치하는 것이 있으면 조회된다. 쿼리가 실행될 때 내부적으로 or 연산자로 변경되어 실행되는 것이다. select e.emp_no from employees.employees e where emp_no in (SELECT s.emp_no from employees.salaries s); select e.* from employees.employees e where emp_no in (SELECT s.emp_no from employees.salaries s) employees 데이터는 300,024개 salaries 데이터는 2,844,047개이다 시간 초가 계속 변하긴 하지만 select 값 하나를 조회할 때는 3-5ms select 값을 전체 조회할 때는 4-5m..
[DB] MySQL 샘플 데이터
MySQL 을 공부하다보면 데이터 샘플이 필요할 때가 있는데 MySQL 홈페이지에서 제공하는 데이터가 있다. https://dev.mysql.com/doc/index-other.html 데이터 다운로드 Employee 데이터를 GitHub에서 다운받을 수 있다. $> unzip test_db-master.zip $> cd test_db-master/ 압축을 풀고 엔진 세팅을 해준다. set storage_engine = InnoDB; -- set storage_engine = MyISAM; -- set storage_engine = Falcon; -- set storage_engine = PBXT; -- set storage_engine = Maria; git clone 으로도 사용이 가능하다. Inte..
[SQL 튜닝] 옵티마이저(optimizer)
옵티마이저란? SQL을 가장 빠르고 효율적으로 수행할 최적(최적비용)의 처리 경로를 생성해주는 DBMS 내부의 핵심엔진이다. 개발자가 SQL을 작성하고 실행하면 즉시 실행되는 것이 아니라 옵티마이저에서 해당 쿼리문을 어떻게 실행시킬지 실행계획을 세우고 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떻게 분포 되어있는지 참조하고 데이터를 기반으로 최적의 실행 계획을 처리해준다. 옵티마이저 종류 옵티마이저는 실행 계획을 세우는 방식에 따라 규칙 기반 옵티마이저와 비용 기반 옵티마이저로 나뉜다. 규칙 기반 옵티마이저 실행 속도가 빠른 수능로 규칙을 먼저 세워두고 우선순위가 앞서는 방법을 채택하는 것이다. 과거에 옵티마이저의 비용 예측하는 능력이 좋지 않아 해당 방식을 사용했었다. 우선순위는 다음과 같다..