본문 바로가기
반응형

Back-End/Database18

Redis 트랜잭션 Intro 기존 프로젝트에 Redis + refreshToken, accessToken을 이용한 인증을 적용 중이다. 현재는 로그인 부분을 리팩토링 중인데 redis에 refreshToken값을 넣는 로직을 만드는 도중 'redis 트랜잭션은 어떻게 하지?'라는 의문이 생겼다. 그래서 이번 글에는 Redis 트랜잭션에 대해 공부한 내용을 적어보겠다. Redis 트랜잭션 MULTI - Redis의 트랜잭션을 시작하는 명령어 - 트랜잭션을 시작하면 Redis는 이후 커맨드는 바로 실행되지 않고 queue에 쌓이게됨 EXEC - 정상적으로 처리되어 queue에 쌓여있는 명령어를 일괄적으로 실행 - RDBMS의 Commit과 동일 DISCARD - queue에 쌓여있는 명령어를 일괄적으로 폐기 - RDMS의 R.. 2024. 3. 11.
Redis란 무엇인가 Intro 개인 프로젝트 리팩토링 중 첫 번째로 Access Token, Refresh Token을 이용한 인증을 구현해보려 한다. 그전에 Redis에 대해서 알아보자! Redis란? Redis는 NoSql In-memory database이다. 주로 캐싱, 세션 관리 등의 용도로 사용된다. Redis는 키-값 형태로 메모리에 저장된다. 메모리의 경우 전기적 신호를 통해 데이터에 직접 접근하기 때문에 빠른 데이터 액세스가 가능하다. 또한 메모리접근이 디스크 접근보다 더 빠른데, 메모리의 경우 디스크에 비해 물리적으로 cpu와 더 가깝기 때문이다. 이러한 이유로 인해 디스크 기반의 데이터베이스보다 Redis의 속도가 더 빠르다고 할 수 있다. Redis 설치하기 Redis 공식 문서에 따르면 Redis는 .. 2024. 2. 27.
Oracle SQL(6) ✅세션 사용자가 오라클 데이터베이스에 접속을 하게 되면 세션이 생성됨 사용자가 데이터베이스를 접속 종료할 때 까지 계속 유지됨 각 세션에는 고유한 SID(Session identifier)와 SERIAL#(serial number)를 가지고 있음 시리얼 번호는 세션이 종료되어도 다른 세션이 동일한 SID를 갖고 시작했을 때 정확한 세션 객체에 적용될 수 있도록 보장해줌 ✅오라클 DB 사용자 계정 오라클 DB 사용자 계정생성 방법 1. 계정생성시 세션 변경해야함 alter session set "_ORACLE_SCRIPT" = true; 2. 테이블스페이스 생성 create tablespace [테이블스페이스이름] // 대부분 회사 이름으로 사용 datafile ['데이터파일경로'] size [초기사이즈].. 2023. 3. 6.
SQL 예제(3) JOIN 연습문제 문제1) 지역별로 수강신청 인원수, 지역을 조회하시오 select address, count(*) || '명' as cnt from (select a.hakno, address from (select hakno from tb_sugang group by hakno) a inner join tb_student b on a.hakno = b.hakno) group by address; 문제2) 과목별 수강 신청 인원수, 과목코드, 과목명를 조회하시오 select a.gcode, gname, concat(count(*), '명') as "인원수" from tb_sugang a inner join tb_gwamok b on a.gcode = b.gcode group by gname, a.gco.. 2023. 3. 3.
Oracle SQL(5) rownum 고정된 값이 아닌 select되는 값에 따라서 동적으로 부여되는 번호 위의 순서대로 진행됨 작동방식 where절이 실행될 때 조건에 맞으면 1을 부여하고, 맞지 않으면 번호를 부여하지않고 버림 select문이 실행되면서 번호가 부여됨 → 따라서 rownum은 where절이 실행될때 존재하는 컬럼이 아니므로 rownum=1 외에 숫자 지정은 할 수 없음 rownum을 이용해서 4번~6번 데이터 조회하기 select uname, hakno, address, rownum from tb_student where rnum between 4 and 6 order by uname; 위의 방식대로 데이터를 추출하면 아무런 값이 추출되지 않음 rownum은 고정된 값이 아닌 select되는 값에 따라서 동적.. 2023. 3. 3.
Oracle SQL(4) [참고] https://gent.tistory.com/376 JOIN 이너 조인 (INNER JOIN) 기준테이블의 조인컬럼, 조인테이블의 조인컬럼에 해당값이 모두 존재하는경우에만 데이터가 조회됨 예) → emp 테이블의 ename의 king의 경우 deptno의 값이 90인데 dept테이블에는 존재하지 않기때문에 조인하게되면 조회되지 않음 아우터 조인 (OUTER JOIN) 기준 테이블의 데이터를 누락 없이 모두 조회하고 참조 테이블의 값이 있을 경우 해당 값을 사용하기 위해서 아우터 조인을 사용함 LEFT/RIGHT/FULL OUTER JOIN 기준 테이블에만 데이터가 존재하면 조회됨 아우터 조인에서 LEFT, RIGHT는 기준 테이블을 지정하는 것이며, 아래의 쿼리에서 LEFT OUTER JOIN의.. 2023. 3. 2.
SQL 예제(2) [emp 테이블] 문 1) emp 사원테이블을 생성하시오 create table emp( empno number(4) primary key --사번(-9999~9999) ,ename varchar2(50) --이름 ,job varchar2(10) --직급 ,mgr number(4) --매니저정보 ,hiredate date --입사일 ,sal number(7,2) --급여(소수점 2자리) ,comm number(7,2) --커미션(보너스) ,deptno number(2) --부서코드(-99~99) ); 문 2) emp사원테이블에 행을 추가하시오 insert into emp(empno, ename, job, mgr, hiredate, sal, deptno) values(7369, '개나리', '사원', 79.. 2023. 2. 28.
SQL 예제(1) [sungjuk 테이블] 1. group by having [문제설명] 평균(aver)이 70점 이상인 행을 대상으로 주소별 인원수를 구한 후, 그 인원수가 2명 이하인 행을 인원수 순으로 조회하시오 [풀이] select addr, count(*) from sungjuk where aver >= 70 group by addr having count(*)=90 then 'A학점' when kor>=80 then 'B학점' when kor>=70 then 'C학점' when kor>=60 then 'D학점' else 'F학점' end as kor_grade from sungjuk order by kor_grade; 3. 서브쿼리 [문제설명] 서울지역 학생들의 평균 국어점수 이상의 점수를 받은 서울 이외의 지.. 2023. 2. 27.
Oracle SQL(3) 해석순서 GROUP BY [참고] https://extbrain.tistory.com/56 select [그룹컬럼], [집계함수] from [테이블명] group by [그룹컬럼]; SELECT type, COUNT(name) AS cnt FROM hero_collection GROUP BY type; --hero_collection 테이블에서 type 컬럼을 기준으로 그룹핑한 결과를 보여주는 쿼리 HAVING where절과 비슷한 조건절의 역할을 하지만 where 뒤로 와야하고 group by와 함께 사용해야함 집계함수를 사용하여 조건을 부여할 수 있음 select [그룹컬럼], [집계함수] from [테이블명] group by [그룹컬럼] having [조건절]; select addr, count(*.. 2023. 2. 27.
반응형