본문 바로가기

IT/SQL5

[PostgreSQL] pg_cron 익스텐션 환경설정 SSO 서비스를 만들면서 리프레시 토큰을 Redis가 아닌 PostgreSQL에 저장하기로 결정했었다.토큰 rotation(교체)최대 기기가 3개라면 가장 오래된 세션 제거위의 요구사항들을 위해선 조건 기반 조회가 필요한데, Redis보다 RDBMS가 해당 작업을 수행하는 데 더 적절하기 때문이었다. 하지만 기간이 만료되거나 로그아웃으로 인해 회수된 리프레시 토큰들은 Redis와는 달리 자동으로 로우가 삭제되지 않는다.그래서 특정 시간에 로우들을 지워줄 스케줄러가 필요한 상황이었고 SSO 서비스보다는 DB 레벨에서 처리해주는 게 더 안정적이라고 생각했다. 스케줄러 대신 트리거를 쓰자는 의견도 나왔지만 DB에 부하가 일어날 수 있고, 리프레시 토큰 삭제 작업은 정기적으로 실행되는 것이 더 알맞다고 판단하여.. 2025. 12. 15.
[mySQL] 종합적인 쿼리 예제 풀어보기 (JOIN, GROUP BY 등) 프로그래머스 Lv.5 "상품을 구매한 회원 비율 구하기" 문제입니다.USER_INFO 테이블과 ONLINE_SALE 테이블에서 2021년에 가입한 전체 회원들 중 상품을 구매한 회원수와 상품을 구매한 회원의 비율(=2021년에 가입한 회원 중 상품을 구매한 회원수 / 2021년에 가입한 전체 회원 수)을 년, 월 별로 출력하는 SQL문을 작성해주세요. 상품을 구매한 회원의 비율은 소수점 두번째자리에서 반올림하고, 전체 결과는 년을 기준으로 오름차순 정렬해주시고 년이 같다면 월을 기준으로 오름차순 정렬해주세요. 문제 전문은 아래 링크에서 볼 수 있습니다.꽤 여러 개념이 포함되어 있어서 풀어볼 만한 문제라고 생각됩니다. Solved-Algorithm/MySQL/프로그래머스/5/131534. 상품을 구매한 회.. 2024. 11. 6.
[SQL] NULL 다루기 프로그래머스 SQL kit의 IS NULL 파트 문제를 풀면서 정리합니다. Null 값 처리 방법 Solved-Algorithm/MySQL/프로그래머스/2/59410. NULL 처리하기 at main · ParkBible/Solved-AlgorithmThis is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - ParkBible/Solved-Algorithmgithub.comSELECT IFNULL(컬럼명, "바꿀 값") FROM 테이블; 특정 컬럼에 Null 값이 포함되어 있을 때 다른 값으로 교체하고 싶다면 IFNULL을 이용한다.. 2024. 10. 31.
[SQL] JOIN 문법 두 테이블을 합치는 것을 말한다. 두 테이블의 컬럼은 JOIN의 방법과 상관없이 모두 같은 방식으로 합쳐지지만 어떤 로우를 살릴지는 JOIN의 방법에 따라 다르다.  종류 : INNER JOIN(default), LEFT/RIGHT/FULL OUTER JOIN select * from 테이블1 join 테이블2 on 조건 ON 뒤에 붙는 조건이 테이블1의 id = 테이블2의 id 라고 한다면 INNER JOIN은 테이블1, 2에 모두 포함된 id를 가지고 있는 로우만 살린다.LEFT OUTER JOIN은 테이블1의 로우를 모두 살린다. (CROSS JOIN은 논외이다. ON 뒤의 조건에 따라 합치는 게 아니기 때문이다. 두 테이블 간에 공통으로 할만한 컬럼이 없을 때 사용함.)  예시)프로그래머스 Lv... 2024. 10. 2.
[SQL] 시간 비교 - timestampdiff 특정 시간이 현재 시간보다 이전에 일어난 일인지 초단위로 확인할 때, 아래와 같은 SQL문을 쓴다. SELECT CASE WHEN timestampdiff(SECOND, "2024-03-02 06:00:00.000", CURRENT_TIMESTAMP()) > 0 THEN "y" ELSE 'n' END FROM users; 단위는 초단위(SECOND) 말고도 연(YEAR), 분기(QUARTER), 월(MONTH), 주(WEEK), 일(DAY), 시간(HOUR), 분(MINUTE) 단위로도 설정할 수 있다. 2024. 4. 17.