목록분류 전체보기 (180)
YataNox
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/FCxwZ/btsEa4XNr2e/9KErfzc5lFuXeQpXDQtKu1/img.png)
문제 상황 캐시 서버를 구현하는 프로젝트를 진행하는 중의 문제가 발생 캐시의 Key 값으로 요청의 Path + QueryString 형태를 사용 캐시의 Metadata 값(Expired Time)은 Path를 기준으로 관리 Path에 대한 Expired Time이 변경될 때 기존의 활성화 되어있는 Key들을 찾아서 삭제 혹은 갱신을 해야하거나 Path별 활성화된 캐시들 목록을 조회 해야하는 등의 상황 Redis에서 특정 목록들을 검색할 때 Scans를 이용해서 검색하는데 특정 패턴의 Key들을 조회하는 방식이다보니 기본적으로 전체 조회를 하게된다. 만료시간 수정 한 번을 위해 무수한 캐시들을 전체 조회하는 것은 성능적으로 매우 낭비인 상황 해결 시도 1번 리스트 등의 자료구조를 활용하기 캐시 생성 / 만..
프로젝트 진행 중 캐시 서버 구현을 위해 Redis를 사용해야하는 상황이 발생했다. Redis란? RDBMS와는 다른 Key-Value형태로 이루어진 비관계적, 비정형적 데이터 관리 시스템. 레디스 내부에서 명령어를 처리하는 부분은 싱글 스레드 아키텍처로 구현 Redis를 사용하면 사용자가 다양한 데이터 유형에 매핑되는 키를 저장할 수 있다. 기본적인 데이터 유형은 String으로서, 텍스트 또는 이진 데이터가 이에 해당하며 최대 크기는 512MB. 아래와 같은 것들을 지원한다. Redis는 문자열이 추가된 순서대로 유지되는 Lists of Strings, Sets of unordered Strings 점수에 따라 정렬되는 Sorted Sets, 필드와 값 목록을 저장하는 Hashes 데이터 세트에서 고..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/6cH2V/btszyP4I4KW/6DTmCB7QwueRPcKgYcl140/img.png)
인텔리제이로 팀 프로젝트를 진행하던 때 mysql 더미 데이터를 만들어 init.sql.mode로 실행할 때 삽입하는 작업을 진행하고 있었다. 그러다가 하나의 쿼리문이 실행되지 않는 문제가 발생했다. 사진으로 예를 들자면 위의 visa 테이블의 D-2 Tuple이 삽입되지 않는 문제 였다. 순간의 오류인가 싶어 인텔리제이를 재시작해보기도하고, 데이터베이스를 다시 로드해보기도 했으며, 코드의 위치를 바꿔보기도했다. 그러나 오류가 해결이 되지 않았다. 이리저리 시도하던 중 몇 가지 이상함을 발견했다. 1. H-2와 D-2의 순서를 바꾸면 H-2가 안나오고 E-9와 바꾸면 E-9가 안나왔다. (즉 첫 순서의 쿼리가 나오지 않았다.) 2. 각 테이블의 첫 쿼리들이 전부 들어가지 않았다. 3. 작성 쿼리의 일부를..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/lil5e/btsy023L847/jLR5fMjPHNTSJeTEO5GNQK/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/132202?language=mysql - APPOINTMENT 테이블에서 진료과코드별 진료과코드와 5월 예약건수를 조회한다. 단, 2022년 5월의 기록이어야하며 각각의 컬럼명이 '진료과 코드', '5월예약건수'이어야한다. 결과는 환자수 기준 오름차, 진료과 코드 기준 오름차 정렬한다. 1. 진로 예약일이 5월인 값들만 조회한다. 2. 해당 값들을 진료과 별로 그룹핑한다. 3. 진료과코드와 count함수를 이용한 갯수를 조회한다. - SQL mysql : SELECT mcdp_cd as "진료과 코드", count(*) AS "5월예약건수" FROM APPOINTMENT WHERE MONTH(apnt..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/72teW/btsyJxEAEtd/rCnqGcobbte6EK9JFeFN01/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/151139 - CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블의 월별 자동차 id 별 총 대여횟수를 출력한다. 단. 대여시작일 기준 2022년 8월 부터 10월까지 대여횟수가 5회 이상인 자동차들에 한해서이다. 또한 결과를 월을 기준 오름차, 자동자 id 기준 내림차 정렬한다. 1. id별로 그룹핑한 8월부터 10월까지의 기록을 조회한다. 2. 대여 횟수가 5회 이상인 기록으로 조건절을 건 car_id만 출력한다. 3. 해당 결과에 해당하는 car_id를 가지고 8월 ~ 10월의 기록을 출력한다. - SQL mysql : SELECT MONTH(START_DATE), CAR_ID,..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/kM4mz/btsyOFOCLKX/zHrm4A9YI6Q70lOh5ZkaO0/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/151137 - CAR_RENTAL_COMPANY_CAR 테이블의 자동차 종류별 수를 조회한다. 단, 통풍시트, 열선시트, 가죽시트 중 하나 이상 옵션이 포함된 자동차여야한다. 또한 자동차 수의 컬럼명은 CARS이고 결과를 종류 기준 오름차 정렬한다. 1. car_type 기준 그룹핑한다. 2. options를 like를 사용ㅎ여 통풍시트 가죽시트 열선시트 중 하나라도 있는지 확인한다. - SQL SELECT car_type, count(*) FROM CAR_RENTAL_COMPANY_CAR WHERE options LIKE '%통풍시트%' OR options LIKE '%가죽시트%' OR option..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bukxxN/btsyMyoAsCB/Ud6Z0XcA90W4C0wFFSf7e0/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/157340 - CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 자동차ID와 자동차 대여여부를 출력한다 단, 대여여부는 2022년 10월 16일에 대여중인 자동차를 대여 중, 아니면 대여가능으로 표시해주고 AVAILABILITY로 표기한다. 또한 반납 날짜가 10월 16일일 경우에도 대여중으로 표기하고 결과를 자동차 id 기준 내림차 정렬한다. 1. car_id 기준으로 그룹핑한다. 2.. case 문으로 시작일이 10월 16일 보다 작거나 종료일이 16일보다 큰 id를 뽑아서 그 값에 속하는 car_id를 대여중 아닌것을 대여 가능으로 출력한다. - SQL mysql : SEL..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bao5F6/btsyJyXoJDd/bMWq3xnCLSZj6dFmk6gCI0/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/133026 - FIRST_HALF, ICECREAM_INFO 테이블의 아이스크림 성분 타입과 아이스크림의 총 주문량으로 조회한다. 단, 총 주문량 기준 오름차 정렬하며 컬럼명을 total_order로 지정한다. 1. 두 테이블을 flavor 기준 조인하고 ingredient_type을 기준으로 그룹핑한다. 2. 그룹핑한 테이블에 SUM 함수로 total_order를 계산해서 조회한다. - SQL SELECT ingredient_type, sum(total_order) total_order FROM FIRST_HALF half, ICECREAM_INFO info WHERE info.flavor = ha..