전체 글

야무진 성장 해보겠습니다!! (성장 경험 기록 및 자존감 뿜뿜용)
Nginx는 웹서버라고 알고 있었다.근데 아래와 같은 질문에 제대로 답을 못하고 있는데, 의문이 해소될정도로 간단히 알아보려고 한다.로드밸런싱이랑 게이트웨이로도 역할을 한다?Nginx는 어디에 위치해야 하는걸까? (ex 프론트 서버 앞쪽, WAS 앞단?)프론트 서버(ex React)와 Nginx를 둘다 웹서버라고 부를 수 있는건가? 둘이 다른 건가?애초에 React, Vue 등을 통한 정적 리소스 제공해주는 프레임워크는 웹 서버인가? (React == 웹서버..?)  🌈 Nginx는 어떤 역할까지 할 수 있을까?Nginx가 어떤 역할을 할 수 있는지 알아보자.대부분의 기술들은 특정 기능을 위해 생겨났을 테지만, 추가적으로 여러 기능들도 지원하게 되면서 짬뽕되는 경우가 많다.ex) 톰캣을 사용하는 스프링..
❌ 문제의 SQL문select distinct 사원.사원번호, 사원.이름, 사원.성, 부서관리자.부서번호from 사원join 부서관리자 on (사원.사원번호 = 부서관리자.사원번호);  📉 이게 왜 문제일까? 실행계획을 살펴보자.- id가 모두 1인것으로 보아 join한 관계이다.- 부서관리자 type : index -> 풀스캔- 사원 테이블 type : eq_ref -> 사원 테이블의 기본키(사원번호)를 사용- Extra : Using temporary -> distct를 위한 별도의 임시테이블 사용+----+-------------+-----------------+------------+--------+---------------+----------------+---------+-----------..
❌ 문제의 SQL문SELECT * FROM 사원WHERE CONCAT(성별, ' ', 성) = 'M Radwan'; 📉 이게 왜 문제일까? 실행계획을 살펴보자.type -> 테이블 풀스캔약 30만개를 스캔하였고, 실제 데이터는 102개를 가져왔다.+----+-------------+--------+------------+------+---------------+------+---------+------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------..
❌ 문제의 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 트리자식 노드가 여러개이고, 정렬된 상..
Don't stop 훈
쉬지마 정지훈