분류 전체보기

❌ 문제의 SQL문아래는 사용 여부가 1인 급여 개수를 구하는 쿼리이다.약 42000개가 탐색됨.select count(1)from 급여where 사용여부 = 1; 금여 테이블과 인덱스는 아래와 같이 설정되어 있다.인덱스사원번호 + 시작일자 PK사용여부  📉 이게 왜 문제일까? 실행계획을 살펴보자.key : 사용여부 항목을 인덱스로 사용함.type : index → 인덱스 풀 스캔rows : 283만사실상 모든 인덱스 테이블 행을 탐색했음.filterd : 10 → 엔진으로부터 가져온 데이터 중 10%를 추출해서 최종 데이터를 출력할 예정.+----+-------------+--------+------------+-------+----------------+----------------+--------..
❌ 문제의 SQL문SELECT IFNULL(성별, 'NO DATA') AS 성별, COUNT(1) 건수FROM 사원GROUP BY IFNULL(성별, 'NO DATA');  📉 이게 왜 문제일까? 실행계획을 살펴보자.type : 인덱스 풀스캔Extra : Using temporary -> 임시테이블 만들어서 사용IFNULL() 처리를 위해 임시테이블을 만들었다.+----+-------------+--------+------------+-------+---------------+--------------+---------+------+--------+----------+------------------------------+| id | select_type | table | partitions | ty..
4장에는 실제 잘못된 SQL문과 개선된 SQL문을 보여주며 소개해주고 있다.팀원과 한 파트씩 나눠가면서 발표하며 스터디를 진행하로 했고, 오늘은 첫번째 사례이다. ❌ 문제의 SQL 문사원 테이블/ 현재 걸린 인덱스 참고하려면 아래 더보기 클릭더보기+--------------+--------------+-----------+----------+--------+--------------+| 사원번호 | 생년월일 | 이름 | 성 | 성별 | 입사일자 |+--------------+--------------+-----------+----------+--------+--------------+| 10001 | 1953-09-02 | Ge..
배경Patch와 Put차이는 부분적으로 수정하는 것과, 리소스 전체를 교체한다는 차이가 있다.하지만 Patch의 동작방식(..?!)에 대해서는 처음들어봐서 한번 무엇인지 알아보려고 한다.  JsonPatch vs JsonMergePatch대표적으로 JsonPatch와 JsonMergePatch방식이 있다고 한다.JsonPatchjson 형식에 아래와 같이 명령어 형식을 통해 동작을 명시한다.op는 수행해줄 명령어를 적어줄 수 있다.(replace, add, remove, move ... 등) 적어준 명령대로 동작하게 된다.path와 value는 json의 key-value를 의미한다. 해당 path위치의 값을 value라는 값으로 동작(op에 명시된 동작)을 수행한다.헤더의 content-type : a..
배경프로젝트에서 웹소켓을 활용해 실시간으로 데이터를 서버에 요청하게 되는데, 실시간성이기 때문에 매번 인증하는 방식보다는 토큰을 활용하는 방식으로 프로젝트를 구현했다. 특히나 소켓 서버는 사용자 접속량에 따라 서버 확장성을 고려해서 설계하였고, 이러한 경우에도 토큰이 유용할 수 있다. 장점만을 들면서 선택하고 활용했는데... 취약점과 해결방법?!쭈글.. 알아보자..  취약점에는 뭐가 있을까? JWT 토큰의 탈취라고 생각되는데요..(맞나요..?) 우선은 비밀키가 있으면 토큰을 해석할 수 있기 때문에, 서버에서 비밀키는 잘 관리해야 한다.이를 위해서 환경변수등을 통해서 관리할 수 있고, 주기적으로 비밀 키 값을 변경하는 것 도 좋을 것 같다. 또한 만료시간을 최대한 짧게 설정해서, 탈취를 당해도 사용할 수 ..
배경질문 듣고 가슴이 두근 거렸다.. 공부하자나 왜 이거 대답 못해..? 쭈글..  해시함수 vs 인코딩인코딩은 다른 방식으로 표현하는 것이다.반대로 다른 문자로 표현된 것을 다시 디코딩을 통해 원래 문자로 되돌릴 수 있다. 반면에 해시함수는 한번 함수를 거쳐 변환되면 다시 되돌릴 수 없는 단방향 함수이다.그리고 변환된 값은 고정된 길이를 갖는다. 여기서 큰 차이가 있네! 그래서 해시함수는 무결성 검증이나 데이터를 빠르게 검색할 때 사용된다.  해시 알고리즘해시함수가 연산하는 방법을 해시 알고리즘 이라고 한다.대표적으로 SHA-1, SHA-256, SHA-512, HMAC 등이 있다. JWT 토큰인증을 프로젝트에 적용할 때에도 해시 함수를 사용했었다.    무결성 검증 방식이걸로 어떻게 데이터 무결성을 ..
배경인덱스에는 B트리, 혹은 B트리의 변형인 자료구조가 사용됩니다. 그 이유를 설명해 보세요.나 왜 이거 대답 못해..? 쭈글.. B 트리 인덱스의 장점먼저 인덱스는 데이터베이스 내부에 특정 필드값을 기준으로 정렬된 테이블을 만든다.말은 테이블이라고 했지만 실제 데이터는 B트리 형태로 저장됨.  왜 B트리 형식을 사용할까?B트리는 대용량 데이터에 대해 빠른 탐색이 가능하다. 균형 잡힌 구조로 데이터가 정렬된 상태를 유지한다.트리의 각 노드는 여러개(2개 이상)의 자식 노드를 갖는다.자식 노드가 여러개 이므로, 일반 트리보다 탐색을 위한 연산 횟수가 적다. 아래는 제품 번호(기본키)를 기준으로 인덱스 테이블(B트리형)이 생성된 모습이다.    대용량 입출력을 위한 B 트리자식 노드가 여러개이고, 정렬된 상..
배경야 너...CORS 설명해봐!.. (쭈글).. REST API 방식으로 프로젝트를 진행하면서 CORS 문제를 해결하기 위해 서버 설정에서 localhost:3000 으로 CORS 설정을 해주었다.개념적으로 알고있지만, 잘 와닿지 않아서 한번 더 공부해보려고 한다.  CORS(CrossOriginResourceSharing)"어디에서" 백엔드 서버에 요청을 보내면 CORS로 막히게 될까?바로 브라우저에서 요청할 때 이다. 즉, 브라우저를 통해 사이트에 접속하고, 사이트에서 서버로 요청을 보낼 때 브라우저가 이 요청보내는 사이트를 못믿고 CORS 제한을 거는 것이다. 언제 문제가 될까?나쁜 사람들이 사용자로 하여금 자신들이 만든 나쁜 사이트 xxx.com 으로 접속을 유도한다.현재 내 "브라우저"는 나의..
MySQL을 기준으로 스터디 합니다.물리엔진 용어MySQL 구성요소MySQL 엔진SQL문을 토대로 문법검사등을 수행하고, SQL을 최소 단위로 분리한다.데이터를 빠르게 찾을 수 있는 경로를 탐색한다.(최적화 경로 탐색)스토리지 엔진으로 부터 받은 데이터를 가공 및 연산(필터링 join 등) 한다.스토리지 엔진(ex InnoDB)요청받은 SQL문을 토대로 디스크나 메모리에서 필요한 데이터를 가져오고, MySQL 엔진으로 보내줌스토리지 엔진에 따라 쓰기효과, 빠르게 읽는 효과 등 다를 수 있으므로 적절한 스토리지 엔진을 선택해야함.  이 책은 MySQL 8.0  버전의 InnoDB 엔진 기준으로 설명하고 있다. 파서(parsor) : 사용자가 요청한 SQL문을 쪼개 최소 단위로 분리하고 트리를 만든다.(문법..
코틀린 DSL 관련 내용이 많이 나오는데, 이부분은 생략하고 추후에 따로 공부해야할 듯 하다. 아이템 11. 가독성을 목표로 설계하라아래의 코드를 보면 일반적으로 A의 코드가 B보다 읽기 쉽다.B의 코드는 코틀린에서 자주 사용하는 구문들을 사용했음에도, 코틀린 숙련자들도 읽기 쉽지 않다.// 1. 읽기 쉽다if (person !- null && person.isAdult) { view.showPerson(person)} else { view.sohwError()}// 2. 읽기 어렵다person?.takeIf { it.isAdult } ?.let(view::showPerson) ?: view.showError() A의 구문은 B보다 아래와 같은 장점이 있다.- 읽기 쉽다.- 디버깅이 용이하다...
Don't stop 훈
'분류 전체보기' 카테고리의 글 목록